:root{color-scheme:dark;--bg:#111414;--panel:#1a1e1e;--panel2:#202525;--line:#303635;--text:#e3e3da;--muted:#8e9994;--gold:#c7ab7c;--gold2:#e1c596;--green:#8ca697;--red:#c97b73;--font:Inter,"Pretendard","Noto Sans KR",system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:13px var(--font);overflow:hidden}button,input,select,textarea{font:inherit}button{cursor:pointer;color:inherit}button:disabled{opacity:.4;cursor:not-allowed}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--gold);outline-offset:3px}input,textarea,select{background:#151919;border:1px solid #3b4441;color:var(--text);border-radius:7px;padding:10px 12px;max-width:100%}textarea{resize:vertical;line-height:1.7}button,a,input,textarea,select{-webkit-tap-highlight-color:transparent}a{color:var(--gold)}button{border:0;background:none}svg{width:18px;height:18px;vertical-align:middle;stroke:currentColor;fill:none;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round}.app-shell{height:100dvh;display:grid;grid-template-rows:66px 1fr 30px;min-height:480px}.topbar{display:flex;align-items:center;padding:0 24px;border-bottom:1px solid var(--line);gap:24px;background:#171b1a}.brand{display:flex;align-items:center;gap:12px;min-width:180px}.brand-mark{border:1px solid #726b58;color:var(--gold);width:32px;height:34px;display:grid;place-items:center}.brand strong{font-size:21px;font-family:Georgia,"Noto Serif KR",serif;font-weight:600;letter-spacing:3px}.brand small{display:block;font-size:9px;color:#87918b;letter-spacing:2.6px;margin-top:3px}.top-divider{height:24px;width:1px;background:var(--line)}.session-meta{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:12px}.dot{height:6px;width:6px;border-radius:50%;background:var(--green);display:inline-block}.badge{font-size:10px;letter-spacing:.4px;border:1px solid #464738;border-radius:4px;color:var(--gold);padding:4px 7px;white-space:nowrap}.top-actions{margin-left:auto;display:flex;gap:7px;align-items:center}.btn{border:1px solid #3d4441;border-radius:6px;padding:9px 12px;display:inline-flex;align-items:center;gap:7px;background:#222725;font-size:12px;justify-content:center;transition:background .15s,color .15s}.btn:hover{background:#303731}.btn.gold{color:#171a17;background:var(--gold);border-color:var(--gold)}.btn.gold:hover{background:var(--gold2)}.btn.flat{background:none;border-color:transparent;color:var(--muted)}.btn.flat:hover{color:var(--text);background:#252b27}.btn.danger{color:var(--red)}.icon-btn{border-radius:6px;width:34px;height:34px;display:grid;place-items:center;color:var(--muted)}.icon-btn:hover,.icon-btn.active{background:#34382e;color:var(--gold)}.body-grid{display:grid;grid-template-columns:66px minmax(0,1fr) 340px;min-height:0}.floor-rail{display:flex;align-items:center;flex-direction:column;background:#171b1a;border-right:1px solid var(--line);padding:22px 0 12px;gap:8px}.rail-caption{font-size:9px;color:#6f7b74;letter-spacing:1px;margin-bottom:8px}.floor-button{width:42px;height:42px;border-radius:7px;color:#8c9891;font-size:13px;position:relative}.floor-button:hover{background:#252c27}.floor-button.active{background:#383b2e;color:var(--gold2);border:1px solid #5c5840}.floor-button.published:after{content:"";position:absolute;bottom:4px;left:19px;width:4px;height:4px;background:var(--gold);border-radius:50%}.rail-bottom{margin-top:auto;display:flex;flex-direction:column;gap:10px}.workspace{min-width:0;min-height:0;display:grid;grid-template-rows:64px minmax(0,1fr) 105px;position:relative;background:#151919}.scene-bar{display:flex;align-items:center;padding:0 25px;gap:12px;z-index:2}.eyebrow{font-size:9px;letter-spacing:1.8px;color:#8d9c92;margin-bottom:6px;text-transform:uppercase}.scene-title{font-size:17px;font-weight:500}.scene-title small{font-size:11px;color:var(--muted);margin-left:9px;font-weight:400}.scene-actions{margin-left:auto;display:flex;gap:4px}.stage{min-height:0;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 40% 45%,#2b3029 0,#1b211d 55%,#171c19 100%)}.stage:before{content:"";position:absolute;inset:0;background-image:radial-gradient(#aab29c25 .65px,transparent .65px);background-size:16px 16px;opacity:.5;pointer-events:none}.map-frame{position:relative;aspect-ratio:3439 / 2131;width:calc(100% - 80px);max-height:calc(100% - 100px);max-width:calc((100dvh - 370px) * 1.6138);background:#000;box-shadow:0 24px 70px #0008,0 0 0 1px #777568;transform-origin:center;touch-action:none}.map-base{position:absolute;inset:0;width:100%;height:100%;user-select:none;pointer-events:none;filter:sepia(.17) contrast(.88) brightness(.95)}.room-image{position:absolute;user-select:none;pointer-events:none;filter:sepia(.17) contrast(.88) brightness(.95)}.room-shade{position:absolute;background:#0a0e0b9c;pointer-events:none;border:1px solid #b6bba51c}.room-tag{position:absolute;font-size:8px;pointer-events:none;color:#ecebd8a0;border:1px solid #d5d5c52a;padding:2px 4px;background:#10171066;transform:translate(-50%,-50%);border-radius:2px}.token{position:absolute;left:var(--x);top:var(--y);width:37px;height:37px;transform:translate(-50%,-50%);border-radius:50%;background:#222b24;border:2px solid var(--color);box-shadow:0 4px 12px #0008;display:grid;place-items:center;color:var(--color);font-size:12px;font-weight:650;z-index:4;user-select:none;touch-action:none;padding:0}.token img{width:100%;height:100%;border-radius:50%;object-fit:cover}.token:before{content:"";position:absolute;width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:8px solid var(--color);left:50%;top:50%;transform:translate(-50%,-50%) rotate(var(--angle)) translateY(-25px);transform-origin:center}.token.selected{outline:2px solid #f1e6c9;outline-offset:4px}.token.ghost{opacity:.38;z-index:3;border-style:dashed;pointer-events:none}.token-label{position:absolute;top:40px;left:50%;transform:translateX(-50%);color:#eee8d6;white-space:nowrap;font-size:9px;background:#20271ee6;padding:2px 5px;border-radius:3px;font-weight:400}.map-caption{position:absolute;bottom:20px;left:25px;font-size:10px;color:#869286;display:flex;gap:16px;align-items:center}.keycap{border:1px solid #536051;border-radius:3px;padding:2px 5px;color:#c1caba;margin:0 3px;font-size:9px}.map-controls{position:absolute;bottom:17px;right:21px;display:flex;align-items:center;gap:4px;padding:4px;background:#191f1ce8;border:1px solid #3c4539;border-radius:8px;z-index:8}.zoom-label{font-size:10px;color:#adb5a6;min-width:35px;text-align:center}.timer{position:absolute;right:23px;top:16px;z-index:10;padding:12px 17px;background:#141a16ec;border:1px solid #4b513e;border-radius:10px;box-shadow:0 8px 20px #0003;min-width:145px}.timer-head{font-size:9px;letter-spacing:1.7px;color:#9fa58f;display:flex;justify-content:space-between;gap:10px}.timer-value{font-family:"SFMono-Regular",Consolas,monospace;font-size:32px;letter-spacing:2px;margin:6px 0 2px;color:#dbc59a;font-weight:300}.timer-value.changing{animation:timeflip .5s ease}.timer-label{font-size:9px;color:#808e7c}.timer-delta{position:absolute;bottom:-24px;right:0;color:var(--gold);font:12px monospace}.timer-progress{height:2px;background:#38402f;margin-top:10px}.timer-progress span{display:block;height:2px;background:var(--gold);width:var(--progress)}.scene-label{position:absolute;left:24px;top:20px;color:#a3ae99;font-size:10px;letter-spacing:1px}.cutscene{position:absolute;inset:0;background:#101310;z-index:7;display:flex;align-items:center;justify-content:center;padding:20px}.cutscene img{max-width:100%;max-height:100%;object-fit:contain}.subtitle{position:absolute;left:10%;right:10%;bottom:56px;z-index:9;text-align:center;white-space:pre-line;font-size:21px;line-height:1.8;font-family:Georgia,"Noto Serif KR",serif;color:#fff9e8;text-shadow:0 2px 5px #000,0 0 20px #000}.party-bar{display:flex;gap:10px;padding:16px 20px 17px;border-top:1px solid #313a30;background:#1a201c;min-width:0}.party-card{flex:1;min-width:0;display:flex;align-items:center;gap:10px;border:1px solid #384137;border-radius:8px;padding:10px;background:#20271f;text-align:left;position:relative}.party-card:hover{border-color:#73765b}.party-card.selected{border-color:#8d805e;background:#2c3126}.portrait{height:36px;width:36px;flex:0 0 36px;border-radius:50%;border:2px solid var(--color,var(--gold));color:var(--color,var(--gold));background:#151c18;display:grid;place-items:center;font-size:12px;overflow:hidden}.portrait img{width:100%;height:100%;object-fit:cover}.party-info{min-width:0;flex:1}.party-name{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px}.you{font-size:8px;color:#b5bcab}.party-stat{display:flex;gap:9px;font:10px monospace;color:#939f8c;margin-top:8px}.party-stat b{font-weight:400;color:#ced4c6}.handup-pill{position:absolute;left:0;bottom:calc(100% + 7px);background:#d4ba85;color:#1c241b;border-radius:5px;padding:6px 9px;font-size:10px;white-space:nowrap;box-shadow:0 2px 12px #0003}.sidebar{border-left:1px solid var(--line);background:#1a1e1e;display:flex;flex-direction:column;min-height:0;min-width:0}.sidebar-tabs{display:flex;height:54px;flex-shrink:0;padding:0 16px;border-bottom:1px solid var(--line);gap:20px}.tab{font-size:12px;color:#85908b;position:relative;padding:0 3px}.tab.active{color:var(--gold)}.tab.active:after{content:"";position:absolute;height:2px;bottom:-1px;left:0;right:0;background:var(--gold)}.sidebar-content{overflow:auto;flex:1;min-height:0;scrollbar-width:thin;scrollbar-color:#3c443d transparent}.chat-top{display:flex;align-items:center;justify-content:space-between;padding:18px 20px 10px;color:#7d8b82;font-size:10px}.chat-welcome{text-align:center;padding:40px 24px 30px;color:#8e9990}.chat-welcome svg{width:30px;height:30px;color:#baaa84;margin-bottom:17px}.chat-welcome h3{font-weight:500;font-size:14px;color:#c8cbbb;margin:0 0 10px}.chat-welcome p{line-height:1.9;font-size:11px;margin:0}.date-line{display:flex;align-items:center;gap:12px;color:#6e7d73;font-size:9px;margin:15px 20px}.date-line:before,.date-line:after{content:"";height:1px;background:#323b34;flex:1}.message{padding:13px 18px;display:flex;gap:11px;animation:arrive .2s ease}.message .portrait{width:31px;height:31px;flex-basis:31px;font-size:10px}.message-body{min-width:0;flex:1}.message-heading{font-size:11px;color:#b9c0b6;display:flex;gap:10px;align-items:center}.message-heading time{font:9px monospace;color:#6d7c71;margin-left:auto}.message-text{font-size:12px;line-height:1.85;white-space:pre-wrap;overflow-wrap:anywhere;color:#bfc8bd;margin-top:6px}.roll-result{border:1px solid #444b39;border-radius:8px;background:linear-gradient(125deg,#2c3226,#20261f);padding:13px;margin-top:8px}.roll-line{display:flex;justify-content:space-between;color:#a1ad94;font:10px monospace}.roll-total{font-size:29px;line-height:1.3;color:#e0c691;margin-top:4px;font-family:Georgia,serif}.roll-level{font-size:10px;color:#adc4a5;margin-top:5px}.roll-level.fail{color:#d19c8a}.compose{border-top:1px solid var(--line);padding:13px 15px 12px;flex-shrink:0;background:#1c211f}.compose-toolbar{display:flex;align-items:center;margin-bottom:9px;color:#8e9a90;font-size:10px;gap:6px}.compose-toolbar select{padding:4px 6px;font-size:10px;background:none;border-color:transparent;width:110px}.compose textarea{width:100%;background:#151b18;resize:none;border-color:#364036;font-size:12px;min-height:72px}.compose-bottom{display:flex;justify-content:space-between;align-items:center;margin-top:9px}.compose-bottom small{font-size:9px;color:#647566}.compose .send{width:30px;height:30px;border-radius:5px;background:#bda67c;color:#1a2318;display:grid;place-items:center}.statusbar{border-top:1px solid #2c352d;background:#141a16;color:#74826f;display:flex;align-items:center;justify-content:space-between;padding:0 17px;font-size:9px;letter-spacing:.3px}.statusbar-left{display:flex;gap:18px;align-items:center}.statusbar a{font-size:9px;color:#8e9d84;text-decoration:none}.character-panel{padding:22px 18px}.sheet-top{display:flex;align-items:center;gap:13px;margin-bottom:25px}.sheet-top .portrait{width:48px;height:48px;flex-basis:48px}.sheet-top h3{margin:0 0 5px;font-size:16px;font-weight:500}.muted{color:var(--muted);font-size:11px;line-height:1.8}.section-heading{font-size:10px;color:#8f9d8a;letter-spacing:1px;display:flex;align-items:center;justify-content:space-between;margin:23px 0 12px}.vital-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.vital{border:1px solid #364033;padding:12px;border-radius:7px;background:#20271f}.vital label{display:block;color:#8e9e88;font-size:9px;letter-spacing:1px}.vital b{font:22px Georgia,serif;font-weight:400;color:#d7d6bf}.vital small{color:#74846e;margin-left:5px;font:10px monospace}.bar{height:3px;background:#37402e;margin-top:9px}.bar span{display:block;height:3px;background:#9f9e76;width:var(--value)}.attributes{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:#343e31;border:1px solid #343e31;border-radius:6px;overflow:hidden}.attribute{padding:10px 3px;background:#20271f;text-align:center}.attribute small{display:block;color:#84947b;font:9px monospace;margin-bottom:5px}.attribute b{font-size:13px;font-weight:400}.skills-list{display:flex;flex-direction:column}.skill{display:flex;align-items:center;width:100%;padding:11px 4px;border-bottom:1px solid #303b2e;text-align:left;gap:10px}.skill:hover{background:#293225}.skill span{flex:1}.skill b{font:12px monospace;color:#bfbea0}.skill small{font:9px monospace;color:#75816b}.timeline{padding:18px}.timeline-controls{display:flex;gap:7px;align-items:center;margin-bottom:15px}.timeline-item{padding:12px;border-left:2px solid #585e43;margin:0 0 10px;background:#222a20;border-radius:0 5px 5px 0}.timeline-item.current{border-color:var(--gold)}.timeline-item h4{margin:0;font-size:11px;font-weight:400;color:#cec7a6;display:flex;justify-content:space-between}.timeline-item p{font-size:10px;color:#8e9b83;line-height:1.7;margin:6px 0}.timeline-item button{font-size:9px;color:#b4b996;padding:3px 6px}.empty{padding:40px 20px;text-align:center;color:#89957f;line-height:1.9;font-size:12px}.dialog-backdrop{position:fixed;inset:0;background:#080c0bb5;z-index:100;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(5px);padding:24px}.dialog{background:#1b221d;border:1px solid #4d5745;border-radius:12px;box-shadow:0 30px 100px #0009;width:min(620px,95vw);max-height:90vh;display:flex;flex-direction:column}.dialog.wide{width:min(840px,95vw)}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid #35402f}.dialog-header h2{margin:0;font-size:17px;font-weight:500}.dialog-body{padding:22px 24px;overflow:auto}.dialog-footer{padding:15px 24px;border-top:1px solid #35402f;display:flex;gap:8px;justify-content:flex-end}.field{margin-bottom:15px}.field label{display:block;font-size:11px;color:#aab59e;margin-bottom:8px}.field input,.field textarea,.field select{width:100%;background:#141c16}.field textarea.code{font:11px/1.8 monospace;min-height:250px}.row{display:flex;gap:10px;align-items:center}.row>*{flex:1;min-width:0}.wrap{display:flex;flex-wrap:wrap;gap:8px}.help{background:#273022;border:1px solid #404b35;border-radius:7px;padding:12px 14px;font-size:11px;line-height:1.8;color:#adb99d;margin:12px 0}.asset-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.asset-card{background:#121b14;border:1px solid #394732;border-radius:8px;overflow:hidden;text-align:left;padding:0}.asset-card:hover{border-color:#b3a473}.asset-card img{width:100%;height:110px;object-fit:contain;background:#d0d2c8;padding:5px}.asset-card span{display:block;padding:11px;font-size:11px}.room-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.room-toggle{padding:17px 10px;border:1px solid #414b36;border-radius:7px;color:#849377;background:#1a241b}.room-toggle.open{border-color:#8a8760;background:#343c28;color:#d2c694}.room-toggle span{display:block;font-size:10px;margin-top:7px}.big-time{font:50px monospace;color:var(--gold);text-align:center;padding:15px}.time-buttons{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}.signal-wheel{position:fixed;z-index:150;width:230px;height:230px;border-radius:50%;background:#19231eef;border:1px solid #637153;box-shadow:0 8px 60px #0009;pointer-events:none}.wheel-center{position:absolute;left:75px;top:75px;width:80px;height:80px;border-radius:50%;background:#0d1811;border:1px solid #4e5c43;display:grid;place-items:center;color:#91a280;font-size:10px;text-align:center;padding:9px}.wheel-item{position:absolute;width:65px;height:47px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#9aab8b;font-size:8px;border-radius:10px}.wheel-item strong{font-size:17px;font-weight:400}.wheel-item.active{background:#baaa79;color:#192319}.ping{position:absolute;width:18px;height:18px;border:2px solid var(--gold);border-radius:50%;transform:translate(-50%,-50%);animation:ping 1.5s ease-out forwards;pointer-events:none;z-index:6}.ping span{position:absolute;top:22px;white-space:nowrap;font-size:9px;background:#142012;color:#ddcea0;padding:2px 5px}.live-handups{position:absolute;top:20px;left:20px;z-index:12;display:flex;flex-direction:column;gap:7px}.live-handups .signal{background:#293521ed;border:1px solid #69734b;border-radius:6px;padding:8px 11px;color:#d0cba6;font-size:11px}.audio-indicator{display:flex;gap:6px;align-items:center;color:#cfbd8d;cursor:pointer}.audio-bars{display:flex;align-items:center;gap:2px;height:12px}.audio-bars i{width:2px;height:10px;background:var(--gold);animation:bars .7s ease-in-out infinite alternate}.audio-bars i:nth-child(2){animation-delay:.3s}.audio-bars i:nth-child(3){animation-delay:.1s}.checklist{display:flex;gap:10px;flex-wrap:wrap}.checklist label{display:flex;align-items:center;gap:6px;border:1px solid #404c36;border-radius:6px;padding:10px}.checklist input{accent-color:var(--gold)}#toast{position:fixed;left:50%;bottom:50px;transform:translate(-50%,20px);opacity:0;z-index:300;padding:12px 20px;max-width:90vw;background:#d5c49c;color:#172019;border-radius:8px;box-shadow:0 7px 30px #0007;pointer-events:none;transition:.2s;font-size:12px}#toast.visible{opacity:1;transform:translate(-50%,0)}.lobby{height:100dvh;display:grid;place-items:center;background:radial-gradient(ellipse at 40% 20%,#354231,#101713 70%)}.lobby-card{max-width:430px;width:90vw;background:#19241dee;border:1px solid #5a6245;padding:40px;border-radius:14px;box-shadow:0 30px 100px #0005}.lobby h1{font:36px Georgia,"Noto Serif KR",serif;letter-spacing:6px;color:#d2c294;margin:10px 0}.lobby p{color:#94a28b;line-height:1.9;margin:18px 0 25px}.alert-count{background:#a78e60;color:#1b241a;padding:1px 5px;border-radius:4px;font-size:9px;margin-left:6px}.preview-cursor{position:absolute;bottom:65px;left:50%;transform:translateX(-50%);background:#3d3e28;color:#ddd3a0;border:1px solid #8b8452;padding:8px 12px;border-radius:6px;z-index:12;font-size:11px}.button-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.full{width:100%}.spacer{height:12px}.upload-label{display:inline-flex;align-items:center;gap:7px;cursor:pointer}.audio-row{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid #35432f}.audio-row span{flex:1}.audio-report{font-size:10px;color:#8ea380;margin-top:10px}.token-actions{position:absolute;bottom:62px;left:50%;transform:translateX(-50%);z-index:11;display:flex;padding:5px;background:#172219ed;border:1px solid #647251;border-radius:7px;gap:4px}.scene-tools-tooltip{display:none}.sidebar.collapsed{display:none}.scene-switch-label{font-size:9px;color:#8a9b80}input[type=range]{padding:0;accent-color:var(--gold);height:20px}.badge.live{color:#a9c3a2;border-color:#4e6646}.warning{color:#c69a7a}.file-label{display:inline-flex;border:1px solid #5b6347;border-radius:6px;padding:9px 12px;color:#c4c6a7;font-size:11px;cursor:pointer}.file-label input{display:none}.profile-preview{padding:12px;border:1px solid #3b4933;border-radius:7px;margin:12px 0}.hint{font-size:10px;color:#7f9175;line-height:1.8}.summary-line{font-size:11px;line-height:1.7;color:#9aaa8e;margin:10px 0}code{font-size:11px;color:#c1bb91}button .label{pointer-events:none}@keyframes ping{0%{box-shadow:0 0 0 0 #c7ab7c66}100%{box-shadow:0 0 0 35px #c7ab7c00;opacity:0}}@keyframes arrive{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@keyframes timeflip{0%{transform:translateY(-7px);opacity:.4}100%{transform:translateY(0);opacity:1}}@keyframes bars{from{height:3px}to{height:12px}}@media(min-width:1600px){.body-grid{grid-template-columns:72px minmax(0,1fr) 380px}.map-frame{width:calc(100% - 100px)}.party-bar{padding-left:30px;padding-right:30px;gap:16px}.party-card{padding:12px 16px}}@media(max-width:1100px){.body-grid{grid-template-columns:54px minmax(0,1fr) 300px}.topbar{padding:0 16px;gap:14px}.brand{min-width:140px}.top-actions .btn .text{display:none}.party-bar{padding:12px 10px;gap:5px}.party-card{gap:6px;padding:8px 6px}.party-card .portrait{width:29px;height:29px;flex-basis:29px}.party-stat{gap:5px;font-size:8px}.map-frame{width:calc(100% - 30px)}.scene-bar{padding:0 15px}.timer{right:15px;top:12px;min-width:125px;padding:10px 13px}.timer-value{font-size:27px}}@media(max-width:800px){.body-grid{grid-template-columns:45px minmax(0,1fr)}.sidebar{position:fixed;right:0;top:66px;bottom:30px;width:min(340px,85vw);z-index:30;box-shadow:-20px 0 50px #0007}.sidebar:not(.mobile-open){display:none}.session-meta,.top-divider,.badge{display:none}.topbar{gap:8px}.party-card .portrait{display:none}.party-card{padding:8px}.party-name{font-size:10px}.map-caption{max-width:50%;line-height:1.8;font-size:9px}.workspace{grid-template-rows:58px minmax(0,1fr) 90px}.scene-title small{display:none}.asset-grid{grid-template-columns:1fr 1fr}.room-grid{grid-template-columns:repeat(2,1fr)}.time-buttons{grid-template-columns:repeat(3,1fr)}.map-frame{max-width:none;max-height:none}.statusbar-left span:nth-child(2){display:none}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* PC view: the scene and a single sidebar. GM controls remain in the GM layout. */
body[data-role=pc]{--pc-sidebar-width:clamp(280px,28vw,360px);--bg:#080808;--panel:#111;--panel2:#191919;--line:#292929;--text:#e5e5e5;--muted:#929292;--gold:#d0d0d0;--gold2:#eee;--green:#aaa;background:#080808}
.pc-shell{grid-template-rows:minmax(0,1fr);min-height:0}
.pc-shell .body-grid{grid-template-columns:minmax(0,1fr) var(--pc-sidebar-width)}
.pc-shell .workspace{grid-template-rows:minmax(0,1fr);background:#080808}
.pc-shell .stage{background:#080808}
.pc-shell .stage:before{display:none}
.pc-shell .map-frame{width:min(calc(100% - 32px),calc((100dvh - 32px) * 1.6138));max-width:none;max-height:none;flex-shrink:0;box-shadow:0 0 0 1px #292929}
.pc-shell .map-base,.pc-shell .room-image{filter:contrast(.94) brightness(.94)}
.pc-shell .sidebar{position:relative;inset:auto;width:auto;display:flex;min-width:0;box-shadow:none;border-left:1px solid #292929;background:#111;z-index:20}
.pc-shell .sidebar-tabs{min-height:52px;padding:0 10px;display:flex;justify-content:space-between;align-items:center;border-color:#292929;gap:4px}
.pc-shell .tab-list{display:flex;align-self:stretch;min-width:0}
.pc-shell .tab{padding:0 13px;flex:0 0 auto;color:#858585;font-size:12px}
.pc-shell .tab.active{color:#eee;border-color:#ddd}
.pc-shell .sidebar-tools{display:flex;align-items:center;margin-left:auto;gap:2px}
.pc-shell .sidebar-tools .icon-btn{width:30px;height:30px}
.pc-shell .connection-warning{font-size:9px;color:#bbb}
.pc-shell .sidebar-content{background:#111}
.pc-shell .chat-empty{padding:32px 16px;color:#777;font-size:12px}
.pc-shell .compose{padding:10px 12px;background:#111;border-color:#292929}
.pc-shell .compose-toolbar{margin-bottom:5px;color:#a0a0a0}
.pc-shell .compose-toolbar .icon-btn{width:28px;height:28px}
.pc-shell .compose textarea{background:#0b0b0b;border-color:#303030;min-height:64px;color:#e5e5e5}
.pc-shell .compose-bottom small{color:#717171}
.pc-shell .compose .send{background:#d0d0d0;color:#111}
.pc-shell .message-heading{color:#ddd}
.pc-shell .message-heading time{color:#737373}
.pc-shell .message-text{color:#c8c8c8}
.pc-shell .roll-result{background:#1a1a1a;border-color:#383838}
.pc-shell .roll-line,.pc-shell .roll-level{color:#aaa}
.pc-shell .roll-total{color:#eee}
.pc-shell .roll-level.fail{color:#d19c8a}
.pc-shell .timer{right:18px;top:18px;min-width:0;padding:0;border:0;background:transparent;border-radius:0;box-shadow:none;pointer-events:none}
.pc-shell .timer-value{margin:0;font-size:27px;letter-spacing:1px;color:#ddd}
.pc-shell .timer-delta{color:#ddd}
.pc-shell .token{background:#161616}
.pc-shell .token.selected{outline-color:#ddd}
.pc-shell .token-label{background:#111d;color:#ddd}
.pc-shell .cutscene{background:#080808;padding:16px}
.pc-shell .subtitle{bottom:28px;color:#eee}
.pc-shell .live-handups{top:auto;left:auto;right:8px;bottom:50%;width:min(300px,calc(100% - 24px));max-height:calc(50% - 58px);display:flex;flex-direction:column;gap:12px;padding:4px 16px 4px 4px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#444 transparent;pointer-events:auto}
.pc-shell .live-handups .signal{position:relative;flex:0 0 auto;background:var(--signal-color);color:var(--signal-ink);border:0;border-radius:16px 16px 4px 16px;padding:11px 16px;box-shadow:0 5px 18px #0005;overflow-wrap:anywhere;text-align:left}
.pc-shell .live-handups .signal:after{content:"";position:absolute;right:-10px;bottom:12px;border-top:10px solid transparent;border-bottom:0 solid transparent;border-left:12px solid var(--signal-color)}
.pc-shell .signal-name{display:block;font-size:12px;line-height:1.4;margin-bottom:5px;font-weight:500}
.pc-shell .signal-message{display:block;font-size:17px;line-height:1.5;font-weight:650;white-space:pre-wrap}
.pc-shell .character-list{display:flex;flex-direction:column;gap:8px;padding:14px}
.pc-shell .character-card{display:flex;align-items:center;gap:12px;width:100%;padding:14px 12px;text-align:left;background:#191919;border:1px solid #303030;border-radius:7px}
.pc-shell .character-card:hover{background:#222;border-color:#555}
.pc-shell .character-card>svg{width:14px;color:#777;flex-shrink:0}
.pc-shell .character-card .party-info{display:flex;flex-direction:column;gap:7px}
.pc-shell .party-name{font-size:12px;color:#ddd}
.pc-shell .party-stat{font-size:10px;color:#929292}
.pc-shell .party-stat b{color:#ccc}
.pc-shell .you{background:#333;color:#ccc;border:0}
.pc-shell .character-panel{padding:12px 16px 20px}
.pc-shell .sheet-back{margin:0 0 18px;padding:7px 0}
.pc-shell .sheet-top{margin-bottom:18px}
.pc-shell .section-heading,.pc-shell .skill small{color:#929292}
.pc-shell .vital{background:#191919;border-color:#303030}
.pc-shell .vital label,.pc-shell .vital small{color:#999}
.pc-shell .vital b{color:#ddd}
.pc-shell .bar{background:#333}
.pc-shell .bar span{background:#aaa}
.pc-shell .attributes{background:#303030;border-color:#303030}
.pc-shell .attribute{background:#191919}
.pc-shell .attribute small{color:#999}
.pc-shell .skill{border-color:#292929}
.pc-shell .skill:hover{background:#222}
.pc-shell .skill b{color:#ddd}
body[data-role=pc] .portrait{background:#111}
body[data-role=pc] .btn{background:#202020;border-color:#3a3a3a;color:#ccc}
body[data-role=pc] .btn:hover{background:#2a2a2a;color:#eee}
body[data-role=pc] .btn.gold{background:#d0d0d0;border-color:#d0d0d0;color:#111}
body[data-role=pc] .btn.flat{background:transparent;border-color:transparent;color:#aaa}
body[data-role=pc] .icon-btn:hover{background:#282828;color:#eee}
body[data-role=pc] .alert-count{background:#444;color:#eee}
body[data-role=pc] input,body[data-role=pc] textarea,body[data-role=pc] select{background:#0e0e0e;border-color:#3a3a3a}
body[data-role=pc] .popover-layer{position:fixed;top:58px;right:12px;z-index:100;width:min(352px,calc(100vw - 24px));pointer-events:none}
body[data-role=pc] .dialog,body[data-role=pc] .dialog.wide{width:100%;max-height:min(580px,calc(100dvh - 74px));background:#151515;border-color:#414141;border-radius:8px;box-shadow:0 10px 36px #0008;pointer-events:auto}
body[data-role=pc] .dialog-header{padding:10px 14px;border-color:#303030}
body[data-role=pc] .dialog-header h2{font-size:13px}
body[data-role=pc] .dialog-header .icon-btn{width:26px;height:26px}
body[data-role=pc] .dialog-body{padding:14px}
body[data-role=pc] .dialog-footer{padding:10px 14px;border-color:#303030;flex-wrap:wrap}
body[data-role=pc] .dialog .field{margin-bottom:12px}
body[data-role=pc] .field label{color:#aaa;margin-bottom:5px}
body[data-role=pc] .dialog .field textarea.code{min-height:140px}
body[data-role=pc] .dialog .help{background:#1e1e1e;border-color:#333;color:#aaa;padding:9px 10px}
body[data-role=pc] .dialog .file-label,body[data-role=pc] .profile-preview{border-color:#444;color:#ccc}
body[data-role=pc] .dialog .sheet-top{margin-bottom:12px}
body[data-role=pc] .dialog p{margin-top:0}
body[data-role=pc] .volume-row{display:grid;grid-template-columns:1fr 40px 28px;align-items:center;gap:7px}
body[data-role=pc] .volume-value{color:#aaa;font-size:11px;text-align:right}
body[data-role=pc] .sound-details{border-top:1px solid #333;border-bottom:1px solid #333;margin:14px 0;padding:10px 0}
body[data-role=pc] .sound-details summary{cursor:pointer;color:#bbb;font-size:12px}
body[data-role=pc] .sound-details[open] summary{margin-bottom:14px}
body[data-role=pc] .settings-map{display:flex;gap:4px;align-items:center;font-size:11px;color:#aaa}
body[data-role=pc] .settings-map>span{margin-right:auto}
body[data-role=pc] .demo-links{display:flex;flex-direction:column;gap:7px;margin-top:14px;padding-top:12px;border-top:1px solid #333;font-size:10px;color:#888}
body[data-role=pc] .signal-wheel{background:#151515f5;border-color:#555}
body[data-role=pc] .wheel-center{background:#0b0b0b;border-color:#444;color:#aaa}
body[data-role=pc] .wheel-item{color:#bbb}
body[data-role=pc] .wheel-item.active{background:#ccc;color:#111}
body[data-role=pc] #toast{background:#ddd;color:#111;bottom:20px}
@media(max-width:800px){body[data-role=pc]{--pc-sidebar-width:clamp(220px,40vw,300px)}.pc-shell .body-grid{grid-template-columns:minmax(0,1fr) var(--pc-sidebar-width)}.pc-shell .sidebar:not(.mobile-open){display:flex}.pc-shell .map-frame{width:min(calc(100% - 20px),calc((100dvh - 20px) * 1.6138))}.pc-shell .character-card .portrait{display:grid}.pc-shell .timer{right:10px;top:10px;padding:6px 8px}.pc-shell .timer-value{font-size:22px}}
@media(max-width:500px){body[data-role=pc]{--pc-sidebar-width:min(55vw,240px)}.pc-shell .body-grid{grid-template-columns:minmax(0,1fr) var(--pc-sidebar-width)}.pc-shell .sidebar-tabs{padding:0 5px}.pc-shell .tab{padding:0 9px}.pc-shell .compose{padding:8px}.pc-shell .compose-bottom small{font-size:8px}.pc-shell .character-list{padding:8px}.pc-shell .character-card{padding:10px 8px;gap:8px}.pc-shell .character-card>svg{display:none}.pc-shell .party-stat{gap:7px}.pc-shell .character-panel{padding:10px}.pc-shell .vital-grid{gap:6px}.pc-shell .vital{padding:9px}.pc-shell .portrait{width:30px;height:30px;flex-basis:30px}.pc-shell .sheet-top{gap:8px}.pc-shell .sheet-top h3{font-size:14px}}

/* Action controls open beside the chat composer, keeping chat visible. */
body[data-role=pc] .popover-layer.play-action{top:auto;bottom:12px;right:calc(var(--pc-sidebar-width) + 12px);width:min(320px,calc(100vw - var(--pc-sidebar-width) - 24px))}
body[data-role=pc] .popover-layer.play-action .dialog{max-height:calc(100dvh - 24px)}
@media(max-width:600px){body[data-role=pc] .popover-layer.play-action{right:12px;width:min(320px,calc(100vw - 24px))}.pc-shell .live-handups .signal{padding:10px 12px}.pc-shell .signal-message{font-size:15px}}

.pc-shell .live-handups:empty{display:none}

/* The map is a transparent drawing, without a rectangular backing or edge. */
.map-frame,.pc-shell .map-frame{background:transparent;border:0;box-shadow:none}
.pc-shell .map-base,.pc-shell .room-image{filter:none}
.timer-value,.pc-shell .timer-value{font-family:"Iowan Old Style","Palatino Linotype","Book Antiqua",Georgia,serif;font-weight:600;font-variant-numeric:lining-nums tabular-nums;font-size:32px;letter-spacing:1px;line-height:1.1;text-shadow:0 1px 4px #0009}
.timer-delta{font-family:"Iowan Old Style",Georgia,serif;font-variant-numeric:lining-nums tabular-nums}
.live-handups,.pc-shell .live-handups{left:auto;right:0;bottom:auto;top:98px;width:min(300px,calc(100% - 20px));max-height:calc(100% - 116px);display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding:4px 16px 12px 4px;overflow-x:hidden;overflow-y:auto;scrollbar-width:none;pointer-events:none}
.live-handups:empty{display:none}
.live-handups .signal,.pc-shell .live-handups .signal{position:relative;flex:0 0 auto;min-width:76px;max-width:100%;background:var(--signal-color);color:var(--signal-ink);border:0;border-radius:14px 14px 3px 14px;padding:10px 14px;text-align:center;box-shadow:0 3px 12px #0004;animation:signal-enter .24s ease-out both;overflow-wrap:anywhere}
.live-handups .signal:after{content:"";position:absolute;right:-8px;bottom:10px;border-left:10px solid var(--signal-color);border-top:9px solid transparent}
.live-handups .signal.leaving,.pc-shell .live-handups .signal.leaving{animation:signal-leave .22s ease-in both;pointer-events:none}
.signal-symbol{display:grid;place-items:center;padding:2px 8px}
.signal-symbol svg{width:34px;height:34px;stroke-width:1.8}
.live-handups .signal-name{display:block;font-size:10px;line-height:1.4;font-weight:500;margin-bottom:5px}
.live-handups .signal-message{display:block;font-size:15px;line-height:1.5;font-weight:600;white-space:pre-wrap;text-align:left}
.signal-choice{min-height:54px}
.signal-choice svg{width:27px;height:27px}
.wheel-item svg{width:28px;height:28px}
.token[hidden]{display:none}
.token.ghost.stamp-auto{opacity:.30;border-style:dashed}
.token.ghost.stamp-manual{opacity:.54;border-style:double;border-width:4px}
.token.ghost .token-label{font-size:9px}
.timeline-item.stamp-auto{border-left-style:dashed;border-left-color:#778f9b}
.timeline-item.stamp-manual{border-left-style:solid;border-left-width:3px;border-left-color:#c7ab7c}
.stamp-kind{display:flex;align-items:center;gap:5px;font-size:10px;margin-bottom:8px;color:#a7b8bf}
.stamp-manual .stamp-kind{color:#d4bd90}
.stamp-kind svg{width:13px;height:13px}
.layer-image{position:absolute;pointer-events:none;user-select:none}
.layer-controls{margin-top:20px;padding-top:14px;border-top:1px solid var(--line)}
.layer-controls h3{font-size:12px;font-weight:500;margin:0 0 12px}
.layer-controls .room-grid{margin-top:12px}
@keyframes signal-enter{from{transform:translateX(calc(100% + 22px));opacity:0}to{transform:translateX(0);opacity:1}}
@keyframes signal-leave{from{transform:translateX(0);opacity:1}to{transform:translateX(calc(100% + 22px));opacity:0}}
@media(prefers-reduced-motion:reduce){.live-handups .signal,.live-handups .signal.leaving{animation:none!important}}

.ping-layer{position:absolute;inset:0;z-index:6;pointer-events:none}
.ping{width:44px;height:44px;border:0;background:none;box-shadow:none;color:var(--ping-color);transform:translate(-50%,-50%) scale(var(--ping-scale,1));animation:ping-fade 2.1s ease-out forwards;isolation:isolate}
.ping-ring{position:absolute;inset:0;border:3px solid var(--ping-color);border-radius:50%;box-shadow:0 0 0 1px #fff8,0 0 18px var(--ping-color);animation:ping-wave 1.2s ease-out 0s both}
.ping-ring.delayed{animation-delay:.45s}
.ping-core{position:absolute;left:50%;top:50%;width:13px;height:13px;transform:translate(-50%,-50%);background:var(--ping-color);border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 3px #0009,0 0 20px var(--ping-color)}
.ping span{top:calc(100% + 15px);left:50%;transform:translateX(-50%);font:600 12px/1.4 var(--font);background:#080808ed;color:#fff;border:1px solid var(--ping-color);border-radius:5px;padding:5px 9px;box-shadow:0 2px 10px #0009}
@keyframes ping-wave{0%{transform:scale(.45);opacity:1}75%{opacity:.7}100%{transform:scale(2.1);opacity:0}}
@keyframes ping-fade{0%,75%{opacity:1}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.ping,.ping-ring{animation:none!important}.ping-ring.delayed{display:none}.ping-ring{opacity:.85}}
