*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--ivory);
  color: var(--navy);
  font-family: var(--font-ko);
  line-height: 1.75;
  -webkit-text-size-adjust: 100%;
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
}

/* 한지 결 — 사이트 전체 배경. 스크롤해도 고정된다 */
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background-repeat:repeat;background-size:512px 512px;
  background-image:url("../img/paper.jpg");
  background-image:image-set(
    url("../img/paper.webp") type("image/webp"),
    url("../img/paper.jpg")  type("image/jpeg"));
  opacity:.55;
}
/* 내용은 텍스처 위에 온다.
   #lang-gate·#topbar는 아래에서 position:fixed와 더 높은 z-index를
   다시 지정하므로(소스 순서상 나중) 여기서는 #app·#site-footer에만
   실질적인 효과가 있다 — 둘 다 별도 position이 없어, 이 규칙이 없으면
   위치가 지정되지 않은 콘텐츠라서 body::before보다 먼저 그려져 텍스처에 덮인다. */
#lang-gate, #topbar, #app, #site-footer{ position:relative; z-index:1 }

/* #lang-gate와 #topbar는 ID 선택자로 display를 지정한다.
   ID 선택자가 브라우저 기본의 [hidden]{display:none}을 이기므로,
   hidden 속성을 걸어도 화면에서 사라지지 않는다. 여기서 되돌린다. */
[hidden] { display: none !important; }

#lang-gate {
  position: fixed; inset: 0; z-index: 100;
  display: grid; place-items: center;
}
.gate-logo {
  font-family: var(--font-en-display);
  font-size: clamp(2.5rem, 12vw, 4.5rem);
  letter-spacing: .06em; margin: 0;
}
.gate-sub {
  font-family: var(--font-en-display);
  letter-spacing: .3em; font-size: .8rem;
  opacity: .6; margin: .5rem 0 var(--gap-xl);
}
.gate-langs { display: grid; gap: var(--gap-s); }
.gate-langs button {
  font: inherit; font-size: 1.15rem;
  background: none; color: inherit;
  border: 1px solid rgba(243,234,224,.35);
  border-radius: 999px; padding: .75rem 3rem; cursor: pointer;
}
.gate-langs button:hover, .gate-langs button:focus-visible {
  background: var(--ivory); color: var(--navy);
}
.gate-error { line-height: 2; margin: var(--gap-xl) 0 var(--gap-s); }
.gate-error-sub {
  font-family: var(--font-en-display);
  letter-spacing: .18em; font-size: .78rem; opacity: .5; margin: 0;
}

#topbar {
  position: fixed; top: 0; left: 0; right: 0; z-index: 50;
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--gap-m); padding: .6rem var(--gap-m);
  background: color-mix(in srgb, var(--ivory) 88%, transparent);
  backdrop-filter: blur(8px);
  font-size: .78rem; letter-spacing: .1em;
}
.topbar-home {
  font-family: var(--font-en-display); color: inherit;
  background: none; border: 0; padding: 0; font-size: inherit;
  letter-spacing: inherit; cursor: pointer;
}
.topbar-langs button {
  font: inherit; background: none; border: 0; color: inherit;
  padding: .25rem .4rem; cursor: pointer; opacity: .45;
  white-space: nowrap;
}
/* 각 단추는 그 언어의 서체로 쓴다. 한국어 화면에서 고운바탕에는 한자가
   없어 中文이 시스템 서체로 떨어진다. 대문의 언어 단추도 마찬가지다. */
.topbar-langs button[lang="ko"], .langs button[lang="ko"] { font-family: var(--font-ko); }
.topbar-langs button[lang="en"], .langs button[lang="en"] { font-family: var(--font-en-body); }
.topbar-langs button[lang="zh"], .langs button[lang="zh"] { font-family: var(--font-zh); }
.topbar-langs button[aria-current="true"] { opacity: 1; text-decoration: underline; }
:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }

/* 섹션 공통 — 명암 전환이 사이트의 골격이다 */
.section {
  padding: clamp(56px, 12vw, 96px) var(--gap-m);
}
/* 상단바가 position:fixed로 떠 있어, 그 아래 첫 섹션은 여백을 더 준다.
   .section만 잡아야 한다 — 존 상세(.zone-detail)는 화면 한 장 높이를
   유지해야 하므로 이 규칙의 영향을 받으면 안 된다. */
#app > .section:first-child {
  padding-top: clamp(120px, 22vw, 190px);
}
/* 섹션 등장 효과 — assets/js/reveal.js가 .in을 붙인다.
   존 상세도 대상이다. 가로 스와이프는 안쪽 .track이 맡으므로
   바깥 섹션의 transform은 스크롤 스냅을 건드리지 않는다. */
#app > .section,
#app > .zone-detail{
  opacity:0; transform:translateY(18px);
  transition:opacity .7s ease, transform .7s ease;
}
#app > .section.in,
#app > .zone-detail.in{ opacity:1; transform:none }
@media (prefers-reduced-motion: reduce){
  #app > .section,
  #app > .zone-detail{ opacity:1; transform:none; transition:none }
}

/* 원고에 정해진 줄바꿈 — 줄이 온전히 들어가는 폭에서만 지킨다.
   좁은 화면에서는 inline으로 되돌려 글이 흐르게 한다. */
.body--verse .ln{display:block}
@media (max-width: 760px){ .body--verse .ln{display:inline} }

.section--ivory { background: transparent; color: var(--navy); }
.section--navy  { background: var(--navy);  color: var(--ivory); }
.section--beige { background: var(--beige); color: var(--navy); }
.section--full {
  min-height: 100svh;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; text-align: center;
}
.section > * { max-width: var(--measure); margin-inline: auto; }

.eyebrow {
  font-family: var(--font-en-display);
  font-size: .72rem; letter-spacing: .28em; text-transform: uppercase;
  opacity: .55; margin-block: 0 var(--gap-s); margin-inline: auto;
}
h2 {
  font-size: clamp(1.6rem, 6vw, 2.4rem);
  font-weight: 400; line-height: 1.4; margin-block: 0 var(--gap-m); margin-inline: auto;
}
.body p { margin: 0 0 1.1em; }
.poster{margin-block:0;margin-inline:auto;display:flex;justify-content:center}
.poster img{
  width:min(88vw,420px);height:auto;display:block;
  box-shadow:0 18px 40px rgba(34,45,90,.14);
}
.visit { margin-block: 0; margin-inline: auto; }
.visit-row {
  display: grid; grid-template-columns: 7.5rem 1fr;
  gap: var(--gap-s); padding: .85rem 0;
  border-top: 1px solid color-mix(in srgb, currentColor 18%, transparent);
}
/* 로고는 글자보다 낮아 칸 위쪽에 붙는다. 라벨과 눈높이가 맞도록
   이 행만 세로 가운데로 맞춘다. */
.visit-row--logo { align-items: center; }
.visit-row dt { opacity: .55; font-size: .9rem; }
.visit-row dd { margin: 0; }
.host-logo{display:block;width:auto;opacity:.85}
/* 두 로고는 대문자 높이를 맞춘다. 박스 높이가 아니라 글자 크기가
   같아 보여야 나란히 놓았을 때 한쪽이 크거나 작아 보이지 않는다.
   더현대서울 워드마크는 11:1로 길어, 예전 헬로서울(4.5:1) 높이를
   그대로 주면 두 배 반 넓어진다. */
.hl-th{height:clamp(11px,1.35vw,14px)}
.hl-gi{height:clamp(11px,1.35vw,14px)}

/* ==========================================================================
   본문 서체 — tools/build-fonts.py가 content.json에 쓰인 글자만 남겨
   만든 자체 호스팅 파일이다. CDN을 쓰지 않는다.
   원고를 고치면 스크립트를 다시 돌려야 새 글자가 들어간다.
   Gowun Batang / Marcellus / EB Garamond / Noto Serif SC — 모두 SIL OFL 1.1.
   ========================================================================== */
@font-face{
  font-family:"Gowun Batang"; font-style:normal; font-weight:400; font-display:swap;
  src:url("../fonts/GowunBatang-Regular.woff2") format("woff2");
}
@font-face{
  font-family:"Gowun Batang"; font-style:normal; font-weight:700; font-display:swap;
  src:url("../fonts/GowunBatang-Bold.woff2") format("woff2");
}
@font-face{
  font-family:"Marcellus"; font-style:normal; font-weight:400; font-display:swap;
  src:url("../fonts/Marcellus-Regular.woff2") format("woff2");
}
@font-face{
  font-family:"EB Garamond"; font-style:normal; font-weight:400 800; font-display:swap;
  src:url("../fonts/EBGaramond-Variable.woff2") format("woff2");
}
@font-face{
  font-family:"EB Garamond"; font-style:italic; font-weight:400 800; font-display:swap;
  src:url("../fonts/EBGaramond-Italic-Variable.woff2") format("woff2");
}
@font-face{
  font-family:"Noto Serif SC"; font-style:normal; font-weight:200 900; font-display:swap;
  src:url("../fonts/NotoSerifSC-Variable.woff2") format("woff2");
}

/* 언어별 본문 서체 */
:root:lang(en) body, [lang="en"] { font-family: var(--font-en-body); }
:root:lang(zh) body, [lang="zh"] { font-family: var(--font-zh); }

/* ==========================================================================
   대문 (#lang-gate) — _시안_히어로2.html 그대로 이관.
   폰트 폭 86%, 오브제 0.895em, translateY 0.046em, 간격 보정 0.0555em,
   텍스처 투명도 55% 등은 전부 실측으로 정한 값이므로 임의로 바꾸지 않는다.
   ========================================================================== */
@font-face{
  font-family:"Archivo VF"; font-style:normal; font-weight:100 900; font-display:block;
  font-stretch:62% 125%;
  src:url("../fonts/Archivo-Variable.woff2") format("woff2-variations");
}
:root{
  --pad:clamp(16px,3vw,40px);
  /* 타입이 화면에서 차지할 비율 — 좁아질수록 여백을 키운다 */
  --fill-w:.86; --fill-h:.82; --vgap:.14em;
}
@media (max-width: 1100px){ :root{ --fill-w:.82; --fill-h:.78 } }
@media (max-width: 700px) { :root{ --fill-w:.72; --fill-h:.54 } }
@media (max-width: 430px) { :root{ --fill-w:.68; --fill-h:.50 } }

/* 한지 결은 body::before로 사이트 전체에 걸린다 (파일 상단 참고) */

#lang-gate{
  padding:var(--pad);
  display:flex;align-items:center;justify-content:center;
  color:var(--navy);
  overflow:hidden;
}

/* 다섯 줄이 화면을 채운다 */
.type{position:relative;z-index:1;width:100%;text-align:center;
      font-family:"Archivo VF","Helvetica Neue",Helvetica,Arial,sans-serif;
      font-weight:700;font-stretch:86%;
      letter-spacing:-.028em;line-height:1;
      display:flex;flex-direction:column;align-items:center;gap:var(--vgap);
      font-size:80px}
.row{display:flex;justify-content:center;white-space:nowrap}
/* 괄호는 대문자보다 위아래로 더 뻗는다.
   그만큼 위 간격은 넓고 아래 간격은 좁아 보이므로 차이를 반씩 나눠 보정한다.
   (실측 : 폰트 크기 108px에서 위 44px / 아래 32px → 0.111em 차이) */
.row--obj{margin-top:-.0555em}
/* 상위 행사명과 부제목 — 큰 글자와 별개의 크기를 갖는다 */
.eyebrow{font-family:"EB Garamond",Georgia,serif;font-weight:400;
      font-stretch:100%;letter-spacing:.14em;line-height:1.4;
      color:var(--navy);white-space:nowrap}
.eyebrow{font-size:clamp(12px,1.35vw,17px);opacity:.6;
      margin-bottom:clamp(2px,.4vw,7px)}

/* 넓은 화면 : 세 줄 —  DAM / (오브제) DA / K-ART SEOUL */
.ri{display:inline-flex;align-items:center;justify-content:center;gap:.14em}
.fit{display:inline-flex;align-items:center;gap:.02em}
/* 좁은 화면 : 다섯 줄로 쌓인다 */
@media (max-width: 700px){
  .ri{flex-direction:column;gap:var(--vgap)}
  /* 세로로 쌓일 때는 괄호 줄 아래쪽에서 보정한다 */
  .fit--obj{margin-bottom:.0555em}
}

.window{position:relative;display:block;width:.895em;height:.895em;
        transform:translateY(.046em);margin:0 .02em}
.slide{position:absolute;inset:0;opacity:0;transform:scale(.86);
       transition:opacity .3s ease, transform .3s ease}
.slide.on{opacity:1;transform:scale(1)}
.slide .obj{width:100%;height:100%;display:block}

/* 네 귀퉁이의 작은 정보 */
.corner{position:absolute;z-index:1;font-size:clamp(11px,1.25vw,14px);
        letter-spacing:.05em;line-height:1.5;opacity:.62;margin:0}
.c-tl{left:var(--pad);top:var(--pad)}
.c-tr{right:var(--pad);top:var(--pad);text-align:right}
.c-bl{left:var(--pad);bottom:var(--pad)}
.c-br{right:var(--pad);bottom:var(--pad);text-align:right}

/* 언어 선택 — 대문에서 관람객이 누를 곳은 여기뿐이다. 눌러야 할 것으로
   보이도록 테두리를 두른다. 채우지는 않는다 — 대문은 활자 화면이고
   꽉 찬 버튼 셋은 제목과 무게를 다툰다. */
.lang-pick{display:flex;flex-direction:column;align-items:flex-end;
           gap:clamp(8px,1.1vw,12px)}
.langs{display:flex;gap:clamp(6px,.9vw,10px);align-items:center}
.langs button{
  font:inherit;color:inherit;background:none;cursor:pointer;white-space:nowrap;
  border:1px solid color-mix(in srgb, var(--navy) 34%, transparent);
  border-radius:999px;
  padding:.5em 1.05em;
  min-height:36px;
  transition:background-color .2s ease, border-color .2s ease, color .2s ease;
}
.langs button:hover,.langs button:focus-visible{
  border-color:var(--navy);background:var(--tint-on-ivory);opacity:1}
.langs button:focus-visible{outline:2px solid var(--navy);outline-offset:3px}
.langs button[aria-current="true"]{border-color:var(--navy);background:var(--tint-on-ivory)}

.lang-hint{margin:0;text-align:right;line-height:1.7;opacity:.72}
.lang-hint span{display:block}
.lang-hint span[lang="en"],.lang-hint span[lang="zh"]{opacity:.75}

.logos{display:flex;align-items:center;gap:clamp(10px,1.4vw,18px)}
.logos img{display:block;width:auto;opacity:.8}
.lg-th{height:clamp(9px,1.05vw,12px)}
.lg-gi{height:clamp(9px,1.05vw,12px)}

/* 좁은 화면 : 언어 선택을 타이틀 아래로 내린다 */
@media (max-width: 700px){
  #lang-gate{flex-direction:column}
  .c-tr{position:static;order:2;align-items:center;text-align:center;
        margin-top:0;margin-bottom:clamp(18px,5vw,34px)}
  .type{order:1;margin-bottom:clamp(10px,3vw,20px)}
  .lang-hint{text-align:center}
  /* 손가락으로 누르는 화면이라 표적을 키운다 */
  .langs button{padding:.62em 1.15em;min-height:44px}
}
@media (prefers-reduced-motion: reduce){ .slide{transition:none} }

/* 존 썸네일 레일 — 한 줄로 늘어놓고 옆으로 밀어 본다 (존 상세와 같은 조작) */
.zone-rail{
  list-style:none;padding:0 var(--gap-m);
  margin:var(--gap-l) 0 0;
  display:flex;gap:var(--gap-m);
  overflow-x:auto;
  scroll-snap-type:x proximity;
  overscroll-behavior-x:contain;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
}
.zone-rail::-webkit-scrollbar{display:none}
.rail-hint{
  margin-block:var(--gap-m) 0; margin-inline:auto;
  font-size:.8rem; opacity:.5; text-align:center;
}
/* .section > * { max-width: var(--measure) }가 레일에도 걸려 본문 폭에
   갇히므로, 화면 끝까지 흐르도록 여기서만 그 제한을 푼다 */
.section > .zone-rail{ max-width:none; margin-inline:0 }
.zt{flex:0 0 46%;max-width:200px;scroll-snap-align:center}
@media (min-width: 700px){ .zt{flex-basis:22%} }
.zt a{
  display:flex;flex-direction:column;height:100%;
  text-align:center;color:inherit;text-decoration:none;
  padding:var(--gap-m) var(--gap-s);border-radius:10px;
  transition:transform .3s ease, background .3s ease;
}
.zt-fig{
  display:block;position:relative;margin:0 auto var(--gap-s);
  width:min(60%,120px);aspect-ratio:1;
}
.zt-fig::before{
  content:"";position:absolute;inset:-14%;
  background:var(--tint-on-ivory);
}
.zt-fig[data-shape="1"]::before{border-radius:50%}
.zt-fig[data-shape="2"]::before{border-radius:46% 54% 50% 50% / 54% 46% 54% 46%}
.zt-fig[data-shape="3"]::before{border-radius:40% 60% 62% 38% / 44% 52% 48% 56%}
.zt-fig[data-shape="4"]::before{border-radius:22px}
.zt-fig[data-shape="5"]::before{border-radius:6px}
.zt-fig[data-shape="6"]::before{border-radius:50% 50% 12% 12%}
.zt-fig[data-shape="7"]::before{border-radius:58% 42% 38% 62% / 40% 60% 40% 60%}
.zt-fig img{position:relative;width:100%;height:100%;display:block}
.zt-num{
  display:block;font-family:var(--font-en-display);
  font-size:.72rem;letter-spacing:.2em;opacity:.45;
}
.zt-title{display:block;font-size:1.05rem;margin-top:.25em}
.zt-obj{display:block;font-size:.78rem;opacity:.5;margin-top:auto;padding-top:.2em}
.zt a:hover,.zt a:focus-visible{transform:translateY(-6px);background:var(--tint-on-ivory)}
.zt a:focus-visible{outline:2px solid var(--navy);outline-offset:3px}
@media (prefers-reduced-motion: reduce){ .zt a{transition:none} }

/* --- Task 7c: 존 상세 — 가로 스와이프 패널 --- */
.zone-detail{
  position:relative;
  height:100svh;
  overflow:hidden;
}
.zone-detail .track{
  position:static;              /* sticky 제거 */
  height:100%;
  display:flex;
  overflow-x:auto;
  overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scroll-behavior:smooth;
  overscroll-behavior-x:contain; /* 끝에서 페이지가 튀지 않게 */
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  transform:none;                /* JS가 밀던 것 해제 */
}
.zone-detail .track::-webkit-scrollbar{ display:none }

.panel{
  flex:0 0 100%;min-width:100%;height:100%;
  scroll-snap-align:center;
  scroll-snap-stop:always;
  overflow-y:auto;              /* 내용이 길면 패널 안에서만 세로 스크롤 */
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:var(--gap-xl) var(--gap-m);text-align:center;
}
.panel > *{max-width:var(--measure)}

.panel--cover{background:var(--navy);color:var(--ivory)}
.p-num{font-family:var(--font-en-display);font-size:.78rem;letter-spacing:.3em;opacity:.5}
.p-obj{width:min(56vw,260px);height:auto;margin:var(--gap-m) 0}
.p-title{font-size:clamp(2rem,8vw,3rem);font-weight:400;margin:0}
.p-names{font-size:.8rem;opacity:.55;margin:.6em 0 0}

.work{margin:0;display:flex;flex-direction:column;align-items:center}
.panel--work img{width:auto;max-width:100%;max-height:62svh;height:auto;display:block}

.panel--end .p-others{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:var(--gap-m) var(--gap-s);
  width:100%;
  margin:var(--gap-l) 0;
}
@media (min-width: 700px){
  .panel--end .p-others{ grid-template-columns:repeat(6,1fr) }
}
.p-other{display:block;color:inherit;text-decoration:none;font-size:.8rem}
.p-other img{width:100%;max-width:72px;height:auto;display:block;margin:0 auto .5em}

/* 오브제가 아주 느리게 떠올랐다 가라앉는다. 통통 튀는 대신 이 움직임을
   골랐다 — 여섯이 한꺼번에 튀면 소란스럽고, '담다'의 조용한 결과도
   어긋난다. 시작 시각을 하나씩 어긋내 함께 움직이지 않게 한다. */
@keyframes obj-float{
  0%,100%{transform:translateY(0)}
  50%    {transform:translateY(-5px)}
}
.p-other img{animation:obj-float 5.2s ease-in-out infinite}
.p-other:nth-child(2) img{animation-delay:-.75s}
.p-other:nth-child(3) img{animation-delay:-1.6s}
.p-other:nth-child(4) img{animation-delay:-2.4s}
.p-other:nth-child(5) img{animation-delay:-3.3s}
.p-other:nth-child(6) img{animation-delay:-4.1s}

/* 누를 수 있다는 것은 손을 얹었을 때 확실히 알린다 */
.p-other{transition:transform .25s ease}
.p-other:hover,.p-other:focus-visible{transform:translateY(-4px)}

@media (prefers-reduced-motion: reduce){
  .p-other img{animation:none}
  .p-other{transition:none}
}
.p-cta{
  display:inline-block;padding:.9em 2.2em;border:1px solid currentColor;
  border-radius:999px;color:inherit;text-decoration:none;
}
.p-cta:hover,.p-cta:focus-visible{background:var(--navy);color:var(--ivory)}

@media (prefers-reduced-motion: reduce){
  .zone-detail .track{ scroll-behavior:auto }
}

/* --- 스와이프 표시 --- */
.swipe{
  position:absolute;left:0;right:0;bottom:clamp(16px,3vh,32px);
  display:flex;flex-direction:column;align-items:center;gap:.7em;
  pointer-events:none;
}
.swipe-hint{
  font-family:var(--font-en-display);
  font-size:.7rem;letter-spacing:.24em;text-transform:uppercase;
  opacity:.55;transition:opacity .4s ease;
}
.zone-detail.moved .swipe-hint{ opacity:0 }

.dots{display:flex;gap:.5em;pointer-events:auto}
.dot{
  width:7px;height:7px;padding:0;border:0;border-radius:50%;
  background:currentColor;opacity:.28;cursor:pointer;
  transition:opacity .25s ease, transform .25s ease;
}
.dot[aria-current="true"]{opacity:.9;transform:scale(1.35)}
.dot:focus-visible{outline:2px solid currentColor;outline-offset:3px}

/* 표지 패널은 네이비라 표시가 아이보리여야 보인다 */
.zone-detail .swipe{color:var(--navy)}
.zone-detail.on-cover .swipe{color:var(--ivory)}

/* 위치 안내 — 존 상세 위치 패널과 담즈 섹션이 함께 쓴다 */
/* '위치 안내' 라벨이 지도에 붙어 있었다. 라벨과 그림 사이를 벌려
   라벨이 위로 올라가 보이게 한다. */
.panel--map .eyebrow{margin-bottom:var(--gap-l)}
.map-figure{position:relative;width:100%;max-width:none}
.map-figure img{width:100%;height:auto;display:block}
.map-spots{
  list-style:none;margin:var(--gap-m) 0 0;padding:0;
  font-size:.88rem;line-height:1.8;text-align:left;
}
.map-spots li{padding:.35em 0}
.map-spots b{
  display:inline-grid;place-items:center;width:1.5em;height:1.5em;
  border-radius:50%;background:var(--navy);color:var(--ivory);
  font-family:var(--font-en-display);font-size:.72rem;font-weight:400;
  margin-right:.5em;vertical-align:.05em;
}
.map-spots .near{opacity:1}
.map-none{opacity:.5}

/* --- 담즈 · 구매 상담 섹션 & 푸터 (Task 10) --- */
/* 담즈 사진 — 한 줄로 이어 천천히 오른쪽에서 왼쪽으로 흘린다.
   가게 앞을 지나며 진열장을 훑는 속도다. 손을 대면 멈춘다. */
.dz-marquee{
  max-width:none;
  width:calc(100% + var(--gap-m) * 2);
  margin-block:var(--gap-l) 0;
  margin-inline:calc(var(--gap-m) * -1);
  overflow:hidden;
  /* 양 끝을 흐려 사진이 화면 밖으로 잘려 나가는 것이 드러나지 않게 한다 */
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
}
.dz-track{
  list-style:none;margin:0;padding:0;
  display:flex;gap:var(--gap-s);width:max-content;
  animation:dz-slide 48s linear infinite;
}
.dz-marquee:hover .dz-track,
.dz-marquee:focus-within .dz-track{animation-play-state:paused}
.dz-shot{flex:none}
.dz-shot img{
  height:clamp(150px,24vw,240px);width:auto;
  display:block;border-radius:4px;
}

@keyframes dz-slide{
  from{transform:translateX(0)}
  /* 목록이 두 벌이라 절반을 밀면 처음과 겹친다. 두 벌 사이에도 gap이
     하나 들어가므로 그 절반만큼 더 밀어야 이음매가 어긋나지 않는다. */
  to{transform:translateX(calc(-50% - var(--gap-s) / 2))}
}

/* 움직임을 원치 않는 사용자에게는 손으로 미는 줄로 바꾼다 */
@media (prefers-reduced-motion: reduce){
  .dz-track{animation:none}
  .dz-marquee{overflow-x:auto;-webkit-mask-image:none;mask-image:none}
}

.damz-map{margin-block:var(--gap-l) 0;margin-inline:auto}
.damz-block{margin-block:var(--gap-l) 0;margin-inline:auto}
.damz-block h3{
  font-size:.78rem;letter-spacing:.22em;text-transform:uppercase;
  font-family:var(--font-en-display);font-weight:400;
  opacity:.55;margin:0 0 var(--gap-s);
}

.channels{list-style:none;margin:0;padding:0;display:grid;gap:var(--gap-s)}
.channel{
  display:flex;align-items:center;justify-content:center;
  min-height:56px;padding:.9rem 1.2rem;
  color:inherit;text-decoration:none;
  border:1px solid rgba(34,45,90,.24);border-radius:8px;
  font-size:1rem;
}
.channel:hover,.channel:focus-visible{background:var(--navy);color:var(--ivory)}

#site-footer{background:var(--navy);color:var(--ivory);padding:0 var(--gap-m) var(--gap-xl)}
.footer-inner{
  max-width:var(--measure);margin-inline:auto;
  border-top:1px solid rgba(243,234,224,.2);padding-top:var(--gap-l);
}
.footer-brands{display:flex;align-items:center;gap:clamp(14px,2.4vw,24px);flex-wrap:wrap}
.footer-brands img{display:block;width:auto;opacity:.85}
.fb-th{height:clamp(12px,1.4vw,15px)}
.fb-gi{height:clamp(12px,1.4vw,15px)}

/* --- 맨 위로 버튼 (Task 10b) --- */
#to-top{
  position:fixed; right:var(--gap-m); bottom:var(--gap-m); z-index:60;
  display:grid; place-items:center;
  width:54px; height:54px; border-radius:50%;
  border:1px solid rgba(34,45,90,.28);
  background:color-mix(in srgb, var(--ivory) 90%, transparent);
  backdrop-filter:blur(8px);
  color:var(--navy); cursor:pointer;
}
#to-top:hover, #to-top:focus-visible{ background:var(--navy); color:var(--ivory) }
#to-top:focus-visible{ outline:2px solid var(--navy); outline-offset:3px }
