:root{--bg:#0d0d0d;--bg-surface:#161616;--bg-raised:#1e1e1e;--border:#2a2a2a;--text:#e0e0e0;--text-muted:#707070;--accent:#7c6af0;--accent-hover:#9585f5;--danger:#c0392b;--success:#27ae60;--warning:#e67e22;--rating-fade:#3498db;--rating-normal:#27ae60;--rating-lewd:#e74c3c;--font-mono:"Courier New", Courier, monospace;--font-body:Georgia, "Times New Roman", serif;--radius:4px;--gap:1rem}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;font-size:16px}body{background:var(--bg);color:var(--text);font-family:var(--font-body);min-height:100vh;line-height:1.6}#app{flex-direction:column;min-height:100vh;display:flex}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover);text-decoration:underline}button,.btn{background:var(--accent);color:#fff;border-radius:var(--radius);font-family:var(--font-mono);cursor:pointer;border:none;align-items:center;gap:.4em;padding:.5em 1.2em;font-size:.9rem;transition:background .15s;display:inline-flex}button:hover,.btn:hover{background:var(--accent-hover)}button.secondary,.btn-secondary{background:var(--bg-raised);border:1px solid var(--border);color:var(--text)}button.secondary:hover,.btn-secondary:hover{background:var(--border)}button.danger,.btn-danger{background:var(--danger)}button:disabled{opacity:.4;cursor:not-allowed}input,textarea,select{background:var(--bg-raised);border:1px solid var(--border);width:100%;color:var(--text);border-radius:var(--radius);font-family:var(--font-mono);padding:.5em .75em;font-size:.9rem}input:focus,textarea:focus,select:focus{border-color:var(--accent);outline:none}label{font-family:var(--font-mono);color:var(--text-muted);margin-bottom:.3em;font-size:.85rem;display:block}.field{flex-direction:column;gap:.25rem;margin-bottom:1rem;display:flex}.card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--gap)}.error-msg{color:var(--danger);font-family:var(--font-mono);margin-top:.5rem;font-size:.85rem}.badge{font-family:var(--font-mono);border-radius:999px;padding:.15em .6em;font-size:.75rem;font-weight:700;display:inline-block}.badge-fade{background:var(--rating-fade);color:#fff}.badge-normal{background:var(--rating-normal);color:#fff}.badge-lewd{background:var(--rating-lewd);color:#fff}nav.topbar{background:var(--bg-surface);border-bottom:1px solid var(--border);align-items:center;gap:2rem;padding:.75rem 2rem;display:flex}nav.topbar .brand{font-family:var(--font-mono);color:var(--accent);font-size:1.1rem;font-weight:700;text-decoration:none}nav.topbar .nav-links{flex:1;align-items:center;gap:1.5rem;display:flex}nav.topbar .nav-links a{font-family:var(--font-mono);color:var(--text-muted);font-size:.9rem}nav.topbar .nav-links a:hover,nav.topbar .nav-links a.active{color:var(--text)}.main-content{flex:1;width:100%;max-width:1200px;margin:0 auto;padding:2rem}.page-title{font-family:var(--font-mono);color:var(--text);margin-bottom:1.5rem;font-size:1.4rem}.toast{background:var(--bg-raised);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius);font-family:var(--font-mono);z-index:1000;padding:.75rem 1.25rem;font-size:.85rem;animation:.2s slideIn;position:fixed;bottom:2rem;right:2rem}@keyframes slideIn{0%{transform:translate(120%)}to{transform:translate(0)}}.narrative{font-family:var(--font-body);color:var(--text);max-width:70ch;font-size:1.05rem;line-height:1.8}.narrative-block p{margin-bottom:1em}.narrative-block strong{color:var(--text);font-weight:600}.narrative-block em{color:var(--text-muted);font-style:italic}.speech{color:var(--success)}.player-choice{color:var(--accent);font-style:italic;font-family:var(--font-mono);margin:1rem 0;font-size:.9rem}.game-over-label{color:var(--text-muted);font-family:var(--font-mono);width:100%;margin-bottom:.5rem;font-size:.9rem}.milestone-banner{border-left:3px solid var(--warning);background:color-mix(in srgb, var(--warning) 8%, transparent);font-family:var(--font-mono);color:var(--text-muted);align-items:center;gap:1rem;margin:1.25rem 0 .5rem;padding:.5rem .75rem;font-size:.85rem;display:flex}.milestone-banner strong{color:var(--text)}h1,h2,h3{font-family:var(--font-mono);letter-spacing:-.02em;font-weight:400}h1{color:var(--accent);font-size:1.8rem}h2{color:var(--text);margin-bottom:1rem;font-size:1.3rem}h3{color:var(--text-muted);margin-bottom:.5rem;font-size:1.1rem}.chat-msg{border-bottom:1px solid var(--border);padding:.75rem 0}.chat-msg .role{font-family:var(--font-mono);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.25rem;font-size:.75rem}.chat-msg.role-user .role{color:var(--accent)}.chat-msg.role-assistant .role{color:var(--success)}.chat-msg .content{font-family:var(--font-body);white-space:pre-wrap;font-size:.95rem;line-height:1.6}.suggestions{flex-wrap:wrap;gap:.4rem;margin-top:.6rem;display:flex}.suggestion-btn{background:var(--bg-raised);border:1px solid var(--border);border-radius:var(--radius);color:var(--accent);font-family:var(--font-mono);cursor:pointer;padding:.3em .7em;font-size:.78rem;transition:border-color .15s,background .15s}.suggestion-btn:hover{border-color:var(--accent);background:var(--bg-surface)}.json-preview{font-family:var(--font-mono);color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);max-height:100%;padding:1rem;font-size:.8rem;line-height:1.5;overflow:auto}.json-preview .key{color:#7ec8e3}.json-preview .string{color:#a8d8a8}.json-preview .number{color:gold}.json-preview .bool{color:#ff9f7f}.stats-hud{flex-direction:column;gap:.6rem;display:flex}.stat-item{justify-content:space-between;align-items:baseline;gap:.5rem;display:flex}.stat-label{font-family:var(--font-mono);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem}.stat-value{font-family:var(--font-mono);color:var(--accent);font-size:.95rem;font-weight:700}.stat-delta{font-family:var(--font-mono);font-size:.85rem;font-weight:700}.stat-delta.positive{color:#4caf72}.stat-delta.negative{color:var(--danger)}.choices{flex-direction:column;gap:.5rem;max-width:60ch;margin-top:1.5rem;display:flex}.choice-btn{text-align:left;background:var(--bg-surface);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);font-family:var(--font-body);cursor:pointer;padding:.75rem 1rem;font-size:.95rem;transition:border-color .15s,background .15s}.choice-btn:hover{border-color:var(--accent);background:var(--bg-raised)}.choice-row{align-items:stretch;gap:.4rem;width:100%;display:flex}.choice-row .choice-btn{flex:1}.choice-edit-btn{border:1px solid var(--border);color:var(--text-muted);border-radius:var(--radius);cursor:pointer;background:0 0;flex-shrink:0;padding:.4rem .6rem;font-size:.8rem;transition:border-color .15s,color .15s}.choice-edit-btn:hover{border-color:var(--accent);color:var(--accent)}.choice-edit-input{background:var(--bg-raised);border:1px solid var(--accent);border-radius:var(--radius);color:var(--text);font-family:var(--font-body);flex:1;padding:.75rem 1rem;font-size:.95rem}.custom-action-row{border-top:1px solid var(--border);gap:.4rem;width:100%;margin-top:.25rem;padding-top:.5rem;display:flex}.custom-action-row input{flex:1;font-size:.9rem}.retry-row{border-top:1px solid var(--border);align-items:center;gap:.4rem;width:100%;margin-top:.5rem;padding-top:.5rem;display:flex}.retry-row input{flex:1;font-size:.85rem}.retry-btn{border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);border-radius:var(--radius);cursor:pointer;background:0 0;padding:.3em .7em;font-size:.8rem;transition:color .15s,border-color .15s}.retry-btn:hover{color:var(--text);border-color:var(--text-muted)}.narrative-footer{justify-content:flex-end;margin-top:.75rem;display:flex}.render-scene-btn{border:1px solid var(--border);color:var(--text-muted);font-family:var(--font-mono);border-radius:var(--radius);cursor:pointer;opacity:0;background:0 0;padding:.25em .6em;font-size:.75rem;transition:opacity .15s,color .15s,border-color .15s}.narrative-block:hover .render-scene-btn{opacity:1}.render-scene-btn:hover{color:var(--text);border-color:var(--text-muted)}.render-scene-btn:disabled{cursor:default;opacity:.5}.scene-image{border-radius:var(--radius);border:1px solid var(--border);cursor:zoom-in;max-width:100%;display:block}.lightbox-overlay{z-index:1000;cursor:zoom-out;background:#000000d9;justify-content:center;align-items:center;padding:2rem;display:flex;position:fixed;inset:0}.lightbox-image{border-radius:var(--radius);max-width:100%;max-height:100%;box-shadow:0 8px 40px #0009}.card-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem;display:grid}.game-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:.5rem;padding:1rem;display:flex}.game-card h3{color:var(--text);margin:0;font-size:1rem}.game-card .meta{font-family:var(--font-mono);color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.75rem;display:flex}.game-card .actions{gap:.5rem;margin-top:auto;padding-top:.5rem;display:flex}.game-card .actions button{flex:1;padding:.4em .75em;font-size:.8rem}.builder-layout{grid-template-columns:1fr 1fr;gap:1rem;height:calc(100vh - 8rem);display:grid}.builder-chat{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;display:flex;overflow:hidden}.chat-messages{flex:1;padding:1rem;overflow-y:auto}.chat-input-row{border-top:1px solid var(--border);gap:.5rem;padding:.75rem;display:flex}.chat-input-row textarea{resize:none;flex:1;height:3rem;min-height:3rem}.builder-preview{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;display:flex;overflow:hidden}.preview-header{border-bottom:1px solid var(--border);font-family:var(--font-mono);color:var(--text-muted);justify-content:space-between;align-items:center;padding:.75rem 1rem;font-size:.85rem;display:flex}.preview-body{flex:1;padding:1rem;overflow:auto}.play-layout{flex-direction:column;height:calc(100vh - 4rem);display:flex;overflow:hidden}.play-topbar{background:var(--bg-surface);border-bottom:1px solid var(--border);font-family:var(--font-mono);flex-shrink:0;justify-content:space-between;align-items:center;padding:.5rem 1.5rem;font-size:.85rem;display:flex}.play-body{flex:1;display:flex;overflow:hidden}.play-sidebar{border-right:1px solid var(--border);background:var(--bg-surface);flex-direction:column;flex-shrink:0;gap:1.5rem;width:220px;padding:1rem;display:flex;overflow-y:auto}.sidebar-section{flex-direction:column;display:flex}.sidebar-title{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);border-bottom:1px solid var(--border);margin-bottom:.6rem;padding-bottom:.4rem;font-size:.68rem}.sidebar-npc{margin-bottom:.75rem}.sidebar-npc-name{font-family:var(--font-mono);color:var(--text);font-size:.8rem;font-weight:700}.sidebar-npc-desc{color:var(--text-muted);margin-top:.15rem;font-size:.78rem;line-height:1.45}.sidebar-world-name{font-family:var(--font-mono);color:var(--text);margin-bottom:.35rem;font-size:.8rem;font-weight:700}.sidebar-world-desc{color:var(--text-muted);margin-bottom:.75rem;font-size:.78rem;line-height:1.45}.sidebar-lore{margin-bottom:.6rem}.sidebar-lore-title{font-family:var(--font-mono);color:var(--accent);margin-bottom:.15rem;font-size:.75rem}.sidebar-lore-body{color:var(--text-muted);font-size:.78rem;line-height:1.45}.play-content{flex-direction:column;flex:1;display:flex;overflow:hidden}.play-main{flex-direction:column;flex:1;width:100%;max-width:80ch;margin:0 auto;padding:2rem;display:flex;overflow-y:auto}.form-section{max-width:480px}.tab-row{border-bottom:1px solid var(--border);gap:0;margin-bottom:1.5rem;display:flex}.tab-btn{color:var(--text-muted);font-family:var(--font-mono);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;margin-bottom:-1px;padding:.5em 1.2em;font-size:.9rem}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent);background:0 0}.spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:1em;height:1em;animation:.6s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.admin-table{border-collapse:collapse;width:100%;font-family:var(--font-mono);font-size:.85rem}.admin-table th{text-align:left;border-bottom:1px solid var(--border);color:var(--text-muted);padding:.5rem 1rem;font-weight:400}.admin-table td{border-bottom:1px solid var(--border);vertical-align:middle;padding:.5rem 1rem}.admin-table tr:last-child td{border-bottom:none}
