[hidden]{display:none!important}
:root{color-scheme:dark;--bg:#080d1b;--panel:#111a2a;--text:#eee9dc;--muted:#acb5c7;--gold:#dbc18b;--line:#d5bc812b}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 70% 15%,#20234060,transparent 55%),var(--bg);color:var(--text);font:15px/1.65 -apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif}body:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:-1;background-image:radial-gradient(1px 1px at 30px 44px,#d4dbea77 90%,transparent),radial-gradient(1px 1px at 160px 120px,#b2bde655 90%,transparent);background-size:227px 173px,311px 257px}button,a,input,textarea{font:inherit}button{cursor:pointer;color:var(--text);background:#111a2a;border:1px solid var(--line);border-radius:8px;padding:9px 16px;min-height:44px}button:hover{border-color:var(--gold)}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:4px}a{color:var(--gold);text-decoration:none}header{height:68px;display:flex;align-items:center;justify-content:space-between;padding:0 5%;border-bottom:1px solid var(--line);background:#080d1bba}.brand{font-family:serif;letter-spacing:.3em;font-size:22px;color:var(--gold)}header button{background:none;font-size:13px}main{max-width:1220px;margin:auto;padding:0 28px}.intro{text-align:center;padding:36px 0 22px}.emblem{width:56px;height:56px;color:var(--gold)}h1{font:normal clamp(23px,3.2vw,34px)/1.4 "Songti SC",serif;letter-spacing:.08em;margin:12px 0 8px}h2{font-size:19px;font-weight:500;margin:0;color:var(--gold)}p{margin:6px 0 12px}.intro p{color:var(--muted);font-size:14px}.system-switch{display:flex;max-width:480px;margin:0 auto 34px;background:#0a1220;border:1px solid var(--line);border-radius:12px;padding:5px}.system-switch button{flex:1;border:0;background:none;text-align:left;padding:10px 20px}.system-switch strong{font-size:19px;font-weight:500;display:block}.system-switch small{font-size:11px;color:var(--muted)}.system-switch button[aria-pressed=true]{background:#d8bc8720;box-shadow:inset 0 0 0 1px #d8bc8770;color:var(--gold)}.workspace{display:grid;grid-template-columns:280px minmax(0,1fr);gap:46px}.setup{border-right:1px solid var(--line);padding-right:26px}.section-heading,.reading-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.text-button{border:0;padding:6px;color:var(--muted);font-size:12px;background:none}.filters{display:flex;flex-wrap:wrap;gap:4px;margin:12px 0}.filters button{padding:4px 10px;min-height:36px;font-size:12px;border:0;background:none;color:var(--muted)}.filters .selected{color:var(--gold);background:#dbc18b17}.spread-list{max-height:600px;overflow:auto;scrollbar-width:thin}.origin{font-size:12px;margin-top:25px;color:var(--muted)}summary{cursor:pointer;color:var(--gold);padding:10px 0}.reading{min-width:0}.reading-heading p{color:var(--muted);font-size:13px;max-width:570px}.reading-heading button{font-size:24px;flex-shrink:0;background:none}.question-label{display:block;margin:20px 0 8px;font-size:14px}textarea{resize:vertical;width:100%;min-height:80px;border:1px solid #7382a24d;background:#0c1423;color:var(--text);padding:12px 16px;border-radius:10px;outline:none;font-size:16px}textarea:focus{border-color:var(--gold)}.controls{display:flex;align-items:center;flex-wrap:wrap;gap:16px;margin:16px 0;color:var(--muted);font-size:12px}.controls label{display:flex;gap:5px;align-items:center;white-space:nowrap}.segmented{display:flex}.segmented button{min-height:38px;padding:5px 12px;font-size:13px;border-radius:0}.segmented button:first-child{border-radius:6px 0 0 6px}.segmented button:last-child{border-radius:0 6px 6px 0}.segmented button[aria-pressed=true]{color:var(--gold);background:#d8bc871b;border-color:#d8bc8766}input{accent-color:var(--gold)}.table-wrap{position:relative;isolation:isolate;border:1px solid var(--line);border-radius:16px;background:radial-gradient(ellipse at center,#25355455,transparent 70%);overflow:hidden}.orbit{position:absolute;inset:12% 10%;border:1px solid #d1b77b18;border-radius:50%;pointer-events:none}.orbit:before{content:"";position:absolute;inset:12%;border:1px solid #d1b77b10;border-radius:50%}.board{position:relative;height:410px;margin:25px 24px 32px}.board.line{height:230px}.board.celtic{height:650px;margin:65px 28px 75px}.board.circle{height:680px;margin:55px 28px 65px}.board.grand{height:570px;margin:45px 8px 65px}.slot{position:absolute;transform:translate(-50%,-50%);text-align:center;width:86px}.slot-label{font-size:12px;margin-bottom:7px;color:#c1c6d4;line-height:1.4;min-height:17px}.slot button{padding:0;border-radius:7px;display:block;width:100%;aspect-ratio:250/419;background:#111b2e;min-height:0;overflow:hidden;border:1px solid #d8bc8766;position:relative}.slot .empty{display:flex;align-items:center;justify-content:center;color:var(--gold);font:25px Georgia;background:radial-gradient(ellipse,#29354c,#0c1525)}.slot .empty:before{content:"";position:absolute;inset:5px;border:1px solid #d8bc8728;border-radius:4px}.card-image{width:100%;height:100%;object-fit:fill;display:block}.reversed{transform:rotate(180deg)}.card-name{font-size:11px;line-height:1.5;margin-top:6px;color:var(--gold)}.celtic .slot{width:70px}.circle .slot{width:64px}.grand .slot{width:55px}.grand .slot-label{font-size:10px}.grand .card-name{font-size:10px}.line.long .slot,.horseshoe .slot{width:66px}.draw-actions{display:flex;justify-content:center;gap:10px;margin:20px 0}.primary{background:var(--gold);color:#172035;border-color:var(--gold);font-weight:600}.deck-area{text-align:center}.deck{display:flex;gap:0;overflow-x:auto;padding:18px 12px 10px;scrollbar-width:thin}.deck button{padding:0;min-width:44px;width:44px;height:90px;margin-right:-7px;background:#152439 url('./back.svg') center/cover;transform:rotate(-4deg);border-color:#d8bc8788;flex-shrink:0}.deck button:hover{transform:translateY(-10px)}.deck button.used{visibility:hidden}.muted{color:var(--muted)}.small{font-size:12px}.selected-details{display:flex;flex-wrap:wrap;gap:8px}.selected-details button{font-size:12px;min-height:36px;background:none;color:var(--muted);padding:5px 10px}.purchase{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-top:30px;padding:22px 0;display:flex;align-items:center;flex-wrap:wrap;justify-content:space-between;gap:10px}.purchase strong{font-size:16px;font-weight:500}.purchase span{color:var(--gold);margin-left:8px}.purchase p,.purchase small{font-size:12px;color:var(--muted)}.purchase small{width:100%}#status{color:var(--gold);margin:14px 0}.result{white-space:pre-wrap;overflow-wrap:anywhere;font-size:16px;line-height:1.9;border-top:1px solid var(--line);padding:25px 0}.result h3{color:var(--gold);font-weight:500}footer{display:flex;gap:15px;flex-wrap:wrap;justify-content:center;color:var(--muted);font-size:11px;padding:50px 0}dialog{background:#101a2b;color:var(--text);border:1px solid #d8bc8770;border-radius:16px;max-width:700px;width:calc(100% - 30px);max-height:85dvh;padding:24px}dialog::backdrop{background:#030813cc;backdrop-filter:blur(5px)}.dialog-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.dialog-top button{font-size:22px;background:none}.library-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.library-grid button{padding:8px;font-size:12px}.library-grid img{width:100%;aspect-ratio:250/419;object-fit:contain}.detail-image{width:160px;display:block;margin:auto auto 20px}.history-row{display:block;text-align:left;width:100%;margin:10px 0;overflow-wrap:anywhere}.history-row small{display:block;color:var(--muted)}.order-summary{white-space:pre-wrap;overflow-wrap:anywhere}.confirm-row{margin:16px 0;display:flex;align-items:flex-start;gap:10px}.payment-qr{max-width:220px;display:block;margin:20px auto}.len-image{height:100%;width:100%;background-image:url('./cards/lenormand-sheet.jpg');background-repeat:no-repeat}body[dir=rtl] .setup{border-right:0;border-left:1px solid var(--line)}
@media(max-width:760px){header{height:56px;padding:0 16px;font-size:12px}.brand{font-size:19px}header button{padding:6px 10px;min-height:36px}main{padding:0 16px}.intro{padding:22px 0 16px}.emblem{height:42px;width:42px}h1{font-size:23px}.intro p{font-size:12px}.system-switch{margin-bottom:20px}.system-switch button{padding:8px 12px}.system-switch strong{font-size:17px}.system-switch small{font-size:10px}.workspace{display:block}.setup{border:0;padding:0}.filters{margin:6px 0}.spread-list{display:flex;overflow-x:auto;max-height:none;gap:7px;padding-bottom:8px;margin-bottom:10px}.origin{margin:0 0 16px}.reading-heading p{font-size:12px}.question-label{margin-top:10px}h2{font-size:18px}.controls{gap:10px}.controls label{font-size:11px}.board{height:330px;margin:24px 14px 28px}.board.line{height:195px}.slot{width:69px}.slot-label{font-size:10px}.slot .empty{font-size:21px}.board.celtic{height:450px;margin:50px 12px 55px}.celtic .slot{width:48px}.board.circle{height:450px;margin:38px 14px 50px}.circle .slot{width:43px}.board.grand{height:380px;margin:35px 2px 55px}.grand .slot{width:calc(100% / 8 - 3px)}.grand .slot-label{font-size:8px}.grand .card-name{font-size:8px}.line.long .slot,.horseshoe .slot{width:calc(100% / 7 - 5px)}.horseshoe .slot-label,.line.long .slot-label{font-size:9px}.card-name{font-size:10px}.draw-actions{gap:6px}.draw-actions button{font-size:13px;padding:8px 12px}.purchase{margin-top:20px}.purchase button{width:100%}.library-grid{grid-template-columns:repeat(3,1fr);gap:9px}dialog{padding:18px}.result{font-size:15px}footer{padding:30px 0}.deck button{min-width:44px}.selected-details{gap:4px}}
@media(prefers-reduced-motion:no-preference){.slot img{animation:reveal .4s ease-out}@keyframes reveal{from{opacity:.3}to{opacity:1}}}

.celtic .card-name,.grand .card-name,.circle .card-name{display:none}.celtic .slot-label,.grand .slot-label,.circle .slot-label{font-size:11px;min-height:0;line-height:1.2}.celtic .slot:nth-child(2) .slot-label{position:absolute;left:-8px;top:50%;z-index:3;background:#111a2a;padding:1px 3px}.celtic .slot:nth-child(1) .slot-label{margin-bottom:9px}.selected-details button{text-align:left}#detail-list>summary{font-size:13px}

/* 深空留白、完整牌阵目录与逐张发牌。 */
:root{--bg:#030711;--panel:#09101e;--gold:#cfb784;--line:#c3ac7730;--muted:#939daf}
body{background:radial-gradient(ellipse at 82% 8%,#18253d55,transparent 42%),radial-gradient(ellipse at 8% 45%,#17182e45,transparent 40%),#030711;isolation:isolate}
body:before{background:url('./sky.svg') center top/cover no-repeat;opacity:.7}
header{background:#030711b3;border-color:#c3ac771a}main{max-width:1200px}
.intro{padding:32px 0 20px}.intro h1{font-size:30px;letter-spacing:.25em;margin:0 0 8px}.intro p{letter-spacing:.12em}
.system-switch{margin-bottom:40px;max-width:420px;background:#070e1b99;border-radius:8px}.system-switch strong{font-size:17px}
.workspace{display:block}.setup{border:0;padding:0 0 36px;max-width:820px;margin:auto}.section-heading{margin-bottom:16px}.filters{gap:6px;margin:0 0 24px}
.spread-list{display:block;max-height:none;overflow:visible;margin:0;padding:0}.spread-group{margin:0 0 24px}.spread-group h3{font-size:12px;letter-spacing:.12em;color:var(--muted);font-weight:400;margin:0 0 12px;display:flex;align-items:center;gap:12px}.spread-group h3:after{content:'';height:1px;background:#aebaca16;flex:1}
.spread-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.spread-option{display:flex;align-items:stretch;min-width:0;min-height:52px;border:1px solid #78899d2a;border-radius:9px;background:#0a111dcc;overflow:hidden}
.spread-option.selected{border-color:#cfb78488;background:#cfb7840d}
.spread-name{flex:1;min-width:0;padding:12px 14px;border:0;border-radius:0;background:transparent;text-align:left;text-wrap:balance;font-size:14px;line-height:1.5;overflow-wrap:anywhere}
.spread-word{white-space:nowrap}.spread-heart{flex:0 0 44px;padding:0;border:0;border-radius:0;background:transparent;color:#929caf;font:26px/1 Georgia;min-height:48px}
.spread-heart.is-favorite{color:var(--gold)}
.spread-option.selected .spread-name{color:var(--gold)}
.spread-name:hover,.spread-heart:hover{background:#cfb7840b}
.origin{margin-top:18px}
.reading{max-width:820px;margin:auto;border-top:1px solid var(--line);padding-top:30px}.reading-heading{scroll-margin-top:24px}.reading-heading p{margin-top:10px}.controls{margin:22px 0}.table-wrap{scroll-margin-top:20px;border:1px solid #7c8ba126;border-radius:12px;background:radial-gradient(ellipse at 50% 70%,#182d4840,transparent 70%),#050b1580}.board{height:470px}.board.square{height:510px}.board.grid{height:650px}.board.cross,.board.fork{height:620px}.slot-label{height:34px;display:flex;align-items:flex-end;justify-content:center;font-size:12px;line-height:1.45;margin-bottom:10px}.card-name{height:30px;margin-top:9px;line-height:1.5}.celtic .slot-label,.grand .slot-label,.circle .slot-label{height:16px}.slot button{box-shadow:0 8px 24px #0006;background:#0a1321}.slot .empty{background:linear-gradient(140deg,#14203388,#080e1b);border-color:#b59c623d}.slot .empty:before{inset:6px}.slot .card-image{animation:reveal .3s ease-out}
.deck-area{margin:24px auto 0;max-width:760px;overflow:hidden}.deck-area>p{font-size:12px;letter-spacing:.06em}.deck{position:relative;padding:20px 14px 12px;min-height:132px;mask-image:linear-gradient(90deg,transparent,#000 3%,#000 97%,transparent)}.deck button{width:53px;min-width:53px;height:100px;margin-right:-15px;box-shadow:0 4px 12px #0009;border-radius:5px;background-color:#091422}.deck button.drawing{opacity:.25}.flying-card{position:fixed;z-index:60;pointer-events:none;transform-origin:top left;border:1px solid #d0b675aa;border-radius:5px;background:#091422 url('./back.svg') center/100% 100%;box-shadow:0 12px 40px #000b,0 0 20px #c6ad7333}.draw-actions{margin:18px 0 28px}.primary{background:#c9b181;border-color:#c9b181}.purchase{margin-top:34px}
@media(max-width:760px){
 main{padding:0 18px}.intro{padding:24px 0 16px}.intro h1{font-size:27px}.system-switch{margin-bottom:28px}.setup{padding-bottom:22px}.spread-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.spread-name{padding:10px;font-size:13px}.spread-option{min-height:50px}.spread-group{margin-bottom:22px}.filters{margin-bottom:18px}.filters button{min-height:36px;padding:4px 11px}.reading{padding-top:24px}.reading-heading{scroll-margin-top:16px}.board{height:390px;margin:26px 12px 36px}.board.square{height:420px}.board.grid{height:480px}.board.grid .slot{width:57px}.board.cross,.board.fork{height:470px}.slot-label{font-size:10px;height:30px;margin-bottom:8px}.card-name{font-size:10px;height:28px;margin-top:8px}.table-wrap{scroll-margin-top:12px}.deck-area{margin-top:18px}.deck{min-height:114px;padding-top:15px}.deck button{width:46px;min-width:46px;height:86px;margin-right:-13px}.deck-area>p{font-size:11px}.draw-actions button{min-height:42px}.board.grand{height:380px}.board.celtic{height:450px}.board.circle{height:450px}
}
@media(max-width:350px){main{padding:0 12px}.spread-name{padding:9px 8px;font-size:12px}}

.cut-landing{width:65px;margin:0 25px 24px auto;text-align:center;font-size:11px;color:var(--muted)}.cut-landing button{display:block;width:100%;aspect-ratio:250/419;padding:0;overflow:hidden;margin-top:8px;background:#101b30;border-color:#b59c6244}.cut-landing .empty{color:var(--gold);font-size:25px}

/* 密集牌阵将编号收在各自牌面内，避免遮住相邻牌。 */
.circle .slot-label{position:absolute;top:4px;right:4px;z-index:3;width:17px;height:17px;min-height:0;margin:0;align-items:center;border:1px solid #cfb78466;border-radius:50%;background:#07101fea;color:#e4d3ac;font-size:9px;line-height:1}.celtic .slot:nth-child(2) .slot-label{left:auto;right:-13px;top:calc(50% - 8px);width:16px;height:16px;padding:0;align-items:center;border:1px solid #cfb78466;border-radius:50%;background:#07101fea;color:#e4d3ac;font-size:9px;line-height:1}

.circle .slot{width:clamp(32px,12%,64px)}@media(max-width:760px){.circle .slot{width:clamp(32px,12%,43px)}}

/* Touch: retain the selected pile position and contain long dialog scrolling. */
.deck{overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y}
button,a{touch-action:manipulation}dialog{overscroll-behavior:contain} .flying-card{will-change:transform}
@media(hover:none){.deck button:hover{transform:none}button:active:not(:disabled){filter:brightness(1.12)}}
@media(prefers-reduced-motion:reduce){.card-image{animation:none!important}.deck button{transition:none}}

html:has(dialog[open]){overflow:hidden}
