/* 000 — 城市地圖與房間視覺化 */
:root{--cyan:#2FE3FF;--amber:#FFB020;--violet:#C45CFF}

/* ---------- 地圖 ---------- */
.city{position:relative;height:clamp(420px,68vh,780px);border:1px solid var(--line);background:#000;overflow:hidden;touch-action:none;cursor:grab}
.city.drag{cursor:grabbing}
.city canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.city-legend{position:absolute;top:14px;left:14px;display:grid;gap:7px;padding:12px 14px;font-size:11px;color:var(--text-mid);background:rgba(0,0,0,.82);border:1px solid var(--line-2);pointer-events:none}
.city-legend div{display:flex;align-items:center;gap:8px}
.city-legend i{width:8px;height:8px;border-radius:50%;display:inline-block}
.city-zoom{position:absolute;right:14px;bottom:14px;display:flex;gap:6px}
.city-zoom button{min-width:40px;height:40px;background:#000;border:1px solid var(--line-2);color:var(--text-hi);font-family:var(--mono);font-size:16px;cursor:pointer}
.city-zoom button.me{padding:0 12px;font-size:12px;letter-spacing:.1em;color:var(--acid);border-color:rgba(57,255,20,.5)}
.city-zoom button:hover{border-color:var(--acid)}
.city-tip{position:absolute;pointer-events:none;background:#000;border:1px solid var(--acid);padding:8px 10px;font-size:11px;line-height:1.7;white-space:nowrap;transform:translate(14px,-50%);color:var(--text)}
.city-tip b{color:var(--acid);font-size:12px}
.city-feed{display:grid;align-content:start;gap:6px;margin-top:16px;font-size:13px;color:var(--text-lo);min-height:110px}
.city-feed div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.city-feed div:first-child{color:var(--text)}
.city-feed em{font-style:normal;color:var(--acid)}
@media (max-width:640px){.city-legend{font-size:10px;padding:8px 10px;gap:5px}}

/* ---------- 房間 ---------- */
.room{display:grid;grid-template-columns:minmax(0,1fr) 300px;border:1px solid var(--line);background:var(--ink-0);margin-bottom:24px}
.room-stage{min-width:0;padding:18px 18px 8px;display:flex;flex-direction:column}
.room-who{margin:0;font-size:12px;color:var(--text-mid)}
.room-stage svg{width:100%;height:clamp(320px,52vh,560px);overflow:visible}
.room-side{border-left:1px solid var(--line);padding:18px;display:flex;flex-direction:column;gap:14px;min-width:0}
.room-side h3{margin:0;font-size:11px;letter-spacing:.22em;color:var(--text-lo);font-weight:400}
.room-key{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:11px;color:var(--text-lo);margin-top:auto}
.room-key span{display:inline-flex;align-items:center;gap:6px}
.room-key i{width:10px;height:3px;display:inline-block}
.k-ok{background:var(--acid)}.k-low{background:var(--amber)}.k-bad{background:var(--magenta)}
.rcard{border:1px solid var(--line-2);padding:14px;display:grid;gap:10px}
.rcard.empty{border-style:dashed;color:var(--text-mid);font-size:13px;line-height:1.8}
.rcard .nm{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.rcard .nm b{font-size:18px;color:var(--text-hi)}
.rcard .nm span{font-family:var(--mono);font-size:12px;color:var(--text-lo)}
.rcard .meter{height:4px;background:var(--line-2)}
.rcard .meter i{display:block;height:100%}
.rcard .st{font-family:var(--mono);font-size:11px;letter-spacing:.12em}
.rcard .fx{font-size:13px;color:var(--text-mid)}
.rcard .desc{font-size:12px;color:var(--text-lo)}
.rcard .acts{display:flex;gap:8px}
.rcard .acts > *{flex:1;min-width:0}
.rcard .acts form{margin:0}
.rcard .acts button,.rcard .acts a{width:100%;display:block;text-align:center;padding:9px 0;font:inherit;font-size:13px;cursor:pointer;background:none;border:1px solid var(--line-2);color:var(--text-hi)}
.rcard .acts .pri{background:var(--acid);border-color:var(--acid);color:#000;font-weight:700}
.rcard .acts .danger{border-color:var(--magenta);color:var(--magenta)}

#room-svg .tile{fill:transparent;stroke:#1f2a22;stroke-width:1}
#room-svg .tile.free{stroke:rgba(57,255,20,.3);stroke-dasharray:3 4;cursor:pointer}
#room-svg .tile.free:hover,#room-svg .tile.free:focus{fill:rgba(57,255,20,.08);outline:none}
#room-svg .wall{fill:rgba(57,255,20,.025);stroke:rgba(57,255,20,.35);stroke-width:1}
#room-svg .thing{cursor:pointer;outline:none}
#room-svg .thing .f{stroke-width:1.4;stroke-linejoin:round}
#room-svg .thing:hover .f,#room-svg .thing:focus .f,#room-svg .thing.sel .f{stroke-width:2.4}
#room-svg .lbl{font-family:var(--body);font-size:11px;text-anchor:middle;paint-order:stroke;stroke:#000;stroke-width:3px}
#room-svg .thing.low{animation:rflick 2.4s steps(1) infinite}
#room-svg .glow{animation:rpulse 2.2s ease-in-out infinite}
@keyframes rflick{0%,100%{opacity:1}7%{opacity:.35}9%{opacity:1}52%{opacity:.55}54%{opacity:1}}
@keyframes rpulse{50%{opacity:.4}}
@media (prefers-reduced-motion:reduce){#room-svg .thing.low,#room-svg .glow{animation:none}}
@media (max-width:860px){
  .room{grid-template-columns:1fr}
  .room-side{border-left:0;border-top:1px solid var(--line)}
  .room-stage svg{height:clamp(260px,46vh,420px)}
}
.room.exterior .acts-col{display:flex;flex-direction:column;gap:8px}
.room.exterior .acts-col .btn{text-align:center}
.god-tag{color:#000;background:var(--origin,#FFFDF5);padding:1px 6px;letter-spacing:.12em}

/* ---------- 自己去闖 ---------- */
.autopilot.on{border-color:var(--acid)}
.ap-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:12px}
.ap-head h2{margin:0}
.ap-state{font-size:12px;color:var(--text-lo)}
.autopilot.on .ap-state{color:var(--acid)}
.ap-policies{border:0;padding:0;margin:0 0 16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}
.ap-policies legend{font-size:12px;margin-bottom:8px;padding:0}
.ap-pol{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;align-items:center;border:1px solid var(--line-2);padding:12px;cursor:pointer}
.ap-pol input{grid-row:span 2;accent-color:var(--acid)}
.ap-pol b{color:var(--text-hi)}
.ap-pol span{font-size:12px;color:var(--text-lo);grid-column:2}
.ap-pol:has(input:checked){border-color:var(--acid);background:rgba(57,255,20,.05)}
.ap-cap{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ap-cap input{width:160px;background:#000;border:1px solid var(--line-2);color:var(--text-hi);font-family:var(--mono);font-size:15px;padding:8px 10px}
.ap-log{display:grid;gap:6px;font-size:12px;color:var(--text-mid);max-height:260px;overflow-y:auto}
.ap-log span{color:var(--text-lo);margin-right:10px}
.ap-banner a{white-space:nowrap}
