/* ═══════════════════════════════════════════════════
   두산위브 에듀파크 화성향남 — landing page
   Brand purple #123C63 sampled from the 2026-06-23 deck.
   Mobile-first: ~95% of Meta traffic is phones. Desktop is
   a genuine multi-column layout from 1024px up, not the
   phone column stranded in the middle of a wide screen.
   All @media blocks live at the END of this file — media
   queries add no specificity, so a later base rule wins.
   ═══════════════════════════════════════════════════ */

:root{
  --navy:#123C63;
  --navy-d:#0A2740;
  --navy-l:#1E5B8F;
  --gold:#C9A227;
  --gold-l:#E5C558;
  --ink:#141A20;
  --ink-2:#414C57;
  --ink-3:#78838D;
  --paper:#FFFFFF;
  --paper-2:#F6F8FA;
  --paper-3:#EBF0F4;
  --line:#DDE3E8;

  --wrap:1080px;
  --pad:20px;
  --bar:64px;                 /* sticky bottom bar */
  --hdr:56px;

  --r:14px;
  --ease:cubic-bezier(.22,.61,.36,1);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth}
body{
  margin:0;
  font-family:'Pretendard Variable',Pretendard,-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo','Malgun Gothic','맑은 고딕',sans-serif;
  color:var(--ink);
  background:var(--paper);
  font-size:16px;
  line-height:1.65;
  word-break:keep-all;
  overflow-wrap:break-word;
  letter-spacing:-.015em;
  padding-bottom:calc(var(--bar) + env(safe-area-inset-bottom));
}
img{max-width:100%; height:auto; display:block}
a{color:inherit; text-decoration:none}
h1,h2,h3{margin:0; line-height:1.28; letter-spacing:-.035em; font-weight:800}
p{margin:0}
ul,ol,dl{margin:0; padding:0; list-style:none}
button{font:inherit; color:inherit}
svg{fill:currentColor}

/* The sprite must stay in the layout tree — display:none on the host
   <svg> breaks <use> resolution in some engines. */
.sprite{position:absolute; width:0; height:0; overflow:hidden}

.wrap{max-width:var(--wrap); margin:0 auto; padding-inline:var(--pad)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

#apply{scroll-margin-top:var(--hdr)}

/* ── section furniture ───────────────────────────── */
.sec__kicker{
  font-size:12px; font-weight:700; letter-spacing:.16em;
  color:var(--navy-l); text-transform:uppercase; margin-bottom:10px;
}
.sec__h2{font-size:26px; margin-bottom:14px}
.sec__h2 b{color:var(--navy)}
.sec__lead{color:var(--ink-2); font-size:15px; margin-bottom:22px}
.note{margin-top:16px; font-size:11.5px; line-height:1.6; color:var(--ink-3)}

/* ── buttons ─────────────────────────────────────── */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  min-height:54px; padding:0 26px; border-radius:999px;
  font-weight:800; font-size:16.5px; letter-spacing:-.02em;
  border:1.5px solid transparent; cursor:pointer;
  transition:transform .18s var(--ease), box-shadow .18s var(--ease), background-color .18s var(--ease);
}
.btn--gold{
  background:linear-gradient(180deg,var(--gold-l),var(--gold));
  color:#2A1E00; box-shadow:0 6px 18px rgba(201,162,39,.32);
}
.btn--ghost{background:rgba(255,255,255,.1); color:#fff; border-color:rgba(255,255,255,.55)}
.btn--submit{
  width:100%; margin-top:22px; min-height:58px; font-size:17px;
  background:var(--navy); color:#fff; box-shadow:0 8px 22px rgba(18,60,99,.30);
}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.55; pointer-events:none}

/* ── header ──────────────────────────────────────── */
.hdr{
  position:fixed; inset:0 0 auto 0; z-index:60; height:var(--hdr);
  /* same lacquered ground + gold accent as the form section */
  background:linear-gradient(180deg,#0A2740 0%,#06182A 100%);
  border-bottom:1px solid rgba(229,197,88,.26);
  transition:border-color .25s var(--ease), box-shadow .25s var(--ease);
}
.hdr.is-stuck{border-bottom-color:rgba(229,197,88,.42); box-shadow:0 3px 20px rgba(0,0,0,.34)}
.hdr__in{
  max-width:var(--wrap); height:100%; margin:0 auto; padding-inline:var(--pad);
  display:flex; align-items:center; justify-content:space-between; gap:12px;
}
.hdr__logo{font-weight:800; font-size:21px; letter-spacing:-.04em; line-height:1.1; color:#fff}
.hdr__logo em{font-style:normal; color:var(--gold-l)}
.hdr__logo-sm{display:block; font-size:11.5px; font-weight:600; letter-spacing:.06em; color:rgba(255,255,255,.58)}
/* the same gold hairline used above the form heading */
.hdr__logo-sm::before{content:''; display:inline-block; width:14px; height:1.5px; margin-right:7px;
  vertical-align:middle; background:linear-gradient(90deg,var(--gold-l),rgba(229,197,88,.08))}
.hdr__right{display:flex; align-items:center; gap:10px}
.hdr__phone{display:none; align-items:center; gap:8px; color:#fff; font-size:15px}
.hdr__phone svg{width:17px; height:17px; color:var(--gold-l)}
.hdr__phone b{font-size:18px; font-weight:800; letter-spacing:-.02em}
.hdr__call{
  flex:none; width:42px; height:42px; border-radius:50%;
  background:linear-gradient(180deg,var(--gold-l),var(--gold)); display:grid; place-items:center;
  box-shadow:0 4px 14px rgba(201,162,39,.34);
}
.hdr__call svg{width:21px; height:21px; fill:#2A1E00}

/* ── hero ────────────────────────────────────────── */
.hero{position:relative; margin-top:var(--hdr); min-height:74svh; display:flex; align-items:flex-end; isolation:isolate}
.hero__bg{position:absolute; inset:0; z-index:-1; overflow:hidden; background:var(--navy-d)}
.hero__bg img{
  width:100%; height:100%; object-fit:cover; object-position:50% 62%;
  transform-origin:50% 60%;
  animation:kenburns 20s var(--ease) forwards;
}
@keyframes kenburns{from{transform:scale(1.09)} to{transform:scale(1)}}
.hero__bg::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(178deg,rgba(6,24,42,.30) 0%,rgba(6,24,42,.16) 20%,rgba(6,24,42,.62) 46%,rgba(6,24,42,.88) 72%,rgba(6,24,42,.96) 100%);
}
.hero__body{width:100%; max-width:var(--wrap); margin:0 auto; padding:64px var(--pad) 34px; color:#fff}
.hero__eyebrow{font-size:12.5px; font-weight:600; letter-spacing:.02em; color:rgba(255,255,255,.82); margin-bottom:12px}
.hero__eyebrow span{
  display:inline-block; padding:3px 9px; margin-right:6px; border-radius:4px;
  background:rgba(255,255,255,.16); font-weight:700;
}
.hero__h1{font-size:34px; letter-spacing:-.045em; text-shadow:0 2px 22px rgba(0,0,0,.4)}
.hero__h1 b{color:var(--gold-l)}
.hero__sub{margin-top:12px; font-size:15px; color:rgba(255,255,255,.9)}
.hero__sub b{color:#fff}

.hero__chips{display:flex; flex-wrap:wrap; gap:7px; margin-top:18px}
.hero__chips li{
  padding:7px 13px; border-radius:999px; font-size:13px; font-weight:600;
  background:rgba(255,255,255,.13); border:1px solid rgba(255,255,255,.24);
  color:rgba(255,255,255,.92); backdrop-filter:blur(4px);
}
.hero__chips b{font-weight:800; color:var(--gold-l)}
.hero__chips i{font-style:normal; font-size:10.5px; opacity:.7; margin-left:5px}

.hero__cta{display:flex; gap:9px; margin-top:24px}
.hero__cta .btn{flex:1; padding-inline:14px}
.hero__note{margin-top:16px; font-size:10.5px; color:rgba(255,255,255,.55); line-height:1.5}

/* ── facts strip ─────────────────────────────────── */
.facts{background:var(--navy); color:#fff}
.facts__in{
  max-width:var(--wrap); margin:0 auto; padding:18px var(--pad);
  display:grid; grid-template-columns:repeat(2,1fr); gap:14px 10px;
}
.fact{text-align:center; padding:4px 0}
.fact b{display:block; font-size:19px; font-weight:800; letter-spacing:-.035em; color:var(--gold-l)}
.fact span{display:block; font-size:11.5px; color:rgba(255,255,255,.72); margin-top:2px}

/* ── apply / form ────────────────────────────────── */
.apply{background:var(--paper-2); padding:44px 0 48px; border-bottom:1px solid var(--line)}
.apply__lead{margin:6px 0 22px; font-size:14.5px; line-height:1.75; color:var(--ink-2)}
.apply__lead b{color:var(--navy); font-weight:700}
.apply__ticks{display:grid; gap:8px; margin-bottom:26px}
.apply__ticks li{position:relative; padding-left:26px; font-size:14px; color:var(--ink-2)}
.apply__ticks li::before{
  content:''; position:absolute; left:0; top:.42em; width:16px; height:16px; border-radius:50%;
  background:var(--navy) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7'/%3E%3C/svg%3E") center/10px no-repeat;
}

.form{background:#fff; border:1px solid var(--line); border-radius:var(--r); padding:24px 20px}
.hp{position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden}

.field{margin-bottom:20px}
.field label{display:block; font-size:13px; font-weight:700; color:var(--ink-2); margin-bottom:7px}
.field label i{font-style:normal; font-weight:500; color:var(--ink-3)}
.field input,.field select{
  width:100%; height:52px; padding:0 2px;
  font:inherit; font-size:16px;              /* <16px triggers iOS zoom-on-focus */
  color:var(--ink); background:transparent;
  border:0; border-bottom:1.5px solid var(--line); border-radius:0;
  -webkit-appearance:none; appearance:none;
  transition:border-color .2s var(--ease);
}
.field select{
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%237C737A' d='M6 8 0 0h12z'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 4px center; background-size:11px;
  padding-right:24px;
}
.field input::placeholder{color:#C3B9C0}
.field input:focus,.field select:focus{outline:none; border-bottom-color:var(--navy)}
.field.is-bad input{border-bottom-color:#C8202A}

.consent{display:flex; align-items:flex-start; gap:10px; margin-top:24px; font-size:13.5px; color:var(--ink-2); cursor:pointer}
.consent input{flex:none; width:21px; height:21px; margin:1px 0 0; accent-color:var(--navy)}
.consent b{font-weight:600}
.linkish{background:none; border:0; padding:0; font-size:inherit; color:var(--navy-l); text-decoration:underline; cursor:pointer}

.form__msg{margin-top:14px; font-size:14px; font-weight:600; line-height:1.6; min-height:1px}
.form__msg.is-ok{color:#17743C}
.form__msg.is-bad{color:#C8202A}
.form__alt{margin-top:18px; text-align:center; font-size:13.5px; color:var(--ink-3)}
.form__alt a{font-weight:800; color:var(--navy); text-decoration:underline; text-underline-offset:3px}

/* ── points ──────────────────────────────────────── */
.points{padding:48px 0}
.pt-list{display:grid; gap:14px; margin-top:24px}
.pt-list li{
  position:relative; background:var(--paper-2); border:1px solid var(--line);
  border-radius:var(--r); padding:22px 20px 20px;
  transition:transform .25s var(--ease), box-shadow .25s var(--ease), border-color .25s var(--ease);
}
.pt-ico{
  display:grid; place-items:center; width:44px; height:44px; border-radius:12px;
  background:#fff; border:1px solid var(--line); color:var(--navy); margin-bottom:14px;
}
.pt-ico svg{width:23px; height:23px}
.pt-num{
  display:block; font-size:11px; font-weight:800; letter-spacing:.1em;
  color:var(--gold); margin-bottom:6px;
}
.pt-list h3{font-size:18px; margin-bottom:8px}
.pt-list h3 b{color:var(--navy)}
.pt-list p{font-size:14.5px; line-height:1.75; color:var(--ink-2)}
.pt-list p b{color:var(--ink); font-weight:700}

/* ── overview table ──────────────────────────────── */
.overview{padding:48px 0; background:var(--paper-2); border-block:1px solid var(--line)}
.tbl-scroll{overflow-x:auto; -webkit-overflow-scrolling:touch; margin-top:22px; border:1px solid var(--line); border-radius:var(--r); background:#fff}
.tbl-hint{margin-top:10px; font-size:11.5px; color:var(--ink-3); text-align:right}
.tbl{width:100%; min-width:520px; border-collapse:collapse; font-size:13px}
.tbl thead th{background:var(--navy); color:#fff; font-weight:700; font-size:13.5px; padding:11px 8px}
.tbl tbody th{background:var(--paper-3); font-weight:700; color:var(--ink-2); text-align:left; padding:11px 12px; white-space:nowrap; font-size:12.5px; border-top:1px solid var(--line)}
.tbl td{padding:11px 10px; text-align:center; border-top:1px solid var(--line); line-height:1.5}
.tbl td b{color:var(--navy); font-weight:800; font-size:14px}
.tbl td i{font-style:normal; font-size:11px; color:var(--ink-3); line-height:1.45; display:inline-block}

/* ── types rail ──────────────────────────────────── */
.types{padding:48px 0}
.rail{margin-top:6px; overflow-x:auto; -webkit-overflow-scrolling:touch; scroll-snap-type:x mandatory; scrollbar-width:none}
.rail::-webkit-scrollbar{display:none}
.rail__track{display:flex; gap:12px; padding:4px var(--pad) 8px; width:max-content}
.tcard{
  flex:none; width:212px; scroll-snap-align:center;
  background:#fff; border:1px solid var(--line); border-radius:var(--r); overflow:hidden;
  transition:transform .25s var(--ease), box-shadow .25s var(--ease), border-color .25s var(--ease);
}
/* Fixed box + contain: the source tiles have three different aspect
   ratios, and a flex row of ragged-height cards misaligns every caption. */
.tcard img{width:100%; height:250px; object-fit:contain; background:#fff; padding:6px}
.tcard__cap{padding:11px 13px 13px; border-top:1px solid var(--line); background:var(--paper-2)}
.tcard__cap b{display:block; font-size:19px; font-weight:800; letter-spacing:-.04em; color:var(--navy)}
.tcard__cap span{display:block; font-size:11.5px; color:var(--ink-3); margin-top:1px}

/* ── location ────────────────────────────────────── */
.loc{padding:48px 0; background:var(--paper-2); border-block:1px solid var(--line)}
.loc__fig{margin:22px 0 0; background:#fff; border:1px solid var(--line); border-radius:var(--r); overflow:hidden}
.loc__fig figcaption{padding:9px 12px; font-size:10.5px; color:var(--ink-3); border-top:1px solid var(--line); background:var(--paper-2)}
.loc__list{margin-top:20px; display:grid; gap:1px; background:var(--line); border:1px solid var(--line); border-radius:var(--r); overflow:hidden}
.loc__list li{background:#fff; padding:15px 17px 15px 54px; position:relative}
.loc__ico{
  position:absolute; left:16px; top:15px; width:26px; height:26px;
  display:grid; place-items:center; color:var(--navy-l);
}
.loc__ico svg{width:22px; height:22px}
.loc__list b{display:block; font-size:15px; font-weight:700; color:var(--navy-d)}
.loc__list span{display:block; font-size:13px; color:var(--ink-2); margin-top:3px}

/* ── gallery ─────────────────────────────────────── */
.gal{padding:48px 0}
.gal__grid{display:grid; gap:12px; margin-top:22px}
.gal__grid figure{margin:0; border:1px solid var(--line); border-radius:var(--r); overflow:hidden; background:#fff}
.gal__grid img{transition:transform .5s var(--ease)}
.gal__grid figcaption{padding:9px 13px; font-size:12px; font-weight:600; color:var(--ink-2); border-top:1px solid var(--line); background:var(--paper-2)}

/* ── closing ─────────────────────────────────────── */
.closing{background:linear-gradient(160deg,var(--navy),var(--navy-d)); color:#fff; padding:52px 0}
.closing__h2{font-size:26px; margin-bottom:14px}
.closing__h2 b{color:var(--gold-l)}
.closing p{font-size:14.5px; line-height:1.75; color:rgba(255,255,255,.82)}
.closing p b{color:#fff; font-weight:700}
.closing__cta{display:flex; gap:9px; margin-top:26px}
.closing__cta .btn{flex:1; padding-inline:14px}

/* ── footer ──────────────────────────────────────── */
.ft{background:#06182A; color:rgba(255,255,255,.62); padding:38px 0 34px; font-size:12.5px; line-height:1.7}
.ft__name{font-size:16px; font-weight:800; color:#fff; letter-spacing:-.03em}
.ft__addr{margin-top:4px}
.ft__tel{margin-top:10px; font-size:14px; color:#fff}
.ft__tel a{font-weight:800; color:var(--gold-l); text-decoration:underline; text-underline-offset:3px}
.ft__disc{margin-top:20px; padding-top:18px; border-top:1px solid rgba(255,255,255,.14); display:grid; gap:6px}
.ft__disc li{position:relative; padding-left:11px; font-size:11.5px; line-height:1.65; color:rgba(255,255,255,.5)}
.ft__disc li::before{content:'※'; position:absolute; left:0; top:0; font-size:9px}
/* ── 혜택 패널 ────────────────────────────────────────────────────
   One gold panel, not two. Gold only reads as premium while it is the
   single brightest thing on screen; two gold slabs plus gold buttons plus
   gold chips cancel each other out and the page just looks loud. */
.perk{margin:18px 0 0; padding:18px 20px; border-radius:14px;
  background:linear-gradient(135deg,#F7E4AC 0%,#E7BE58 52%,#F2D179 100%);
  color:#2A1E00; box-shadow:0 6px 22px rgba(120,90,20,.26)}
.perk__row{display:flex; align-items:baseline; gap:9px; letter-spacing:-.035em}
.perk__row + .perk__row{margin-top:11px; padding-top:11px; border-top:1px solid rgba(42,30,0,.16)}
.perk__row b{font-size:23px; font-weight:800; line-height:1.1}
.perk__row span{font-size:14.5px; font-weight:600; opacity:.78}
/* 단서 조항 must sit with the claim it qualifies (표시광고법). */
.perk__note{margin-top:11px; font-size:11.5px; line-height:1.5; color:rgba(42,30,0,.68)}
@media (min-width:1024px){
  .apply__copy{align-self:center}
  .perk{padding:24px 26px}
  .perk__row b{font-size:30px}
  .perk__row span{font-size:16px}
}

/* ── 후킹 배너 ────────────────────────────────────────────────────
   Four identical cards. The number is the only accent — alternating
   cream/dark panels made the block louder than the offer above it. */
.hook{background:linear-gradient(168deg,#0D2E4A 0%,#06182A 100%);
  padding:38px 0 42px; border-top:1px solid rgba(255,255,255,.08)}
.hook__h2{font-size:23px; line-height:1.32; letter-spacing:-.045em; color:#fff; font-weight:800}
.hook__h2 b{color:var(--gold-l)}
.hook__sub{margin-top:10px; font-size:13.5px; line-height:1.55; color:rgba(255,255,255,.6)}
.hook__grid{margin-top:22px; padding:0; list-style:none; display:grid; gap:10px; counter-reset:hookNum}
.hook__row{counter-increment:hookNum; position:relative;
  padding:15px 18px 15px 54px; border-radius:12px;
  background:rgba(255,255,255,.045); border:1px solid rgba(255,255,255,.09)}
.hook__row::before{
  content:counter(hookNum,decimal-leading-zero);
  position:absolute; left:18px; top:16px;
  font-size:12px; font-weight:800; letter-spacing:.02em; color:var(--gold-l); opacity:.85;
}
.hook__k{display:block; font-size:15px; font-weight:700; color:#fff; letter-spacing:-.03em}
.hook__v{display:block; margin-top:4px; font-size:13px; line-height:1.55; color:rgba(255,255,255,.58)}
.hook__v i{font-style:normal; opacity:.75}
.hook__note{margin-top:16px; font-size:11.5px; line-height:1.6; color:rgba(255,255,255,.42)}
.hook__cta{margin-top:22px; display:flex; gap:10px; flex-wrap:wrap}
@media (min-width:768px){
  .hook__h2{font-size:31px}
  .hook__grid{grid-template-columns:1fr 1fr; gap:12px}
}

/* ── 방문신청 버튼 ────────────────────────────────────────────────
   A slow breath on the primary CTA only. The old 1.5s ring fired on every
   gold button at once, which read as flashing rather than emphasis. */
@keyframes ctaBreathe{
  0%,100%{box-shadow:0 0 0 0 rgba(229,197,88,.42), 0 4px 14px rgba(0,0,0,.22)}
  50%{box-shadow:0 0 0 8px rgba(229,197,88,0), 0 4px 18px rgba(0,0,0,.26)}
}
.hero__cta .btn--gold,
.hook__cta .btn--gold,
.closing__cta .btn--gold,
.sticky__btn--form{animation:ctaBreathe 2.6s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){
  .hero__cta .btn--gold,.hook__cta .btn--gold,
  .closing__cta .btn--gold,.sticky__btn--form{animation:none}
}


/* 사업자 정보 — 표시광고법상 분양 광고는 실제 공급 주체를 밝혀야 한다.
   본문보다 한 단계 낮은 톤이되, 읽을 수 있어야 하므로 .ft__disc보다는 밝게. */
.ft__biz{margin-top:18px; padding-top:16px; border-top:1px solid rgba(255,255,255,.14); display:grid; gap:10px}
.ft__biz > div{display:grid; grid-template-columns:62px 1fr; gap:10px; align-items:start}
.ft__biz dt{font-size:11.5px; font-weight:700; color:rgba(255,255,255,.72)}
.ft__biz dd{margin:0; font-size:11.5px; line-height:1.7; color:rgba(255,255,255,.56)}
@media (min-width:768px){.ft__biz > div{grid-template-columns:76px 1fr}}
.ft__links{margin-top:18px}
/* quiet build credit — dad's palette, not Vale's green */
.vale-credit{
  display:inline-flex; align-items:center; gap:8px; margin-top:18px;
  padding:7px 14px 7px 10px; border-radius:999px;
  border:1px solid rgba(255,255,255,.13); background:rgba(255,255,255,.04);
  font-size:11.5px; line-height:1; color:rgba(255,255,255,.5);
  transition:border-color .2s var(--ease), color .2s var(--ease), background-color .2s var(--ease);
}
.vale-credit img{width:15px; height:15px; opacity:.7; transition:opacity .2s var(--ease)}
.vale-credit b{font-weight:700; color:rgba(255,255,255,.74)}
.ft__links .linkish{color:rgba(255,255,255,.75)}

/* ── sticky bottom bar ───────────────────────────── */
.sticky{
  position:fixed; inset:auto 0 0 0; z-index:70; display:flex;
  background:var(--ink); padding-bottom:env(safe-area-inset-bottom);
  box-shadow:0 -2px 18px rgba(0,0,0,.22);
  /* visible by default; JS adds --down while scrolling down. 105% not 100%
     so the box-shadow clears the viewport too. */
  transition:transform .18s cubic-bezier(.22,1,.36,1);
}
.sticky--down{transform:translateY(105%)}
/* while the on-screen keyboard is up the thumb bar only steals room
   from the field being typed into */
body.is-typing .sticky{transform:translateY(105%)}
.sticky__btn{
  flex:1; height:var(--bar); display:flex; align-items:center; justify-content:center; gap:7px;
  font-size:16px; font-weight:800; letter-spacing:-.02em; color:#fff;
}
.sticky__btn svg{width:20px; height:20px; fill:currentColor}
.sticky__btn--form{background:var(--navy)}
.sticky__btn--call{background:var(--gold); color:#2A1E00}
.sticky__btn:active{filter:brightness(.92)}

/* ── privacy modal ───────────────────────────────── */
.modal{position:fixed; inset:0; z-index:90; display:grid; place-items:center; padding:20px; background:rgba(20,4,26,.6); backdrop-filter:blur(3px)}
.modal[hidden]{display:none}
.modal__box{background:#fff; border-radius:var(--r); padding:26px 22px 22px; max-width:440px; width:100%; max-height:82svh; overflow:auto}
.modal__box h3{font-size:19px; margin-bottom:16px; color:var(--navy)}
.modal__box dt{font-size:12px; font-weight:800; color:var(--navy-l); margin-top:14px}
.modal__box dd{margin:3px 0 0; font-size:13.5px; line-height:1.7; color:var(--ink-2)}
.modal__box .btn{width:100%; margin-top:22px}

/* ── lightbox ────────────────────────────────────── */
.zoomable{cursor:zoom-in}
.lb{position:fixed; inset:0; z-index:95; background:#0E0212; display:flex; flex-direction:column}
.lb[hidden]{display:none}
.lb__stage{flex:1; overflow:auto; -webkit-overflow-scrolling:touch; display:grid; place-items:center; padding:14px}
.lb__stage img{max-width:none; width:190%; max-height:none}
.lb__bar{
  flex:none; display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:12px 16px calc(12px + env(safe-area-inset-bottom));
  background:rgba(0,0,0,.5); color:rgba(255,255,255,.8); font-size:12.5px;
}
.lb__close{
  flex:none; min-height:40px; padding:0 18px; border-radius:999px; border:1px solid rgba(255,255,255,.4);
  background:rgba(255,255,255,.1); color:#fff; font-weight:700; cursor:pointer;
}

/* ── motion ──────────────────────────────────────── */
.anim{opacity:0; transform:translateY(16px); animation:fadeUp .75s var(--ease) forwards; animation-delay:var(--d,0ms)}
@keyframes fadeUp{to{opacity:1; transform:none}}

.rv{opacity:0; transform:translateY(20px); transition:opacity .65s var(--ease), transform .65s var(--ease); transition-delay:var(--i,0ms)}
.rv.is-in{opacity:1; transform:none}

/* Edit mode must never hide content behind a scroll trigger. */
body.is-edit .anim,body.is-edit .rv{opacity:1 !important; transform:none !important; animation:none !important}
body.is-edit .hero__bg img{animation:none}
body.is-edit .sticky{transform:none !important}

/* ═══ media queries — must stay last ═══════════════ */
@media (min-width:600px){
  .facts__in{grid-template-columns:repeat(4,1fr)}
  .hero__h1{font-size:44px}
  .sec__h2,.closing__h2{font-size:32px}
  .gal__grid{grid-template-columns:1fr 1fr}
  .loc__list{grid-template-columns:1fr 1fr}
  .tcard{width:238px}
  .pt-list{grid-template-columns:1fr 1fr}
}
@media (min-width:900px){
  :root{--pad:32px}
  .hero{min-height:78svh}
  .hero__h1{font-size:52px}
  .hero__body{padding-block:88px 52px}
  .hero__cta .btn,.closing__cta .btn{flex:0 1 auto; min-width:200px}
  .sec__h2,.closing__h2{font-size:36px}
  .form{padding:32px 30px}
  .apply__lead{font-size:15.5px}
}

/* ── desktop: a real layout, not a phone column ──── */
@media (min-width:1024px){
  :root{--wrap:1240px; --pad:40px; --hdr:72px}

  body{padding-bottom:0}
  .sticky{display:none}
  .hdr__call{display:none}
  .hdr__phone{display:flex}
  .hdr__logo{font-size:25px}

  .hero{min-height:640px; align-items:center}
  .hero__bg img{object-position:60% 55%}
  /* Wide viewports letterbox the render, so the vertical scrim alone stops
     carrying the left-aligned headline. Add a horizontal one. */
  .hero__bg::after{
    background:
      linear-gradient(100deg,rgba(22,2,30,.90) 0%,rgba(22,2,30,.62) 38%,rgba(22,2,30,.10) 70%),
      linear-gradient(180deg,rgba(22,2,30,.34) 0%,rgba(22,2,30,.06) 40%,rgba(22,2,30,.52) 100%);
  }
  .hero__body{padding-block:80px}
  .hero__inner{max-width:600px}
  .hero__h1{font-size:60px}
  .hero__sub{font-size:17px; margin-top:16px}
  .hero__chips li{font-size:14px; padding:8px 15px}
  .hero__note{max-width:520px}

  .facts__in{padding:26px var(--pad)}
  .fact b{font-size:26px}
  .fact span{font-size:12.5px}

  .apply{padding:76px 0 80px}
  .apply__grid{display:grid; grid-template-columns:1fr 480px; gap:56px; align-items:start}
  .apply__copy{padding-top:6px}
  .form{padding:36px 34px; position:sticky; top:calc(var(--hdr) + 20px)}

  .points{padding:80px 0}
  .pt-list{grid-template-columns:repeat(4,1fr); gap:20px; margin-top:34px}
  .pt-list li{padding:26px 22px 24px}

  .overview{padding:80px 0}
  .tbl{min-width:0; font-size:14px}
  .tbl thead th{padding:14px 10px; font-size:15px}
  .tbl tbody th{font-size:13.5px; padding:14px 16px}
  .tbl td{padding:14px 12px}
  .tbl-hint{display:none}

  .types{padding:80px 0}
  /* The rail is a phone affordance. On desktop it becomes a grid that
     actually uses the width. */
  .rail{overflow:visible; scroll-snap-type:none; max-width:var(--wrap); margin-inline:auto; padding-inline:var(--pad)}
  .rail__track{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; width:auto; padding:6px 0}
  .tcard{width:auto}
  .tcard img{height:230px}

  .loc{padding:80px 0}
  .loc__grid{display:grid; grid-template-columns:1.1fr 1fr; gap:28px; align-items:start; margin-top:28px}
  .loc__fig{margin:0}
  .loc__list{margin-top:0; grid-template-columns:1fr; align-content:start}
  .loc__list li{padding:18px 20px 18px 58px}
  .loc__ico{top:18px}

  .gal{padding:80px 0}
  .gal__grid{grid-template-columns:repeat(3,1fr); gap:20px; margin-top:34px}

  .closing{padding:84px 0}
  .closing__in{max-width:760px; margin:0 auto; text-align:center}
  .closing__cta{justify-content:center; gap:12px}
  .closing p{font-size:16px}

  .ft{padding:52px 0 46px}
  .ft__grid{display:grid; grid-template-columns:1fr 1.4fr; gap:48px; align-items:start}
  .ft__disc{margin-top:0; padding-top:0; border-top:0}
  .lb__stage img{width:auto; max-width:100%; max-height:100%}
}
@media (min-width:1400px){
  :root{--wrap:1320px}
  .hero__h1{font-size:66px}
  .hero__inner{max-width:660px}
}
@media (hover:hover){
  .btn:hover{transform:translateY(-2px)}
  .btn--gold:hover{box-shadow:0 10px 26px rgba(201,162,39,.42)}
  .btn--ghost:hover{background:rgba(255,255,255,.2)}
  .btn--submit:hover{background:var(--navy-l)}
  .tcard:hover{border-color:var(--navy-l); transform:translateY(-4px); box-shadow:0 12px 28px rgba(18,60,99,.14)}
  .pt-list li:hover{border-color:var(--navy-l); transform:translateY(-3px); box-shadow:0 12px 28px rgba(18,60,99,.10)}
  .gal__grid figure:hover img{transform:scale(1.035)}
  .hdr__phone:hover b{color:var(--gold-l)}
  .vale-credit:hover{border-color:rgba(255,255,255,.3); color:rgba(255,255,255,.8); background:rgba(255,255,255,.07)}
  .vale-credit:hover img{opacity:1}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms !important; transition-duration:.01ms !important}
  .rv,.anim{opacity:1; transform:none}
  .sticky{transform:none !important}
}

/* ── Form-first pages ─────────────────────────────────────────────
   apply.html opens on .apply instead of .hero. A top *margin* there
   collapses straight through <main> and the h1 ends up tucked under
   the fixed header, so pad the section instead. Last in the file so
   it beats .apply's own padding shorthand at every breakpoint. */
main > section:first-child:not(.hero){padding-top:calc(44px + var(--hdr))}
@media (min-width:1024px){
  main > section:first-child:not(.hero){padding-top:calc(76px + var(--hdr))}
}

/* ── Wide desktop ─────────────────────────────────────────────────
   1240–1320px of content stranded in the middle of a 1900px monitor
   reads as a tablet layout with two dead margins. Widen the column
   and scale the hero with it so the headline isn't lost in a 660px
   box on a screen nearly three times that wide. */
@media (min-width:1600px){
  :root{--wrap:1480px; --pad:48px}
  .hero__h1{font-size:72px}
  .hero__inner{max-width:780px}
  .hero__note{max-width:640px}
  .hero{min-height:700px}
}
@media (min-width:1800px){
  :root{--wrap:1580px}
  .hero__inner{max-width:840px}
}

/* Optional visit date + time. Stacked on phones — a native date picker in a
   ~165px column is cramped on a 390px handset — and two-up only once there
   is real room for it. */
.field--split{display:grid; grid-template-columns:1fr; gap:12px}
.field--split > div{min-width:0}
.field--split label{display:block}
@media (min-width:480px){ .field--split{grid-template-columns:1fr 1fr} }

/* ── Submit button: specular sweep ────────────────────────────────
   A highlight that travels across the face of the button, not a glow —
   the button keeps its solid navy and only the light moves. The sweep
   sits on ::after at z-index -1 under the label, so the text never
   dims as it passes. Ported from the 헤리움 build at the same 2.4s. */
.apply .btn--submit{
  position:relative; overflow:hidden; isolation:isolate;
  background:linear-gradient(180deg,#1E5B8F 0%,var(--navy) 55%,#0A2740 100%);
  box-shadow:0 10px 26px rgba(18,60,99,.34), inset 0 1px 0 rgba(255,255,255,.18);
}
.apply .btn--submit::after{
  content:''; position:absolute; inset:-2px; pointer-events:none; z-index:-1;
  background:linear-gradient(104deg,
    transparent 38%, rgba(255,255,255,.10) 46%,
    rgba(255,255,255,.52) 50%, rgba(255,255,255,.10) 54%, transparent 62%);
  transform:translateX(-130%);
  animation:sheen 2.4s cubic-bezier(.5,0,.2,1) infinite;
}
@keyframes sheen{
  0%   {transform:translateX(-130%)}
  75%  {transform:translateX(130%)}
  100% {transform:translateX(130%)}
}
@media (hover:hover){
  .apply .btn--submit:hover{background:linear-gradient(180deg,#2A6FA8 0%,#15476F 55%,#0D3152 100%)}
}
@media (prefers-reduced-motion:reduce){
  .apply .btn--submit::after{animation:none; opacity:0}
}

/* ── Launch popup ─────────────────────────────────────────────────
   The 분양 convention: the key visual greets you, and "오늘 하루 보지
   않기" suppresses it for the rest of the day. Kept out of the page
   flow entirely so the hero underneath is untouched. */
.pop{
  position:fixed; inset:0; z-index:120; display:grid;
  /* Top-aligned, not centred: the client wants the eye to land on the
     model's face first, so the artwork sits just under the header
     instead of floating in the middle of the viewport. */
  place-items:start center;
  padding:calc(var(--hdr) + 12px) 16px 16px;
  background:rgba(6,24,42,.72); backdrop-filter:blur(2px);
  animation:popIn .22s var(--ease) both;
}
.pop[hidden]{display:none}
@keyframes popIn{from{opacity:0} to{opacity:1}}
.pop__box{
  width:min(560px,92vw); border-radius:var(--r); overflow:hidden;
  background:var(--navy-d); box-shadow:0 24px 60px rgba(0,0,0,.45);
  animation:popRise .26s var(--ease) both;
}
@keyframes popRise{from{transform:translateY(12px) scale(.985)} to{transform:none}}
.pop__art{display:block; line-height:0}
.pop__art img{width:100%; height:auto; display:block}
.pop__bar{
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:10px 14px; background:var(--navy-d);
  border-top:1px solid rgba(255,255,255,.12);
}
.pop__hide{
  display:flex; align-items:center; gap:7px; cursor:pointer;
  font-size:12.5px; color:rgba(255,255,255,.72);
}
.pop__hide input{width:15px; height:15px; accent-color:var(--gold); cursor:pointer}
.pop__close{
  border:0; background:transparent; cursor:pointer; padding:6px 4px;
  font:inherit; font-size:13px; font-weight:700; color:var(--gold-l);
}
/* The image is tall; on short screens let the box scroll rather than
   pushing 닫기 off the bottom where it can't be reached. */
@media (max-height:700px){
  /* Top-aligned means the offset eats into the room the box has, so cap
     against the remaining height rather than the whole viewport. */
  .pop__box{max-height:calc(100svh - var(--hdr) - 28px); overflow:auto}
}
@media (prefers-reduced-motion:reduce){
  .pop,.pop__box{animation:none}
}
