/* G30 Cluster surface — scoped styles only. This page deliberately does NOT
   load the shared pack style.css (GB-29: its red values belong to other
   surfaces; the SQ5 repair history is the warning). No red value exists in
   this sheet: all red on the G30 face comes from g30-config.js COLORS.red
   through the three GB-29 classes in g30.js. No animations at all (GB-30d). */
:root{color-scheme:dark;--g30-bg:#0d1117;--g30-panel:#161b22;--g30-border:#3d444d;--g30-text:#e6edf3;--g30-muted:#9aa7b4;--g30-dim:#6e7681;--g30-blue:#2f81f7;--g30-amber-bg:#2a2107;--g30-amber-text:#ffd97a;--g30-amber:#d29922}
*{box-sizing:border-box}
body{font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;margin:0;background:var(--g30-bg);color:var(--g30-text);line-height:1.45}
header.top{padding:18px 16px 8px;max-width:1080px;margin:0 auto}
header.top h1{font-size:28px;margin:0 0 6px;line-height:1.15}
header.top p.sub{color:var(--g30-muted);margin:0;font-size:16px}
main{max-width:1080px;margin:0 auto;padding:12px 16px 24px}
.back{display:inline-flex;align-items:center;min-height:48px;padding:10px 14px;margin-bottom:8px;color:#79b8ff;text-decoration:none;font-weight:700;font-size:16px}
.face-wrap{position:relative}
.bezel{position:absolute;inset:0;pointer-events:none;z-index:3}
.bezel svg{width:100%;height:auto;display:block}
.face{position:relative;background:#05070a;border:1px solid var(--g30-border);border-radius:18px;padding:10px;z-index:1}
.face svg{width:100%;height:auto;display:block}
.sim-banner{position:absolute;top:14px;left:50%;transform:translateX(-50%);background:var(--g30-amber-bg);color:var(--g30-amber-text);border:1px solid var(--g30-amber);border-radius:999px;padding:4px 14px;font-weight:800;font-size:13px;letter-spacing:.06em;z-index:2}
.scenario-tag{position:absolute;top:46px;left:50%;transform:translateX(-50%);color:var(--g30-amber-text);font-size:12px;font-weight:700;z-index:2}
.lamps{position:absolute;top:70px;left:50%;transform:translateX(-50%);display:flex;gap:6px;z-index:2}
.lamps svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.7}
.feedlost{margin-top:8px;border:1px solid var(--g30-border);background:var(--g30-panel);color:var(--g30-text);border-radius:10px;padding:10px 14px;font-weight:700}
.controls{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin:14px 0}
.controls label{font-weight:700}
.controls select{min-height:48px;font-size:16px;background:var(--g30-panel);color:var(--g30-text);border:1px solid var(--g30-border);border-radius:10px;padding:8px}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:10px 18px;border-radius:12px;border:1px solid var(--g30-border);background:#21262d;color:var(--g30-text);font-size:16px;font-weight:700;cursor:pointer}
.controls .status{color:var(--g30-muted);font-size:14px}
.panel{border:1px solid var(--g30-border);background:var(--g30-panel);border-radius:14px;padding:16px;margin:18px 0}
.panel h2{font-size:19px;margin:0 0 10px}
.note-line{color:var(--g30-muted);font-size:14px}
.feed-status{border:1px solid var(--g30-amber);background:var(--g30-amber-bg);color:var(--g30-amber-text);border-radius:10px;padding:12px 14px;font-size:14px}
.cal-row{padding:8px 0;border-bottom:1px solid var(--g30-border);font-size:13.5px;color:var(--g30-muted)}
footer{max-width:1080px;margin:0 auto;padding:16px 16px 28px;color:var(--g30-dim);font-size:13px;border-top:1px solid var(--g30-border)}

/* Themes (v0.5.0): house-owned decoration layers + picker chrome for the
   G30 face. Layers sit behind the screen content under a house scrim.
   Zero red values in this sheet, as everywhere on this surface. */
.face .theme-bg-layer{position:absolute;inset:0;z-index:0;background-size:cover;background-position:center;pointer-events:none}
.face .theme-scrim{position:absolute;inset:0;z-index:0;opacity:.55;pointer-events:none}
.face .theme-dial-layer{position:absolute;left:27%;top:46%;width:300px;height:300px;transform:translate(-50%,-50%);border-radius:50%;background-size:cover;opacity:.5;z-index:0;pointer-events:none}
/* §2.3 background-pane slot (repair 2026-10-23): house-owned pane
   backdrop layers over this face's pane-equivalents — layer-1 behind
   the centre window (GB-06/GB-07 data), layer-2 behind the bottom
   band (GB-09 data). The screen SVG is raised to z-1 so the texture
   can never paint over data; the loader sets the texture image or the
   paneBackground token color on the layers, texture winning. */
.face>svg{position:relative;z-index:1}
.face .theme-pane-layer{position:absolute;z-index:0;background-size:cover;background-position:center;pointer-events:none;border-radius:10px}
.face .theme-pane-layer-1{left:39%;top:16%;width:22%;height:50%}
.face .theme-pane-layer-2{left:2%;top:83%;width:96%;height:13%}
/* The calibration pane is this face's HTML pane surface: the loader
   paints the same backdrop onto it as inline style. */
#g30-calibration-panel{background-size:cover;background-position:center}
.theme-badge{max-width:96px;max-height:96px;vertical-align:middle}
.theme-pin-state{color:var(--g30-muted);font-size:13px;margin-left:10px}
.theme-splash{max-width:1080px;margin:10px auto 0;padding:0 16px;display:flex;align-items:center;gap:14px;color:var(--g30-muted)}
.theme-splash[hidden]{display:none}
.theme-splash-img{max-height:120px;border-radius:10px;border:1px solid var(--g30-border)}
.theme-cards{display:flex;flex-wrap:wrap;gap:12px;margin-top:10px}
.theme-card{background:#21262d;border:1px solid var(--g30-border);border-radius:10px;padding:10px;width:220px;display:flex;flex-direction:column;gap:6px}
.theme-card-invalid{opacity:.55}
.theme-preview{width:100%;border-radius:6px}
.theme-name{font-size:13.5px}
.theme-validation{font-size:12px;color:var(--g30-muted)}
.theme-rotation{font-size:13px;color:var(--g30-muted);display:flex;gap:6px;align-items:center}
.theme-state-line{font-size:14px}
.theme-queued,.theme-note{color:var(--g30-muted);font-size:13.5px}
.theme-chime-controls{display:flex;flex-wrap:wrap;gap:16px;align-items:center;margin-top:14px;font-size:14px}
.theme-honesty{width:100%;color:var(--g30-muted);margin:0}
