:root{font-family:ui-rounded,"SF Pro Rounded","Noto Sans SC",system-ui,sans-serif;color:#263c35;background:#fff8e8;font-synthesis:none;--ink:#263c35;--green:#338b70;--green-dark:#246c58;--coral:#ec7969;--yellow:#ffd166;--paper:#fffdf7;--muted:#78857e;--line:#eee5d4;--shadow:0 14px 38px #705d3312}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:radial-gradient(ellipse at 8% 12%,#ffedbb77,transparent 33rem),radial-gradient(ellipse at 95% 42%,#cdeee655,transparent 30rem),#fff8e8}button,input{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}button:disabled{cursor:not-allowed;opacity:.42}.app-shell{width:min(100%,560px);min-height:100dvh;margin:auto;padding:calc(14px + env(safe-area-inset-top)) 22px calc(18px + env(safe-area-inset-bottom));display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:12px;height:60px;position:relative}.brand img{width:52px;height:52px;filter:drop-shadow(0 5px 3px #947c2830)}.brand p{font-size:11px;font-weight:750;letter-spacing:.14em;color:var(--green);margin:0 0 1px}.brand h1{font-size:21px;line-height:1.1;margin:0;letter-spacing:.04em}.brand-spark{margin-left:auto;color:#e9ad34;font-size:27px}.stepper{display:flex;align-items:center;justify-content:center;gap:8px;margin:22px 0 23px;color:#a6a99d;font-size:11px;font-weight:700}.stepper i{width:29px;height:2px;background:#e8dfce;border-radius:3px}.stepper span.active{color:var(--green)}.screen{display:none;animation:arrive .24s ease}.screen.active{display:block}@keyframes arrive{from{opacity:.45;transform:translateY(5px)}to{opacity:1;transform:none}}.intro{margin:0 2px 20px}.eyebrow,.kicker{font-size:10px;letter-spacing:.14em;font-weight:800;color:#d18b30}.intro h2,.screen-title h2{font-size:25px;line-height:1.3;margin:6px 0 7px;letter-spacing:-.03em}.intro>p:last-child,.screen-title>p:last-child{font-size:13px;line-height:1.65;color:var(--muted);margin:0}.panel{background:var(--paper);border:1px solid #f0e8d8;border-radius:22px;padding:18px 18px 15px;box-shadow:var(--shadow);margin-bottom:13px}.section-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.section-heading h3{margin:3px 0 0;font-size:17px}.tiny-illustration{font-size:24px}.counter-row{display:flex;justify-content:space-between;align-items:center;padding:9px 0 13px}.counter-row>div:first-child b{font-size:14px}.counter-row small{display:block;color:var(--muted);font-size:11px;margin-top:3px}.counter{display:flex;align-items:center;gap:13px}.counter strong{font-size:22px;min-width:20px;text-align:center}.counter button{width:38px;height:38px;border-radius:13px;border:0;background:#eff7f2;color:var(--green-dark);font-size:23px;font-weight:600;box-shadow:inset 0 0 0 1px #d8ebe0}.role-summary{border-top:1px solid var(--line);padding-top:13px;display:flex;align-items:center;justify-content:space-between;font-size:13px}.role-summary>span:first-child{color:#5d6357}.role-summary b{font-size:15px;color:var(--ink)}.role-switch{display:flex;align-items:center;gap:9px;cursor:pointer}.role-switch input{position:absolute;opacity:0}.role-switch i{width:39px;height:23px;background:#deded4;border-radius:20px;position:relative;transition:.2s}.role-switch i:before{content:"";position:absolute;width:17px;height:17px;border-radius:50%;background:white;top:3px;left:3px;box-shadow:0 1px 4px #0002;transition:.2s}.role-switch input:checked+i{background:var(--green)}.role-switch input:checked+i:before{transform:translateX(16px)}.hint{font-size:10px;color:#939990;margin:10px 0 0}.search-box{display:flex;align-items:center;height:43px;background:#f7f5ed;border:1px solid #eee9dc;border-radius:12px;padding:0 11px;gap:8px;color:#8d988e}.search-box>span{font-size:22px}.search-box input{border:0;outline:0;background:transparent;min-width:0;flex:1;font-size:12px;color:var(--ink)}.search-box button{border:0;background:none;color:#90988f;font-size:20px;padding:3px 5px}.category-actions{display:flex;align-items:center;gap:6px;padding:12px 1px 9px}.category-actions button{border:0;background:#f1f7f2;color:var(--green-dark);border-radius:8px;padding:6px 10px;font-size:10px;font-weight:700}.category-actions span{margin-left:auto;font-size:11px;color:var(--muted);font-weight:650}.category-tree{max-height:335px;overflow:auto;padding:2px 2px 3px;scrollbar-width:thin;scrollbar-color:#dddfd3 transparent}.tree-root{border-top:1px solid #f1ecdf}.tree-root:first-child{border-top:0}.root-row{display:flex;align-items:center;gap:7px;padding:9px 2px 5px;font-size:12px;font-weight:750}.root-check,.leaf-check{appearance:none;width:17px;height:17px;flex:none;border:1.5px solid #ccd1c6;border-radius:5px;background:white;margin:0;display:grid;place-items:center}.root-check:checked,.leaf-check:checked{background:var(--green);border-color:var(--green)}.root-check:checked:after,.leaf-check:checked:after{content:"✓";color:white;font-size:11px;font-weight:800}.root-toggle{border:0;background:none;color:#838e84;padding:3px;font-size:10px}.root-count{margin-left:auto;color:#a0a59b;font-size:10px;font-weight:500}.leaf-list{display:grid;grid-template-columns:1fr 1fr;gap:3px 8px;padding:2px 0 9px 24px}.leaf-row{display:flex;align-items:center;gap:6px;min-height:29px;font-size:10px;color:#626d65}.leaf-row .root-count{font-size:9px}.loading{font-size:12px;color:var(--muted);text-align:center;padding:30px 0}.primary-button,.secondary-button,.danger-button{border:0;border-radius:15px;min-height:53px;padding:0 17px;font-weight:750;font-size:14px;transition:transform .12s,filter .12s}.primary-button:active,.secondary-button:active,.danger-button:active{transform:scale(.98)}.primary-button{width:100%;background:var(--green);color:white;box-shadow:0 8px 20px #338b7033;display:flex;align-items:center;justify-content:center;gap:8px}.primary-button span{font-size:19px}.bottom-note{text-align:center;color:#a4a396;font-size:10px;margin:11px 0 0}.screen-title{text-align:center;margin:2px 0 19px}.screen-title h2{font-size:22px;margin:6px 0}.secret-card{width:min(100%,330px);height:350px;margin:0 auto 20px;border:0;border-radius:27px;background:linear-gradient(147deg,#f8d977,#ffc65f 75%);box-shadow:0 15px 28px #a279321e,inset 0 0 0 1px #fff9d3;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;color:#315749;overflow:hidden}.secret-card:before,.secret-card:after{content:"";position:absolute;border:1px solid #fff9;border-radius:50%;width:290px;height:290px;top:-175px;right:-112px}.secret-card:after{width:190px;height:190px;top:auto;right:auto;left:-92px;bottom:-107px}.secret-card img{width:102px;height:102px;margin:16px 0;filter:drop-shadow(0 6px 4px #82621f24)}.secret-card b{font-size:23px}.secret-card small{font-size:12px;margin-top:9px;color:#547166}.card-stars{position:absolute;top:21px;right:24px;color:#fff9;font-size:16px}.secret-card.revealed{background:linear-gradient(140deg,#d7f0dc,#aadfbe)}.reveal-controls{display:grid;gap:9px}.secondary-button{background:#eef5ef;color:var(--green-dark);border:1px solid #dfebe1}.reveal-controls .secondary-button{min-height:44px}.progress-dots{display:flex;justify-content:center;gap:8px;margin:18px}.progress-dots i{width:7px;height:7px;border-radius:10px;background:#ddd9cc}.progress-dots i.done{background:var(--green)}.players-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0 11px}.player-card{border:1px solid #ece6da;background:var(--paper);border-radius:17px;min-height:105px;padding:11px 5px 9px;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;box-shadow:0 5px 14px #725e2909;transition:.15s}.player-card.selected{border:2px solid var(--green);background:#eff8f0;transform:translateY(-2px)}.player-card.eliminated{opacity:.56;background:#f2eee6}.player-card.eliminated:after{content:"淘汰";position:absolute;right:5px;top:5px;font-size:8px;color:white;background:var(--coral);padding:3px 5px;border-radius:7px}.avatar{width:39px;height:39px;border-radius:50%;object-fit:cover;background:#ffe9ad;border:2px solid #fff;box-shadow:0 2px 6px #0001}.avatar-emoji{display:grid;place-items:center;font-size:22px}.player-card b{font-size:11px}.player-card small{font-size:9px;color:#899187}.selection-label{text-align:center;font-size:11px;color:#8a9389;min-height:19px;margin:8px}.action-row{display:grid;grid-template-columns:1fr 1fr;gap:9px}.action-row button{font-size:12px;padding:0 8px;min-height:49px}.danger-button{background:#fce9e4;color:#b75548;border:1px solid #f5d1c8}.text-button{display:block;margin:12px auto;border:0;background:none;padding:10px;color:#8b9188;font-size:11px;text-decoration:underline;text-underline-offset:3px}.result-hero{text-align:center;padding:12px 0 20px}.result-hero>span{font-size:53px}.result-hero .kicker{margin:10px 0 3px}.result-hero h2{font-size:27px;margin:2px}.result-hero>p:last-child{font-size:12px;color:var(--muted);margin:7px}.result-players{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.result-player{background:#f8f6ef;border-radius:12px;text-align:center;padding:11px 4px;font-size:11px}.result-player span{font-size:20px;display:block;margin-bottom:4px}.result-player small{display:block;color:#7d877d;font-size:9px;margin-top:4px}.word-reveal{background:#fff6d9;border-radius:10px;padding:10px;text-align:center;font-size:11px;color:#655535;margin:11px 0 0}.result-screen+.footer-brand{margin-top:auto}.footer-brand{margin-top:auto;padding-top:22px;text-align:center;color:#b2ad9e;font-size:10px;letter-spacing:.08em}.footer-brand span{color:#e5b33f;margin:0 6px}.peek-dialog,.camera-dialog{border:0;border-radius:24px;width:min(calc(100% - 32px),410px);padding:29px 22px;background:#fffdf7;color:var(--ink);text-align:center;box-shadow:0 24px 90px #14201955}.peek-dialog::backdrop,.camera-dialog::backdrop{background:#21342d88;backdrop-filter:blur(4px)}.dialog-close{position:absolute;right:12px;top:9px;border:0;background:none;color:#899088;font-size:24px}.peek-dialog>span{font-size:12px;color:var(--green)}.peek-dialog h2{font-size:30px;margin:18px}.peek-dialog p,.peek-dialog small{color:#8d958b;font-size:12px}.camera-dialog{text-align:left}.camera-dialog h2{margin:0 0 12px}.camera-dialog video,.camera-dialog>img{width:100%;max-height:55vh;object-fit:cover;border-radius:15px;background:#eae9df}.camera-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.camera-actions button{font-size:12px;min-height:45px}.camera-dialog>p{font-size:11px;color:#8d958b;text-align:center;margin-bottom:0}.toast{position:fixed;bottom:calc(26px + env(safe-area-inset-bottom));left:50%;transform:translate(-50%,20px);padding:11px 16px;border-radius:11px;background:#273c34;color:white;font-size:12px;opacity:0;pointer-events:none;transition:.2s;white-space:nowrap;z-index:5}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(min-width:600px){.app-shell{padding-top:27px}.category-tree{max-height:390px}.players-grid{grid-template-columns:repeat(4,1fr)}}
@media(max-height:760px){.secret-card{height:290px}.category-tree{max-height:270px}}
/* Keep the setup screen compact on phone viewports while the category editor starts folded. */
.category-heading{margin-bottom:0}
.category-summary{font-size:10px;color:var(--muted);margin:4px 0 0}
.category-toggle{border:1px solid #dfe9df;border-radius:10px;background:#f1f7f2;color:var(--green-dark);padding:8px 11px;font-size:11px;font-weight:700;white-space:nowrap}
.category-toggle span{font-size:13px;margin-left:3px}
.categories-panel #category-controls{padding-top:12px}
.restart-button{margin:7px auto 0;padding:8px 10px;color:#a45d50;text-decoration:none}
@media(max-width:600px){
  .app-shell{padding:calc(7px + env(safe-area-inset-top)) 14px calc(8px + env(safe-area-inset-bottom))}
  .brand{height:45px;gap:9px}
  .brand img{width:40px;height:40px}
  .brand p{font-size:9px}
  .brand h1{font-size:18px}
  .brand-spark{font-size:21px}
  .stepper{margin:9px 0 12px;gap:7px;font-size:10px}
  .stepper i{width:23px}
  .intro{margin:0 2px 9px}
  .intro h2{font-size:21px;margin:3px 0 4px}
  .intro>p:last-child{font-size:11px;line-height:1.45}
  .eyebrow,.kicker{font-size:9px}
  .panel{border-radius:17px;padding:11px 13px 10px;margin-bottom:8px}
  .section-heading{margin-bottom:7px}
  .section-heading h3{font-size:15px}
  .tiny-illustration{font-size:20px}
  .counter-row{padding:3px 0 6px}
  .counter-row>div:first-child b{font-size:12px}
  .counter-row small{font-size:9px;margin-top:1px}
  .counter{gap:10px}
  .counter strong{font-size:19px}
  .counter button{width:33px;height:33px;border-radius:11px}
  .role-control{padding:6px 0 7px;font-size:11px}
  .mini-counter{gap:10px}
  .mini-counter button{width:27px;height:27px}
  .role-summary{padding-top:8px;font-size:11px}
  .role-summary b{font-size:13px}
  .role-switch{gap:6px}
  .role-switch i{width:35px;height:21px}
  .role-switch i:before{width:15px;height:15px;top:3px;left:3px}
  .role-switch input:checked+i:before{transform:translateX(14px)}
  .hint{font-size:9px;margin:6px 0 0}
  .category-summary{font-size:9px;margin-top:2px}
  .category-toggle{padding:7px 9px;font-size:10px}
  .primary-button,.secondary-button,.danger-button{min-height:45px;border-radius:13px;font-size:13px}
  .bottom-note{font-size:9px;margin:5px 0 0}
  .footer-brand{padding-top:8px;font-size:9px}
}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
.role-control{display:flex;align-items:center;justify-content:space-between;padding:9px 0 11px;border-top:1px solid var(--line);font-size:13px;color:#5d6357}.mini-counter{display:flex;align-items:center;gap:12px}.mini-counter b{font-size:15px;color:var(--ink);min-width:12px;text-align:center}.mini-counter button{width:29px;height:29px;border-radius:10px;border:0;background:#eff7f2;color:var(--green-dark);font-size:18px;font-weight:700}
@media(max-width:600px){.role-control{padding:6px 0 7px;font-size:11px}.mini-counter{gap:10px}.mini-counter button{width:27px;height:27px}}

/* Development visual system: a calmer night-expedition palette with clearer round states. */
:root{--ink:#1d3440;--green:#2e8c83;--green-dark:#216a66;--coral:#e56f68;--yellow:#f5c85b;--paper:#fffdf8;--muted:#70807f;--line:#e5e8df;--shadow:0 18px 44px #23473b18}
body{background:radial-gradient(circle at 10% 8%,#ffe5a966,transparent 30rem),radial-gradient(circle at 94% 18%,#bfe9e355,transparent 28rem),linear-gradient(180deg,#fffaf0 0%,#f4f8ee 100%)}
.app-shell{position:relative}.app-shell:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.28;background-image:linear-gradient(#ffffff00 95%,#ffffff55 95%),linear-gradient(90deg,#ffffff00 95%,#ffffff55 95%);background-size:28px 28px;mask-image:linear-gradient(180deg,#000,transparent 75%)}
.brand{z-index:1}.brand img{background:#fff7dd;border-radius:17px;padding:3px}.panel{backdrop-filter:blur(10px);background:#fffdf7e8;border-color:#ffffffaa}.primary-button{background:linear-gradient(135deg,#328f85,#246f6b);box-shadow:0 10px 22px #2b7d7033}.secondary-button{background:#edf7f2}.secret-card{background:linear-gradient(145deg,#f4cf6a 0%,#f1a95f 100%);box-shadow:0 18px 34px #9e6a2b2b,inset 0 0 0 1px #fff9d3}.secret-card.revealed{background:linear-gradient(140deg,#d4f1df,#9fd8c6)}
.phase-strip{display:flex;align-items:center;justify-content:center;gap:8px;margin:0 auto 13px;color:#a3aaa1;font-size:10px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.phase-strip i{width:24px;height:2px;border-radius:5px;background:#e3e7de}.phase-strip span.active{color:var(--green-dark)}
.round-callout{display:flex;align-items:center;justify-content:center;min-height:37px;margin:0 0 14px;padding:8px 12px;border:1px solid #dcece3;border-radius:13px;background:#eff8f2;color:#2b7169;font-size:11px;font-weight:700;box-shadow:0 4px 12px #2f887715}.player-card{border-color:#e2e9df;background:#fffefa}.player-card.starter{border-color:#edc86b;box-shadow:0 0 0 3px #f5d98e55,0 8px 18px #a77b2520}.player-card.starter:before{content:"先开始";position:absolute;left:5px;top:5px;padding:2px 5px;border-radius:6px;background:#f3c55c;color:#674b20;font-size:8px;font-weight:800}.phase-button{margin-top:10px}.phase-button[hidden]{display:none}.guess-dialog{border:0;border-radius:26px;width:min(calc(100% - 32px),410px);padding:30px 22px 22px;background:#fffdf7;color:var(--ink);text-align:center;box-shadow:0 24px 90px #14201955}.guess-dialog::backdrop{background:#21342d88;backdrop-filter:blur(4px)}.guess-dialog>span{font-size:11px;color:#c47d2a;font-weight:800;letter-spacing:.12em}.guess-dialog h2{font-size:23px;margin:10px 0 5px}.guess-dialog p{font-size:12px;color:var(--muted);line-height:1.6;margin:0 0 15px}.guess-dialog input{width:100%;height:48px;padding:0 13px;border:1px solid #dfe8dd;border-radius:13px;background:#f5f8f2;color:var(--ink);outline:0;text-align:center;font-size:16px}.guess-dialog input:focus{border-color:var(--green);box-shadow:0 0 0 3px #2e8c8322}.guess-dialog .primary-button{margin-top:10px}.guess-dialog small{display:block;margin-top:12px;color:#9aa39a;font-size:10px}
@media(max-width:600px){.phase-strip{margin-bottom:9px}.round-callout{margin-bottom:9px}.player-card.starter:before{font-size:7px}}
.round-callout{gap:10px;justify-content:space-between;padding-left:14px;padding-right:8px}
.round-callout-text{flex:1;text-align:center}
.reroll-button{border:1px solid #cfe5d9;border-radius:9px;background:#fff;color:var(--green-dark);padding:6px 8px;font-size:10px;font-weight:750;white-space:nowrap}
.reroll-button:disabled{display:none}
.tie-button{width:100%;min-height:44px;margin-top:9px;font-size:12px}
.tie-button[hidden]{display:none}
.player-card.runoff-candidate{border-color:#d7b857;box-shadow:0 0 0 2px #f4dc8a55,0 7px 16px #a77b2518}
