:root{--bg-dark:#0f0e17;--bg-panel:#1a1a2e;--bg-card:#232340;--bg-hover:#2d2d50;--text-primary:#e0e0e0;--text-secondary:#9e9e9e;--text-accent:#ffd54f;--border:#3a3a5c;--red:#e53935;--blue:#1e88e5;--green:#43a047;--orange:#ff9800;--purple:#9c27b0;--gold:#ffd54f}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg-dark);color:var(--text-primary);min-height:100vh;font-family:Segoe UI,system-ui,-apple-system,sans-serif;overflow-x:hidden}.btn{border:1px solid var(--border);background:var(--bg-card);color:var(--text-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:8px 16px;font-size:14px;transition:all .15s;display:inline-flex}.btn:hover{background:var(--bg-hover);transform:translateY(-1px)}.btn-primary{color:#fff;background:#1565c0;border-color:#1976d2}.btn-primary:hover{background:#1976d2}.btn-secondary{background:var(--bg-panel)}.btn-danger{color:#fff;background:#b71c1c;border-color:#c62828}.btn-danger:hover{background:#c62828}.btn-warning{color:#fff;background:#e65100;border-color:#ef6c00}.btn-warning:hover{background:#ef6c00}.btn-large{padding:12px 28px;font-size:18px}.btn-small{padding:4px 8px;font-size:12px}.btn-dialogue{text-align:left;width:100%;margin:4px 0;padding:10px 14px;display:block}.btn-dialogue:hover{border-color:var(--gold);background:#2d2d50}.btn.disabled,.btn-disabled{opacity:.4;pointer-events:none}.hud{z-index:100;border-bottom:2px solid var(--border);background:linear-gradient(#0f0e17 0%,#1a1a2e 100%);padding:6px 12px;position:fixed;top:0;left:0;right:0}.hud.hidden{display:none}.hud-row{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.hud-bars{margin-top:4px}.hud-name{font-size:15px;font-weight:700}.hud-level{color:var(--gold);font-size:12px}.hud-floor,.hud-gold,.hud-time{color:var(--text-secondary);font-size:13px}.hud-xp{flex:0 0 140px}.hud-bar-group{flex:1;align-items:center;gap:6px;min-width:120px;display:flex}.hud-bar-label{white-space:nowrap;align-items:center;gap:3px;font-size:12px;display:flex}.hud-nav-buttons{gap:6px;margin-top:4px}.hud-btn{background:var(--bg-card);border:1px solid var(--border);color:var(--text-primary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;padding:3px 10px;font-size:12px;display:inline-flex}.hud-btn:hover{background:var(--bg-hover)}.bar-container{border:1px solid var(--border);background:#2a2a3a;border-radius:4px;width:100%;position:relative;overflow:hidden}.bar-fill{border-radius:3px;height:100%;transition:width .3s}.bar-text{text-shadow:0 1px 2px #000c;justify-content:center;align-items:center;font-size:11px;font-weight:600;display:flex;position:absolute;inset:0}.scene{max-width:960px;margin:0 auto;padding:16px}#app{min-height:100vh;padding-top:100px}.title-scene{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:80vh;display:flex}.title-logo{margin-bottom:40px}.title-logo h1{background:linear-gradient(135deg, var(--gold), #ff9800, var(--gold));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin:12px 0;font-size:36px}.title-subtitle{color:var(--text-secondary);font-size:16px;font-style:italic}.title-menu{flex-direction:column;gap:12px;display:flex}.title-footer{color:var(--text-secondary);margin-top:40px;font-size:12px}.map-scene .scene-header{margin-bottom:12px}.map-scene h2{align-items:center;gap:8px;display:flex}.floor-constraint{color:var(--text-secondary);align-items:center;gap:4px;margin-top:4px;font-size:13px;display:flex}.map-grid{grid-template-columns:repeat(6,1fr);gap:8px;margin-bottom:16px;display:grid}.map-room{background:var(--bg-card);border:2px solid var(--border);text-align:center;cursor:default;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:4px;min-height:80px;padding:10px;transition:all .2s;display:flex;position:relative}.map-room-icon{font-size:0}.map-room-name{font-size:11px;line-height:1.2}.map-room-current{background:#2a2a1a;box-shadow:0 0 12px #ffd54f4d;border-color:var(--gold)!important}.map-room-connected{cursor:pointer;border-color:#4fc3f7}.map-room-connected:hover{background:var(--bg-hover);transform:scale(1.05)}.map-room-cleared{opacity:.6}.map-player-marker{background:var(--gold);border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;display:flex;position:absolute;top:-6px;right:-6px}.map-cleared-mark{color:var(--green);font-size:14px;font-weight:700;position:absolute;bottom:2px;right:4px}.map-empty{min-height:40px}.room-type-combat .map-room-icon{color:var(--red)}.room-type-elite .map-room-icon{color:var(--orange)}.room-type-boss .map-room-icon{color:var(--purple)}.room-type-forge .map-room-icon{color:var(--gold)}.room-type-rest .map-room-icon{color:var(--green)}.room-type-event .map-room-icon{color:var(--blue)}.room-type-merchant .map-room-icon{color:#26c6da}.room-type-training .map-room-icon{color:#bdbdbd}.room-info-panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:16px}.room-info-panel h3{align-items:center;gap:8px;margin-bottom:8px;display:flex}.room-type-badge{border-radius:4px;margin-bottom:8px;padding:2px 8px;font-size:11px;font-weight:700;display:inline-block}.room-type-combat{color:var(--red);background:#e5393533}.room-type-elite{color:var(--orange);background:#ff980033}.room-type-boss{color:var(--purple);background:#9c27b033}.room-type-forge{color:var(--gold);background:#ffd54f33}.room-type-rest{color:var(--green);background:#43a04733}.room-type-event{color:var(--blue);background:#1e88e533}.room-type-merchant{color:#26c6da;background:#26c6da33}.room-type-training{color:#bdbdbd;background:#bdbdbd33}.cleared-text{color:var(--green);font-weight:700}.combat-scene .combat-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.combat-turn{color:var(--text-secondary);font-size:13px}.combat-arena{align-items:flex-start;gap:20px;margin-bottom:12px;display:flex}.combat-player,.combat-enemies{flex:1}.combat-vs{color:var(--red);align-items:center;padding:20px 0;display:flex}.combat-entity{background:var(--bg-card);border:1px solid var(--border);border-radius:8px;align-items:flex-start;gap:12px;margin-bottom:8px;padding:12px;display:flex}.combat-entity.defeated{opacity:.3}.entity-icon{border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:56px;height:56px;display:flex}.player-icon{border:2px solid var(--blue);background:#1e88e526}.enemy-icon{border:2px solid var(--red);background:#e5393526}.entity-info{flex:1;min-width:0}.entity-name{margin-bottom:4px;font-weight:700}.entity-level{color:var(--text-secondary);font-size:12px}.entity-traits{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.trait-badge{color:var(--orange);background:#ff980026;border-radius:3px;padding:1px 6px;font-size:10px}.status-effects{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.dot-badge,.stunned-badge{background:#9c27b033;border-radius:3px;padding:1px 6px;font-size:10px}.stunned-badge{color:var(--gold);background:#ffd54f33}.enemy-resists{flex-wrap:wrap;gap:3px;margin-top:4px;display:flex}.resist-badge,.weak-badge{border-radius:3px;padding:1px 4px;font-size:10px}.resist-badge{background:#1e88e526}.weak-badge{background:#e5393526}.combat-log{border:1px solid var(--border);background:#0a0a14;border-radius:6px;height:200px;margin-bottom:12px;padding:8px;font-family:Consolas,Courier New,monospace;font-size:12px;overflow-y:auto}.log-entry{padding:2px 0}.log-action{color:#90caf9}.log-damage{color:var(--red)}.log-heal{color:var(--green)}.log-status{color:var(--purple)}.log-info{color:var(--text-secondary)}.log-trait{color:var(--orange)}.combat-controls{margin-top:8px}.combat-result{text-align:center;padding:16px}.combat-result.victory{background:#43a0471a;border-radius:8px}.combat-result.defeat{background:#e539351a;border-radius:8px}.combat-paused-controls{background:var(--bg-panel);border-radius:8px;padding:12px}.pause-info{color:var(--gold);align-items:center;gap:6px;margin-bottom:12px;display:flex}.pause-loadout h4{color:var(--text-secondary);margin:8px 0 4px;font-size:13px}.loadout-pills{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.spell-pill,.skill-pill{border:1px solid var(--border);background:var(--bg-card);border-radius:4px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;display:inline-flex}.spell-pill{border-left:3px solid}.policy-list{margin-bottom:12px}.policy-toggle{cursor:pointer;align-items:center;gap:8px;padding:2px 0;font-size:12px;display:flex}.forge-scene .scene-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.forge-layout{grid-template-columns:1fr 1fr;gap:16px;display:grid}.ingredient-grid{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.forge-ingredient{background:var(--bg-card);border:2px solid var(--border);cursor:pointer;text-align:center;border-radius:8px;width:110px;padding:10px;transition:all .2s}.forge-ingredient:hover{background:var(--bg-hover)}.forge-ingredient.selected{border-color:var(--gold);background:#ffd54f1a}.forge-ingredient.undiscovered{opacity:.3;cursor:not-allowed}.ingredient-icon{margin-bottom:4px}.ingredient-name{font-size:11px}.ingredient-affinity{margin-top:6px}.milestone{color:var(--text-secondary);margin-top:2px;font-size:9px}.milestone.claimed{color:var(--green);text-decoration:line-through}.milestone.reached{color:var(--gold)}.forge-crafting{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:16px}.selected-ingredients{flex-wrap:wrap;gap:6px;min-height:30px;margin-bottom:12px;display:flex}.selected-pill{border:1px solid var(--gold);cursor:pointer;background:#ffd54f26;border-radius:4px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;display:inline-flex}.selected-pill:hover{background:#ffd54f40}.recipe-preview{background:var(--bg-card);border:1px solid var(--border);border-radius:6px;margin-bottom:12px;padding:12px}.recipe-preview.unknown{border-color:var(--red)}.recipe-preview.empty{color:var(--text-secondary);border-style:dashed}.recipe-elements{margin:4px 0;font-size:13px}.recipe-power{color:var(--text-secondary);font-size:12px}.recipe-effects .effect{color:var(--text-accent);margin-top:2px;font-size:12px}.spell-ingredient{border-left:3px solid var(--blue)}.dialogue-panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;gap:20px;margin-top:12px;padding:20px;display:flex}.npc-portrait{text-align:center;flex-shrink:0;width:100px}.npc-name{margin-top:8px;font-size:14px;font-weight:700}.npc-traits{margin-top:4px}.dialogue-content{flex:1}.dialogue-speaker{color:var(--gold);margin-bottom:8px;font-weight:700}.dialogue-text{margin-bottom:16px;font-size:15px;line-height:1.6}.dialogue-choices{flex-direction:column;gap:6px;display:flex}.trait-req{color:var(--orange);font-size:11px}.merchant-scene .scene-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:16px;display:flex}.merchant-gold{align-items:center;gap:4px;font-size:16px;font-weight:700;display:flex}.discount-badge{background:var(--green);color:#fff;border-radius:3px;padding:2px 6px;font-size:11px}.merchant-layout{grid-template-columns:1fr 1fr;gap:16px;display:grid}.merchant-section{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:16px}.merchant-section h3{margin-bottom:12px}.merchant-item{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:8px;display:flex}.merchant-item:last-child{border-bottom:none}.item-icon{flex-shrink:0}.item-details{flex:1;min-width:0}.item-name{font-size:13px;font-weight:600}.item-desc,.item-stock{color:var(--text-secondary);font-size:11px}.item-price{white-space:nowrap;color:var(--gold);align-items:center;gap:3px;font-size:13px;display:flex}.item-qty{color:var(--text-secondary);font-size:11px}.rest-scene .rest-panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;margin-top:12px;padding:20px}.rest-status{margin:16px 0}.rest-bars{flex-direction:column;gap:8px;max-width:400px;display:flex}.rest-actions{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.character-scene .scene-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.character-layout{grid-template-columns:1fr 1fr;gap:16px;display:grid}.char-section{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:16px}.char-section h3{border-bottom:1px solid var(--border);align-items:center;gap:6px;margin-bottom:12px;padding-bottom:8px;display:flex}.stat-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.stat{align-items:center;gap:4px;font-size:13px;display:flex}.trait-row{align-items:center;gap:8px;margin-bottom:6px;display:flex}.trait-name{text-transform:capitalize;width:100px;font-size:13px}.trait-bar-container{flex:1}.affinity-row{margin-bottom:10px}.affinity-icon{align-items:center;gap:4px;margin-bottom:4px;font-size:13px;display:flex}.affinity-milestones{flex-wrap:wrap;gap:4px;margin-top:4px;display:flex}.ms{background:var(--bg-card);border-radius:3px;padding:1px 6px;font-size:10px}.ms-claimed{color:var(--green);background:#43a04733;text-decoration:line-through}.ms-reached{color:var(--gold);background:#ffd54f33}.ms-locked{color:var(--text-secondary)}.skill-tree{flex-wrap:wrap;gap:8px;display:flex}.skill-node{background:var(--bg-card);border:1px solid var(--border);border-radius:6px;align-items:center;gap:8px;width:calc(50% - 4px);padding:8px;display:flex}.skill-node.locked{opacity:.4}.skill-node.unlocked{border-color:var(--green)}.skill-info{font-size:12px}.skill-name{font-weight:700}.skill-tier,.skill-cost{color:var(--text-secondary)}.skill-prereq{color:var(--orange);font-size:10px}.equip-slot{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:6px 0;font-size:13px;display:flex}.slot-name{color:var(--text-secondary);text-transform:capitalize;width:80px}.empty-slot{color:var(--text-secondary);font-style:italic}.equipped-item{align-items:center;gap:4px;display:flex}.spell-grid{flex-wrap:wrap;gap:8px;display:flex}.spell-card{background:var(--bg-card);text-align:center;border:2px solid;border-radius:6px;width:100px;padding:8px}.spell-name{margin-top:4px;font-size:11px;font-weight:700}.spell-cost{color:var(--text-secondary);font-size:10px}.spell-tier{color:var(--gold);font-size:10px}.inventory-scene .scene-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.inventory-layout{grid-template-columns:300px 1fr;gap:16px;display:grid}.equipment-panel,.inventory-grid-panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:16px}.equipment-panel h3,.inventory-grid-panel h3{margin-bottom:12px}.equip-slot-panel{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:8px;display:flex}.slot-label{color:var(--text-secondary);text-transform:capitalize;width:80px;font-size:12px}.equipped-item-card{align-items:center;gap:6px;font-size:13px;display:flex}.empty-slot-msg{color:var(--text-secondary);font-size:12px;font-style:italic}.inventory-grid{flex-direction:column;gap:6px;display:flex}.inv-item{background:var(--bg-card);border:1px solid var(--border);border-radius:6px;align-items:center;gap:10px;padding:8px;display:flex}.inv-icon{flex-shrink:0}.inv-details{flex:1;min-width:0}.inv-name{font-size:13px;font-weight:600}.inv-desc,.inv-qty{color:var(--text-secondary);font-size:11px}.inv-actions{gap:4px;display:flex}.loadout-scene .scene-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.loadout-layout{grid-template-columns:1fr 1fr;gap:16px;display:grid}.loadout-section{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:16px}.loadout-section h3{margin-bottom:8px}.loadout-section h4{color:var(--text-secondary);margin:12px 0 6px;font-size:13px}.loadout-slots{flex-direction:column;gap:6px;display:flex}.loadout-slot{background:var(--bg-card);border:1px solid var(--border);cursor:pointer;border-radius:6px;padding:8px}.loadout-slot.active{border-color:var(--gold);background:#ffd54f14}.slot-number{color:var(--text-secondary);margin-bottom:2px;font-size:10px}.slot-content{border-left:3px solid;align-items:center;gap:6px;padding-left:6px;font-size:13px;display:flex}.slot-cost{color:var(--text-secondary);margin-left:auto;font-size:11px}.slot-empty{color:var(--text-secondary);font-size:12px;font-style:italic}.loadout-options{flex-direction:column;gap:4px;max-height:200px;display:flex;overflow-y:auto}.loadout-option{background:var(--bg-card);border:1px solid var(--border);cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:6px 8px;font-size:12px;display:flex}.loadout-option:hover{background:var(--bg-hover)}.loadout-option.equipped{border-color:var(--green);opacity:.6}.option-tier{color:var(--gold)}.option-cost{color:var(--text-secondary)}.el-badge{color:#fff;border-radius:3px;padding:1px 4px;font-size:10px}.policy-info{color:var(--text-secondary);margin-bottom:8px;font-size:11px}.policy-row{margin-bottom:4px}.policy-check{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.policy-pri{color:var(--gold);font-weight:700}.policy-cond{color:var(--blue)}.policy-act{color:var(--green)}.victory-scene{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:80vh;display:flex}.victory-content h1{color:var(--gold);margin:16px 0;font-size:32px}.victory-content p{color:var(--text-secondary);margin-bottom:20px;font-size:16px}.victory-stats{flex-wrap:wrap;justify-content:center;gap:12px;margin-bottom:24px;display:flex}.victory-stat{background:var(--bg-card);border:1px solid var(--border);border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:14px;display:flex}#toasts{z-index:200;pointer-events:none;flex-direction:column-reverse;gap:8px;display:flex;position:fixed;bottom:20px;right:20px}.toast{background:var(--bg-card);border:1px solid var(--border);pointer-events:auto;border-radius:6px;align-items:center;gap:8px;max-width:300px;padding:8px 14px;font-size:13px;animation:.3s slideIn;display:flex}.toast-dismiss{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;margin-left:auto;font-size:16px}.toast-info{border-left:3px solid var(--blue)}.toast-success{border-left:3px solid var(--green)}.toast-warning{border-left:3px solid var(--orange)}.toast-danger{border-left:3px solid var(--red)}.toast-trait{border-left:3px solid var(--orange);color:var(--orange)}@keyframes slideIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@media (width<=768px){.map-grid{grid-template-columns:repeat(4,1fr)}.combat-arena{flex-direction:column}.combat-vs{padding:8px 0}.forge-layout,.merchant-layout,.character-layout,.loadout-layout,.inventory-layout{grid-template-columns:1fr}}
