/*
Theme Name: Gownopia — The Universe of Wedding Dresses
Theme URI: https://gownopia.com
Author: Gownopia Studio
Description: An ultra-light, editorial bridal magazine theme. Full-screen portrait imagery, huge serif type, hand-rolled vanilla interactions (lookbook index, dress detail zoom, Dress Duel voting, style quiz, Vision Board). No frameworks, no jQuery.
Version: 1.8.13
Requires at least: 6.0
Tested up to: 6.7
Requires PHP: 7.4
License: Proprietary — Gownopia Studio
Text Domain: gownopia
*/

@font-face{font-family:'Playfair Display';src:url('assets/fonts/playfair-500.woff2') format('woff2');font-weight:400 700;font-style:normal;font-display:swap}
@font-face{font-family:'Playfair Display';src:url('assets/fonts/playfair-500i.woff2') format('woff2');font-weight:400 700;font-style:italic;font-display:swap}

:root{
  --paper:#FAF6EF; --cream:#FFFDF8; --ink:#211812; --ink-soft:#5A4C3E;
  --gold:#A98536; --gold-dk:#86671F; --line:#E4D9C4; --dark:#1C130C;
  --serif:'Playfair Display',Georgia,'Times New Roman',serif;
  --body:Georgia,'Times New Roman',serif;
  --sans:-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{background:var(--paper);color:var(--ink);font-family:var(--body);font-size:17px;line-height:1.65;-webkit-font-smoothing:antialiased;overflow-x:clip}
img{max-width:100%;display:block}
a{color:var(--gold-dk);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:1180px;margin:0 auto;padding:0 20px}
.kicker{font-family:var(--sans);font-size:.72rem;font-weight:700;letter-spacing:.34em;text-transform:uppercase;color:var(--gold-dk)}
.rv{opacity:0;transform:translateY(18px);transition:opacity .7s ease,transform .7s ease}
.rv.on{opacity:1;transform:none}

/* Header */
.site-header{position:absolute;top:0;left:0;right:0;z-index:40;color:#FFF7E8}
.site-header .bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 22px;max-width:1280px;margin:0 auto}
.logo{line-height:1;color:#FFF7E8}
.logo:hover{text-decoration:none}
.logo .name{font-family:var(--serif);font-weight:700;font-size:1.55rem;letter-spacing:.14em}
.logo .tag{display:block;font-family:var(--sans);font-size:.56rem;font-weight:600;letter-spacing:.3em;text-transform:uppercase;opacity:.85;margin-top:4px}
.site-header nav ul{display:flex;gap:26px;list-style:none}
.site-header nav a{color:#FFF7E8;font-family:var(--sans);font-size:.8rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase}
.board-pill{font-family:var(--sans);font-size:.78rem;font-weight:700;letter-spacing:.08em;border:1px solid rgba(255,247,232,.65);border-radius:999px;padding:7px 14px;color:#FFF7E8;white-space:nowrap}
.board-pill b{color:#F3C969}
body:not(.home) .site-header{position:sticky;top:0;z-index:60;background:var(--dark);box-shadow:0 6px 24px rgba(20,12,6,.18)}
/* Wayfinding — a plain-words breadcrumb at the top of inner pages and
   big return buttons at the end, so no reader is ever stranded. */
.crumbs{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-family:var(--sans);font-size:.86rem;margin:0 auto 20px;max-width:780px}
.crumbs a{font-weight:700;color:var(--gold-dk);padding:6px 2px}
.crumbs .sep{color:var(--ink-soft)}
.crumbs .cur{color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46vw}
.dress-main .crumbs{max-width:1180px;padding:0 20px}
.end-nav{display:flex;gap:12px;flex-wrap:wrap;margin:38px auto 4px;max-width:44rem}
.dress-main .end-nav{max-width:1180px;padding:0 20px}
/* Full-frame people photos — model shots are taller than the old 4:5
   card frame, and cover-cropping was cutting heads off (Sirena lost her
   whole head). Lookbook cards, dress heroes and the duel now show the
   complete photo at its natural ratio; wide editorial frames keep
   their shape but anchor to the top so a head is never the crop. */
.dress-ph{aspect-ratio:auto}
.dress-ph>img{height:auto}
.article-hero img{object-position:top center}
.card .ph img{object-position:top center}
.more-card img{object-position:top center}
.board-item img{object-position:top center}
.duel .side .ph img{object-position:top center}
/* Mobile card rhythm — the desktop zigzag (even cards flipped) used to
   leak onto phones, so half the dresses showed their text block first
   and text blocks from two dresses stacked back-to-back. On phones
   every card now leads with its full photo, then the words, with
   proper breathing room between dresses. */
@media(max-width:820px){
  .card{padding:46px 0}
  .card .ph,.card:nth-child(even) .ph{order:-1}
  .card .ph img{height:auto;object-fit:initial}
  /* Reveal on phones: fade only, no slide — the slide made text look
     doubled/ghosted while fast-scrolling. */
  .rv{transform:none;transition:opacity .35s ease}
}
@media(prefers-reduced-motion:reduce){
  .rv{opacity:1;transform:none;transition:none}
}
/* Header nav: keep every label on one line (Dress Duel was wrapping). */
.site-header nav a{white-space:nowrap}
@media(max-width:1180px){
  .site-header nav ul{gap:15px}
  .site-header nav a{letter-spacing:.11em}
}
@media(max-width:760px){.site-header nav{display:none}.logo .name{font-size:1.25rem}}

/* Hero */
.hero{position:relative;min-height:100svh;display:flex;align-items:flex-end;color:#FFF7E8;background:var(--dark)}
.hero picture.bgwrap{position:absolute;inset:0}
.hero img.bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 22%}
html.lenis{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
.hero .shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,12,6,.42) 0%,rgba(20,12,6,.05) 34%,rgba(20,12,6,.28) 62%,rgba(20,12,6,.78) 100%)}
.hero .inner{position:relative;z-index:2;width:100%;max-width:1180px;margin:0 auto;padding:0 20px 9vh}
.hero .kicker{color:#F3C969}
.hero h1{font-family:var(--serif);font-weight:700;font-size:clamp(3rem,10.5vw,7.2rem);line-height:.98;margin:.18em 0 .22em;max-width:10ch}
.hero h1 em{font-style:italic;font-weight:500}
.hero p.lede{font-size:clamp(1.02rem,2.4vw,1.3rem);max-width:34rem;color:#F7EDD8}
.hero .cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px}
.btn{display:inline-block;font-family:var(--sans);font-weight:700;font-size:.82rem;letter-spacing:.16em;text-transform:uppercase;padding:14px 24px;border-radius:999px;border:1px solid #FFF7E8;color:#FFF7E8}
.btn:hover{text-decoration:none;background:rgba(255,247,232,.14)}
.btn.solid{background:var(--gold);border-color:var(--gold);color:#FFFDF6}
.btn.solid:hover{background:var(--gold-dk)}
.btn.dark{border-color:var(--ink);color:var(--ink)}
.btn.dark:hover{background:rgba(33,24,18,.06)}
.hero .note{margin-top:20px;font-family:var(--sans);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;opacity:.75}

/* Sections */
section.block{padding:84px 0}
section.block .head{max-width:46rem;margin-bottom:34px}
section.block h2{font-family:var(--serif);font-weight:700;font-size:clamp(2rem,5.4vw,3.4rem);line-height:1.05;margin:.16em 0 .3em}
section.block .sub{color:var(--ink-soft);font-size:1.05rem}

/* Buttons (cards & quiz actions) */
.mini{font-family:var(--sans);font-size:.76rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;padding:12px 20px;border-radius:999px;border:1px solid var(--ink);background:transparent;color:var(--ink);cursor:pointer;text-align:center}
.mini:hover{background:rgba(33,24,18,.06)}
.mini.saved{background:var(--gold);border-color:var(--gold);color:#FFFDF6}

/* Lookbook — editorial spreads (v1.1): one dress per full spread,
   alternating sides, no card boxes, oversize names. */
.chips{display:flex;flex-wrap:wrap;gap:8px 28px;margin-bottom:6px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0}
.chip{font-family:var(--serif);font-style:italic;font-size:1.12rem;background:none;border:none;color:var(--ink-soft);cursor:pointer;padding:2px 0}
.chip[aria-pressed="true"]{color:var(--ink);text-decoration:underline;text-underline-offset:5px;text-decoration-color:var(--gold)}
.grid{display:grid;grid-template-columns:1fr;gap:0}
.card{display:grid;grid-template-columns:1.05fr 1fr;gap:44px;align-items:center;padding:52px 0;border-bottom:1px solid var(--line)}
.card:last-child{border-bottom:none}
.card .ph{overflow:hidden;border-radius:6px}
.card .ph img{width:100%;height:min(74vh,860px);object-fit:cover;object-position:center 18%}
.card:nth-child(even) .ph{order:2}
.card .bd .sil{font-family:var(--sans);font-size:.7rem;font-weight:700;letter-spacing:.3em;text-transform:uppercase;color:var(--gold-dk)}
.card .bd h3{font-family:var(--serif);font-weight:700;font-size:clamp(3rem,7.5vw,5.2rem);line-height:.95;margin:.1em 0 .18em}
.card .bd .nt{font-size:1.12rem;color:var(--ink-soft);max-width:26rem}
.card .inset{margin-top:22px;display:flex;gap:14px;align-items:center}
.card .inset .inset-ph{position:relative;flex:0 0 auto;display:block}
.card .inset .inset-ph::after{content:'⤢';position:absolute;right:5px;bottom:5px;width:24px;height:24px;border-radius:50%;background:rgba(28,19,12,.78);color:#FFF7E8;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-family:var(--sans)}
.card .inset img{width:86px;height:128px;object-fit:cover;border-radius:4px;cursor:zoom-in}
.card .inset .dcap{font-family:var(--serif);font-style:italic;color:var(--ink-soft);font-size:.98rem;max-width:15rem}
.card .row{display:flex;gap:10px;margin-top:24px;flex-wrap:wrap}
.card.hide{display:none}
@media(max-width:820px){
  .card{grid-template-columns:1fr;gap:20px;padding:38px 0}
  .card .ph{order:-1}
  .card .ph img{height:62vh}
}

/* Anatomy */
.anatomy{background:var(--dark);color:#F3EAD9}
.anatomy h2{color:#FFF7E8}
.anatomy .cols{display:grid;grid-template-columns:1fr 1.15fr;gap:38px;align-items:center}
@media(max-width:820px){.anatomy .cols{grid-template-columns:1fr}}
.anatomy .ph{border-radius:6px;overflow:hidden}
.anatomy .ph img{width:100%;height:min(72vh,820px);object-fit:cover;object-position:center 20%}
.points{list-style:none;counter-reset:pt}
.points li{padding:18px 0;border-bottom:1px solid rgba(243,234,217,.18);display:grid;grid-template-columns:52px 1fr;gap:14px}
.points li::before{counter-increment:pt;content:counter(pt,decimal-leading-zero);font-family:var(--serif);font-style:italic;font-size:1.3rem;color:#F3C969}
.points h3{font-family:var(--serif);font-size:1.3rem;color:#FFF7E8;margin-bottom:4px}
.points p{color:#D9CBB2;font-size:.97rem}

/* Duel — dark chapter (v1.1) */
.duel{background:var(--dark);color:#F3EAD9}
.duel h2{color:#FFF7E8}
.duel .sub{color:#D9CBB2}
.duel .arena{display:grid;grid-template-columns:1fr auto 1fr;gap:16px;align-items:stretch;position:relative}
@media(max-width:900px){
  .duel .arena{grid-template-columns:1fr 1fr;gap:10px}
  .duel .vs{position:absolute;left:50%;top:32%;transform:translate(-50%,-50%);z-index:3;background:var(--dark);width:52px;height:52px;font-size:1.35rem}
  .duel .side .ph img{height:min(52vh,520px)}
  .duel .side h3{font-size:1.35rem}
  .duel .vote{font-size:.72rem;padding:12px 8px}
}
.duel .side{display:flex;flex-direction:column;min-width:0}
.duel .side .ph{overflow:hidden;border-radius:6px}
.duel .side .ph img{width:100%;height:min(58vh,640px);object-fit:cover;object-position:center 15%}
.duel .side .bd{padding:16px 4px 0;text-align:center}
.duel .side h3{font-family:var(--serif);font-size:1.7rem;color:#FFF7E8}
.duel .side .meta{color:#B9A888}
.duel .vs{align-self:center;font-family:var(--serif);font-style:italic;font-size:1.6rem;color:#F3C969;border:1px solid var(--gold);border-radius:50%;width:58px;height:58px;display:flex;align-items:center;justify-content:center}
.vote{margin-top:12px;width:100%;font-family:var(--sans);font-weight:700;font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;padding:13px;border-radius:999px;border:1px solid #F3EAD9;background:transparent;cursor:pointer;color:#FFF7E8}
.vote:hover{background:rgba(255,247,232,.12)}
.vote.mine{background:var(--gold);border-color:var(--gold);color:#FFFDF6}
.bars{margin-top:34px;display:grid;gap:12px}
.bar{display:grid;grid-template-columns:110px 1fr 52px;gap:12px;align-items:center;font-family:var(--sans);font-size:.85rem}
.bar .nm{font-weight:700;color:#FFF7E8}
.bar .tr{height:10px;background:rgba(243,234,217,.16);border-radius:99px;overflow:hidden}
.bar .fl{display:block;height:100%;background:linear-gradient(90deg,var(--gold),#C9A24A);border-radius:99px;width:0;transition:width 1s ease}
.bar .pc{font-weight:700;text-align:right;color:#F3C969}
.duel .fine{margin-top:14px;font-family:var(--sans);font-size:.76rem;color:#B9A888;letter-spacing:.04em}

/* Quiz */
.quiz .q{margin-bottom:26px}
.quiz .q p{font-family:var(--serif);font-size:1.35rem;margin-bottom:12px}
.opts{display:flex;flex-wrap:wrap;gap:10px}
.opt{font-family:var(--sans);font-size:.88rem;font-weight:600;padding:11px 18px;border-radius:999px;border:1px solid var(--ink);background:transparent;cursor:pointer;color:var(--ink)}
.opt[aria-pressed="true"]{background:var(--ink);color:var(--cream)}
.quiz .result{display:none;margin-top:8px;border-top:2px solid var(--gold);padding:24px 0 4px;gap:22px;grid-template-columns:150px 1fr}
.quiz .result.show{display:grid}
@media(max-width:560px){.quiz .result{grid-template-columns:1fr}}
.quiz .result img{border-radius:6px;width:100%;height:300px;object-fit:cover;object-position:center 15%}
.quiz .result h3{font-family:var(--serif);font-size:1.9rem;margin-bottom:4px}
.hint{font-family:var(--sans);font-size:.8rem;color:var(--ink-soft)}

/* Stories — flat editorial columns (v1.1), no boxes */
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:36px}
@media(max-width:820px){.grid3{grid-template-columns:1fr}}
.story{border-top:2px solid var(--gold);padding-top:18px}
.story h3{font-family:var(--serif);font-size:1.45rem;line-height:1.2;margin:10px 0 8px}
.story p{color:var(--ink-soft);font-size:.97rem}

/* Journal — article discovery from the homepage and /journal/ */
.journal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:38px 30px}
.journal-card{border-top:2px solid var(--gold);padding-top:16px;min-width:0}
.journal-media{display:block;overflow:hidden;border-radius:6px;margin-bottom:16px;background:#EFE7D8}
.journal-media img{width:100%;aspect-ratio:3/4;max-height:560px;object-fit:cover;object-position:center 18%;transition:transform .5s ease}
.journal-card:hover .journal-media img{transform:scale(1.025)}
.journal-card h3,.journal-card h2{font-family:var(--serif);font-size:1.55rem;line-height:1.16;margin:8px 0 9px}
.journal-card h3 a,.journal-card h2 a{color:var(--ink)}
.journal-card p{color:var(--ink-soft);font-size:.97rem}
.journal-card .read-link{display:inline-block;margin-top:12px;font-family:var(--sans);font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.journal-all{margin-top:38px}
.journal-intro{font-size:1.08rem;color:var(--ink-soft)}
.journal-archive-grid{margin-top:38px}
.journal-pagination{margin-top:42px;display:flex;gap:10px;flex-wrap:wrap;font-family:var(--sans);font-size:.88rem}
.journal-pagination .page-numbers{border:1px solid var(--line);border-radius:999px;padding:9px 15px;color:var(--ink)}
.journal-pagination .page-numbers.current{background:var(--ink);color:var(--cream)}
@media(max-width:900px){.journal-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.journal-grid{grid-template-columns:1fr}.journal-media img{max-height:62vh}}

/* Join */
.join{background:var(--dark);color:#F3EAD9;text-align:center}
.join h2{color:#FFF7E8}
.join p{color:#D9CBB2;max-width:32rem;margin:0 auto 22px}
.join form{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.join input{font-family:var(--sans);font-size:.95rem;padding:14px 18px;border-radius:999px;border:1px solid rgba(255,247,232,.4);background:transparent;color:#FFF7E8;min-width:280px}
.join input::placeholder{color:rgba(255,247,232,.55)}
.join .ok{display:none;font-family:var(--sans);color:#F3C969;font-weight:700;margin-top:14px}

/* Article extras — Pinterest save + tap-to-zoom lightbox (v1.3) */
.pin-row{margin-top:30px}
.pin-save{display:inline-block;font-family:var(--sans);font-weight:700;font-size:.85rem;letter-spacing:.04em;padding:12px 22px;border-radius:999px;border:1px solid var(--gold);color:var(--gold-dk)}
.pin-save:hover{background:var(--gold);color:#FFFDF6;text-decoration:none}
.gw-lb{position:fixed;inset:0;z-index:200;background:rgba(20,13,8,.94);display:none;align-items:center;justify-content:center;padding:18px;cursor:zoom-out}
.gw-lb.open{display:flex}
.gw-lb img{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px}

/* Footer */
.site-footer{background:var(--dark);color:#B9A888;border-top:1px solid rgba(243,234,217,.14);padding:44px 0 54px;font-size:.92rem}
.site-footer .name{font-family:var(--serif);font-size:1.3rem;letter-spacing:.14em;color:#FFF7E8}
.site-footer .tag{font-family:var(--sans);font-size:.6rem;letter-spacing:.3em;text-transform:uppercase;margin:4px 0 14px}
.site-footer a{color:#D9CBB2}

/* Modal */
.modal{position:fixed;inset:0;z-index:80;display:none;align-items:center;justify-content:center;background:rgba(18,10,5,.85);padding:18px}
.modal.open{display:flex}
.modal .box{background:var(--cream);border-radius:10px;max-width:880px;width:100%;max-height:92svh;overflow:auto;display:grid;grid-template-columns:1fr 1fr;position:relative}
@media(max-width:700px){.modal .box{grid-template-columns:1fr}}
.modal .view{overflow:hidden;background:#EFE7D8}
.modal .view img{width:100%;height:100%;object-fit:cover;object-position:center 15%;transition:transform .5s ease;cursor:zoom-in}
.modal .view.zoom img{transform:scale(1.9);cursor:zoom-out}
.modal .info{padding:26px}
.modal .info h3{font-family:var(--serif);font-size:2.1rem;line-height:1.05;margin:6px 0 10px}
.modal .info p{color:var(--ink-soft);margin-bottom:12px}
.modal .x{position:fixed;top:14px;right:18px;background:var(--cream);border:1px solid var(--line);border-radius:50%;width:40px;height:40px;font-size:1.1rem;cursor:pointer;z-index:90}
.spec{list-style:none;margin:14px 0;font-family:var(--sans);font-size:.86rem}
.spec li{display:flex;justify-content:space-between;gap:14px;padding:8px 0;border-bottom:1px dashed var(--line)}
.spec li b{color:var(--ink)}

/* Generic pages */
.page-main{padding:56px 0 84px}
.page-main h1,.page-main h2{font-family:var(--serif);line-height:1.1;margin:.4em 0 .5em}
.page-main h1{font-size:clamp(2.1rem,6vw,3.6rem)}
.page-main p{margin-bottom:1em;max-width:44rem}
.post-card{padding:22px 0;border-bottom:1px solid var(--line)}
.post-card h2{font-size:1.8rem}
.post-card-media{display:block;overflow:hidden;border-radius:8px;margin-bottom:18px;background:#EFE7D8}
.post-card-media img{width:100%;aspect-ratio:16/10;object-fit:cover;object-position:center 18%}
.meta{font-family:var(--sans);font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft)}
/* Articles — the lead photograph gets a controlled editorial frame;
   the complete portrait remains one tap away in the lightbox. */
.article-main .wrap{max-width:940px}
.article-header{max-width:780px;margin:0 auto}
.article-hero{max-width:900px;margin:24px auto 34px}
.article-hero img{width:100%;aspect-ratio:16/10;max-height:72vh;object-fit:cover;object-position:center 18%;border-radius:16px;cursor:zoom-in}
.article-hero figcaption{font-family:var(--sans);font-size:.78rem;color:var(--ink-soft);margin-top:9px;text-align:center}
.article-body h2,.article-body p{max-width:44rem;margin-left:auto;margin-right:auto}
.article-body figure{margin:30px auto;max-width:820px;text-align:center}
.article-body figure img{width:auto;max-width:100%;height:auto;max-height:78vh;object-fit:contain;margin:0 auto;border-radius:14px}
.article-body figcaption{font-family:var(--sans);font-size:.84rem;color:var(--ink-soft);margin-top:9px;text-align:center}
.article-main .pin-row{max-width:44rem;margin-left:auto;margin-right:auto}
@media(max-width:700px){
  .article-hero{margin-top:18px}
  .article-hero img{aspect-ratio:4/3;max-height:62vh;object-position:center 16%}
  .article-body figure{margin:24px auto}
  .article-body figure img{max-height:74vh}
}
/* Vision Board */
.board-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:18px}
.b-item{background:#FFFDF8;border:1px solid #EFE7D6;border-radius:16px;overflow:hidden}
.b-item figure{margin:0;aspect-ratio:3/4;overflow:hidden}
.b-item img{width:100%;height:100%;object-fit:cover;display:block}
.b-meta{padding:12px 14px 4px}
.b-meta b{font-family:var(--serif);font-size:1.15rem;font-weight:600;display:block}
.b-meta span{font-family:var(--sans);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:#8A7B5C}
.b-actions{display:flex;gap:8px;padding:10px 14px 14px}
.b-btn{font-family:var(--sans);font-size:.8rem;font-weight:700;border-radius:99px;padding:8px 14px;cursor:pointer;border:1px solid #D8C9A3;background:#FFF;color:#4A3F28}
.b-btn:hover{border-color:var(--gold)}
.b-btn.solid{background:var(--ink);color:#FFF7E8;border-color:var(--ink)}
#boardEmpty a{color:#8A6D2F;font-weight:700}
/* Footer page links */
.foot-links{margin-top:20px;font-family:var(--sans);font-size:.86rem}
.foot-links a{color:#E9DCC0;margin-right:18px;text-decoration:none}
.foot-links a:hover{color:var(--gold);text-decoration:underline}
/* Dress pages */
.mpage{display:inline-block;margin-top:14px;font-family:var(--sans);font-weight:700;font-size:.88rem;color:var(--gold-dk)}
.dress-main{padding:56px 0 30px}
.dress-hero h1{font-size:clamp(2.8rem,8vw,5.2rem)}
.dress-note{font-size:clamp(1.05rem,2.4vw,1.35rem);color:#5C4C33;max-width:46rem;margin-top:10px}
.dress-ph{margin:30px 0 8px;border-radius:18px;overflow:hidden}
.dress-ph img{width:100%;aspect-ratio:4/5;max-height:82vh;object-fit:cover;object-position:center 18%;display:block}
.dress-cols{display:grid;grid-template-columns:1.6fr 1fr;gap:44px;margin-top:36px;align-items:start}
@media(max-width:820px){.dress-cols{grid-template-columns:1fr}}
.dress-story h2,.dress-facts h2,.dress-more h2{font-size:1.7rem;margin-bottom:14px}
.dress-story p{margin-bottom:1.05em;max-width:44rem}
.dress-detail{margin:22px 0}
.dress-detail img{width:100%;border-radius:14px;display:block;cursor:zoom-in}
.dress-detail figcaption{font-family:var(--sans);font-size:.85rem;color:#8A7B5C;margin-top:8px}
.dress-facts{background:#FFFDF8;border:1px solid #EFE7D6;border-radius:16px;padding:22px}
.dress-facts .spec{list-style:none;margin:0 0 16px;padding:0}
.dress-facts .pin-row{margin:16px 0 6px}
.dress-back{font-family:var(--sans);font-weight:700;font-size:.88rem;color:#8A6D2F}
.dress-more{margin-top:54px}
.more-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:16px}
@media(max-width:820px){.more-grid{grid-template-columns:1fr}}
.more-card{display:block;background:#FFFDF8;border:1px solid #EFE7D6;border-radius:16px;overflow:hidden;text-decoration:none;color:var(--ink)}
.more-card img{width:100%;aspect-ratio:3/4;object-fit:cover;display:block}
.more-card b{font-family:var(--serif);font-size:1.25rem;display:block;padding:12px 16px 0}
.more-card span{font-family:var(--sans);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:#8A7B5C;display:block;padding:2px 16px 16px}
/* Card links to dress pages */
.card h3 a{color:inherit;text-decoration:none}
.card h3 a:hover{color:var(--gold-dk);text-decoration:underline}
.card .ph a{display:block;height:100%}

/* ===== FINAL OVERRIDES — must stay at the very end of this file =====
   The same rules exist earlier in the file but lose the cascade to the
   base card rules below them; repeated here at the end, they win.
   Mobile: every card leads with its complete photo (never cropped,
   never text-first), then its words, with breathing room between. */
.card .ph img{object-position:top center}
@media(max-width:820px){
  .card{padding:46px 0}
  .card .ph,.card:nth-child(even) .ph{order:-1}
  .card .ph img{height:auto;object-fit:initial}
  .rv{transform:none;transition:opacity .35s ease}
}
/* Framed thumbnails must anchor to the TOP so heads are never cropped:
   related-dress cards, journal thumbs and Vision Board tiles use fixed
   frames whose default centre crop beheads tall (1:2) portraits. The
   dress-page hero shows the full frame, like the lookbook cards. */
.more-card img{object-position:top center}
.journal-media img{object-position:top center}
.b-item img{object-position:top center}
.dress-ph img{aspect-ratio:auto;height:auto;max-height:none}

/* Responsive embeds (1.5.11, FINAL OVERRIDE): embedded players in article
   bodies arrive with a fixed 560px width attribute and overflowed phone
   screens to the right (reader report 09/11/2026, recap article video).
   Force every article iframe to fit the column at a 16:9 ratio. */
.article-body iframe{max-width:100%;width:100%;height:auto;aspect-ratio:16/9;border:0}

/* Every Angle gallery (1.5.12): each dress page shows its extra studio
   views — back, three-quarter, detail and movement — in one grid under
   the story, so readers can study the dress from every side. Gallery
   figures reuse the .dress-detail hook so the existing lightbox opens
   them full-screen; the rules below only lay out the grid. */
.dress-angles{margin-top:44px}
.dress-angles h2{font-family:var(--serif);font-size:1.7rem;margin-bottom:8px}
.angles-sub{font-family:var(--sans);font-size:.95rem;color:#5C4C33;max-width:44rem}
.angles-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:18px}
.angles-grid .dress-detail{margin:0}
.angles-grid .dress-detail img{aspect-ratio:3/4;object-fit:cover;object-position:top center}
@media(max-width:820px){.angles-grid{grid-template-columns:repeat(2,1fr);gap:10px}}

/* ===== FINAL OVERRIDES, continued (1.7.0 smart refresh) — these rules
   belong to the FINAL OVERRIDES block and must stay at the very end of
   this file: badges on lookbook cards, the "already seen" divider in
   the rail, the Collection of the Week band, the Most Loved strip and
   the compact lookbook link list on dress pages. Presentation only —
   no dress design, photo or copy changes. ===== */
.card .ph{position:relative}
.badge{position:absolute;top:12px;left:12px;z-index:3;font-family:var(--sans);font-size:.68rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:7px 12px;border-radius:999px}
.badge-dotd{background:var(--gold);color:#FFFDF6;box-shadow:0 4px 14px rgba(20,12,6,.28)}
.badge-new{background:var(--dark);color:#F3C969}
.badge[hidden]{display:none}
.card.dotd .ph{outline:2px solid var(--gold);outline-offset:3px}
.seen-divider{display:flex;align-items:center;gap:16px;padding:30px 0 4px;font-family:var(--sans);font-size:.78rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-dk)}
.seen-divider::before,.seen-divider::after{content:'';flex:1;border-top:1px solid var(--line)}
.cotw{display:grid;grid-template-columns:1fr 1.25fr;gap:28px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:22px 24px;margin:4px 0 26px;background:var(--cream)}
.cotw h3{font-family:var(--serif);font-size:1.55rem;line-height:1.18;margin:.25em 0 .3em}
.cotw p{color:var(--ink-soft);font-size:.97rem}
.cotw-thumbs{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.cotw-th{display:block;text-decoration:none;color:var(--ink);min-width:0}
.cotw-th img{width:100%;aspect-ratio:3/4;object-fit:cover;object-position:top center;border-radius:6px}
.cotw-th span{display:block;font-family:var(--sans);font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;margin-top:6px;text-align:center}
@media(max-width:820px){.cotw{grid-template-columns:1fr;gap:16px;padding:18px}}
.loved{margin-top:48px}
.loved h3{font-family:var(--serif);font-weight:700;font-size:1.9rem;line-height:1.1;margin:.15em 0 .25em}
.loved-note{color:var(--ink-soft);font-size:.95rem;max-width:34rem}
.loved-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:18px}
.loved-card{position:relative;display:block;background:var(--cream);border:1px solid var(--line);border-radius:10px;overflow:hidden;text-decoration:none;color:var(--ink)}
.loved-card img{width:100%;aspect-ratio:3/4;object-fit:cover;object-position:top center;display:block}
.loved-card b{font-family:var(--serif);font-size:1.15rem;display:block;padding:10px 14px 0}
.loved-card .loved-meta{font-family:var(--sans);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);display:block;padding:2px 14px 12px}
.loved-card .loved-rank{position:absolute;top:10px;left:10px;z-index:2;background:var(--gold);color:#FFFDF6;font-family:var(--sans);font-weight:700;font-size:.78rem;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center}
@media(max-width:820px){.loved-grid{grid-template-columns:repeat(2,1fr)}}
.more-links{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:6px 26px;margin-top:14px}
.more-links li{display:flex;justify-content:space-between;align-items:baseline;gap:10px;border-bottom:1px dashed var(--line);padding:8px 0}
.more-links a{font-family:var(--serif);font-size:1.05rem;font-weight:700;color:var(--ink)}
.more-links span{font-family:var(--sans);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:#8A7B5C;white-space:nowrap}
.more-compact{margin-top:42px}
@media(max-width:820px){.more-links{grid-template-columns:1fr}}
/* Bare in-body article photos (1.7.0, FINAL OVERRIDE): the height cap
   below used to reach only images inside <figure>, so a photo dropped
   straight into the article body — or wrapped in a plain <p> — rendered
   at its full 1:2 ratio, about two phone screens tall (reader report
   09/11/2026, "Dress Duel No. 2"). Cap EVERY body image, whatever wraps
   it, mirroring the figure rule (78vh, 74vh on phones). Width and the
   figure behaviour are untouched, and the tap-to-zoom lightbox still
   opens the full-size original. */
.article-body img{max-height:78vh;object-fit:contain}
@media(max-width:700px){.article-body img{max-height:74vh}}

/* Living dress hero (1.7.6, FINAL OVERRIDES): the dress-page main visual is a
   seamless post-production loop (fabric sway + depth parallax) rendered from
   the same studio still — it must frame exactly like the still it replaces. */
.dress-ph video{width:100%;height:auto;max-height:none;object-fit:cover;object-position:center 18%;display:block}

/* Quick navigation bar (1.7.7, FINAL OVERRIDES): a slim sticky bar so the
   long homepage feed stays fun to scroll while every section — Lookbook,
   Duel, Quiz, Journal, Vision Board — is one tap away from anywhere. */
.quicknav{position:fixed;left:0;right:0;bottom:0;z-index:900;display:flex;justify-content:space-around;align-items:stretch;background:rgba(28,19,12,.94);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid rgba(169,133,54,.45);padding-bottom:env(safe-area-inset-bottom)}
.quicknav a{flex:1;text-align:center;padding:13px 2px 11px;color:#E9DFC9;font-family:var(--font-d,inherit);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;text-decoration:none}
.quicknav a:active,.quicknav a:hover{color:var(--gold)}
body{padding-bottom:52px}
section.block{scroll-margin-top:14px}
@media (min-width:900px){
  .quicknav{left:50%;right:auto;transform:translateX(-50%);bottom:18px;width:600px;max-width:92vw;border:1px solid rgba(169,133,54,.5);border-radius:999px;box-shadow:0 14px 40px rgba(20,12,6,.35)}
  .quicknav a{padding:13px 2px}
  body{padding-bottom:84px}
}
@media print{.quicknav{display:none}body{padding-bottom:0}}

/* Try-On Studio band (1.8.0, FINAL OVERRIDES) */
.tryon{margin-top:44px;background:#FBF6EA;border:1px solid var(--line);border-radius:20px;padding:30px 26px}
.tryon h2{margin-top:0}
.tryon-sub{max-width:56ch;color:#55462F}
.tryon-form{display:grid;gap:14px;max-width:520px;margin-top:16px}
.tf-field{display:grid;gap:6px;font-size:.86rem;letter-spacing:.04em;color:#55462F}
.tf-field input[type="email"]{padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#FFFDF8;font-size:1rem}
.tf-field input[type="file"]{font-size:.95rem}
.tf-consent{display:flex;gap:9px;align-items:flex-start;font-size:.9rem;color:#55462F}
.tf-consent input{margin-top:3px}
.tryon .ok{display:block;background:#EFF7EA;border:1px solid #B9D3A8;color:#33511F;border-radius:12px;padding:14px 16px}
.tryon-err{background:#FBEFEA;border:1px solid #E3B7A6;color:#7A2E18;border-radius:12px;padding:14px 16px}

/* Try-on entry on lookbook cards (1.8.1, FINAL OVERRIDES) */
.card .row .mini.try{background:var(--gold);border-color:var(--gold);color:#FFFDF6;text-decoration:none}
.card .row .mini.try:hover{background:var(--gold-dk)}

/* Try-On compact redesign (1.8.4, FINAL OVERRIDES): one slim band —
   custom photo picker instead of the raw file input, fields in a row,
   fine print cut to a single line. */
.tryon{margin-top:36px;padding:20px 20px 14px;border-radius:16px}
.tryon h2{font-size:1.45rem;margin:0 0 4px}
.tryon-sub{margin:0;font-size:.95rem;max-width:none}
.tryon-form{display:block;max-width:none;margin-top:14px}
.tf-row{display:flex;flex-wrap:wrap;gap:10px;align-items:stretch}
.tf-photo{display:flex;align-items:center;gap:10px;flex:1 1 220px;cursor:pointer;min-width:0}
.tf-photo input[type="file"]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
.tf-photo-btn{flex:none;background:var(--dark);color:#F3EAD9;font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding:12px 16px;border-radius:999px}
.tf-photo-name{font-size:.85rem;color:#7A6A4F;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tf-email{flex:1 1 200px;padding:12px 14px;border:1px solid var(--line);border-radius:999px;background:#FFFDF8;font-size:1rem;min-width:0}
.tryon-form .btn{flex:none;padding:12px 22px}
.tf-consent{margin-top:10px;font-size:.85rem}
.tryon .fine{margin-top:8px;font-size:.8rem}
@media (max-width:640px){
  .tryon-form .btn{flex:1 1 100%}
}

/* Try-On collapsible (1.8.5, FINAL OVERRIDES): the section rests as a
   slim invitation; the form unfolds only when the bride taps the button
   (or arrives from a Lookbook card's #tryon link — main.js opens it). */
.tryon-details{margin-top:14px}
.tryon-details summary.btn{display:inline-block;cursor:pointer;list-style:none}
.tryon-details summary.btn::-webkit-details-marker{display:none}
.tryon-details .tryon-form{margin-top:14px}
.tryon-details .fine{margin-top:8px}

/* Try-On full journey (1.8.6, FINAL OVERRIDES): sending state with a
   spinner, and a proper studio success panel — badge, what happens
   next in three steps, and a way back to the dresses. */
.tryon-form.is-sending{opacity:.72}
.tryon-form .btn[disabled]{cursor:wait}
.tf-spin{display:inline-block;width:14px;height:14px;margin-right:9px;vertical-align:-2px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#FFF;animation:tf-rot .7s linear infinite}
@keyframes tf-rot{to{transform:rotate(360deg)}}
.tryon-done{margin-top:16px;background:var(--cream);border:1px solid var(--line);border-radius:16px;padding:26px 22px 20px;text-align:center}
.td-badge{width:52px;height:52px;margin:0 auto 12px;border-radius:50%;background:var(--gold);color:#FFF;font-size:25px;line-height:52px;text-align:center}
.tryon-done h3{font-family:var(--serif);font-size:1.5rem;margin:0 0 6px;color:var(--ink)}
.tryon-done p{margin:0;color:var(--ink-soft)}
.td-steps{list-style:none;counter-reset:tds;margin:16px auto 0;padding:0;max-width:46ch;text-align:left}
.td-steps li{counter-increment:tds;position:relative;padding:5px 0 5px 36px;color:var(--ink-soft)}
.td-steps li::before{content:counter(tds);position:absolute;left:0;top:4px;width:24px;height:24px;border-radius:50%;border:1px solid var(--gold);color:var(--gold-dk);font-size:.8rem;font-weight:700;line-height:24px;text-align:center}
.td-more{margin-top:16px;font-size:.95rem}
.td-more a{color:var(--gold-dk);font-weight:700}

/* Self-audit fixes (1.8.7, FINAL OVERRIDES) — from the studio's own
   guest-journey review of 10/11/2026:
   1) Anchor jumps and the opened Try-On form must clear the sticky
      bottom navigation, so no field ever hides behind it.
   2) The dress modal's close button lives inside the card now,
      never clipped at the viewport edge.
   3) The Duel head-to-head strip and the quiz result actions. */
html{scroll-padding-bottom:132px}
.tryon{scroll-margin-bottom:132px}
.modal .x{position:absolute;top:10px;right:10px;z-index:6}
.pairbars{margin-top:30px;display:grid;gap:12px}
.pairbars .pair-h{font-family:var(--sans);font-size:.78rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#B9A888;margin:0}
.pairbars .bar{grid-template-columns:110px 1fr 64px 96px}
.pairbars .ct{color:#B9A888;font-size:.8rem;text-align:right}
.pairbars .fine{margin:2px 0 0}
@media(max-width:560px){.pairbars .bar{grid-template-columns:78px 1fr 56px 74px;gap:8px}}
#qrImgLink{display:block}
.qr-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:14px}
.qr-actions .mini{max-width:250px}
.qr-actions a.mini{display:inline-block;text-decoration:none}
.qr-actions a.mini.go{background:var(--gold);border-color:var(--gold);color:#FFFDF6}
.qr-actions a.mini.go:hover{background:var(--gold-dk)}

/* Try-On popup (1.8.8, FINAL OVERRIDES): the intake journey moves
   into a studio popup — a scanning portrait, live progress steps,
   a drawn gold check on success ("check your email"), and a soft
   error that hands her back to her untouched form. */
.tf-pop{position:fixed;inset:0;z-index:1200;display:none;align-items:center;justify-content:center;padding:18px;background:rgba(24,16,9,.55);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.tf-pop.open{display:flex}
.tf-card{position:relative;background:var(--cream);border:1px solid var(--line);border-radius:22px;max-width:430px;width:100%;max-height:92svh;overflow:auto;padding:30px 26px 26px;text-align:center;box-shadow:0 30px 80px rgba(20,12,6,.35);animation:tf-in .35s cubic-bezier(.2,.9,.3,1.15)}
@keyframes tf-in{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
.tf-x{position:absolute;top:10px;right:10px;width:38px;height:38px;border-radius:50%;border:1px solid var(--line);background:#FFFDF8;color:var(--ink);font-size:1rem;cursor:pointer;z-index:2}
.tf-card h3{font-family:var(--serif);font-size:1.55rem;margin:0 0 10px;color:var(--ink)}
.tf-card .kicker{margin:0 0 6px}
.tf-scan{position:relative;width:132px;height:132px;margin:16px auto 18px;border-radius:50%;overflow:hidden;border:2px solid var(--gold);background:#EFE7D8}
.tf-scan img{width:100%;height:100%;object-fit:cover;display:block}
.tf-scanline{position:absolute;left:0;right:0;height:38%;top:-45%;background:linear-gradient(180deg,transparent,rgba(169,133,54,.5),transparent);animation:tf-scanmove 1.6s ease-in-out infinite}
@keyframes tf-scanmove{0%{top:-45%}55%{top:100%}100%{top:100%}}
.tf-bar{height:8px;border-radius:99px;background:rgba(33,24,18,.1);overflow:hidden;margin:0 auto 18px;max-width:300px}
.tf-bar span{display:block;height:100%;width:0;border-radius:99px;background:linear-gradient(90deg,var(--gold),#C9A24A);transition:width .6s ease}
.tf-steps{list-style:none;margin:0 auto;padding:0;max-width:330px;text-align:left}
.tf-steps li{position:relative;padding:7px 0 7px 34px;color:#9A8B6F;font-size:.95rem;transition:color .3s}
.tf-steps li::before{content:"";position:absolute;left:0;top:7px;width:20px;height:20px;border-radius:50%;border:1.5px solid #D8C9A8}
.tf-steps li.active{color:var(--ink);font-weight:600}
.tf-steps li.active::before{border-color:var(--gold);animation:tf-pulse 1s ease-in-out infinite}
.tf-steps li.done{color:var(--ink-soft)}
.tf-steps li.done::before{content:"✓";border-color:var(--gold);background:var(--gold);color:#FFF;font-size:.72rem;font-weight:700;line-height:19px;text-align:center;animation:none}
@keyframes tf-pulse{0%,100%{box-shadow:0 0 0 0 rgba(169,133,54,.35)}50%{box-shadow:0 0 0 6px rgba(169,133,54,0)}}
.tf-check{width:76px;height:76px;margin:4px auto 14px}
.tf-check svg{width:100%;height:100%;fill:none;stroke:var(--gold);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.tf-check circle{stroke-dasharray:160;stroke-dashoffset:160;animation:tf-draw .7s ease forwards}
.tf-check path{stroke-dasharray:42;stroke-dashoffset:42;animation:tf-draw .45s .55s ease forwards}
@keyframes tf-draw{to{stroke-dashoffset:0}}
.tf-done-note{font-size:.88rem;color:#7A6A4F}
.tf-errbadge{width:56px;height:56px;margin:0 auto 12px;border-radius:50%;background:#FBEFEA;border:1.5px solid #E3B7A6;color:#7A2E18;font-size:1.6rem;font-weight:700;line-height:54px;text-align:center}
.tf-state .btn{margin-top:14px}
@media (prefers-reduced-motion: reduce){.tf-scanline,.tf-card,.tf-steps li.active::before{animation:none}.tf-check circle,.tf-check path{animation:none;stroke-dashoffset:0}}

/* Try-On popup patience note (1.8.9, FINAL OVERRIDES): if the studio
   is slow to answer, the bride is told honestly and given the close
   button — the popup never just spins forever. */
.tf-slow{margin:16px auto 0;max-width:330px;font-size:.88rem;color:#7A6A4F;background:#FBF3DF;border:1px solid var(--line);border-radius:12px;padding:12px 14px;text-align:left}
.tf-card .kicker{padding:0 44px}

/* Lightbox gallery chrome (1.8.13, FINAL OVERRIDES): swipeable Every
   Angle viewer — close button, prev/next arrows, caption + counter.
   The arrows sit inside the safe zone so phone players never clip
   them; the bar never overlaps the photo caption area. */
.gw-lb{cursor:default}
.gw-lb img{cursor:default}
.gw-lb-close{position:absolute;top:calc(10px + env(safe-area-inset-top));right:12px;width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.35);background:rgba(20,13,8,.55);color:#FFF;font-size:1.55rem;line-height:1;cursor:pointer;z-index:3}
.gw-lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:46px;height:64px;border:none;background:rgba(20,13,8,.45);color:#FFF;font-size:2rem;line-height:1;cursor:pointer;z-index:3;border-radius:10px}
.gw-lb-prev{left:10px}
.gw-lb-next{right:10px}
.gw-lb-bar{position:absolute;left:0;right:0;bottom:calc(12px + env(safe-area-inset-bottom));display:flex;justify-content:center;align-items:baseline;gap:14px;padding:0 18px;pointer-events:none;z-index:3}
.gw-lb-cap{color:#F3EBDD;font-size:.92rem;text-align:center}
.gw-lb-count{color:rgba(243,235,221,.65);font-size:.85rem;white-space:nowrap}
/* Lightbox stacking fix (1.8.13): the viewer must sit ABOVE the site
   chrome (sticky header + bottom tab bar) or its caption bar is
   covered on phones. */
.gw-lb{z-index:1000}
.gw-lb-bar{bottom:calc(16px + env(safe-area-inset-bottom))}
.gw-lb-cap{flex:1}
