:root{--paper:#f5f2e9;--card:#fffdf8;--ink:#22241f;--muted:#77796e;--line:#e6e2d7;--red:#b34b37;--red-dark:#8f382a;--green:#496653;--gold:#c49b55;--soft-red:#f6e9e3;--soft-green:#e9eee8;--shadow:0 16px 45px rgba(59,48,30,.08);font-family:'Plus Jakarta Sans','Noto Serif SC',sans-serif;color:var(--ink);background:var(--paper)}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(ellipse at 85% 5%,rgba(206,186,146,.18),transparent 32%),var(--paper)}button,input{font:inherit}button{cursor:pointer}.app-shell{max-width:1180px;margin:auto;padding:0 34px}.topbar{height:78px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(105,95,75,.15)}.brand{display:flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none;font-weight:800;letter-spacing:.04em}.brand small{display:block;font-size:8px;color:#949184;letter-spacing:.2em;margin-top:2px}.brand-mark{display:grid;place-items:center;width:34px;height:34px;background:var(--red);color:#fffdf8;border-radius:50% 50% 48% 4px;font-family:'Noto Serif SC';font-size:19px}.topbar-right{display:flex;align-items:center;gap:18px}.connection{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:7px}.connection i{width:7px;height:7px;border-radius:50%;background:#82a183;box-shadow:0 0 0 3px #e1eadd}.connection.offline i{background:#c47b61;box-shadow:0 0 0 3px #f4e4dd}.icon-button{width:35px;height:35px;border:1px solid var(--line);background:transparent;border-radius:50%;color:var(--muted)}main{min-height:calc(100vh - 130px)}.footer{text-align:center;color:#9a988d;font-size:10px;padding:17px 0 24px;letter-spacing:.04em}.hero{display:grid;grid-template-columns:1.05fr .95fr;gap:64px;align-items:center;padding:54px 5% 63px}.eyebrow{display:flex;align-items:center;gap:10px;color:var(--red);font-size:10px;font-weight:800;letter-spacing:.18em;text-transform:uppercase}.eyebrow:before{content:'';width:24px;height:1px;background:var(--red)}h1,h2,h3,p{margin-top:0}.hero h1{font-family:'Noto Serif SC',serif;font-size:clamp(42px,6vw,72px);line-height:1.22;letter-spacing:.06em;margin:22px 0 18px;font-weight:600}.hero h1 em{font-style:normal;color:var(--red)}.hero-copy{max-width:440px;color:#707168;font-size:14px;line-height:1.95}.hero-actions{display:flex;gap:12px;margin-top:29px}.btn{border:0;border-radius:6px;padding:13px 19px;font-size:12px;font-weight:700;letter-spacing:.03em;transition:.18s;display:inline-flex;align-items:center;justify-content:center;gap:9px}.btn:hover{transform:translateY(-1px)}.btn-primary{background:var(--red);color:white;box-shadow:0 7px 18px rgba(179,75,55,.2)}.btn-primary:hover{background:var(--red-dark)}.btn-secondary{background:transparent;border:1px solid #d8d2c5;color:#45463e}.btn-quiet{background:transparent;color:var(--muted);padding:10px}.btn-wide{width:100%}.hero-meta{display:flex;gap:22px;margin-top:38px;padding-top:19px;border-top:1px solid var(--line);color:#87867b;font-size:10px}.hero-meta strong{color:#34352f;display:block;font-size:14px;margin-bottom:4px}.hero-art{height:420px;position:relative;border-radius:44% 44% 8px 8px;overflow:hidden;background:linear-gradient(160deg,#d9c9a6,#a89773 57%,#777b65);box-shadow:var(--shadow)}.hero-art:before{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(28,34,30,.03),rgba(29,34,29,.5)),url("data:image/svg+xml,%3Csvg width='700' height='700' viewBox='0 0 700 700' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 465 Q95 420 191 463 T385 456 T700 447 V700 H0Z' fill='%236f806f'/%3E%3Cpath d='M0 545 Q100 492 208 532 T430 522 T700 518 V700 H0Z' fill='%234c6557'/%3E%3Cpath d='M95 300h83v198H95zm-28 0 70-65 70 65zm120 43h105v185H187zm-20 0 73-66 73 66zm133-24h93v215h-93zm-16 0 62-57 63 57zm116 44h135v171H533zm-23 0 91-83 91 83z' fill='%237b3d31'/%3E%3Cpath d='M104 320h15v41h-15zm38 0h15v41h-15zm66 36h18v45h-18zm46 0h18v45h-18zm65-21h19v47h-19zm42 0h19v47h-19zm185 47h22v58h-22zm48 0h22v58h-22z' fill='%23d9c599'/%3E%3C/svg%3E") center/cover;mix-blend-mode:multiply;opacity:.88}.art-label{position:absolute;left:25px;bottom:24px;color:white}.art-label span{font-size:9px;letter-spacing:.2em;opacity:.72}.art-label h3{font-family:'Noto Serif SC';font-weight:500;letter-spacing:.1em;font-size:24px;margin:8px 0}.art-stamp{position:absolute;right:25px;top:28px;width:45px;height:45px;border:1px solid rgba(255,255,255,.5);color:#fff;font-family:'Noto Serif SC';display:grid;place-items:center;writing-mode:vertical-rl;font-size:12px;letter-spacing:.18em;opacity:.8}.page-wrap{max-width:960px;margin:0 auto;padding:40px 0 52px}.back-link{border:0;background:none;color:var(--muted);padding:8px 0;font-size:11px;margin-bottom:14px}.back-link:hover{color:var(--red)}.page-heading{margin-bottom:25px}.page-heading h1{font-family:'Noto Serif SC';font-size:34px;font-weight:600;margin:9px 0}.page-heading p{color:var(--muted);font-size:12px;line-height:1.8;margin:0}.panel{background:var(--card);border:1px solid var(--line);border-radius:8px;box-shadow:0 7px 25px rgba(60,50,35,.035)}.form-panel{max-width:470px;padding:27px}.field{margin-bottom:18px}.field label{display:block;font-size:11px;font-weight:700;margin-bottom:8px}.input{width:100%;border:1px solid #dfdacd;background:#fffefa;border-radius:5px;padding:12px 13px;color:var(--ink);outline:none;font-size:13px}.input:focus{border-color:#bd755f;box-shadow:0 0 0 3px rgba(179,75,55,.09)}.field-hint{font-size:10px;color:#96948a;margin-top:6px}.safety-note{background:#f4f0e5;padding:12px;border-radius:5px;color:#777365;font-size:10px;line-height:1.7;margin:5px 0 18px}.lobby-layout{display:grid;grid-template-columns:1.15fr .85fr;gap:18px}.lobby-main,.lobby-side{padding:22px}.room-code{background:#f4f0e7;border-radius:6px;padding:16px 19px;display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}.room-code small{color:var(--muted);font-size:9px;display:block;margin-bottom:5px}.room-code strong{font-size:25px;letter-spacing:.2em}.room-code button{border:0;background:none;color:var(--red);font-size:10px;font-weight:700}.section-title{font-size:11px;font-weight:800;display:flex;justify-content:space-between;align-items:center;margin:0 0 14px}.section-title span{font-size:9px;color:#96948a;font-weight:500}.player-row{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid #efede6}.player-row:last-child{border:0}.avatar{width:33px;height:33px;display:grid;place-items:center;background:#ede8dc;color:#5f6259;border-radius:50%;font-family:'Noto Serif SC';font-size:13px}.player-info{flex:1}.player-info strong{font-size:11px;display:block}.player-info small{color:var(--muted);font-size:9px}.host-tag{font-size:8px;color:var(--red);background:#f6e8e2;padding:4px 6px;border-radius:3px}.wait-card{background:#f5f2e9;padding:15px;border-radius:5px;margin:17px 0;color:#77766d;font-size:10px;line-height:1.8}.role-tile{padding:12px;border:1px solid var(--line);border-radius:5px;margin-bottom:9px}.role-tile span{font-size:8px;color:var(--red);letter-spacing:.1em}.role-tile strong{display:block;font-family:'Noto Serif SC';font-size:16px;margin:4px 0}.role-tile p{font-size:9px;line-height:1.7;color:var(--muted);margin:0}.game-layout{display:grid;grid-template-columns:1fr 310px;gap:20px;align-items:start}.game-main{display:grid;gap:14px}.story-card{padding:25px;background:#3f5046;color:#f9f4e9;position:relative;overflow:hidden}.story-card:after{content:'景';position:absolute;right:12px;bottom:-42px;font-family:'Noto Serif SC';font-size:150px;color:rgba(255,255,255,.045)}.story-card .eyebrow{color:#d6b780;position:relative;z-index:1}.story-card .eyebrow:before{background:#d6b780}.story-card h2{font-family:'Noto Serif SC';font-size:23px;letter-spacing:.06em;font-weight:500;margin:12px 0}.story-card p{font-family:'Noto Serif SC';font-size:12px;line-height:2;color:#e3e3d8;max-width:580px;margin:0;position:relative;z-index:1}.stage-line{display:flex;align-items:center;gap:0;margin-top:23px;position:relative;z-index:1}.stage{display:flex;align-items:center;gap:7px;color:#bec6ba;font-size:8px;white-space:nowrap}.stage i{width:18px;height:18px;border:1px solid #748477;border-radius:50%;display:grid;place-items:center;font-style:normal;font-size:8px}.stage.active{color:#e9cf9b}.stage.active i{background:#d1ae71;border-color:#d1ae71;color:#37453d}.stage.done i{background:#748477;color:#fff}.stage-connector{height:1px;background:#718076;flex:1;margin:0 8px;min-width:14px}.task-card{padding:20px}.task-top{display:flex;justify-content:space-between;align-items:flex-start}.task-top h3{font-family:'Noto Serif SC';font-size:19px;margin:6px 0}.badge{font-size:8px;padding:5px 8px;border-radius:3px;background:#f3eee1;color:#8d744c}.task-card>p{font-size:11px;color:#72746a;line-height:1.8;margin:8px 0 16px}.task-progress{font-size:9px;color:#97958a;margin-bottom:8px;display:flex;justify-content:space-between}.progress{height:4px;background:#eeeae0;border-radius:4px;overflow:hidden}.progress i{height:100%;display:block;background:#719174;transition:width .3s}.task-action{margin-top:16px}.side-card{padding:18px;margin-bottom:14px}.clue-card{border-left:2px solid var(--gold);padding:10px 12px;background:#f8f5ed;margin-top:9px;border-radius:0 4px 4px 0}.clue-card small{color:#ab8350;font-size:8px;letter-spacing:.08em}.clue-card strong{font-family:'Noto Serif SC';display:block;font-size:12px;margin:5px 0}.clue-card p{font-size:9px;color:#77776d;line-height:1.65;margin:0}.clue-card.shared{border-color:#77917b}.clue-card.shared small{color:#638068}.scene-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid #efede6}.scene-row:last-child{border:0}.scene-icon{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#f3eee2;color:#9a7a48;font-size:12px}.scene-row strong{font-size:10px;display:block}.scene-row small{font-size:8px;color:#9a988e}.scene-row .scene-state{margin-left:auto;font-size:8px;color:#8b9b85}.scene-row.locked .scene-icon{background:#f3f2ef;color:#b4b2a9}.scene-row.locked .scene-state{color:#aaa89f}.modal-backdrop{position:fixed;inset:0;background:rgba(35,37,32,.48);display:grid;place-items:center;padding:20px;z-index:20;animation:fade .16s ease}.modal{width:min(470px,100%);max-height:90vh;overflow:auto;background:var(--card);border-radius:8px;padding:25px;box-shadow:0 25px 80px #2227;animation:rise .2s ease}.modal h2{font-family:'Noto Serif SC';font-weight:600;margin:6px 0 8px;font-size:23px}.modal p{font-size:11px;line-height:1.8;color:var(--muted)}.modal-head{display:flex;justify-content:space-between;align-items:flex-start}.close-button{border:0;background:#f1eee7;border-radius:50%;width:28px;height:28px;color:#777}.role-choice{width:100%;display:flex;align-items:center;text-align:left;gap:12px;padding:12px;border:1px solid var(--line);background:#fffefa;border-radius:5px;margin-top:8px;color:var(--ink)}.role-choice:hover{border-color:#bd755f;background:#fcf7f2}.role-choice .avatar{background:#f2e8df;color:var(--red)}.role-choice strong{font-family:'Noto Serif SC';display:block;font-size:13px}.role-choice small{display:block;color:var(--muted);font-size:9px;margin-top:4px}.role-choice em{margin-left:auto;color:#a09e94;font-style:normal}.private-box{padding:16px;background:#f6eee6;border-radius:5px;margin:14px 0}.private-box small{font-size:8px;letter-spacing:.12em;color:var(--red)}.private-box p{font-family:'Noto Serif SC';font-size:13px;color:#48463f;margin:8px 0 0}.qr-visual{margin:18px auto;width:136px;height:136px;display:grid;place-items:center;border:7px solid white;outline:1px solid var(--line);background:repeating-conic-gradient(#262921 0% 25%,transparent 0% 50%) 0 0/18px 18px;position:relative}.qr-visual:before,.qr-visual:after{content:'';position:absolute;width:31px;height:31px;background:#fff;border:7px solid #262921;top:3px;left:3px;box-shadow:76px 0 0 -7px #fff,76px 0 0 0 #262921,0 76px 0 -7px #fff,0 76px 0 0 #262921}.qr-visual:after{display:none}.qr-center{background:var(--red);color:white;padding:8px 10px;font-family:'Noto Serif SC';z-index:1;font-size:14px}.choice-list{display:grid;gap:8px;margin:15px 0}.choice{border:1px solid var(--line);border-radius:5px;padding:12px;background:#fffefa;text-align:left;color:#494b43;font-size:10px;line-height:1.6}.choice.selected{border-color:var(--red);background:#fbf1ed;color:var(--red-dark)}.choice input{accent-color:var(--red);margin-right:8px}.ending-hero{background:#405247;color:#f8f3e8;padding:34px;border-radius:8px;text-align:center}.ending-hero .stamp{width:53px;height:53px;border:1px solid #ccae77;color:#d9bd88;font-family:'Noto Serif SC';display:grid;place-items:center;margin:0 auto 15px;font-size:21px}.ending-hero h1{font-family:'Noto Serif SC';font-weight:500;letter-spacing:.1em;font-size:34px;margin:8px 0}.ending-hero p{max-width:500px;margin:0 auto;color:#e2e4db;font-family:'Noto Serif SC';font-size:12px;line-height:2}.ending-details{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:14px 0}.ending-details .panel{padding:17px}.ending-details strong{font-size:10px}.ending-details p{font-size:9px;color:var(--muted);line-height:1.7;margin:8px 0 0}.admin-layout{display:grid;grid-template-columns:1fr 1fr;gap:14px}.admin-card{padding:18px}.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.stat{padding:12px;background:#f5f2e9;border-radius:5px}.stat small{display:block;color:var(--muted);font-size:8px}.stat strong{display:block;margin-top:7px;font-size:16px}.event-log{font-family:monospace;font-size:9px;line-height:1.9;color:#65675e;max-height:220px;overflow:auto}.event-log div{border-bottom:1px solid #eeece5;padding:5px 0}.toggle-row{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line);font-size:10px}.switch{accent-color:var(--green)}.empty-state{text-align:center;padding:50px 20px;color:var(--muted)}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%,20px);background:#282b25;color:white;border-radius:5px;padding:11px 16px;font-size:11px;opacity:0;pointer-events:none;transition:.2s;z-index:30;box-shadow:var(--shadow)}.toast.show{opacity:1;transform:translate(-50%,0)}.story-notice{font-size:9px;color:#97958a;text-align:center;margin:14px 0}.scan-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.scan-option{border:1px solid var(--line);padding:13px;background:#fffefa;border-radius:5px;text-align:left}.scan-option strong{font-size:10px;display:block}.scan-option small{font-size:8px;color:var(--muted);display:block;margin-top:5px}.scan-option:disabled{opacity:.45;cursor:not-allowed}@keyframes fade{from{opacity:0}to{opacity:1}}@keyframes rise{from{transform:translateY(7px);opacity:.6}to{transform:translateY(0);opacity:1}}@media(max-width:760px){.app-shell{padding:0 18px}.topbar{height:65px}.hero{grid-template-columns:1fr;gap:30px;padding:44px 0 35px}.hero h1{font-size:48px}.hero-art{height:290px;order:-1;border-radius:42% 42% 7px 7px}.hero-art .art-label{left:20px;bottom:18px}.hero-meta{margin-top:26px}.page-wrap{padding-top:25px}.lobby-layout,.game-layout{grid-template-columns:1fr}.game-layout{gap:12px}.game-side{display:grid;grid-template-columns:1fr 1fr;gap:10px}.side-card{margin:0}.story-card{padding:20px}.stage{font-size:7px;gap:4px}.stage-connector{margin:0 4px}.stage i{width:16px;height:16px}.admin-layout{grid-template-columns:1fr}.ending-details{grid-template-columns:1fr}.form-panel{padding:21px}.page-heading h1{font-size:29px}}@media(max-width:390px){.app-shell{padding:0 13px}.hero h1{font-size:42px}.hero-actions .btn{padding:12px 13px}.game-side{grid-template-columns:1fr}.hero-meta{gap:13px}.stage span{max-width:38px;white-space:normal}.stage-connector{min-width:6px}}
.admin-card h2{font-family:'Noto Serif SC';font-weight:600;font-size:22px;margin:9px 0 12px}.admin-card .field{margin:15px 0}.admin-card .field label{display:flex;justify-content:space-between;gap:8px}.setting-state{font-size:9px;color:var(--green);font-weight:700}.setting-missing{color:#aa8b55}.settings-advanced{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:18px 0;padding:13px 0}.settings-advanced summary{font-size:11px;font-weight:700;color:#62645a;cursor:pointer}.settings-advanced[open] summary{margin-bottom:12px}.admin-card .hero-actions{flex-wrap:wrap}.admin-card .hero-actions .btn{flex:1}.admin-card .toggle-row{font-size:10px;color:#62645a}.admin-card .stat-row{margin:18px 0}.admin-card .safety-note{margin:13px 0}
.admin-login-wrap{min-height:calc(100vh - 165px);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 16px}.admin-login-brand{display:flex;align-items:center;gap:11px;font-weight:800;letter-spacing:.04em;margin-bottom:24px}.admin-login-brand small{display:block;font-size:8px;color:#949184;letter-spacing:.2em;margin-top:3px}.admin-login-card{width:min(430px,100%);padding:30px;box-shadow:var(--shadow)}.admin-login-card h2{font-family:'Noto Serif SC';font-weight:600;font-size:25px;margin:12px 0}.admin-login-card .field{margin:19px 0}.admin-login-card .field label{display:block;font-size:10px;font-weight:700;margin-bottom:7px}.admin-login-actions{display:grid;gap:10px;margin-top:20px}.admin-login-foot{text-align:center;font-size:9px;color:#97958a;margin:19px 0 0}.admin-login-wrap>.back-link{margin-top:18px}
.demo-entry{margin-top:8px}.demo-entry .btn{border:1px solid #d8d2c5;color:#496653;background:#e9eee8}.demo-banner{display:inline-flex;align-items:center;gap:8px;border-radius:99px;background:#e9eee8;color:#496653;font-size:11px;font-weight:700;padding:8px 13px;margin-bottom:17px}.demo-banner:before{content:'●';font-size:8px;color:#82a183}
.demo-banner button{border:0;background:transparent;color:#496653;text-decoration:underline;font:inherit;font-weight:800;cursor:pointer;margin-left:6px;padding:0 2px}
