/* ========================================================== base */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:88px;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--blush);color:var(--nocturne);font:400 17px/1.7 var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body.lock{overflow:hidden}
h1,h2,h3,p,figure,ol,ul,dl,dd{margin:0}
ol,ul{padding:0;list-style:none}
h1,h2,h3{font-weight:400}
em,i{font-weight:400}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;cursor:pointer}
img,svg{display:block;max-width:100%}
:focus-visible{outline:2px solid var(--camellia);outline-offset:3px}
::selection{background:var(--halo);color:var(--nocturne)}
.g{width:.7em;height:.7em;fill:currentColor;display:inline-block;flex:none}
.i{width:18px;height:18px;flex:none}
.skip{position:absolute;left:16px;top:-60px;z-index:100;padding:12px 20px;border-radius:var(--radius-pill);background:var(--nocturne);color:var(--pearl);font:500 13px var(--sans)}
.skip:focus{top:16px}
.section{padding:var(--section-y) var(--pad);max-width:calc(var(--maxw) + 2 * var(--pad));margin:0 auto}
.section-no{display:block;font:italic 400 22px/1 var(--display);color:var(--garnet)}
.grain{position:relative;isolation:isolate}
.grain::after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.18;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}
.grain>*{position:relative;z-index:1}

/* ========================================================== buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:18px;min-height:52px;padding:0 26px;border:1px solid transparent;border-radius:var(--radius-pill);background:none;font:500 13px/1 var(--sans);letter-spacing:.08em;white-space:nowrap;transition:background var(--motion-feedback),color var(--motion-feedback),border-color var(--motion-feedback),box-shadow var(--motion-feedback),transform var(--motion-feedback)}
.btn .i{transition:transform var(--motion-feedback) var(--ease-out)}
.btn:hover .i{transform:translateX(4px)}
.btn:active{transform:translateY(1px)}
.btn-sm{min-height:44px;padding:0 18px;gap:12px;font-size:12px}
.btn-sm .i{width:16px;height:16px}
.btn-primary{background:var(--nocturne);color:var(--pearl)}
.btn-primary:hover{background:var(--mulberry)}
.btn-glow{background:var(--halo);color:var(--nocturne)}
.btn-glow:hover{background:var(--pearl);box-shadow:0 0 34px rgba(247,200,166,.5)}
.btn-ghost{border-color:currentColor}
.btn-ghost:hover{background:var(--nocturne);border-color:var(--nocturne);color:var(--pearl)}
.btn-ghost-light{border-color:rgba(255,248,243,.5);color:var(--pearl)}
.btn-ghost-light:hover{background:var(--pearl);border-color:var(--pearl);color:var(--nocturne)}
.btn-pending{border:1px dashed currentColor;color:var(--muted);cursor:help}
.btn-pending:hover{color:var(--garnet)}
.contact .btn[aria-disabled=true]{cursor:help}
.contact .btn-glow[aria-disabled=true]{background:rgba(247,200,166,.18);color:var(--halo);box-shadow:none}
.contact .btn-ghost-light[aria-disabled=true]{border-style:dashed}
.contact .btn[aria-disabled=true]:hover{background:rgba(247,200,166,.26);color:var(--pearl)}
.icon-btn{display:grid;place-items:center;width:48px;height:48px;padding:0;border:1px solid currentColor;border-radius:50%;background:none;transition:background var(--motion-feedback),color var(--motion-feedback),border-color var(--motion-feedback)}
.icon-btn svg{width:20px;height:20px}
.icon-btn:hover{background:var(--nocturne);border-color:var(--nocturne);color:var(--pearl)}
.text-link{display:inline-flex;align-items:center;gap:14px;min-height:44px;padding:6px 0;font:500 13px var(--sans);letter-spacing:.08em;background:linear-gradient(90deg,var(--camellia),var(--halo)) 0 calc(100% - 6px)/100% 1px no-repeat;transition:background-size var(--motion-transition) var(--ease-out)}
.text-link:hover{background-size:40% 1px}
.text-link:hover .i{transform:translateX(4px)}
.text-link .i{transition:transform var(--motion-feedback) var(--ease-out)}
.text-link.light{color:var(--pearl)}
.actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}

/* ========================================================== nav */
.nav{position:fixed;inset:0 0 auto;z-index:40;height:80px;display:flex;align-items:center;gap:40px;padding:0 var(--pad);color:var(--pearl);border-bottom:1px solid rgba(247,200,166,.14);transition:background var(--motion-transition),color var(--motion-transition),border-color var(--motion-transition),transform var(--motion-transition) var(--ease-out)}
.nav.is-solid{background:rgba(248,236,230,.88);color:var(--nocturne);border-bottom-color:var(--line);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2)}
.nav.is-hidden{transform:translateY(-100%)}
.wordmark{display:inline-flex;align-items:center;gap:.55em;min-height:44px;font:400 18px var(--display);letter-spacing:.34em;white-space:nowrap}
.wordmark .g{width:10px;height:10px;color:var(--halo)}
.nav.is-solid .wordmark .g{color:var(--camellia)}
.nav-links{display:flex;gap:34px;margin-left:auto}
.nav-links a{position:relative;display:inline-flex;align-items:center;gap:8px;min-height:44px;font:500 12px var(--sans);letter-spacing:.2em;text-transform:uppercase}
.nav-links a .g{width:8px;height:8px;color:var(--camellia);opacity:0;transform:scale(.3);transition:opacity var(--motion-feedback),transform var(--motion-transition) var(--ease-out)}
.nav-links a::after{content:"";position:absolute;left:16px;right:0;bottom:8px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform var(--motion-transition) var(--ease-out)}
.nav-links a:hover::after{transform:scaleX(1)}
.nav-links a[aria-current=true] .g{opacity:1;transform:none}
.nav:not(.is-solid) .nav-links a[aria-current=true] .g{color:var(--halo)}
.nav .btn-ghost{border-color:currentColor}
.nav:not(.is-solid) .btn-ghost:hover{background:var(--pearl);color:var(--nocturne);border-color:var(--pearl)}
.menu-btn{display:none;align-items:center;gap:12px;min-height:44px;margin-left:auto;padding:0;border:0;background:none;font:500 12px var(--sans);letter-spacing:.2em;text-transform:uppercase}
.menu-btn i{position:relative;display:block;width:22px;height:1px;background:currentColor;box-shadow:0 -6px currentColor,0 6px currentColor}
.menu{position:fixed;inset:0;z-index:60;color:var(--pearl);background:radial-gradient(ellipse 80% 40% at 80% 100%,rgba(214,67,111,.35),transparent 70%),radial-gradient(ellipse 60% 30% at 10% 0%,rgba(111,102,166,.35),transparent 70%),var(--nocturne);clip-path:inset(0 0 0 0);animation:menu-in 520ms var(--ease-out)}
.menu[hidden]{display:none}
.menu.is-closing{animation:menu-out 320ms var(--ease-in-out) forwards}
.menu-inner{display:flex;flex-direction:column;height:100%;padding:24px var(--pad) 40px}
.menu-close{align-self:flex-end;color:var(--pearl)}
.menu-close:hover{background:var(--pearl);color:var(--nocturne);border-color:var(--pearl)}
.menu nav{margin:auto 0}
.menu nav a{display:flex;align-items:baseline;gap:18px;padding:14px 0;border-bottom:1px solid var(--line-dark);font:400 clamp(36px,9vw,64px)/1.1 var(--display)}
.menu nav a em{color:var(--halo)}
.menu nav a span{font:500 11px var(--sans);letter-spacing:.2em;color:var(--lilac)}
.menu nav a strong{font-weight:400}
@keyframes menu-in{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes menu-out{to{clip-path:inset(0 0 100% 0)}}

/* ========================================================== hero */
.hero{display:flex;flex-direction:column;height:clamp(720px,100svh,1000px);overflow:hidden;padding:120px var(--pad) 26px;color:var(--pearl);background:radial-gradient(ellipse 50% 34% at 86% 2%,rgba(111,102,166,.62),transparent 70%),radial-gradient(ellipse 62% 13% at 68% 69%,rgba(255,222,192,.6),transparent 72%),linear-gradient(180deg,#1E0D1A 0%,#2E1229 16%,#561C43 33%,#93305E 47%,#CC4670 57%,#EC7966 64.5%,#F6B48E 69%,#C24E66 73.5%,#6A1E43 80%,#3A1330 88%,#2A0F21 100%)}
.hero-copy{text-align:center}
.eyebrow{display:flex;align-items:center;justify-content:center;gap:1.1em;font:500 11px var(--sans);letter-spacing:.32em;color:var(--halo)}
.eyebrow .g{width:8px;height:8px}
.hero h1{margin-top:clamp(18px,3vh,36px);font:400 clamp(88px,min(16vw,25svh),236px)/.84 var(--display);letter-spacing:-.03em}
.hero h1 .line{display:block}
.hero h1 em{color:var(--halo);font-size:.86em;letter-spacing:-.02em}
.hero-field{position:absolute;left:0;right:0;top:29%;height:44%;z-index:0;pointer-events:none;-webkit-mask-image:linear-gradient(180deg,transparent,#000 16%,#000 82%,transparent);mask-image:linear-gradient(180deg,transparent,#000 16%,#000 82%,transparent)}
.hero-field img{width:100%;height:100%;object-fit:cover;object-position:52% 58%;mix-blend-mode:screen}
.hero-band{display:flex;justify-content:space-between;align-items:flex-end;gap:48px;margin-top:auto;padding-bottom:26px}
.hero-lead{max-width:540px}
.hero-lead p{font:300 clamp(18px,1.6vw,22px)/1.55 var(--sans);color:#F6E1DE}
.hero-lead em{font:italic 400 1.12em var(--display);color:var(--halo)}
.hero-actions{display:flex;gap:12px;flex:none}
.hero-foot{display:flex;justify-content:space-between;align-items:center;gap:24px;padding-top:16px;border-top:1px solid rgba(255,244,234,.2);font:500 10px var(--sans);letter-spacing:.24em;color:#E9CBD0}
.scroll-cue{display:inline-flex;align-items:center;gap:10px;min-height:44px;text-transform:uppercase}
.scroll-cue .i{width:16px;height:16px;animation:cue 2.4s var(--ease-in-out) 2.2s 2}
@keyframes cue{50%{transform:translateY(5px)}}

/* ========================================================== section head */
.section-head{display:grid;grid-template-columns:56px 1fr minmax(240px,380px);align-items:end;gap:24px 40px;margin-bottom:clamp(64px,8vw,112px)}
.section-head .section-no{align-self:start;padding-top:14px}
.section-head h2{font:400 clamp(52px,7.2vw,104px)/.95 var(--display);letter-spacing:-.025em}
.section-head h2 em{color:var(--garnet)}
.section-head p{font:300 18px/1.6 var(--sans);color:var(--muted);padding-bottom:10px}
.section-head.on-dark .section-no{color:var(--halo)}
.section-head.on-dark h2 em{color:var(--halo)}
.section-head.on-dark p{color:var(--lilac)}

/* ========================================================== features */
.feature{display:grid;grid-template-columns:7fr 5fr;gap:clamp(36px,6vw,104px);align-items:center}
.feature+.feature{margin-top:clamp(96px,11vw,168px)}
.feature.flip{grid-template-columns:5fr 7fr}
.feature.flip .frame{order:2}
.frame{position:relative;aspect-ratio:4/3;overflow:hidden;border-radius:var(--radius-card);color:var(--pearl);background:radial-gradient(ellipse 85% 30% at 55% 104%,rgba(246,180,142,.5),transparent 70%),radial-gradient(ellipse 70% 50% at 70% 110%,rgba(214,67,111,.5),transparent 70%),radial-gradient(ellipse 50% 40% at 10% -10%,rgba(111,102,166,.4),transparent 70%),repeating-linear-gradient(180deg,rgba(247,200,166,.07) 0 1px,transparent 1px 9px),var(--nocturne)}
.frame::after{content:"";position:absolute;inset:-10% auto -10% -40%;width:28%;background:linear-gradient(90deg,transparent,rgba(255,236,220,.16),transparent);transform:skewX(-14deg) translateX(0);opacity:0}
.frame:hover::after,.feature:focus-within .frame::after{animation:streak 1.3s var(--ease-out)}
@keyframes streak{0%{opacity:1;transform:skewX(-14deg) translateX(0)}100%{opacity:1;transform:skewX(-14deg) translateX(560%)}}
.frame-no{position:absolute;left:28px;bottom:-.14em;font:italic 400 clamp(150px,17vw,250px)/1 var(--display);color:rgba(247,200,166,.88);letter-spacing:-.04em}
.frame-label{position:absolute;left:28px;top:26px;font:500 11px var(--sans);letter-spacing:.24em;text-transform:uppercase}
.frame-status{position:absolute;right:22px;bottom:22px;display:inline-flex;align-items:center;gap:10px;padding:9px 16px;border:1px solid rgba(255,248,243,.35);border-radius:var(--radius-pill);font:500 10px var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--lilac);background:rgba(35,16,30,.35);backdrop-filter:blur(6px)}
.frame-status .g{width:8px;height:8px;color:var(--halo)}
.frame.wide{aspect-ratio:16/9;margin-top:32px}
.kicker{display:flex;align-items:center;gap:14px;font:500 11px var(--sans);letter-spacing:.24em;text-transform:uppercase;color:var(--muted)}
.kicker span{padding-left:14px;border-left:1px solid var(--line);color:var(--garnet)}
.feature h3{margin-top:22px;font:400 clamp(44px,4.8vw,72px)/.98 var(--display);letter-spacing:-.022em}
.feature h3 em{color:var(--garnet)}
.meta{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:30px 0 26px;padding:16px 0;border-top:1px solid var(--nocturne);border-bottom:1px solid var(--line)}
.meta dt{font:500 10px var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.meta dd{margin-top:6px;font:400 15px/1.4 var(--sans)}
.feature-text>p:not(.kicker):not(.highlight){max-width:520px;color:#3B2434}
.highlight{display:flex;align-items:baseline;gap:12px;margin-top:20px;font:500 14px/1.5 var(--sans);letter-spacing:.02em;color:var(--garnet)}
.highlight .g{width:10px;height:10px;transform:translateY(1px);color:var(--camellia)}

/* ========================================================== story */
.story{max-width:none;margin:0;color:var(--pearl);overflow:hidden;background:radial-gradient(ellipse 60% 40% at 85% 10%,rgba(90,30,69,.85),transparent 70%),radial-gradient(ellipse 50% 40% at 15% 100%,rgba(214,67,111,.16),transparent 70%),var(--nocturne)}
.story>*{max-width:var(--maxw);margin-left:auto;margin-right:auto}
.story-cn{align-self:start;writing-mode:vertical-rl;font:600 clamp(48px,5vw,76px)/1 var(--chinese);letter-spacing:.18em;color:rgba(247,200,166,.16);user-select:none}
.story-grid{display:grid;grid-template-columns:1fr minmax(200px,300px) auto;gap:40px;align-items:end;margin-bottom:clamp(56px,7vw,96px)}
.story-grid .section-head{grid-template-columns:56px 1fr;margin-bottom:0}
.story-grid .section-head p{grid-column:2;max-width:520px}
.story-art{width:100%;max-height:340px;object-fit:contain;opacity:.95}
.step-tabs{position:relative;display:grid;grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--line-dark)}
.step-tabs button{display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-height:84px;padding:14px 16px 18px 0;border:0;background:none;text-align:left;font:400 clamp(17px,1.7vw,24px)/1.15 var(--display);color:rgba(217,196,214,.6);transition:color var(--motion-feedback)}
.step-tabs button span{font:500 10px var(--sans);letter-spacing:.24em}
.step-tabs button:hover{color:var(--lilac)}
.step-tabs button[aria-selected=true]{color:var(--pearl)}
.step-tabs button[aria-selected=true] span{color:var(--halo)}
.step-bar{position:absolute;left:0;bottom:-1px;width:25%;height:2px;background:linear-gradient(90deg,var(--camellia),var(--halo));transform:translateX(calc(var(--step,0) * 100%));transition:transform var(--motion-transition) var(--ease-out)}
.step-panels{position:relative;display:grid;grid-template-columns:1fr auto;gap:40px;min-height:360px;padding-top:clamp(40px,5vw,64px)}
.step-panel{grid-column:1;grid-row:1}
.step-aside{grid-column:2;grid-row:1;align-self:start;font:italic 400 clamp(140px,16vw,240px)/.8 var(--display);letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1px rgba(247,200,166,.38);user-select:none}
.step-aside.is-entering{animation:panel-in 520ms var(--ease-out)}
.step-panels:has(#sp-4:not([hidden])) .step-aside{display:none}
.step-panels:has(#sp-4:not([hidden])){grid-template-columns:1fr}
.step-panel{max-width:820px}
.step-panel.is-entering{animation:panel-in var(--motion-transition) var(--ease-out)}
@keyframes panel-in{from{opacity:0;transform:translateY(10px)}}
.step-lead{font:500 clamp(26px,3vw,40px)/1.22 var(--display);letter-spacing:-.01em;color:var(--pearl)}
.step-panel p:not(.step-lead):not(.plan-caption){max-width:620px;margin-top:22px;color:var(--lilac)}
.ways{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:28px;max-width:760px}
.ways li{padding:18px 18px 20px;border:1px solid var(--line-dark);border-radius:var(--radius-card);font:italic 400 21px/1.25 var(--display);color:var(--halo)}
.ways li span{display:block;margin-bottom:10px;font:500 10px var(--sans);font-style:normal;letter-spacing:.2em;color:var(--lilac)}
.step-nav{display:flex;align-items:center;gap:18px;margin-top:40px;color:var(--pearl)}
.step-nav .icon-btn{border-color:rgba(255,248,243,.4)}
.step-nav .icon-btn:hover{background:var(--pearl);color:var(--nocturne);border-color:var(--pearl)}
.step-count{font:500 11px var(--sans);letter-spacing:.2em;color:var(--lilac)}
.step-count b{font-weight:500;color:var(--pearl)}
.cane{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(32px,5vw,72px);align-items:center;max-width:1080px}
.step-panel:has(.cane){max-width:1080px}
.seg{display:inline-flex;gap:4px;margin-top:28px;padding:4px;border:1px solid rgba(247,200,166,.3);border-radius:var(--radius-pill)}
.seg button{min-height:44px;padding:0 20px;border:0;border-radius:var(--radius-pill);background:none;font:500 12px var(--sans);letter-spacing:.08em;color:var(--lilac);transition:background var(--motion-feedback),color var(--motion-feedback)}
.seg button[aria-pressed=true]{background:var(--halo);color:var(--nocturne)}
.plan-caption{margin-top:16px;font:400 italic 19px/1.4 var(--display);color:var(--halo)}
.cane-fig svg{width:100%;height:auto;overflow:visible}
.cane-fig .people circle{fill:rgba(217,196,214,.35);transition:fill var(--motion-transition),filter var(--motion-transition)}
.cane-fig .holder circle:last-child{fill:var(--halo)}
.cane-fig .pulse{fill:none;stroke:var(--halo);stroke-width:1;opacity:0;transform-origin:160px 130px}
.cane-fig .rings circle{fill:none;stroke:var(--camellia);stroke-width:1;opacity:0;transform-origin:160px 130px}
.cane-fig[data-plan-fig=a] .people circle{fill:var(--coral);filter:drop-shadow(0 0 6px rgba(238,122,100,.8))}
.cane-fig[data-plan-fig=a] .rings circle{animation:ring 1.8s var(--ease-out) 2 both}
.cane-fig[data-plan-fig=a] .rings circle:nth-child(2){animation-delay:.3s}
.cane-fig[data-plan-fig=a] .rings circle:nth-child(3){animation-delay:.6s}
.cane-fig[data-plan-fig=b] .pulse{animation:pulse 1.2s var(--ease-out) 3 both}
@keyframes ring{0%{opacity:.75;transform:scale(1)}100%{opacity:0;transform:scale(4.6)}}
@keyframes pulse{0%{opacity:.9;transform:scale(1)}100%{opacity:0;transform:scale(1.9)}}
.cane-fig figcaption{display:flex;gap:22px;margin-top:14px;font:500 10px var(--sans);letter-spacing:.18em;text-transform:uppercase;color:var(--lilac)}
.cane-fig figcaption span::before{content:"";display:inline-block;width:8px;height:8px;margin-right:8px;border-radius:50%;background:rgba(217,196,214,.5)}
.cane-fig figcaption .lg-b::before{background:var(--halo)}
.cane-fig[data-plan-fig=a] figcaption .lg-a::before{background:var(--coral)}

/* ========================================================== index */
.filters{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:28px}
.chip{min-height:44px;padding:0 20px;border:1px solid var(--line);border-radius:var(--radius-pill);background:none;font:500 12px var(--sans);letter-spacing:.08em;transition:background var(--motion-feedback),border-color var(--motion-feedback),color var(--motion-feedback)}
.chip:hover{border-color:var(--nocturne)}
.chip[aria-pressed=true]{background:var(--nocturne);border-color:var(--nocturne);color:var(--pearl)}
.count{margin-left:auto;font:500 11px var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.entries{border-top:1px solid var(--nocturne)}
.entry{border-bottom:1px solid var(--line)}
.entry[hidden]{display:none}
.entry.is-shown{animation:panel-in var(--motion-transition) var(--ease-out)}
.entry-row{position:relative;display:grid;grid-template-columns:64px 1fr 220px 80px 44px;align-items:center;gap:16px;width:100%;min-height:92px;padding:16px 0;border:0;background:none;text-align:left}
.entry-row::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,var(--camellia),var(--halo) 60%,transparent);transform:scaleX(0);transform-origin:left;transition:transform var(--motion-transition) var(--ease-out)}
.entry-row:hover::after,.entry-row[aria-expanded=true]::after{transform:scaleX(1)}
.e-no{font:italic 400 20px var(--display);color:var(--muted);transition:color var(--motion-feedback)}
.e-title{font:400 clamp(24px,2.5vw,34px)/1.1 var(--display);letter-spacing:-.01em}
.e-title em{color:var(--garnet)}
.e-tag{display:flex;align-items:center;flex-wrap:wrap;gap:10px;font:500 11px var(--sans);letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.status{padding:5px 10px;border:1px solid var(--camellia);border-radius:var(--radius-pill);font-weight:500;font-size:9px;color:var(--garnet)}
.e-year{font:500 12px var(--sans);letter-spacing:.12em;color:var(--muted);text-align:right}
.e-plus{display:grid;place-items:center;width:44px;height:44px;border:1px solid var(--line);border-radius:50%;transition:transform var(--motion-transition) var(--ease-out),background var(--motion-feedback),border-color var(--motion-feedback),color var(--motion-feedback)}
.e-plus svg{width:18px;height:18px}
.entry-row:hover .e-no{color:var(--camellia)}
.entry-row:hover .e-plus{border-color:var(--nocturne)}
.entry-row[aria-expanded=true] .e-plus{transform:rotate(45deg);background:var(--nocturne);border-color:var(--nocturne);color:var(--pearl)}
.entry-body{display:grid;grid-template-rows:1fr}
.js .entry-body{grid-template-rows:0fr;transition:grid-template-rows var(--motion-transition) var(--ease-out)}
.entry-body>div{overflow:hidden;padding:0 140px 0 80px;transition:padding-bottom var(--motion-transition) var(--ease-out)}
.entry.is-open .entry-body>div,html:not(.js) .entry-body>div{padding-bottom:34px}
.js .entry.is-open .entry-body{grid-template-rows:1fr}
.entry-body p{max-width:720px;color:#3B2434}
.entry-body>div>:first-child{margin-top:4px}
.e-meta{margin-top:14px;font:500 11px var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)!important}
.entry-body .btn,.entry-body .text-link{margin-top:22px}

/* ========================================================== about */
.about{max-width:none;margin:0;background:var(--pearl);border-top:1px solid var(--line)}
.about>*{max-width:var(--maxw);margin-left:auto;margin-right:auto}
.about-grid{display:grid;grid-template-columns:5fr 7fr;gap:clamp(40px,6vw,112px)}
.about-intro h2{margin-top:18px;font:400 clamp(52px,7vw,100px)/.95 var(--display);letter-spacing:-.025em}
.about-intro h2 em{color:var(--garnet)}
.about-lead{margin-top:36px;font:500 clamp(22px,2.1vw,28px)/1.42 var(--display)}
.about-intro p:not(.about-lead){margin-top:22px;max-width:520px;color:#3B2434}
.facts{display:grid;grid-template-columns:1fr 1fr;gap:48px 40px;align-content:start;padding-top:12px}
.fact-block h3{display:flex;align-items:center;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--nocturne);font:500 11px var(--sans);letter-spacing:.24em;text-transform:uppercase}
.fact-block h3::before{content:"";width:8px;height:8px;background:var(--camellia);clip-path:polygon(50% 0,56% 44%,100% 50%,56% 56%,50% 100%,44% 56%,0 50%,44% 44%)}
.fact-block p{display:flex;justify-content:space-between;gap:16px;padding:12px 0;border-bottom:1px solid var(--line);font-size:15px;line-height:1.5}
.fact-block p span{flex:none;font:500 11px var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding-top:2px}
.fact-block strong{font-weight:500}
.honours{grid-column:1/-1}
.honours ul{columns:2;column-gap:40px}
.honours li{display:flex;gap:16px;break-inside:avoid;padding:12px 0;border-bottom:1px solid var(--line);font-size:15px;line-height:1.45}
.honours li span{flex:none;width:40px;font:italic 400 16px var(--display);color:var(--garnet)}

/* ========================================================== contact */
.contact{overflow:hidden;padding:var(--section-y) var(--pad);color:var(--pearl);background:radial-gradient(ellipse 60% 50% at 80% 50%,rgba(214,67,111,.28),transparent 70%),linear-gradient(160deg,#250E1F,#45152F 60%,#5A1E45)}
.contact-art{position:absolute!important;right:-4%;top:50%;width:min(620px,60vw);transform:translateY(-50%);opacity:.75;mix-blend-mode:screen;pointer-events:none}
.contact-inner{max-width:var(--maxw);margin:0 auto}
.contact .section-no{color:var(--halo)}
.contact h2{margin-top:18px;font:400 clamp(72px,12vw,176px)/.9 var(--display);letter-spacing:-.03em}
.contact h2 em{color:var(--halo)}
.contact p{max-width:460px;margin-top:28px;font:300 19px/1.6 var(--sans);color:var(--lilac)}
.contact .actions{margin-top:40px}

/* ========================================================== footer */
.footer{padding:56px var(--pad) 32px;background:var(--nocturne);color:var(--pearl)}
.footer-top,.footer-bottom{display:flex;align-items:center;justify-content:space-between;gap:24px;max-width:var(--maxw);margin:0 auto}
.footer-top{padding-bottom:28px;border-bottom:1px solid var(--line-dark)}
.footer .wordmark{font-size:22px}
.footer-bottom{flex-wrap:wrap;padding-top:22px;font:500 10px var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--lilac)}
.toggles{display:flex;gap:28px}
.switch{display:inline-flex;align-items:center;gap:12px;min-height:44px;cursor:pointer}
.switch input{position:absolute;opacity:0;width:1px;height:1px}
.track{position:relative;width:38px;height:22px;border:1px solid rgba(255,248,243,.4);border-radius:var(--radius-pill);transition:background var(--motion-feedback),border-color var(--motion-feedback)}
.track::after{content:"";position:absolute;left:3px;top:3px;width:14px;height:14px;border-radius:50%;background:var(--lilac);transition:transform var(--motion-transition) var(--ease-out),background var(--motion-feedback)}
.switch input:checked+.track{background:var(--halo);border-color:var(--halo)}
.switch input:checked+.track::after{transform:translateX(16px);background:var(--nocturne)}
.switch input:focus-visible+.track{outline:2px solid var(--camellia);outline-offset:3px}

/* ========================================================== bubble */
.bubble{position:fixed;left:50%;bottom:28px;z-index:80;max-width:min(520px,calc(100vw - 32px));padding:14px 24px;border-radius:var(--radius-pill);background:var(--nocturne);color:var(--pearl);box-shadow:0 14px 40px rgba(35,16,30,.35);font:400 14px/1.45 var(--sans);text-align:center;opacity:0;transform:translate(-50%,16px);pointer-events:none;transition:opacity var(--motion-feedback),transform var(--motion-transition) var(--ease-out)}
.bubble.show{opacity:1;transform:translate(-50%,0)}

/* ========================================================== case viewer */
.case{width:min(1000px,100vw);max-width:none;height:100dvh;max-height:none;margin:0 0 0 auto;padding:0;border:0;background:var(--blush);color:var(--nocturne);overflow:auto;overscroll-behavior:contain}
.case::backdrop{background:rgba(35,16,30,.62);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.case[open]{animation:case-in 560ms var(--ease-out)}
.case[open]::backdrop{animation:fade-in 400ms ease}
.case.is-closing{animation:case-out 320ms var(--ease-in-out) forwards}
.case.is-closing::backdrop{animation:fade-out 320ms ease forwards}
@keyframes case-in{from{clip-path:inset(0 0 0 100%)}to{clip-path:inset(0 0 0 0)}}
@keyframes case-out{to{clip-path:inset(0 0 0 100%)}}
@keyframes fade-in{from{opacity:0}}
@keyframes fade-out{to{opacity:0}}
.case-bar{position:sticky;top:0;z-index:3;display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:76px;padding:0 clamp(20px,5vw,64px);background:rgba(248,236,230,.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.case-crumb{font:500 11px var(--sans);letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
.case-bar-actions{display:flex;align-items:center;gap:12px}
.case-body{position:relative;padding:clamp(40px,6vw,80px) clamp(20px,5vw,64px) 96px;overflow:hidden}
.case-body.is-swapping{animation:panel-in 420ms var(--ease-out)}
.case-cn{position:absolute;right:clamp(12px,4vw,48px);top:12px;font:600 clamp(200px,30vw,340px)/1 var(--chinese);color:rgba(158,47,85,.07);pointer-events:none;user-select:none}
.case-head{position:relative}
.case-head h2{margin-top:22px;font:400 clamp(52px,7.4vw,104px)/.95 var(--display);letter-spacing:-.025em}
.case-head h2 em{color:var(--garnet)}
.case-tabs{position:sticky;top:76px;z-index:2;display:flex;gap:30px;margin:8px 0 0;border-bottom:1px solid var(--line);background:var(--blush)}
.case-tabs button{position:relative;min-height:56px;padding:0;border:0;background:none;font:400 22px var(--display);color:var(--muted);transition:color var(--motion-feedback)}
.case-tabs button:hover{color:var(--nocturne)}
.case-tabs button[aria-selected=true]{color:var(--nocturne)}
.case-tabs button[aria-selected=true]::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--nocturne)}
.case-panel{max-width:760px;padding-top:44px}
.case-panel.is-entering{animation:panel-in var(--motion-transition) var(--ease-out)}
.case-lead{font:500 clamp(26px,2.8vw,36px)/1.26 var(--display);letter-spacing:-.01em}
.case-panel>p:not(.case-lead):not(.figure):not(.pending-line):not(.note){margin-top:20px;color:#3B2434}
.styles{display:flex;flex-wrap:wrap;gap:8px;margin-top:26px}
.styles li{display:inline-flex;align-items:center;gap:10px;padding:10px 16px;border:1px solid var(--line);border-radius:var(--radius-pill);font:400 15px var(--sans)}
.styles b{font:500 10px var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--garnet)}
.figures{display:flex;gap:48px;flex-wrap:wrap}
.figure{display:flex;flex-direction:column;margin-top:30px}
.figure b{font:400 clamp(56px,6vw,84px)/1 var(--display);letter-spacing:-.02em;color:var(--garnet)}
.figure span{margin-top:8px;font:500 11px var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.pending-line{display:flex;align-items:center;gap:12px;margin-top:28px;font:500 11px var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--garnet)}
.pending-line .g{width:10px;height:10px;color:var(--camellia)}
.note{margin-top:16px;font-size:14px;color:var(--muted)}

/* ========================================================== fact-check layer (demo only) */
.fc-note{display:none}
body.show-notes .fc-note{position:relative;display:block;max-width:620px;margin-top:16px;padding:12px 14px 12px 88px;border:1px dashed var(--camellia);border-radius:var(--radius-card);background:rgba(214,67,111,.06);font:400 13px/1.55 var(--sans);color:var(--garnet)}
body.show-notes .fc-note::before{content:"CHECK";position:absolute;left:14px;top:13px;font:600 9px var(--sans);letter-spacing:.24em;color:var(--camellia)}
body.show-notes .hero .fc-note,body.show-notes .story .fc-note,body.show-notes .contact .fc-note{border-color:rgba(247,200,166,.6);background:rgba(247,200,166,.08);color:var(--halo)}
body.show-notes .hero .fc-note::before,body.show-notes .story .fc-note::before,body.show-notes .contact .fc-note::before{color:var(--halo)}

/* ========================================================== motion: intro & reveal */
.js [data-intro]{opacity:0;transform:translateY(18px)}
.js .is-ready [data-intro],.js.is-ready [data-intro]{opacity:1;transform:none;transition:opacity 900ms var(--ease-out),transform 900ms var(--ease-out)}
.js.is-ready [data-intro="2"]{transition-delay:90ms}
.js.is-ready [data-intro="3"]{transition-delay:200ms}
.js.is-ready [data-intro="4"]{transition-delay:520ms}
.js.is-ready [data-intro="5"]{transition-delay:700ms}
.js.is-ready .hero-field img{-webkit-mask-image:linear-gradient(90deg,#000 40%,transparent 60%);mask-image:linear-gradient(90deg,#000 40%,transparent 60%);-webkit-mask-size:260% 100%;mask-size:260% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;animation:sweep var(--motion-light) var(--ease-out) 120ms both}
.js:not(.is-ready) .hero-field img{opacity:0}
@keyframes sweep{from{-webkit-mask-position:100% 0;mask-position:100% 0}to{-webkit-mask-position:0 0;mask-position:0 0}}
.js [data-reveal]{opacity:0;transform:translateY(22px);transition:opacity var(--motion-reveal) var(--ease-out),transform var(--motion-reveal) var(--ease-out)}
.js [data-reveal].in-view{opacity:1;transform:none}
.js .feature[data-reveal] .frame{clip-path:inset(14% 0 0 0 round var(--radius-card));transition:clip-path 1100ms var(--ease-out)}
.js .feature[data-reveal].in-view .frame{clip-path:inset(0 0 0 0 round var(--radius-card))}

/* reduced motion: system setting or the footer switch */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;transition-delay:0ms!important}
  .js [data-intro],.js [data-reveal]{opacity:1;transform:none}
}
html.reduce-motion{scroll-behavior:auto}
html.reduce-motion *,html.reduce-motion *::before,html.reduce-motion *::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;transition-delay:0ms!important}
html.reduce-motion [data-intro],html.reduce-motion [data-reveal]{opacity:1!important;transform:none!important}

/* ========================================================== responsive */
@media (max-width:1100px){
  .nav-links{gap:24px}
  .feature,.feature.flip{grid-template-columns:1fr 1fr}
  .section-head{grid-template-columns:44px 1fr}
  .section-head p{grid-column:2}
  .entry-row{grid-template-columns:52px 1fr 170px 60px 44px}
  .entry-body>div{padding-left:68px;padding-right:60px}
  .about-grid{grid-template-columns:1fr}
}
@media (max-width:860px){
  .nav-links,.nav-contact{display:none}
  .menu-btn{display:inline-flex}
  .hero-band{flex-direction:column;align-items:flex-start;gap:24px}
  .feature,.feature.flip{grid-template-columns:1fr;gap:32px}
  .feature.flip .frame{order:0}
  .story-grid{grid-template-columns:1fr}
  .story-art,.story-cn{display:none}
  .step-aside{display:none}
  .step-panels{grid-template-columns:1fr}
  .cane{grid-template-columns:1fr}
  .cane-fig{max-width:420px}
  .step-tabs{grid-template-columns:repeat(2,1fr)}
  .step-tabs button{min-height:68px}
  .step-bar{display:none}
  .step-tabs button[aria-selected=true]{box-shadow:inset 0 -2px 0 var(--halo)}
  .facts{grid-template-columns:1fr}
  .honours ul{columns:1}
}
@media (max-width:640px){
  body{font-size:16px}
  .nav{height:68px}
  .wordmark{font-size:14px;letter-spacing:.26em}
  .hero{padding-top:100px;height:clamp(680px,100svh,860px);background:radial-gradient(ellipse 70% 24% at 84% 0%,rgba(111,102,166,.6),transparent 70%),radial-gradient(ellipse 90% 9% at 66% 55%,rgba(255,220,190,.6),transparent 72%),linear-gradient(180deg,#1E0D1A 0%,#2E1229 12%,#561C43 24%,#93305E 36%,#CC4670 46%,#EC7966 52%,#F6B48E 56%,#C24E66 60%,#6A1E43 67%,#3A1330 76%,#2A0F21 100%)}
  .eyebrow{font-size:9px;letter-spacing:.18em;gap:.7em;flex-wrap:wrap}
  .hero h1{font-size:clamp(84px,25vw,128px)}
  .hero-field{top:24%;height:36%}
  .hero-field img{object-position:72% 56%}
  .hero-lead p{font-size:17px}
  .hero-actions{width:100%}
  .hero-actions .btn{flex:1}
  .hide-sm{display:none}
  .section-head{display:block}
  .section-head .section-no{padding:0 0 14px}
  .section-head p{margin-top:20px;font-size:16px}
  .meta{grid-template-columns:1fr 1fr}
  .meta div:last-child{grid-column:1/-1}
  .frame-no{left:18px}
  .frame-label{left:18px;top:18px;font-size:10px}
  .frame-status{right:14px;bottom:14px;padding:8px 12px;font-size:9px}
  .actions .btn{flex:1 1 auto}
  .step-tabs button{font-size:17px;padding-right:10px}
  .ways{grid-template-columns:1fr}
  .count{width:100%;margin:8px 0 0}
  .entry-row{grid-template-columns:34px 1fr 44px;gap:6px 12px;min-height:84px}
  .e-tag{grid-column:2;grid-row:2}
  .e-year{display:none}
  .e-plus{grid-column:3;grid-row:1 / span 2}
  .entry-body>div{padding-left:46px;padding-right:0}
  .contact-art{right:-30%;top:auto;bottom:-10%;transform:none;width:90vw;opacity:.45}
  .footer-top,.footer-bottom{flex-direction:column;align-items:flex-start}
  .toggles{flex-direction:column;gap:0}
  .case-bar .btn span,.case-bar .btn{font-size:11px}
  .case-tabs{gap:20px;overflow-x:auto}
  .case-tabs button{font-size:18px;white-space:nowrap}
}

/* ========================================================== v3 motion additions
   1 kinetic title · 2 work rail · 3 case morph · 4 frame peek · 5 live wake field
   Every effect is skipped under the system "reduce motion" setting and the footer switch. */
@property --peek-r{syntax:'<length>';inherits:true;initial-value:0px}

/* 1 · kinetic title: letters rise in sequence, then thicken where the pointer passes */
[data-split] .word{display:inline-block;white-space:nowrap}
[data-split] .ch{display:inline-block;font-variation-settings:"wght" var(--w,400);transition:font-variation-settings 420ms var(--ease-out)}
.js .hero h1 .ch{opacity:0;transform:translateY(.38em)}
.js.is-ready .hero h1 .ch{opacity:1;transform:none;transition:opacity 900ms var(--ease-out) var(--d,0ms),transform 1100ms var(--ease-out) var(--d,0ms),font-variation-settings 420ms var(--ease-out)}

/* 2 · work rail: on wide screens the three projects pass sideways while the section holds still */
.work-rail{position:relative}
.skip-rail{top:0}
.skip-rail:not(:focus){width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.rail-meter{display:none}
html.rail-on .work-rail{height:var(--rail-h,auto)}
html.rail-on .work-pin{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;justify-content:center;gap:clamp(28px,4vh,48px);overflow:hidden;margin-inline:calc(50% - 50vw);padding-inline:calc(50vw - 50%)}
html.rail-on .work-track{display:flex;gap:var(--rail-gap,120px);width:max-content;will-change:transform}
html.rail-on .work-track .feature{flex:0 0 var(--slide-w,1200px);margin:0}
html.rail-on .work-track .feature.flip{grid-template-columns:7fr 5fr}
html.rail-on .work-track .feature.flip .frame{order:0}
html.rail-on .work{padding-bottom:0}
html.rail-on .work .section-head{margin-bottom:0}
html.rail-on .rail-meter{display:flex;align-items:center;gap:16px;font:italic 400 18px var(--display);color:var(--muted)}
.rail-meter i{position:relative;flex:0 0 160px;height:1px;background:var(--line)}
.rail-meter b{position:absolute;inset:0;background:linear-gradient(90deg,var(--camellia),var(--halo));transform-origin:left;transform:scaleX(var(--rail-p,0))}

/* 3 · case morph: the case grows out of the frame that opened it (View Transitions; older browsers keep the slide-in) */
.case.is-morphing,.case.is-morphing::backdrop{animation:none}
::view-transition-group(case-morph){animation-duration:640ms;animation-timing-function:cubic-bezier(.16,.8,.24,1)}
::view-transition-old(case-morph),::view-transition-new(case-morph){height:100%;object-fit:cover;overflow:clip}
::view-transition-old(root),::view-transition-new(root){animation-duration:420ms}

/* 4 · frame peek: a circular window follows the pointer and shows the moving layer under the poster */
.frame-no,.frame-label,.frame-status{z-index:1}
.frame-film{position:absolute;inset:0;z-index:0;pointer-events:none;background:repeating-linear-gradient(180deg,rgba(35,16,30,.16) 0 1px,transparent 1px 4px),radial-gradient(circle at 30% 62%,rgba(255,236,220,.95),transparent 34%),radial-gradient(circle at 72% 38%,rgba(214,67,111,.95),transparent 42%),linear-gradient(120deg,#5A1E45,#CC4670 50%,#F6B48E);background-size:100% 100%,200% 200%,220% 220%,100% 100%;-webkit-mask-image:radial-gradient(circle var(--peek-r) at var(--peek-x,50%) var(--peek-y,50%),#000 96%,transparent 100%);mask-image:radial-gradient(circle var(--peek-r) at var(--peek-x,50%) var(--peek-y,50%),#000 96%,transparent 100%);transition:--peek-r 480ms var(--ease-out);animation:film-drift 7s ease-in-out infinite alternate;animation-play-state:paused}
.frame.is-peek .frame-film{--peek-r:clamp(90px,11vw,150px);animation-play-state:running}
.frame.has-film::after{display:none}
@keyframes film-drift{to{background-position:0 0,100% 100%,0 30%,0 0}}

/* 5 · live wake field: the Wake lines redrawn on canvas, breathing slowly and parting around the pointer */
.hero-field canvas{position:absolute;inset:0;width:100%;height:100%;mix-blend-mode:screen}
.hero-field canvas.wake-bloom{opacity:.55}
.hero-field.is-live img{display:none}
.js:not(.is-ready) .hero-field canvas{opacity:0}
.js.is-ready .hero-field canvas{-webkit-mask-image:linear-gradient(90deg,#000 40%,transparent 60%);mask-image:linear-gradient(90deg,#000 40%,transparent 60%);-webkit-mask-size:260% 100%;mask-size:260% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;animation:sweep var(--motion-light) var(--ease-out) 120ms both}

@media (prefers-reduced-motion:reduce){
  .js .hero h1 .ch{opacity:1;transform:none}
  .frame-film{display:none}
}
html.reduce-motion .js .hero h1 .ch,html.reduce-motion .hero h1 .ch{opacity:1!important;transform:none!important}
html.reduce-motion .frame-film{display:none}

/* ========================================================== v3 KV: the demo-v1 hero composition, with the Gesture ribbon redrawn as a dancer
   Art: assets/dancer.svg, generated by _tools/build_dancer.py with the same engraving as design/style-tile-v1 Gesture. */
.hero.kv{display:flex;flex-direction:column;height:auto;min-height:clamp(720px,100svh,980px);padding:112px var(--pad) 28px;background:radial-gradient(ellipse 50% 34% at 88% 0%,rgba(111,102,166,.55),transparent 70%),radial-gradient(ellipse 34% 9% at 74% 84%,rgba(255,222,192,.55),transparent 72%),radial-gradient(ellipse 52% 30% at 74% 86%,rgba(238,122,100,.5),transparent 70%),radial-gradient(ellipse 70% 50% at 70% 92%,rgba(214,67,111,.42),transparent 72%),linear-gradient(180deg,#1E0D1A 0%,#2E1229 30%,#4A1838 62%,#5A1E45 82%,#3A1330 100%)}
.kv-art img{mix-blend-mode:screen}
.kv-kicker{display:flex;justify-content:space-between;gap:24px;font:500 11px var(--sans);letter-spacing:.24em;color:rgba(217,196,214,.75)}
.kv-kicker span:first-child{color:var(--halo)}
.kv-main{position:relative;flex:1;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);align-items:center;gap:clamp(24px,4vw,64px);padding-block:clamp(20px,3vh,40px)}
.kv-copy{position:relative;display:grid;gap:clamp(22px,3.2vh,36px);align-content:center}
.kv-intro{font:italic 400 clamp(18px,1.6vw,24px)/1.35 var(--display);color:var(--lilac)}
.hero.kv h1{margin:0;font:400 clamp(96px,min(12.5vw,22svh),200px)/.86 var(--display);letter-spacing:-.03em}
.hero.kv h1 em{display:block;margin-left:.62em;font-size:1em;letter-spacing:-.03em;color:var(--halo)}
.kv-lead{max-width:440px}
.kv-lead p{font:300 clamp(17px,1.35vw,19px)/1.65 var(--sans);color:#F1DCE2}
.kv-actions{display:flex;flex-wrap:wrap;gap:12px}
.kv-art{position:relative;margin:0;align-self:stretch;min-height:440px;display:grid;place-items:center}
.kv-art img{width:auto;height:min(72svh,680px);max-width:100%;object-fit:contain;filter:drop-shadow(0 30px 40px rgba(20,8,24,.45));transform:translate3d(var(--kx,0px),var(--ky,0px),0);transition:transform 900ms var(--ease-out)}
.kv-coord{position:absolute;right:0;top:0;writing-mode:vertical-rl;font:500 10px var(--sans);letter-spacing:.24em;color:rgba(217,196,214,.6)}
.kv-art figcaption{position:absolute;right:0;bottom:0;display:grid;justify-items:end;gap:6px}
.kv-art figcaption span{font:500 10px var(--sans);letter-spacing:.24em;color:rgba(217,196,214,.6)}
.kv-art figcaption em{font:italic 400 clamp(22px,2vw,30px) var(--display);color:var(--halo)}
.kv-foot{display:flex;justify-content:space-between;align-items:end;gap:24px;padding-top:18px;border-top:1px solid rgba(255,244,234,.16);font:400 14px/1.5 var(--sans);color:var(--lilac)}
.kv-foot em{font:italic 400 20px var(--display);color:var(--halo)}
.kv-foot .scroll-cue{font:500 10px var(--sans);letter-spacing:.24em;color:#E9CBD0}
/* motion: the figure unfolds once from the floor up, then drifts slowly; the pointer tilts it a few pixels */
.js .kv-art img{clip-path:inset(100% 0 0 0);opacity:0}
.js.is-ready .kv-art img{clip-path:inset(0 0 0 0);opacity:1;transition:clip-path 1800ms var(--ease-out) 260ms,opacity 900ms ease 260ms,transform 900ms var(--ease-out);animation:kv-float 9s ease-in-out 2.2s infinite alternate}
@keyframes kv-float{from{translate:0 0}to{translate:0 -10px}}
@media (prefers-reduced-motion:reduce){.js .kv-art img{clip-path:none;opacity:1;animation:none}}
html.reduce-motion .kv-art img{clip-path:none!important;opacity:1!important;animation:none!important;transform:none!important}
@media (max-width:1100px){
  .hero.kv h1{font-size:clamp(88px,12vw,140px)}
}
@media (max-width:860px){
  .hero.kv{min-height:0;padding-top:104px}
  .kv-main{grid-template-columns:1fr;align-items:start}
  .kv-art{min-height:0}
  .kv-art figcaption{position:static;justify-items:start}
  .kv-art img{height:min(52svh,420px)}
  .kv-coord{display:none}
}
@media (max-width:640px){
  .hero.kv{padding-top:92px}
  .kv-kicker{font-size:9px;letter-spacing:.18em}
  .hero.kv h1{font-size:clamp(76px,22vw,112px)}
  .kv-actions .btn{flex:1}
  .kv-art img{height:min(48svh,360px)}
  .kv-foot{font-size:13px}
  .kv-foot em{font-size:17px}
}

/* ---------------------------------------------------------- KV spotlight
   A stage light from above: a soft beam with drifting dust, a pool of light at the dancer's feet,
   and a faint follow-spot under the pointer. The beam leans toward the pointer and sways a little when idle. */
.kv-follow{position:absolute!important;inset:0;z-index:0!important;pointer-events:none;background:radial-gradient(circle 300px at var(--fx,70%) var(--fy,40%),rgba(255,226,206,.11),transparent 70%);mix-blend-mode:screen;opacity:0;transition:opacity 700ms ease}
.hero.kv.is-pointer .kv-follow{opacity:1}
.kv-art img{position:relative;z-index:1}
.kv-coord,.kv-art figcaption{z-index:2}
.kv-beam{position:absolute;left:50%;top:-34vh;bottom:6%;width:118%;z-index:0;pointer-events:none;transform:translateX(-50%) rotate(var(--beam-r,0deg));transform-origin:50% 0;filter:blur(16px);mix-blend-mode:screen;opacity:0}
.kv-beam i,.kv-beam b{position:absolute;inset:0}
.kv-beam i{clip-path:polygon(45% 0,55% 0,100% 100%,0 100%);background:linear-gradient(180deg,rgba(255,240,228,0) 0%,rgba(255,236,222,.26) 24%,rgba(255,220,200,.17) 68%,rgba(255,204,184,.05) 100%)}
.kv-beam b{clip-path:polygon(48% 0,52% 0,74% 100%,26% 100%);background:linear-gradient(180deg,rgba(255,248,240,0) 0%,rgba(255,246,236,.30) 30%,rgba(255,232,214,.12) 80%,transparent 100%)}
.kv-pool{position:absolute;left:50%;bottom:1%;width:96%;height:22%;z-index:0;pointer-events:none;transform:translateX(-50%) scale(.6);background:radial-gradient(ellipse at center,rgba(255,232,214,.62) 0%,rgba(246,180,142,.34) 30%,rgba(214,67,111,.16) 55%,transparent 72%);filter:blur(6px);mix-blend-mode:screen;opacity:0}
.kv-dust{position:absolute;left:-9%;right:-9%;top:-34vh;bottom:6%;z-index:0;pointer-events:none;mix-blend-mode:screen;opacity:0}
.js.is-ready .kv-beam{opacity:1;transition:opacity 1800ms var(--ease-out) 700ms}
.js.is-ready .kv-pool{opacity:1;transform:translateX(-50%) scale(1);transition:opacity 1600ms var(--ease-out) 900ms,transform 1800ms var(--ease-out) 900ms}
.js.is-ready .kv-dust{opacity:1;transition:opacity 2400ms ease 1200ms}
.js.is-ready .kv-beam i{animation:beam-breathe 6s ease-in-out 2.6s infinite alternate}
@keyframes beam-breathe{0%{opacity:1}55%{opacity:.82}62%{opacity:.94}100%{opacity:.88}}
html.reduce-motion .kv-beam,html.reduce-motion .kv-pool{opacity:1!important;transform:translateX(-50%)!important}
html.reduce-motion .kv-dust,html.reduce-motion .kv-follow{display:none}
@media (prefers-reduced-motion:reduce){.kv-beam,.kv-pool{opacity:1}.kv-dust,.kv-follow{display:none}}
@media (max-width:860px){.kv-beam{top:-32px;width:100%}.kv-dust{top:-32px}}

/* ================================================================ first materials (2026-10-27): photos, films and the player */
.frame-img{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:cover}
.frame.has-media::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(180deg,rgba(35,16,30,.5),transparent 28%,transparent 52%,rgba(35,16,30,.62))}
.frame.has-media .frame-film{z-index:1}
.frame-film.has-video{background:var(--nocturne);animation:none}
.frame-film video{width:100%;height:100%;object-fit:cover;display:block}
.frame.has-media .frame-no{color:rgba(247,200,166,.8)}

.clip,.clips,.gallery{margin-top:28px}
.clip video,.clips video{display:block;width:100%;border-radius:var(--radius-card);background:#000}
.clips{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.clips video{aspect-ratio:16/9;object-fit:contain}
.clips.two{grid-template-columns:repeat(2,minmax(0,300px))}
.clips.two video{aspect-ratio:9/16}
.gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.gallery .wide{grid-column:1/-1}
.gallery img{display:block;width:100%;height:auto;aspect-ratio:2/3;object-fit:cover;object-position:50% 25%;border-radius:var(--radius-card)}
.gallery .wide img{aspect-ratio:3/2}
.clip figcaption,.clips figcaption,.gallery figcaption{margin-top:10px;font:500 11px/1.5 var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.e-photo{margin-top:22px;max-width:560px}
.e-photo img{display:block;width:100%;height:auto;border-radius:var(--radius-card)}
.about-photo{margin-top:40px;max-width:360px}
.about-photo img{display:block;width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;object-position:50% 30%;border-radius:var(--radius-card)}

.player{width:min(1100px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 32px);padding:0;border:0;border-radius:6px;background:var(--nocturne);color:var(--pearl);overflow:auto}
.player::backdrop{background:rgba(20,8,18,.84);backdrop-filter:blur(4px)}
.player-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 12px 12px 22px}
.player-title{font:500 11px/1.5 var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--lilac)}
.player .icon-btn{color:var(--pearl);border-color:rgba(255,248,243,.3)}
.player-video{display:block;width:100%;max-height:calc(100dvh - 170px);background:#000}
.player-list{display:flex;flex-wrap:wrap;gap:8px;padding:14px 22px 18px}
.player-list:empty{display:none}
.player-list button{padding:8px 16px;border:1px solid rgba(255,248,243,.3);border-radius:var(--radius-pill);background:none;color:var(--pearl);font:400 13px var(--sans);cursor:pointer}
.player-list button[aria-pressed="true"]{background:var(--pearl);color:var(--nocturne)}
@media (max-width:700px){
  .clips,.clips.two{grid-template-columns:1fr}
  .clips.two video{max-height:70vh;aspect-ratio:auto}
  .about-photo{max-width:none}
}
.player .icon-btn:hover{background:var(--pearl);border-color:var(--pearl);color:var(--nocturne)}
.contact .contact-mail{margin-top:18px;max-width:none;color:var(--halo);font:400 clamp(22px,2.4vw,32px)/1.3 var(--display)}
.contact-mail a{color:var(--halo);text-decoration:none;border-bottom:1px solid rgba(247,200,166,.4)}
.contact-mail a:hover{border-bottom-color:var(--halo)}
