/* staging-forge.css — the ONE-PAGE semantic staging theme (root + bundle pages). design brief 2026-07-11: tree sidebar left on desktop, tree-top + scroll-to-map on mobile, GEM FRAMES as the hero (each map in its colored jewel frame), quiet architectural dark, zero folder-hopping. doxa-maps design language. */ :root { --bg:#0a0e15; --surf:#121a27; --surf2:#0e1623; --line:#223047; --ink:#eef2f7; --mut:#9aa7b8; --dim:#6b7787; --cy:#46d4ff; --vi:#b9a6f5; --gold:#ffc24b; --grn:#5ee0a0; --sans:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif; --mono:ui-monospace,SFMono-Regular,Menlo,monospace; } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; } body { background: radial-gradient(1100px 480px at 82% -12%, rgba(70,212,255,.10), transparent 60%), radial-gradient(820px 460px at -8% 112%, rgba(185,166,245,.10), transparent 60%), var(--bg); color: var(--ink); font-family: var(--sans); -webkit-font-smoothing: antialiased; } code { font-family: var(--mono); } .hidden { display: none !important; } .empty { color: var(--dim); font: 12px/1.5 var(--mono); padding: 18px; } /* ── Shell: header strip, then sidebar|stage grid (desktop) ── */ header.top { padding: 14px 18px 10px; border-bottom: 1px solid var(--surf2); } header.top h1 { font: 800 15px/1.2 var(--sans); letter-spacing: -.01em; } header.top h1 .ac { color: var(--cy); font-weight: 600; } header.top .sub { margin-top: 3px; font: 12px/1.4 var(--sans); color: var(--mut); } .strip { padding: 7px 18px; font: 11px/1.4 var(--mono); color: var(--mut); border-bottom: 1px solid var(--surf2); background: rgba(255,255,255,.012); } .strip .pat { color: var(--cy); } .strip .err { color: #f87171; } .strip strong { color: var(--ink); } /* token bar — visible only while no token resolves */ #tokenBar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 9px 18px; font: 12px/1.4 var(--sans); color: var(--gold); border-bottom: 1px solid var(--surf2); background: rgba(255,194,75,.06); } #tokenBar input { flex: 1 1 220px; max-width: 420px; font: 12px/1 var(--mono); color: var(--ink); background: var(--surf2); border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; } #tokenBar button { font: 700 11px/1 var(--mono); color: #0a0e15; cursor: pointer; background: linear-gradient(90deg, var(--cy), var(--vi)); border: 0; border-radius: 999px; padding: 8px 14px; } /* ── The one-page layout ── */ #shell { display: grid; grid-template-columns: minmax(280px, 340px) 1fr; height: calc(100vh - 118px); min-height: 420px; } /* sidebar: THE semantic tree — navigation and architecture in one */ #treeNav { overflow-y: auto; border-right: 1px solid var(--surf2); padding: 12px 10px 28px; background: rgba(255,255,255,.008); } .bgroup { margin-bottom: 8px; border: 1px solid var(--line); border-radius: 10px; background: var(--surf); overflow: hidden; } .bgroup summary { list-style: none; cursor: pointer; display: flex; align-items: baseline; gap: 8px; padding: 10px 12px; font: 700 13px/1.2 var(--sans); } .bgroup summary::-webkit-details-marker { display: none; } .bgroup summary .bdot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; align-self: center; background: var(--gem, var(--cy)); box-shadow: 0 0 8px var(--gem, var(--cy)); } .bgroup summary .bmeta { margin-left: auto; font: 10px/1.3 var(--mono); color: var(--dim); font-weight: 400; } .bgroup[open] summary { border-bottom: 1px solid var(--surf2); } .node { display: block; width: 100%; text-align: left; cursor: pointer; color: inherit; background: transparent; border: 0; border-left: 2px solid transparent; padding: 8px 12px 8px 22px; transition: background .12s; } .node:hover { background: rgba(255,255,255,.03); } .node.active { background: color-mix(in srgb, var(--gem, var(--cy)) 10%, transparent); border-left-color: var(--gem, var(--cy)); } .node .nlabel { display: block; font: 600 12.5px/1.3 var(--sans); } .node .nsub { display: block; font: 10.5px/1.4 var(--mono); color: var(--mut); margin-top: 1px; } .node .nedit { display: block; font: 9.5px/1.4 var(--mono); color: var(--dim); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* kind glyphs */ .node.k-instance .nlabel::before { content: "◇ "; color: var(--grn); } .node.k-profile .nlabel::before { content: "● "; color: var(--vi); } .node.k-nested .nlabel::before { content: "◉ "; color: var(--gold); } /* ── Stage: the ONE live map inside its GEM FRAME (the recurring hero theme) ── */ #stage { display: flex; flex-direction: column; min-width: 0; padding: 12px 16px 16px; } .stage-head { display: flex; align-items: center; gap: 10px; padding: 0 2px 9px; } .stage-head .sctag { font: 800 13px/1 var(--mono); color: var(--gem, var(--cy)); } .stage-head .sckind { font: 8.5px/1 var(--mono); color: var(--dim); border: 1px solid var(--line); border-radius: 999px; padding: 3px 8px; text-transform: uppercase; letter-spacing: .08em; } .stage-head .popout { margin-left: auto; font: 600 11px/1 var(--mono); color: var(--mut); text-decoration: none; border: 1px solid var(--line); border-radius: 999px; padding: 7px 12px; } .stage-head .popout:hover { color: var(--ink); border-color: #3a4a63; } /* the gem frame: colored jewel border + inner ring + soft glow in the node's gem color */ .map-slot { flex: 1 1 0; min-height: 0; position: relative; border-radius: 12px; border: 1px solid var(--gem, var(--cy)); box-shadow: 0 0 0 1px color-mix(in srgb, var(--gem, var(--cy)) 45%, transparent) inset, 0 0 26px rgba(var(--gem-rgb, 70,212,255), .16), 0 8px 30px rgba(0,0,0,.35); background: #0d1622; overflow: hidden; padding: 8px; } .map-slot iframe { position: absolute; inset: 8px; width: calc(100% - 16px); height: calc(100% - 16px); border: 0; border-radius: 8px; } /* ── Mobile: single column — tree on top, the map takes the FULL SCREEN below ── (2026-07-11: mobile map = pretty much full screen; scroll must reach it. 100dvh = dynamic viewport height, tracks the mobile URL bar; 100vh = fallback.) */ @media (max-width: 899px) { html, body { height: auto; } /* let the page actually scroll */ #shell { display: block; height: auto; } #treeNav { border-right: 0; border-bottom: 1px solid var(--surf2); max-height: 44vh; } #stage { height: 100vh; height: 100dvh; padding: 8px; } /* full-screen map pane */ .stage-head { padding-bottom: 6px; } .map-slot { padding: 4px; border-radius: 10px; } /* slimmer gem frame = max map */ .map-slot iframe { inset: 4px; width: calc(100% - 8px); height: calc(100% - 8px); } .node .nedit { display: none; } /* edit paths are a desktop affordance */ }