/* Industrial viewport. Scene first; only contextual actions float above it. */
:root {
  --campus-paper:#111b20;
  --campus-surface:#14242be9;
  --campus-ink:#f1f1ea;
  --campus-sub:#bfcbc8;
  --campus-line:#526365;
  --campus-accent:#e8b96b;
}
html,body {margin:0;min-height:100%;background:var(--campus-paper)}
body.campus-page {color:var(--campus-ink);font-family:MachineUI,system-ui,-apple-system,"Noto Sans KR",sans-serif;overflow-x:hidden}
.campus-page .workspace-header {position:relative;z-index:18}
#campus-app {position:relative;background:#76898c;min-height:calc(100dvh - 64px)}
.campus-stage {position:relative;height:calc(100dvh - 64px);min-height:420px;overflow:hidden;background:#76898c}
#campus-canvas {position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;cursor:grab}
#campus-canvas[hidden]{display:none}
#campus-canvas:active {cursor:grabbing}
.campus-heading {position:absolute;left:18px;top:16px;pointer-events:none;max-width:min(400px,calc(100% - 36px));color:#f7f9f9;text-shadow:0 1px 6px #102124bb}
.campus-heading h1 {position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.campus-heading p {display:inline-block;margin:0;padding:10px 13px;border-left:3px solid var(--campus-accent);background:#172932c9;font-size:12px;line-height:1.5;font-weight:570;color:#f1f2ed;box-shadow:0 4px 20px #14232733}
.campus-plan-controls {position:absolute;top:20px;right:24px;display:flex;align-items:stretch;border:1px solid var(--campus-line);border-radius:5px;overflow:hidden;background:var(--campus-surface)}
.campus-plan-controls button {display:flex;align-items:center;gap:9px;min-height:44px;padding:0 15px;border:0;border-right:1px solid var(--campus-line);color:var(--campus-ink);background:transparent;white-space:nowrap;cursor:pointer;font:580 13px/1.3 MachineUI,system-ui,sans-serif}
.campus-plan-controls button:last-child {border-right:0}
.campus-plan-controls button[aria-pressed="true"] {color:var(--campus-surface);background:var(--campus-ink)}
.campus-plan-controls svg {width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round}
.campus-plan-controls button:hover:not([aria-pressed="true"]) {background:#273c49}
.campus-qa {position:absolute;z-index:11;top:82px;right:24px;max-width:calc(100% - 32px);padding:6px 8px;border:1px solid var(--campus-line);border-radius:5px;background:var(--campus-surface);color:var(--campus-ink);font:540 11px/1.4 ui-monospace,monospace;font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.campus-qa button {border:1px solid var(--campus-line);background:var(--campus-paper);color:var(--campus-ink);font:600 11px/1.2 MachineUI,system-ui,sans-serif;min-height:36px;padding:0 11px;cursor:pointer;border-radius:4px}
.campus-qa button:disabled {opacity:.55;cursor:not-allowed}
.campus-qa button:focus-visible {outline:2px solid var(--campus-accent);outline-offset:2px}
.campus-qa output {flex:1 1 190px}
.campus-world-labels {position:absolute;inset:0;pointer-events:none}
.campus-world-tag {position:absolute;transform:translate(-50%,-100%);display:inline-flex;align-items:center;gap:9px;min-height:44px;border:1px solid #8da1a088;border-radius:4px;padding:0 12px;background:#15252de8;color:var(--campus-ink);font:630 12px/1.3 MachineUI,system-ui,sans-serif;white-space:nowrap;cursor:pointer;pointer-events:auto;box-shadow:0 5px 18px #12232d55}
.campus-world-tag span {padding-right:9px;border-right:1px solid var(--campus-line);color:var(--campus-accent);font-variant-numeric:tabular-nums}
.campus-world-tag:hover,.campus-world-tag.is-current {border-color:var(--campus-accent);color:var(--campus-accent)}
.campus-actions {position:absolute;left:22px;bottom:42px;display:flex;gap:7px}
.campus-actions button,.campus-detail-top button {display:inline-flex;justify-content:center;align-items:center;width:44px;height:44px;border:1px solid var(--campus-line);border-radius:5px;background:var(--campus-surface);color:var(--campus-ink);cursor:pointer}
.campus-actions button:hover,.campus-detail-top button:hover {border-color:var(--campus-accent);color:var(--campus-accent)}
.campus-actions button:disabled,.campus-detail-top button:disabled {opacity:.48;cursor:not-allowed;border-color:var(--campus-line);color:var(--campus-sub)}
.campus-actions button[aria-pressed="true"] {color:var(--campus-surface);background:var(--campus-ink)}
.campus-actions svg,.campus-detail-top svg {width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.campus-rail {position:absolute;left:22px;bottom:94px;z-index:8;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:min(475px,calc(100% - 44px));max-width:calc(100% - 44px);border:1px solid var(--campus-line);border-radius:5px;background:var(--campus-surface);padding:6px}
.campus-rail[hidden] {display:none}
.campus-sector {display:flex;align-items:center;gap:13px;text-align:left;min-height:44px;width:100%;border:0;border-bottom:1px solid var(--campus-line);padding:6px 10px;background:transparent;color:var(--campus-ink);font:540 13px/1.4 MachineUI,system-ui,sans-serif;cursor:pointer}
.campus-sector:nth-child(odd) {border-right:1px solid var(--campus-line)}
.campus-sector:hover,.campus-sector.is-current {background:#253b49;color:var(--campus-accent)}
.sector-num {font-size:11px;color:var(--campus-accent);font-variant-numeric:tabular-nums;min-width:21px}
.campus-coordinate {position:absolute;right:22px;bottom:43px;display:flex;align-items:center;gap:10px;font:530 11px/1.3 MachineUI,system-ui,sans-serif;color:#f2f5f4;text-shadow:0 1px 4px #182830}
.campus-coordinate span+span {padding-left:10px;border-left:1px solid #8f9992}
.campus-coordinate a {color:inherit;text-decoration:underline;text-underline-offset:3px}
.campus-hint {position:absolute;bottom:18px;left:22px;margin:0;font-size:12px;font-weight:500;line-height:1.4;color:#f1f5f4;text-shadow:0 1px 5px #182830}
/* A contextual bottom dock only; no permanent sidebar or redundant tool cards. */
.campus-detail {position:absolute;z-index:9;left:50%;bottom:18px;transform:translateX(-50%);width:min(640px,calc(100% - 36px));box-sizing:border-box;max-height:min(188px,34%);overflow:auto;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto auto;row-gap:4px;padding:12px 16px;border:1px solid var(--campus-line);border-radius:5px;background:var(--campus-surface);color:var(--campus-ink);box-shadow:0 10px 35px #18232452}
.campus-detail[hidden] {display:none}
/* The contextual dock owns the bottom edge while a zone is selected. */
#campus-app:has(.campus-detail:not([hidden])) .campus-actions,
#campus-app:has(.campus-detail:not([hidden])) .campus-ground-controls,
#campus-app:has(.campus-detail:not([hidden])) .campus-coordinate,
#campus-app:has(.campus-detail:not([hidden])) .campus-hint,
#campus-app:has(.campus-detail:not([hidden])) .campus-rail {display:none}
.campus-detail-top {grid-column:1;grid-row:1;display:flex;align-items:center;justify-content:space-between;gap:7px;min-height:44px;margin-bottom:2px;color:var(--campus-accent);font-size:11px;font-weight:660;letter-spacing:.025em}
.campus-detail-buttons {display:flex;align-items:center;gap:6px}
.campus-detail-top button {width:44px;height:44px;flex-shrink:0}
.campus-detail-top #campus-detail-enter {width:auto;min-width:108px;gap:6px;padding:0 10px;white-space:nowrap;font:570 12px/1.2 MachineUI,system-ui,sans-serif}
.campus-detail-top #campus-detail-enter svg {width:16px;height:16px}
.campus-detail h2 {grid-column:1;grid-row:2;margin:0;font-size:17px;line-height:1.3;letter-spacing:-.035em;font-weight:680}
.campus-detail p {margin:0;color:var(--campus-sub);font-size:12px;line-height:1.5}
#campus-detail-copy {grid-column:1;grid-row:3;font-size:12px;line-height:1.35;max-width:100%}
.campus-tool {position:fixed;inset:0;z-index:60;display:flex;flex-direction:column;background:var(--campus-paper)}
.campus-tool[hidden] {display:none}
.campus-tool header {box-sizing:border-box;display:flex;align-items:center;gap:18px;min-height:64px;padding:7px 20px;border-bottom:1px solid var(--campus-line);background:var(--campus-surface);color:var(--campus-ink)}
.campus-tool header strong {font-size:14px;font-weight:630;margin:auto}
.campus-tool header button {min-height:44px;border:1px solid var(--campus-line);border-radius:5px;background:var(--campus-surface);color:var(--campus-ink);padding:0 15px;font:580 12px/1.2 MachineUI,system-ui,sans-serif;cursor:pointer}
.campus-tool header a {font-size:12px;color:var(--campus-sub)}
.campus-tool iframe {flex:1;display:block;width:100%;border:0;background:var(--campus-paper)}
.campus-tool-open {overflow:hidden}
.campus-ground-controls {position:absolute;z-index:10;inset:auto 22px 22px auto;display:flex;align-items:flex-end;gap:14px}
.campus-ground-controls[hidden] {display:none}
.campus-ground-controls>button,.campus-ground-controls div button {display:inline-flex;justify-content:center;align-items:center;min-width:44px;min-height:44px;border:1px solid var(--campus-line);border-radius:5px;background:var(--campus-surface);color:var(--campus-ink);font:590 13px/1.2 MachineUI,system-ui,sans-serif;cursor:pointer}
.campus-ground-controls>button {padding:0 14px}
.campus-ground-controls div {display:grid;grid-template-columns:repeat(2,44px);gap:5px}
.campus-ground-controls button:hover {border-color:var(--campus-accent);color:var(--campus-accent)}
.campus-walking .campus-heading,.campus-walking .campus-plan-controls,.campus-walking .campus-actions,.campus-walking .campus-coordinate {display:none}
.campus-error {position:absolute;z-index:12;top:50%;left:50%;transform:translate(-50%,-50%);width:min(540px,calc(100% - 32px));box-sizing:border-box;background:var(--campus-surface);border:1px solid var(--campus-line);padding:25px;border-radius:5px;color:var(--campus-ink);font-size:14px;line-height:1.65}
.campus-error[hidden]{display:none}
.campus-error strong{font-size:17px;font-weight:650}
.campus-error p{font-size:13px;color:var(--campus-sub)}
.campus-error a{color:var(--campus-accent);text-underline-offset:3px}
.campus-failed .campus-plan-controls,.campus-failed .campus-actions,.campus-failed .campus-hint,.campus-failed .campus-world-labels,.campus-failed .campus-coordinate{display:none}
.campus-failed .campus-qa #campus-qa-save{display:none}
.campus-fallback-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 22px;margin-top:18px}
.campus-fallback-links a{display:flex;align-items:center;min-height:44px;border-top:1px solid var(--campus-line);font-size:13px;font-weight:570;text-decoration:none}
.campus-fallback-links a:hover,.campus-fallback-links a:focus-visible{text-decoration:underline}
.campus-plan-controls button:focus-visible,.campus-world-tag:focus-visible,.campus-actions button:focus-visible,.campus-rail button:focus-visible,.campus-detail button:focus-visible {outline:2px solid var(--campus-accent);outline-offset:2px}
@media (max-width:900px) {
  .campus-heading {left:16px;top:16px;max-width:290px}
  .campus-heading h1 {font-size:20px}
  .campus-heading p {font-size:12px}
  .campus-plan-controls {top:16px;right:16px}
  .campus-plan-controls button {padding:0 10px;font-size:12px}
  .campus-detail {padding:12px 16px}
  .campus-actions,.campus-rail {left:16px}
  .campus-coordinate {right:16px}
}
@media (max-width:680px) {
  .campus-fallback-links{grid-template-columns:1fr}
  .campus-error{max-height:80dvh;overflow:auto}
  .campus-stage {height:calc(100dvh - 64px);min-height:400px}
  .campus-heading {top:12px;left:12px;max-width:calc(100% - 24px)}
  .campus-heading p {font-size:11px;padding:8px 10px}
  .campus-plan-controls {top:54px;left:12px;right:auto}
  .campus-plan-controls button {min-height:42px;font-size:12px}
  .campus-plan-controls svg {width:15px;height:15px}
  .campus-qa {top:105px;right:12px;font-size:10px}
  .campus-world-tag {font-size:11px;min-height:44px;padding:0 8px}
  .campus-actions {left:12px;bottom:40px}
  .campus-actions button {width:42px;height:42px}
  .campus-rail {left:8px;bottom:88px;width:calc(100% - 16px);max-width:calc(100% - 16px)}
  .campus-coordinate {right:12px;bottom:14px;font-size:10px}
  .campus-coordinate span+span {display:none}
  .campus-hint {left:12px;bottom:15px;font-size:11px}
  .campus-detail {bottom:8px;left:8px;transform:none;width:calc(100% - 16px);max-height:33%;grid-template-columns:1fr;grid-template-rows:auto auto auto;gap:1px;padding:10px 12px}
  .campus-detail-top {grid-column:1;grid-row:1;margin-bottom:3px}
  .campus-detail h2 {grid-column:1;grid-row:2;font-size:16px;margin-bottom:2px}
  #campus-detail-copy {grid-column:1;grid-row:3}
  .campus-tool header {padding:5px 9px;gap:9px;min-height:56px}
  .campus-tool header strong {font-size:12px}
  .campus-tool header a {display:none}
  .campus-tool header button {padding:0 10px;font-size:12px}
  .campus-ground-controls {right:12px;bottom:40px;gap:6px;flex-direction:column;align-items:flex-end}
  .campus-ground-controls>button {min-height:42px}
  .campus-ground-controls div {grid-template-columns:repeat(2,42px)}
}


