:root{--ink:#45332b;--ink-soft:#8d7a6d;--paper:#fff7ea;--paper-deep:#ffeacb;--panel:#fffdf7;--line:#f0dfc6;--line-strong:#e6cfae;--brand:#ff7a45;--brand-deep:#ef5f2a;--brand-ink:#fff;--mint:#16a394;--sky:#58c4f0;--good:#2ec27e;--warn:#ff5a5f;--sun:#ffd166;--ticket-red:#ff5a5f;--ticket-orange:#ff9f43;--ticket-green:#2ec27e;--ticket-blue:#4b7bec;--ticket-purple:#a55eea;--radius-xl:34px;--radius-lg:26px;--radius:20px;--radius-sm:14px;--shadow-soft:0 6px 0 #d6b08059;--shadow-card:0 10px 24px #b07c442e, 0 2px 0 #d6b08066;--shadow-float:0 18px 38px #96643247;--shadow-inset:inset 0 -4px 0 #0000000f;--ease-bounce:cubic-bezier(.34, 1.56, .64, 1);--ease-out:cubic-bezier(.22, .8, .28, 1);--z-map:1;--z-toast:90;--z-sheet:60;--z-roll:80;--hud-width:clamp(276px, 24vw, 344px);font-variant-numeric:tabular-nums;font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{min-height:100%}body{color:var(--ink);background-color:var(--paper);-webkit-tap-highlight-color:transparent;background-image:radial-gradient(circle at 12% 8%,#ffd16659,#0000 42%),radial-gradient(circle at 88% 0,#58c4f040,#0000 38%),radial-gradient(#d6b08047 1.5px,#0000 1.6px);background-size:auto,auto,22px 22px;margin:0;line-height:1.65}h1,h2,h3{letter-spacing:-.01em;text-wrap:balance;margin:0 0 10px}h1{font-size:clamp(1.6rem,3.4vw,2.3rem);font-weight:800}h2{font-size:1.1rem;font-weight:700}a{color:var(--mint);font-weight:600}:focus-visible{outline:3px solid var(--brand);outline-offset:3px;border-radius:8px}.skip-link{z-index:999;background:var(--panel);border-radius:0 0 var(--radius) 0;padding:10px 16px;font-weight:700;position:absolute;top:0;left:-9999px}.skip-link:focus{left:0}.button{min-height:50px;color:var(--ink);border:2px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow-soft);cursor:pointer;transition:transform .16s var(--ease-bounce), box-shadow .16s ease, filter .16s ease;background:linear-gradient(#fffdf7,#ffeed6);padding:12px 20px;font-family:inherit;font-size:1.02rem;font-weight:700;position:relative;overflow:hidden}.button:hover:not(:disabled){filter:brightness(1.03);transform:translateY(-2px)}.button:active:not(:disabled){transform:translateY(2px)scale(.98);box-shadow:0 2px #d6b08073}.button:disabled{opacity:.5;box-shadow:none;cursor:not-allowed}.button--primary{color:var(--brand-ink);background:linear-gradient(180deg, #ffa06b, var(--brand) 55%, var(--brand-deep));border-color:#e2551f;box-shadow:0 6px #d4551f,0 12px 24px #d6551f47}.button--primary:active:not(:disabled){box-shadow:0 2px #d4551f}.button--primary:after{content:"";pointer-events:none;background:linear-gradient(100deg,#0000,#ffffff8c,#0000);width:40%;height:100%;animation:3.6s ease-in-out infinite shine;position:absolute;top:0;left:-60%;transform:skew(-18deg)}@keyframes shine{0%,62%{left:-60%}78%,to{left:120%}}.button--ghost{box-shadow:none;color:var(--ink-soft);background:0 0;border-color:#0000}.button--ghost:hover:not(:disabled){color:var(--ink);background:#ffffffb3}.button--big{width:100%;min-height:64px;font-size:1.3rem}.button--giant{border-radius:var(--radius-lg);width:100%;min-height:78px;font-size:1.75rem}.panel{background:var(--panel);border:2px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);animation:panel-in .32s var(--ease-out) both;padding:14px 16px}@keyframes panel-in{0%{opacity:0;transform:translateY(8px)}}.panel--soft{background:linear-gradient(#fffdf7,#fff3e0)}.panel-note{color:var(--ink-soft);margin:8px 0 0;font-size:.9rem}.panel-note--tiny{font-size:.78rem}.home{gap:18px;max-width:980px;margin:0 auto;padding:26px 20px 56px;display:grid}.home__hero{grid-template-columns:minmax(200px,330px) 1fr;align-items:center;gap:22px;display:grid}@media (width<=720px){.home__hero{grid-template-columns:1fr}}.home__thumb{border-radius:var(--radius-lg);width:100%;box-shadow:var(--shadow-card);border:4px solid #fff;animation:5.5s ease-in-out infinite thumb-float;display:block;transform:rotate(-1.2deg)}@keyframes thumb-float{0%,to{transform:rotate(-1.2deg)translateY(0)}50%{transform:rotate(-.4deg)translateY(-6px)}}.home__actions{flex-wrap:wrap;gap:12px;margin-top:14px;display:flex}.home__import{cursor:pointer;justify-content:center;align-items:center;min-height:64px;font-size:1.3rem;font-weight:700;display:inline-flex}.home__import input{display:none}.home__error{color:var(--warn);font-weight:600}.auto-save{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}.slot-list{gap:10px;margin:0;padding:0;list-style:none;display:grid}.slot{border:2px dashed var(--line-strong);border-radius:var(--radius);background:#fffdf7;padding:12px 14px}.slot:not(.slot--empty){background:linear-gradient(#fffdf7,#fff6e6);border-style:solid}.slot--current{border-color:var(--brand)}.slot__head{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.slot__no{font-weight:800}.slot__time{color:var(--ink-soft);font-size:.8rem}.slot__info{color:var(--ink-soft);margin:6px 0 0;font-size:.86rem}.slot__info--empty{color:#c2b3a4}.slot__actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.slot__actions .button{min-height:42px;padding:6px 14px;font-size:.92rem}.save-panel{gap:12px;max-width:580px;max-height:88vh;display:grid;overflow:auto}.save-panel__foot{flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.setup{gap:18px;max-width:820px;margin:0 auto;padding:28px 20px 56px;display:grid}.setup-lead{color:var(--ink-soft);max-width:60ch;margin:0}.count-row{flex-wrap:wrap;gap:10px;margin-bottom:12px;display:flex}.name-grid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;margin-bottom:14px;display:grid}.name-field{border:2px solid var(--line);border-radius:var(--radius);transition:border-color .16s ease, transform .16s var(--ease-bounce);background:#fffdf7;align-items:center;gap:8px;padding:6px 10px;display:flex}.name-field:focus-within{border-color:var(--brand);transform:translateY(-2px)}.name-field input{color:var(--ink);background:0 0;border:none;width:100%;padding:8px 0;font-family:inherit;font-size:1.05rem;font-weight:600}.name-field input:focus{outline:none}.player-dot{border-radius:50%;flex:none;width:18px;height:18px;display:inline-block;box-shadow:inset 0 0 0 3px #fff,0 2px #0000001f}.setup-tips{color:var(--ink-soft);margin:0;padding-left:20px;line-height:1.95}.ai-moods{color:var(--ink-soft);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:14px;font-size:.92rem;display:flex}.ai-moods .button{min-height:40px;padding:4px 14px;font-size:.92rem}.game-screen{min-height:100dvh;position:relative;overflow:hidden}.map-stage{padding:6px calc(var(--hud-width) + 18px) 6px 6px;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.game-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.turn-banner{border:2px solid var(--line);box-shadow:var(--shadow-card);animation:banner-in .42s var(--ease-bounce) both;background:linear-gradient(#fffdf7,#fff3dd);border-radius:999px;align-items:center;gap:10px;padding:10px 20px;font-size:1.1rem;font-weight:600;display:flex}@keyframes banner-in{0%{opacity:0;transform:translate(-18px)scale(.96)}}.turn-dot{border-radius:50%;width:20px;height:20px;box-shadow:0 0 0 3px #fff,0 2px #0000001f}.turn-number{color:var(--ink-soft);font-size:.85rem}.header-actions{gap:8px;display:flex}.game-body{flex:1;grid-template-columns:minmax(0,1fr) 350px;align-items:start;gap:12px;min-height:0;display:grid}@media (width<=900px){.game-body{grid-template-columns:1fr;overflow:auto}}.map-wrap{flex-direction:column;width:100%;min-width:0;max-width:calc(116.39dvh - 16.2946px);margin:0 auto;display:flex;position:relative}.map-frame{width:100%;position:relative}.map-overlay{pointer-events:none;position:absolute;inset:0}.map-overlay>*{pointer-events:auto}.map-viewport{touch-action:none;border-radius:var(--radius-xl);box-shadow:var(--shadow-card);aspect-ratio:3063/2632;cursor:grab;width:100%;z-index:var(--z-map);background:#e8f2f8;border:4px solid #fff;position:relative;overflow:hidden}.map-viewport:active{cursor:grabbing}.map-viewport--pointing{cursor:pointer}.map-canvas{transform-origin:0 0;transition:transform 80ms linear;position:absolute;inset:0}.map-image{-webkit-user-select:none;user-select:none;width:100%;display:block}.map-svg,.map-pieces{width:100%;height:100%;position:absolute;inset:0}.map-pieces{pointer-events:none}.map-ring{transform-box:fill-box;transform-origin:50%;animation:1.9s ease-in-out infinite ring-pulse}@keyframes ring-pulse{0%,to{opacity:.95;transform:scale(1)}50%{opacity:.55;transform:scale(1.07)}}.piece{color:#fff;width:32px;height:32px;transition:left .3s var(--ease-out), top .3s var(--ease-out);animation:piece-hop .36s var(--ease-bounce);border:3px solid #fff;border-radius:50%;justify-content:center;align-items:center;margin:-16px 0 0 -16px;font-size:.85rem;font-weight:800;display:flex;position:absolute;box-shadow:0 4px 10px #5a3c1e59}@keyframes piece-hop{0%{transform:translateY(-16px)scale(.82)}60%{transform:translateY(3px)scale(1.08)}to{transform:translateY(0)scale(1)}}.piece--active{animation:piece-hop .36s var(--ease-bounce), piece-glow 1.8s ease-in-out .36s infinite}@keyframes piece-glow{0%,to{box-shadow:0 4px 10px #5a3c1e59,0 0 #fffc}50%{box-shadow:0 4px 10px #5a3c1e59,0 0 0 10px #fff0}}.map-burst{pointer-events:none;width:0;height:0;animation:.95s ease-out forwards burst-fade;position:absolute}.map-burst span{background:var(--sun);width:11px;height:11px;animation:sparkle .95s var(--ease-out) forwards;border-radius:50%;margin:-5px 0 0 -5px;position:absolute}.map-burst span:nth-child(3n){background:var(--ticket-green)}.map-burst span:nth-child(3n+1){background:var(--ticket-blue)}@keyframes sparkle{0%{transform:rotate(calc(var(--i) * 36deg)) translateY(-6px) scale(.5);opacity:1}to{transform:rotate(calc(var(--i) * 36deg)) translateY(-58px) scale(.15);opacity:0}}@keyframes burst-fade{0%,70%{opacity:1}to{opacity:0}}.map-toast{z-index:7;color:#fff;box-shadow:var(--shadow-float);animation:toast-in .2s var(--ease-bounce);background:#45332bf0;border-radius:999px;padding:12px 20px;font-size:.95rem;font-weight:600;position:absolute;top:78px;left:50%;transform:translate(-50%)}.map-shell{min-width:0;position:relative}.map-turn{z-index:6;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:var(--shadow-card);animation:banner-in .42s var(--ease-bounce) both;background:#fffdf7ed;border:2px solid #ffffffd9;border-radius:999px;align-items:center;gap:8px;padding:8px 18px;font-weight:700;display:flex;position:absolute;top:14px;left:14px}.map-turn__phase{color:var(--ink-soft);font-size:.92rem;font-weight:600}.map-tools{z-index:6;gap:8px;display:flex;position:absolute;top:14px;right:14px}.tool-button{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:50px;height:50px;box-shadow:var(--shadow-card);cursor:pointer;transition:transform .16s var(--ease-bounce);background:#fffdf7ed;border:2px solid #ffffffe6;border-radius:50%;place-items:center;font-family:inherit;font-size:1.15rem;display:grid}.tool-button span{font-size:.9rem;font-weight:800}.tool-button:hover{transform:translateY(-2px)scale(1.05)}.tool-button:active{transform:scale(.94)}.map-bottom{z-index:6;justify-content:space-between;align-items:flex-end;gap:10px;display:flex;position:absolute;bottom:14px;left:14px;right:14px}.map-where{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:var(--shadow-card);background:#fffdf7ed;border:2px solid #ffffffd9;border-radius:999px;padding:8px 16px;font-weight:700}.map-action{border-radius:999px;min-height:64px;padding:10px 38px;font-size:1.4rem}.roll-card__recap{text-align:left;border:2px dashed var(--line-strong);border-radius:var(--radius);background:#fff6e6e6;max-height:168px;margin-top:16px;padding:10px 12px;overflow:auto}.roll-card__recap-title{margin-bottom:4px;font-size:.9rem;font-weight:800;display:block}.roll-card__recap ul{color:var(--ink-soft);gap:2px;margin:0;padding-left:18px;font-size:.84rem;display:grid}.hud{z-index:10;width:var(--hud-width);flex-direction:column;gap:12px;padding:2px 4px 12px 2px;display:flex;position:absolute;top:12px;bottom:12px;right:12px;overflow:auto}.button--hud{border-radius:999px;min-height:44px;padding:8px 14px;font-size:.95rem}.hud-turn{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);background:linear-gradient(#fffdf7f0,#fff3ddf0);border:3px solid #ffe0b0;padding:14px}.hud-turn__who{align-items:center;gap:12px;display:flex}.hud-avatar{color:#fff;border:4px solid #fff;border-radius:50%;place-items:center;width:52px;height:52px;font-size:1.4rem;font-weight:900;animation:2.6s ease-in-out infinite avatar-bob;display:grid;box-shadow:0 4px 10px #5a3c1e4d}@keyframes avatar-bob{0%,to{transform:translateY(0)rotate(-3deg)}50%{transform:translateY(-4px)rotate(3deg)}}.hud-turn__names{flex:1;gap:2px;min-width:0;display:grid}.hud-turn__names strong{align-items:center;gap:6px;font-size:1.15rem;display:flex}.hud-turn__where{color:var(--ink-soft);font-size:.86rem}.hud-turn__score{color:var(--brand-deep);white-space:nowrap;font-size:1.5rem;font-weight:900}.hud-turn__score i{margin-left:2px;font-size:.8rem;font-style:normal}.wallet{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.coin{aspect-ratio:1;background:radial-gradient(circle at 35% 28%, #ffffff8c, transparent 55%), var(--coin-color);color:#fff;width:100%;animation:chip-bounce .4s var(--ease-bounce);border-radius:50%;align-content:center;place-items:center;display:grid;box-shadow:0 5px #00000024,0 8px 16px #96643233}.coin b{text-shadow:0 2px #00000029;font-size:clamp(.95rem,1.4vw,1.35rem);font-weight:900;line-height:1}.coin i{opacity:.95;font-size:clamp(.56rem,.75vw,.72rem);font-style:normal}.coin--empty{color:#b9a894;background:#f2e9da;animation:none;box-shadow:inset 0 0 0 2px #e6d8c2}.coin--empty b{text-shadow:none}.hud-turn__roll{color:var(--ink-soft);align-items:center;gap:8px;margin:12px 0 0;font-size:.85rem;display:flex}.roll-chip{color:#fff;border-radius:999px;padding:2px 12px;font-size:.85rem;font-weight:800;box-shadow:0 3px #00000024}.hud-cities{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:3px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);background:#fffdf7ed;padding:12px 12px 8px}.hud-cities--wait{text-align:center;padding:18px 14px}.hud-cities__head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;display:flex}.hud-cities__head h3{margin:0;font-size:1rem}.hud-filter{color:var(--ink-soft);align-items:center;gap:6px;font-size:.78rem;display:flex}.hud-empty{color:var(--ink-soft);margin:6px 0;font-size:.9rem}.city-tray{scroll-snap-type:x proximity;scrollbar-width:none;gap:10px;padding:2px 2px 8px;display:flex;overflow-x:auto}.city-tile{scroll-snap-align:start;border:3px solid var(--line);border-radius:var(--radius);color:inherit;cursor:pointer;transition:transform .16s var(--ease-bounce), box-shadow .16s ease;animation:row-in .34s var(--ease-out) both;background:linear-gradient(#fffdf7,#fff4e2);flex:0 0 126px;justify-items:center;gap:4px;padding:12px 8px;font-family:inherit;display:grid;box-shadow:0 5px #d6b08066}.city-tile:hover{transform:translateY(-3px);box-shadow:0 8px #d6b08066}.city-tile:active{transform:translateY(1px)scale(.97);box-shadow:0 3px #d6b08066}.city-tile--gain{background:linear-gradient(#f4fff9,#e2f8ec);border-color:#9fe0bd}.city-tile--more{color:var(--ink-soft);box-shadow:none;border-style:dashed;flex:0 0 96px;font-size:.86rem}.city-tile__name{font-size:1.05rem;font-weight:800}.city-tile__score{background:linear-gradient(180deg, #ffa06b, var(--brand));color:#fff;border-radius:999px;padding:1px 10px;font-size:.76rem;font-weight:800}.city-tile__score--none{color:var(--ink-soft);background:#f0e6d6}.city-tile__costs{display:block}.city-tile__gain{color:#1a6d45;font-size:.72rem;font-weight:700}.city-all{max-width:720px;max-height:88vh;overflow:auto}.city-all__grid{grid-template-columns:repeat(auto-fill,minmax(126px,1fr));gap:10px;margin:12px 0;display:grid}.hud-cards{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:3px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);background:#fffdf7ed;padding:12px}.hud-cards__head{justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:10px;display:flex}.hud-cards__head h3{margin:0;font-size:1rem}.hud-cards__tip{color:var(--ink-soft);font-size:.76rem}.card-hand{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.card-hand .city-card:first-child{transform:rotate(-2.5deg)}.card-hand .city-card:nth-child(3){transform:rotate(2.5deg)}.card-hand .city-card:hover{transform:translateY(-4px)rotate(0)}.city-card--3,.city-card--4{background:linear-gradient(#fff6e2,#ffe9c9);border-color:#f0b96b}.hud-cards__note{color:var(--ink-soft);margin:10px 0 0;font-size:.76rem}.hud-players{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:3px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);background:#fffdf7ed;padding:10px}.player-chips{flex-wrap:wrap;gap:8px;display:flex}.player-chip{border:2px solid var(--line);border-radius:var(--radius-sm);color:inherit;text-align:left;cursor:pointer;transition:transform .16s var(--ease-bounce);background:#fffdf7;flex:132px;grid-template-columns:auto 1fr;grid-template-areas:"dot name""dot stats";align-items:center;gap:0 8px;padding:8px 10px;font-family:inherit;display:grid}.player-chip:hover{transform:translateY(-2px)}.player-chip--current{border-color:var(--sun);background:linear-gradient(#fff6dd,#ffe9b8);box-shadow:0 0 0 3px #ffd16673}.player-chip__dot{color:#fff;border:3px solid #fff;border-radius:50%;grid-area:dot;place-items:center;width:30px;height:30px;font-size:.85rem;font-weight:800;display:grid}.player-chip__name{white-space:nowrap;text-overflow:ellipsis;grid-area:name;font-size:.9rem;font-weight:700;overflow:hidden}.player-chip__stats{color:var(--ink-soft);grid-area:stats;font-size:.76rem}.player-chip__stats b{color:var(--brand-deep);font-size:.9rem}.player-chip__turn{color:#8a5a00;grid-column:1/-1;margin-top:4px;font-size:.72rem;font-weight:700}.hud-log{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:3px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);background:#fffdf7ed;align-items:center;gap:10px;padding:8px 12px;display:flex}.hud-log__line{min-width:0;color:var(--ink-soft);white-space:nowrap;text-overflow:ellipsis;animation:log-in .3s var(--ease-out);flex:1;margin:0;font-size:.86rem;overflow:hidden}.hud-log__icon{margin-right:4px}.hud-log__more{white-space:nowrap;min-height:34px;padding:2px 10px;font-size:.8rem}.log-list--full{max-height:60vh;margin:10px 0;overflow:auto}.cards-sheet{max-width:680px;max-height:88vh;overflow:auto}.settings-sheet{gap:12px;max-width:460px;display:grid}.switch-row{border:2px solid var(--line);border-radius:var(--radius);cursor:pointer;background:#fffdf7;justify-content:space-between;align-items:center;gap:14px;padding:12px 14px;display:flex}.switch-row span{gap:2px;display:grid}.switch-row strong{font-size:1.02rem}.switch-row em{color:var(--ink-soft);font-size:.8rem;font-style:normal}.switch-row input[type=checkbox]{appearance:none;cursor:pointer;background:#e6d8c2;border:2px solid #d9c6a8;border-radius:999px;flex:none;width:62px;height:34px;transition:background .18s,border-color .18s;position:relative}.switch-row input[type=checkbox]:after{content:"";width:26px;height:26px;transition:transform .18s var(--ease-bounce);background:#fff;border-radius:50%;position:absolute;top:2px;left:2px;box-shadow:0 2px #0000001f}.switch-row input[type=checkbox]:checked{background:linear-gradient(180deg, #43d493, var(--good));border-color:#24a86c}.switch-row input[type=checkbox]:checked:after{transform:translate(28px)}.mini-grid{flex-wrap:wrap;gap:8px;margin:8px 0 16px;display:flex}.mini-grid--deck{border:2px dashed var(--line-strong);border-radius:var(--radius);background:#fffdf7;max-height:40vh;padding:8px;overflow:auto}.side{flex-direction:column;gap:12px;max-height:100%;padding:2px 4px 12px 2px;display:flex;overflow:auto}.dice-panel{justify-items:center;gap:8px;padding:12px;display:grid}.dice-panel__label{margin:0}.die{color:#fff;text-shadow:0 2px #0000002e;width:78px;height:78px;animation:dice-pop .36s var(--ease-bounce);border-radius:22px;justify-content:center;align-items:center;font-size:1.7rem;font-weight:900;display:flex;box-shadow:0 6px #0000001f,0 10px 18px #96643240}.die--small{width:62px;height:62px;font-size:1.4rem}@keyframes dice-pop{0%{opacity:.35;transform:rotate(-16deg)scale(.66)}60%{transform:rotate(7deg)scale(1.08)}to{transform:rotate(0)scale(1)}}.color-choice{text-align:center;width:100%}.color-choice__row{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.ticket-button{border-radius:var(--radius-sm);color:#fff;cursor:pointer;width:56px;height:56px;transition:transform .16s var(--ease-bounce);border:3px solid #fff;font-size:1.15rem;font-weight:800;box-shadow:0 5px #00000024}.ticket-button:hover{transform:translateY(-3px)rotate(-3deg)}.ticket-button:active{transform:translateY(2px)scale(.96)}.ticket-button--big{width:64px;height:64px;font-size:1.3rem}.move-actions{gap:8px;display:grid}.roll-overlay{z-index:var(--z-roll);background:radial-gradient(circle at 50% 34%, #fff8e2f5, #ffd699eb 46%, #784e289e), var(--paper-deep);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);animation:overlay-in .24s var(--ease-out);place-items:center;padding:20px;display:grid;position:fixed;inset:0;overflow:hidden}.roll-overlay--tail{pointer-events:none;animation:1.9s ease-in forwards overlay-out}@keyframes overlay-in{0%{opacity:0}}@keyframes overlay-out{0%,55%{opacity:1}to{opacity:0}}.roll-overlay__confetti{pointer-events:none;position:absolute;inset:0}.roll-overlay__confetti span{top:-24px;left:calc(2% + var(--i) * 6.8%);background:var(--sun);opacity:.9;width:11px;height:15px;animation:3.6s linear infinite confetti-fall;animation-delay:calc(var(--i) * -.26s);border-radius:3px;position:absolute}.roll-overlay__confetti span:nth-child(3n){background:var(--ticket-green)}.roll-overlay__confetti span:nth-child(3n+1){background:var(--ticket-blue);border-radius:50%}@keyframes confetti-fall{0%{opacity:0;transform:translateY(-10px)rotate(0)}12%{opacity:.95}to{opacity:.9;transform:translateY(105vh)rotate(420deg)}}.roll-card{text-align:center;border-radius:var(--radius-xl);min-width:min(92vw,400px);max-width:92vw;box-shadow:var(--shadow-float), 0 0 0 6px #ffffffa6;animation:card-pop .42s var(--ease-bounce);background:linear-gradient(#fffdf7,#fff4e2);padding:26px 30px 30px;position:relative}@keyframes card-pop{0%{opacity:0;transform:scale(.86)translateY(18px)}to{opacity:1;transform:scale(1)translateY(0)}}.roll-card__who{justify-content:center;align-items:center;gap:10px;margin:0 0 6px;font-size:1.35rem;font-weight:800;display:flex}.roll-card__result{margin:4px 0 16px;font-size:1.3rem;font-weight:700}.roll-card__result strong{font-size:1.6rem}.roll-card__hint{color:var(--ink-soft);margin:12px 0 0;font-size:.9rem}.roll-card__hint--thinking{margin-top:18px;font-size:1.05rem;animation:1.4s ease-in-out infinite thinking-pulse}@keyframes thinking-pulse{0%,to{opacity:.55}50%{opacity:1}}.die-stage{perspective:900px;perspective-origin:50% 42%;width:136px;height:136px;margin:40px auto 18px;position:relative}.die-shadow{filter:blur(3px);background:#784e284d;border-radius:50%;width:96px;height:18px;margin-left:-48px;animation:2.4s ease-in-out infinite shadow-breathe;position:absolute;bottom:-26px;left:50%}.die-shadow--landed{animation:shadow-land .92s var(--ease-out) forwards}@keyframes shadow-breathe{0%,to{opacity:.32;transform:scale(1)}50%{opacity:.2;transform:scale(.84)}}@keyframes shadow-land{0%{opacity:.12;transform:scale(.5)}14%{opacity:.34;transform:scale(1.12)}26%{opacity:.18;transform:scale(.74)}40%{opacity:.32;transform:scale(1.08)}54%{opacity:.22;transform:scale(.84)}68%{opacity:.3;transform:scale(1.04)}80%{opacity:.26;transform:scale(.94)}90%{opacity:.31;transform:scale(1.02)}to{opacity:.32;transform:scale(1)}}.die-cube{width:100%;height:100%;transform-style:preserve-3d;cursor:pointer;position:relative}.die-cube--idle{animation:2.8s ease-in-out infinite die-float}@keyframes die-float{0%,to{transform:rotateX(-12deg)rotateY(-16deg)translateY(0)}50%{transform:rotateX(-6deg)rotateY(-2deg)translateY(-8px)}}.die-cube--tumble{animation:.92s cubic-bezier(.25,.9,.3,1) forwards die-tumble}.die-cube--skip{animation-duration:.14s}@keyframes die-tumble{0%{transform:translateY(-58px) rotateX(calc(var(--die-x) * .12 - 22deg)) rotateY(calc(var(--die-y) * .12 - 34deg)) rotateZ(0deg) scale(.86);animation-timing-function:cubic-bezier(.55,0,1,.45)}14%{transform:translateY(0) rotateX(calc(var(--die-x) * .3 + 20deg)) rotateY(calc(var(--die-y) * .3 + 30deg)) rotateZ(96deg) scaleX(1.08) scaleY(.93);animation-timing-function:cubic-bezier(.2,.9,.3,1)}26%{transform:translateY(-34px) rotateX(calc(var(--die-x) * .5 - 16deg)) rotateY(calc(var(--die-y) * .5 - 22deg)) rotateZ(186deg) scale(.97);animation-timing-function:cubic-bezier(.55,0,1,.45)}40%{transform:translateY(0) rotateX(calc(var(--die-x) * .68 + 12deg)) rotateY(calc(var(--die-y) * .68 + 14deg)) rotateZ(268deg) scaleX(1.06) scaleY(.95);animation-timing-function:cubic-bezier(.2,.9,.3,1)}54%{transform:translateY(-18px) rotateX(calc(var(--die-x) * .82 - 9deg)) rotateY(calc(var(--die-y) * .82 - 11deg)) rotateZ(318deg) scale(.99);animation-timing-function:cubic-bezier(.5,0,1,.5)}68%{transform:translateY(0) rotateX(calc(var(--die-x) * .92 + 7deg)) rotateY(calc(var(--die-y) * .92 + 6deg)) rotateZ(348deg) scaleX(1.04) scaleY(.97);animation-timing-function:cubic-bezier(.2,.9,.3,1)}80%{transform:translateY(-7px) rotateX(calc(var(--die-x) * .97 - 4deg)) rotateY(calc(var(--die-y) * .97 - 3deg)) rotateZ(356deg) scale(1);animation-timing-function:cubic-bezier(.5,0,1,.5)}90%{transform:translateY(0) rotateX(calc(var(--die-x) + 5deg)) rotateY(calc(var(--die-y) - 4deg)) rotateZ(360deg) scaleX(1.03) scaleY(.97);animation-timing-function:cubic-bezier(.2,.9,.3,1)}to{transform:rotateX(var(--die-x)) rotateY(var(--die-y)) rotateZ(360deg) scale(1)}}.die-face{color:#fff;text-shadow:0 3px #00000029;backface-visibility:hidden;transform-style:flat;border-radius:24px;place-items:center;font-size:2.2rem;font-weight:900;display:grid;position:absolute;inset:0;box-shadow:inset 0 0 0 4px #ffffff80,inset 0 -10px 16px #00000024}.die-face[data-die-face=red]{transform:translateZ(68px)}.die-face[data-die-face=orange]{transform:rotateY(90deg)translateZ(68px)}.die-face[data-die-face=green]{transform:rotateY(180deg)translateZ(68px)}.die-face[data-die-face=blue]{transform:rotateY(-90deg)translateZ(68px)}.die-face[data-die-face=purple]{transform:rotateX(90deg)translateZ(68px)}.die-face[data-die-face=go]{color:#7a4b00;text-shadow:0 2px #fff9;transform:rotateX(-90deg)translateZ(68px)}.card-row{grid-template-columns:repeat(auto-fit,minmax(92px,1fr));gap:10px;display:grid}.city-card{border-radius:var(--radius);min-height:104px;animation:card-deal .42s var(--ease-bounce) both;background:linear-gradient(#fffdf5,#fdf0d6);border:3px solid #f3ddb0;flex-direction:column;gap:2px;padding:12px 10px 10px;display:flex;position:relative;box-shadow:0 6px #d6b08059}@keyframes card-deal{0%{opacity:0;transform:translateY(14px)rotate(-4deg)scale(.9)}to{opacity:1;transform:translateY(0)rotate(0)scale(1)}}.city-card__score{background:linear-gradient(180deg, #ffa06b, var(--brand));color:#fff;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;font-weight:900;display:flex;position:absolute;top:-12px;right:-8px;box-shadow:0 4px #d4551f99}.city-card__name{font-size:1.05rem;font-weight:800}.city-card__province{color:var(--ink-soft);font-size:.78rem}.city-card__fact{color:var(--ink-soft);margin:6px 0 0;font-size:.74rem;line-height:1.5}.player-list{gap:10px;display:grid}.player-card{border:2px solid var(--line);border-radius:var(--radius);transition:transform .2s var(--ease-bounce), box-shadow .2s ease;background:#fffdf7;padding:10px 12px}.player-card--current{box-shadow:0 0 0 3px #ffd16680, var(--shadow-card);background:#fff6e6;transform:translate(2px)}.player-card header{align-items:center;gap:8px;display:flex}.badge{background:linear-gradient(180deg, #ffa06b, var(--brand));color:#fff;animation:badge-pop .4s var(--ease-bounce);border-radius:999px;padding:2px 10px;font-size:.72rem;font-weight:700}@keyframes badge-pop{0%{transform:scale(.6)}70%{transform:scale(1.12)}}.badge--soft{color:var(--ink-soft);background:#f0e6d6}.player-position{justify-content:space-between;margin:8px 0;font-size:.9rem;display:flex}.player-score{font-weight:800}.ticket-row{flex-wrap:wrap;gap:6px;display:flex}.ticket-chip{color:#fff;animation:chip-bounce .4s var(--ease-bounce);border-radius:999px;padding:4px 12px;font-size:.82rem;font-weight:800;box-shadow:0 3px #00000024}@keyframes chip-bounce{0%{transform:scale(.7)translateY(6px)}60%{transform:scale(1.12)translateY(-2px)}}.ticket-chip--empty{opacity:.25;box-shadow:none;animation:none}.player-cards{color:var(--ink-soft);margin:8px 0 0;font-size:.82rem}.player-cards__list{color:var(--ink);display:block}.log-list{color:var(--ink-soft);gap:5px;margin:0;padding:0;font-size:.86rem;list-style:none;display:grid}.log-item{border-radius:var(--radius-sm);animation:log-in .3s var(--ease-out) both;background:#fff6e8;padding:6px 10px}@keyframes log-in{0%{opacity:0;transform:translate(-8px)}}.log-item--card-collected,.log-item--start-card-collected,.log-item--game-over{color:#1a6d45;background:#e6f8ee;font-weight:700}.log-item--invalid{color:#a53030;background:#ffe9e9}.recommend{gap:10px;display:grid}.recommend__header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.recommend__header h2{margin:0}.recommend__filter{color:var(--ink-soft);align-items:center;gap:6px;font-size:.8rem;display:flex}.recommend__list{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#e0b98c #fff3e0;grid-auto-rows:max-content;align-content:start;gap:8px;max-height:min(46vh,430px);margin:0;padding:0 4px 0 0;list-style:none;display:grid;overflow-y:auto}.recommend__list::-webkit-scrollbar{width:12px}.recommend__list::-webkit-scrollbar-track{background:#fff3e0;border-radius:999px}.recommend__list::-webkit-scrollbar-thumb{background:#e0b98c;border:2px solid #fff3e0;border-radius:999px}.recommend__item{border:2px solid var(--line);border-radius:var(--radius);min-height:48px;animation:row-in .34s var(--ease-out) both;background:#fffdf7}@keyframes row-in{0%{opacity:0;transform:translateY(10px)}}.recommend__row{border-radius:var(--radius);text-align:left;width:100%;min-height:48px;color:inherit;cursor:pointer;transition:background .16s ease, transform .16s var(--ease-bounce);background:0 0;border:none;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:.98rem;display:flex}.recommend__row:hover{background:#fff3e0;transform:translate(2px)}.recommend__name{white-space:nowrap;align-items:center;gap:6px;font-weight:800;display:flex}.recommend__score{background:linear-gradient(180deg, #ffa06b, var(--brand));color:#fff;border-radius:999px;padding:1px 10px;font-size:.76rem;font-weight:800}.recommend__score--none{color:var(--ink-soft);background:#f0e6d6}.recommend__meta{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;display:flex}.cost-row{gap:4px;display:inline-flex}.cost-chip{color:#fff;border-radius:999px;padding:2px 9px;font-size:.76rem;font-weight:800;box-shadow:0 2px #0000001f}.cost-chip--none{color:var(--ink-soft);box-shadow:none;background:#f0e6d6}.recommend__total{color:var(--ink-soft);font-size:.78rem}.recommend__gain{color:#1a6d45;background:#e6f8ee;border-radius:999px;padding:2px 10px;font-size:.75rem;font-weight:700}.recommend__more{width:100%}.recommend__confirm{border-top:2px dashed var(--line-strong);border-radius:0 0 var(--radius) var(--radius);background:#fff6e6;gap:8px;padding:12px;display:grid}.recommend__path{margin:0;font-size:.92rem;font-weight:600;line-height:1.6}.recommend__detail{color:var(--ink-soft);flex-wrap:wrap;align-items:center;gap:6px;margin:0;font-size:.84rem;display:flex}.recommend__actions{flex-wrap:wrap;gap:8px;display:flex}.recommend__alt{border:2px dashed var(--line-strong);border-radius:var(--radius-sm);background:#fffdf7;gap:4px;padding:10px;display:grid}.recommend__alt-title{color:var(--ink-soft);font-size:.78rem}.recommend-modal{gap:10px;max-width:540px;max-height:86vh;display:grid;overflow:auto}.recommend-modal h2{align-items:center;gap:10px;margin:0;display:flex}.recommend-modal .recommend__path{border-radius:var(--radius-sm);background:#fff3e0;padding:12px 14px;font-size:1.02rem}.recommend-modal .recommend__actions .button{min-height:54px;font-size:1.08rem}.overlay{z-index:var(--z-sheet);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#5a3e2680;justify-content:center;align-items:center;padding:20px;animation:.2s ease-out overlay-in;display:flex;position:fixed;inset:0}.overlay-card{border-radius:var(--radius-xl);width:100%;max-width:480px;box-shadow:var(--shadow-float);animation:card-pop .36s var(--ease-bounce);background:linear-gradient(#fffdf7,#fff5e6);padding:26px}.overlay-actions{flex-wrap:wrap;gap:10px;margin-top:14px;display:flex}.toast{z-index:var(--z-toast);text-align:center;color:#fff;max-width:min(72vw,620px);box-shadow:var(--shadow-float);animation:toast-in .22s var(--ease-bounce);border-radius:999px;padding:14px 26px;font-size:1.05rem;font-weight:700;position:fixed;top:86px;left:50%;transform:translate(-50%)}.toast--good{background:linear-gradient(180deg, #43d493, var(--good))}.toast--warn{background:linear-gradient(180deg, #ff7b7f, var(--warn))}.toast--auto{animation:toast-in .2s var(--ease-bounce), toast-out .4s ease-in 2.2s forwards;pointer-events:none}.toast--ai{animation:toast-in .24s var(--ease-bounce), toast-out .4s ease-in calc(var(--toast-hold,3s) - .4s) forwards;pointer-events:none;background:linear-gradient(#7fa9ff,#4b6fd6)}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,-18px)scale(.94)}to{opacity:1;transform:translate(-50%)scale(1)}}@keyframes toast-out{to{opacity:0;transform:translate(-50%,-14px)}}.game-over{gap:16px;max-width:780px;max-height:90vh;display:grid;overflow:auto}.game-over .ranking{gap:8px;margin:0;padding:0;list-style:none;display:grid}.game-over .ranking li{border-radius:var(--radius);animation:row-in .36s var(--ease-out) both;background:#fff6e8;align-items:center;gap:10px;padding:10px 14px;font-size:1rem;display:flex}.game-over .ranking--winner{background:linear-gradient(#fff3cd,#ffe9a8);font-weight:800;box-shadow:0 0 0 3px #ffd1668c}.ranking__no{background:#f0e6d6;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:.88rem;font-weight:800;display:inline-flex}.ranking__score{color:var(--ink-soft);margin-left:auto}.ranking__crown{animation:crown-bounce 1.6s var(--ease-bounce) infinite;font-size:1.3rem}@keyframes crown-bounce{0%,to{transform:translateY(0)rotate(-6deg)}50%{transform:translateY(-5px)rotate(6deg)}}.card-walls{gap:14px;display:grid}.card-wall h3{align-items:center;gap:8px;margin:0 0 8px;font-size:.98rem;display:flex}.card-wall__cards{flex-wrap:wrap;gap:8px;display:flex}.mini-card{border-radius:var(--radius-sm);min-width:72px;animation:card-deal .42s var(--ease-bounce) both;background:linear-gradient(#fffdf5,#fdf0d6);border:3px solid #f3ddb0;flex-direction:column;align-items:center;gap:2px;padding:8px 10px;font-size:.84rem;display:inline-flex}.mini-card__name{font-weight:700}.mini-card__score{color:var(--ink-soft);font-size:.72rem}.mini-card--4{background:linear-gradient(#ffd9a8,#ffc078);border-color:#f0a95c}.mini-card--3{background:linear-gradient(#fff0cf,#ffe1a8);border-color:#eccb84}.mini-card--1{background:#fffdf7}.mini-card--start{background:linear-gradient(#e8f1ff,#d8e6ff);border-color:#b9c8ef}.calib{flex-direction:column;gap:12px;min-height:100dvh;padding:14px;display:flex}.calib-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.calib-sub{color:var(--ink-soft);max-width:900px;margin:0}.calib-progress{background:var(--panel);border:2px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:10px 18px;font-size:1.1rem;font-weight:700}.calib-body{flex:1;grid-template-columns:minmax(0,1fr) 330px;gap:12px;min-height:0;display:grid}.calib-viewport{border-radius:var(--radius-lg);box-shadow:var(--shadow-card);cursor:crosshair;touch-action:none;background:#e8f2f8;border:4px solid #fff;position:relative;overflow:hidden}.calib-canvas{position:absolute;top:0;left:0}.calib-image{-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.calib-svg{width:100%;height:100%;position:absolute;inset:0}.calib-marker{pointer-events:none;background:#4b7bec8c;border:2px solid #fff;border-radius:50%;width:14px;height:14px;margin:-7px 0 0 -7px;position:absolute}.calib-marker--done{background:#2ec27ed9}.calib-marker--current{background:#ff7a45eb;width:24px;height:24px;margin:-12px 0 0 -12px;animation:1.5s ease-in-out infinite marker-pulse;box-shadow:0 0 0 5px #ff7a4552}@keyframes marker-pulse{0%,to{box-shadow:0 0 0 5px #ff7a4552}50%{box-shadow:0 0 0 12px #ff7a451f}}.calib-marker__label{white-space:nowrap;color:var(--ink);background:#fffdf7eb;border-radius:8px;padding:1px 7px;font-size:.8rem;position:absolute;top:-6px;left:50%;transform:translate(-50%,-100%)}.calib-side{flex-direction:column;gap:12px;display:flex;overflow:auto}.calib-buttons{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.calib-check{align-items:center;gap:8px;font-size:.9rem;display:flex}.calib-list{grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:6px;max-height:260px;display:grid;overflow:auto}.calib-list__item{border:2px solid var(--line);border-radius:var(--radius-sm);color:inherit;cursor:pointer;transition:transform .14s var(--ease-bounce);background:#fffdf7;padding:8px 4px;font-family:inherit;font-size:.86rem}.calib-list__item:hover{transform:translateY(-2px)}.calib-list__item--done{background:#e6f8ee;border-color:#b7e3c9}.calib-list__item--current{outline:3px solid #ff7a45bf}@media (width<=900px){.calib-body{grid-template-columns:1fr;overflow:auto}}@media (aspect-ratio<=16/9) and (orientation:landscape){:root{--hud-width:clamp(268px, 25vw, 330px)}}@media (aspect-ratio<=1){.game-screen{gap:12px;min-height:100dvh;padding:12px;display:grid;overflow:visible}.map-stage{padding:0;display:block;position:static;inset:auto}.map-wrap{max-width:min(100%,116.39dvh - 349.17px)}.hud{width:auto;max-width:780px;margin:0 auto;padding:0;position:static;inset:auto;overflow:visible}.map-turn{padding:6px 14px;font-size:.95rem;top:10px;left:10px}.map-turn__phase{font-size:.85rem}.map-tools{top:10px;right:10px}.tool-button{width:44px;height:44px;font-size:1rem}.map-bottom{bottom:10px;left:10px;right:10px}.map-action{min-height:54px;padding:8px 26px;font-size:1.2rem}}@media (width<=720px){.map-turn__phase{display:none}.map-where{padding:6px 12px;font-size:.85rem}.map-bottom{flex-direction:column;align-items:stretch;gap:8px}.map-where{align-self:flex-start}.map-action{width:100%}}.tool-button--fullscreen{animation:2.6s ease-in-out infinite fullscreen-hint}@keyframes fullscreen-hint{0%,to{box-shadow:var(--shadow-card)}50%{box-shadow:0 0 0 7px #ffa84c38, var(--shadow-card)}}@media (height<=680px) and (orientation:landscape){:root{--hud-width:clamp(280px, 24.5vw, 320px)}.hud{gap:8px;top:8px;bottom:8px;right:8px}.hud-turn{padding:10px}.hud-avatar{border-width:3px;width:44px;height:44px;font-size:1.15rem}.hud-turn__names strong{font-size:1.05rem}.hud-turn__score{font-size:1.3rem}.wallet{gap:6px;margin-top:8px}.hud-turn__roll{margin-top:8px}.hud-cities{padding:10px 10px 6px}.hud-cards,.hud-players{padding:10px}.hud-log{padding:6px 10px}.map-turn{gap:6px;padding:6px 14px;font-size:.95rem;top:10px;left:10px}.map-turn__phase{display:none}.map-tools{gap:6px;top:10px;right:10px}.tool-button{width:42px;height:42px;font-size:1rem}.map-bottom{bottom:10px;left:10px;right:10px}.map-where{padding:6px 14px;font-size:.9rem}.map-action{min-height:54px;padding:8px 28px;font-size:1.25rem}.toast{top:68px}.map-toast{top:60px}}.hud,.hud *,.roll-card__recap,.cards-sheet,.city-all,.recommend-modal,.save-panel,.mini-grid,.log-list{scrollbar-width:none;-ms-overflow-style:none}.hud::-webkit-scrollbar{width:0;height:0;display:none}.hud ::-webkit-scrollbar{width:0;height:0;display:none}.roll-card__recap::-webkit-scrollbar{width:0;height:0;display:none}.cards-sheet::-webkit-scrollbar{width:0;height:0;display:none}.city-all::-webkit-scrollbar{width:0;height:0;display:none}.recommend-modal::-webkit-scrollbar{width:0;height:0;display:none}.save-panel::-webkit-scrollbar{width:0;height:0;display:none}.mini-grid::-webkit-scrollbar{width:0;height:0;display:none}.log-list::-webkit-scrollbar{width:0;height:0;display:none}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}[data-motion=off] *,[data-motion=off] :before,[data-motion=off] :after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}
