:root{--ink:#10161c;--ink2:#18202a;--ivory:#ece6d9;--ivory2:#c3c2bb;--metal:#b7a57f;--metal2:#75663f;--line:#ece6d926;
 --lat:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M12 0l12 12-12 12L0 12z' fill='none' stroke='%23b7a57f' stroke-opacity='.55' stroke-width='.6'/%3E%3C/svg%3E");
 --serif:"Cormorant Garamond","Noto Serif SC",Georgia,serif;--zh:"Noto Serif SC","Cormorant Garamond",serif}
*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--ink);scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{font:400 19px/1.45 var(--serif);color:var(--ivory);background:var(--ink);overflow-x:hidden}
html[lang=zh] body{font-family:var(--zh);font-size:16px;font-weight:300;line-height:1.7}
a{color:inherit}img{display:block;max-width:100%}
h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.12}
html[lang=zh] h1,html[lang=zh] h2,html[lang=zh] h3{font-family:var(--zh);font-weight:300;letter-spacing:.12em}
.top{position:absolute;z-index:9;left:0;right:0;top:0;display:flex;justify-content:space-between;align-items:center;padding:22px 24px}
.back{font:400 15px/1 var(--zh);letter-spacing:.32em;text-decoration:none}
.lang{font:400 13px/1 var(--zh);letter-spacing:.08em;color:var(--ivory);background:none;border:0;padding:8px 0;display:flex;gap:8px;cursor:pointer}
.lang .sl{opacity:.35}.lang .on-zh{opacity:.55}html[lang=zh] .lang .on-zh{opacity:1}html[lang=zh] .lang .on-en{opacity:.55}

.hero{position:relative;height:100vh;height:100svh;min-height:600px;overflow:hidden}
.hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 62%}
.hero:after{content:"";position:absolute;inset:0;background:linear-gradient(#10161cb0 0,#10161c26 26%,#10161c55 52%,#10161cf2 84%)}
.heroCopy{position:absolute;z-index:2;left:24px;right:24px;bottom:48px;animation:fade 2.4s ease-out both}
@keyframes fade{from{opacity:0}}
.kick{font-size:14px;letter-spacing:.2em;text-transform:uppercase;color:var(--metal)}
html[lang=zh] .kick{font-size:12.5px}
.hero h1{font-size:clamp(46px,13vw,76px);margin:6px 0 10px}
.lead{max-width:34ch;color:var(--ivory)}
.quiet{display:inline-block;margin-top:18px;font-size:17px;letter-spacing:.06em;text-decoration:none;padding-bottom:5px;border-bottom:1px solid var(--metal)}
.btn{display:block;width:100%;font:500 17px/1 var(--serif);letter-spacing:.08em;color:var(--ivory);background:none;border:1px solid var(--metal);padding:16px 18px;cursor:pointer;transition:background .8s,color .8s}
.btn:hover{background:var(--metal);color:var(--ink)}
html[lang=zh] .btn{font:400 15px/1 var(--zh)}

.spreads{display:flex;gap:4px 22px;flex-wrap:wrap;padding:26px 24px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);scroll-margin-top:0}
.spreads a{font-size:18px;color:var(--ivory2);text-decoration:none;padding:4px 0;border-bottom:1px solid transparent;transition:color .8s,border-color .8s}
html[lang=zh] .spreads a{font-size:15px}
.spreads a[aria-current]{color:var(--ivory);border-color:var(--metal)}

/* The table: each spread sets its own surface, card back, frame and card size. */
.table{position:relative;padding:48px 24px 44px;background:var(--surface);transition:background 1.2s;--cw:104px;--gap:15px}
.table>*{max-width:600px;margin-left:auto;margin-right:auto}
.tableHead{margin-bottom:34px}
.tableHead h2{font-size:34px}
html[lang=zh] .tableHead h2{font-size:25px}
.tableHead p{margin-top:6px;color:var(--ivory2)}
.step{margin-bottom:30px}
.step h3{font-size:24px;margin-bottom:12px}
html[lang=zh] .step h3{font-size:18px}
.hint:empty{display:none}
.hint{color:var(--ivory2);margin:-6px 0 16px;font-size:18px}
html[lang=zh] .hint{font-size:15px}
.topics{display:flex;flex-wrap:wrap;gap:6px 22px;border-top:1px solid var(--line);padding-top:10px}
.topics button{font:400 19px/1.3 var(--serif);color:var(--ivory2);background:none;border:0;border-bottom:1px solid transparent;padding:6px 0;cursor:pointer;transition:color .6s,border-color .6s}
html[lang=zh] .topics button{font:300 16px/1.5 var(--zh)}
.topics button[aria-pressed=true]{color:var(--ivory);border-color:var(--metal)}

.deck{position:relative;height:160px;transition:height 1s,opacity .8s}
.deck.gone{height:0;opacity:0;overflow:hidden}
.back-c{position:absolute;width:50px;height:75px;border:0;cursor:pointer;padding:0;background:var(--back);background-size:cover;box-shadow:0 0 0 1px var(--edge),0 4px 8px #0007;transition:transform .6s,opacity .5s;-webkit-tap-highlight-color:transparent}
.back-c:hover,.back-c:focus-visible{transform:translateY(-5px);outline:0}
.back-c.taken{opacity:0;pointer-events:none}
.fly{position:fixed;z-index:30;pointer-events:none;transition:all .75s cubic-bezier(.4,0,.2,1)}

.slots{display:grid;justify-content:center;gap:22px var(--gap);perspective:1100px;scroll-margin-top:20px}
.slot{width:var(--cw);min-width:0}
.pos{display:block;font-size:15px;line-height:1.2;color:var(--metal);margin-bottom:7px;min-height:2.4em;display:flex;align-items:flex-end}
html[lang=zh] .pos{font-size:12.5px;min-height:1.6em}
.nm{display:block;margin-top:8px;font-size:15.5px;line-height:1.15;min-height:2.3em;color:var(--ivory)}
html[lang=zh] .nm{font-size:12.5px;line-height:1.4}
.c{position:relative;display:block;width:100%;aspect-ratio:2/3;border:0;padding:0;background:none;cursor:default;transform-style:preserve-3d;-webkit-tap-highlight-color:transparent}
.c.placed{cursor:pointer}
/* A heavy gilded card: it resists, lifts, swings over and settles past its weight. */
.c.flip{transform:rotateY(180deg);cursor:default;animation:heavy 1.9s cubic-bezier(.45,.02,.3,1) both}
@keyframes heavy{0%{transform:rotateY(0)}16%{transform:rotateY(-7deg) translateZ(14px)}58%{transform:rotateY(150deg) translateZ(46px)}84%{transform:rotateY(186deg) translateZ(8px)}100%{transform:rotateY(180deg)}}
.f{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden}
.f.em{box-shadow:inset 0 0 0 1px var(--line)}
.f.bk{opacity:0;background:var(--back);background-size:cover;box-shadow:inset 0 0 0 1px var(--edge);transition:opacity .6s}
.placed .f.bk{opacity:1}.placed .f.em{opacity:0}
.c.ready .f.bk{animation:hint 2.8s ease-in-out infinite}
@keyframes hint{50%{filter:brightness(1.35)}}
.f.fc{transform:rotateY(180deg);background:#0c0e11;display:grid;place-items:center}
.f.fc svg{width:70%;stroke:var(--metal);fill:none;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
.f.fc img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.f.fc:after,.f.bk:after{content:"";position:absolute;pointer-events:none}
.c.flip .f.fc:before{content:"";position:absolute;z-index:2;top:-20%;bottom:-20%;left:-70%;width:45%;background:linear-gradient(100deg,transparent,#e9dab366,transparent);transform:skewX(-10deg);animation:gild 1.5s .95s ease-in-out both}
@keyframes gild{to{left:130%}}

/* Three Nights: black silk, inner gold line */
[data-spread=three-nights]{--surface:radial-gradient(90% 60% at 50% 20%,#1a2029,#0c0f13 75%),#0c0f13;--edge:var(--metal);--cw:104px;
 --back:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='300'%3E%3Crect width='200' height='300' fill='%23121820'/%3E%3Cg fill='none' stroke='%23b7a57f' stroke-width='1'%3E%3Crect x='10' y='10' width='180' height='280'/%3E%3Cpath d='M100 40l60 110-60 110-60-110z'/%3E%3Cpath d='M100 90l32 60-32 60-32-60z'/%3E%3C/g%3E%3C/svg%3E")}
[data-spread=three-nights] .slots{grid-template-columns:repeat(3,var(--cw))}
[data-spread=three-nights] .f.fc:after{inset:5px;box-shadow:0 0 0 1px #d8c69cc4}

/* One Card: moonlit stone, single rule and moon pip */
[data-spread=one-card]{--surface:radial-gradient(70% 45% at 50% 0,#4a5058,transparent 75%),#22262b;--edge:#d6d3c8;--cw:148px;
 --back:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='300'%3E%3Crect width='200' height='300' fill='%232d3238'/%3E%3Cg fill='none' stroke='%23d6d3c8' stroke-width='1'%3E%3Ccircle cx='100' cy='150' r='58'/%3E%3Ccircle cx='100' cy='150' r='46'/%3E%3Ccircle cx='100' cy='150' r='3'/%3E%3C/g%3E%3C/svg%3E")}
[data-spread=one-card] .slots{grid-template-columns:var(--cw)}
[data-spread=one-card] .pos,[data-spread=one-card] .nm{justify-content:center;text-align:center;min-height:0}
[data-spread=one-card] .f.fc:after{inset:0;box-shadow:inset 0 0 0 1px #d6d3c8}

/* Two Hearts: dark lacquer, double line */
[data-spread=two-hearts]{--surface:linear-gradient(160deg,#2a1110,#150908 55%,#1f0d0c);--edge:var(--metal);--cw:104px;
 --back:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='300'%3E%3Crect width='200' height='300' fill='%232a100e'/%3E%3Cg fill='none' stroke='%23b7a57f' stroke-width='1'%3E%3Crect x='8' y='8' width='184' height='284'/%3E%3Crect x='14' y='14' width='172' height='272'/%3E%3Ccircle cx='80' cy='150' r='36'/%3E%3Ccircle cx='120' cy='150' r='36'/%3E%3C/g%3E%3C/svg%3E")}
[data-spread=two-hearts] .slots{grid-template-columns:repeat(2,var(--cw));grid-template-areas:"a b" "m m"}
[data-spread=two-hearts] .s0{grid-area:a}[data-spread=two-hearts] .s1{grid-area:b}[data-spread=two-hearts] .s2{grid-area:m;justify-self:center}
[data-spread=two-hearts] .f.fc:after{inset:0;box-shadow:inset 0 0 0 1px var(--metal),inset 0 0 0 3px #150908,inset 0 0 0 4px var(--metal)}

/* The Crossroads: brushed bronze, heavy frame */
[data-spread=crossroads]{--surface:repeating-linear-gradient(90deg,#2a2318 0 1px,#30281b 1px 3px,#262016 3px 4px);--edge:#c0a266;--cw:96px;--gap:13px;
 --back:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='300'%3E%3Crect width='200' height='300' fill='%231d1810'/%3E%3Cg fill='none' stroke='%23c0a266'%3E%3Crect x='7' y='7' width='186' height='286' stroke-width='5'/%3E%3Cpath d='M100 270V160L40 40M100 160l60-120' stroke-width='1.5'/%3E%3C/g%3E%3C/svg%3E")}
[data-spread=crossroads] .slots{grid-template-columns:repeat(3,var(--cw));grid-template-areas:"l d r" ". s ."}
[data-spread=crossroads] .s0{grid-area:s}[data-spread=crossroads] .s1{grid-area:l}[data-spread=crossroads] .s2{grid-area:r}[data-spread=crossroads] .s3{grid-area:d}
[data-spread=crossroads] .f.fc:after{inset:0;box-shadow:inset 0 0 0 3px #c0a266,inset 0 0 0 5px #1d1810,inset 0 0 0 6px #c0a26680}

/* The Long Road: ink paper with contour lines, top and bottom rules */
[data-spread=long-road]{--surface:#101722 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='220'%3E%3Cg fill='none' stroke='%23ece6d9' stroke-opacity='.06'%3E%3Cpath d='M0 170C90 90 170 150 260 90s180 40 340-30'/%3E%3Cpath d='M0 200C100 130 180 180 280 120s170 40 320-20'/%3E%3C/g%3E%3C/svg%3E");--edge:var(--ivory2);--cw:76px;--gap:12px;
 --back:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='300'%3E%3Crect width='200' height='300' fill='%23162130'/%3E%3Cg fill='none' stroke='%23c3c2bb'%3E%3Cpath d='M12 12h176M12 288h176' stroke-width='3'/%3E%3Cpath d='M20 190c30-40 50-60 80-20s50 10 80-30M20 220c30-40 50-60 80-20s50 10 80-30M20 160c30-40 50-60 80-20s50 10 80-30'/%3E%3C/g%3E%3C/svg%3E")}
[data-spread=long-road] .slots{grid-template-columns:repeat(8,calc(var(--cw)/2));column-gap:calc(var(--gap)/2)}
[data-spread=long-road] .slot{grid-column:span 2}
[data-spread=long-road] .s4{grid-column:2/span 2}
[data-spread=long-road] .pos{font-size:13.5px;min-height:1.3em}
html[lang=zh] [data-spread=long-road] .pos{font-size:12px}
[data-spread=long-road] .nm{font-size:13.5px;min-height:3.4em}
[data-spread=long-road] .f.fc:after{inset:0;border-top:2px solid var(--ivory2);border-bottom:2px solid var(--ivory2);box-shadow:inset 1px 0 0 #c3c2bb66,inset -1px 0 0 #c3c2bb66}

.reading{display:grid;margin-top:30px}
.night{display:flex;align-items:flex-start;gap:14px;padding:18px 0;border-top:1px solid var(--line);animation:fade 1.4s both}
.night>div{flex:1 1 0;min-width:0}
.night img{flex:none;width:66px;aspect-ratio:2/3;object-fit:cover;box-shadow:0 0 0 1px var(--edge)}
.night h3{font-size:23px}
html[lang=zh] .night h3{font-size:17px}
.night small{display:block;color:var(--metal);font-size:16.5px;margin:2px 0 6px}
html[lang=zh] .night small{font-size:14px}
.tale{padding:22px 20px;margin-top:10px;background:var(--ivory);color:var(--ink);animation:fade 1.6s both}
.tale h3{font-size:26px;margin-bottom:6px}
html[lang=zh] .tale h3{font-size:19px}

.pay{padding:64px 24px;border-top:1px solid var(--line)}
.pay h2{font-size:32px;margin-bottom:10px}
html[lang=zh] .pay h2{font-size:23px}
.veil{margin:18px 0 22px;filter:blur(4px);user-select:none;opacity:.7}
.price{margin:0 0 16px;font-size:16px;color:var(--ivory2)}
.price b{display:block;font:500 34px/1.15 var(--serif);color:var(--ivory)}
html[lang=zh] .price{font-size:13.5px}
.note{margin-top:12px;color:var(--ivory2)}
.next{padding:60px 24px;background:var(--ivory);color:var(--ink)}
.next h2{font-size:30px;margin-bottom:8px}
html[lang=zh] .next h2{font-size:22px}
.next .go{display:inline-block;margin-top:16px;color:var(--ink);text-decoration:none;padding-bottom:5px;border-bottom:1px solid var(--metal2)}
.next .again{display:block;margin-top:20px;background:none;border:0;font:inherit;color:#4c463b;cursor:pointer;padding:6px 0;text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}
.foot{padding:40px 24px 52px;border-top:1px solid var(--line);font-size:16px;display:grid;gap:8px;color:var(--ivory2)}
@media (min-width:760px){
  .hero img{object-position:50% 36%}.top{padding:26px 48px}.heroCopy{left:48px;bottom:64px}
  .spreads{justify-content:center;gap:4px 34px}
  .table{padding-top:72px;padding-bottom:72px}.table>*{max-width:640px}.table>.slots{max-width:880px}
  .pay,.next{padding-left:calc(50vw - 300px);padding-right:calc(50vw - 300px)}
  .deck{max-width:600px}
  [data-spread=three-nights]{--cw:136px}[data-spread=one-card]{--cw:190px}[data-spread=two-hearts]{--cw:132px}
  [data-spread=crossroads]{--cw:122px;--gap:22px}
  [data-spread=long-road]{--cw:108px;--gap:14px}
  [data-spread=long-road] .slots{grid-template-columns:repeat(7,var(--cw));column-gap:var(--gap)}
  [data-spread=long-road] .slot,[data-spread=long-road] .s4{grid-column:auto}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}html{scroll-behavior:auto}}
