/* =============================================================== Riprap — visual idiom adapted from NYC Planning Labs (ZoLa, Capital Planning Explorer, Population FactFinder). Goal: dense, professional analytical tool. Map-dominant. No marketing chrome. =============================================================== */ @font-face { font-family: "IBM Plex Sans"; src: url("/static/vendor/nyco/fonts/IBM-Plex-Sans/IBMPlexSans-Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "IBM Plex Sans"; src: url("/static/vendor/nyco/fonts/IBM-Plex-Sans/IBMPlexSans-Italic.woff2") format("woff2"); font-weight: 400; font-style: italic; font-display: swap; } @font-face { font-family: "IBM Plex Sans"; src: url("/static/vendor/nyco/fonts/IBM-Plex-Sans/IBMPlexSans-Bold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } :root { --nyc-blue: #1642DF; --nyc-blue-dark: #031553; --nyc-blue-soft: #e8efff; --nyc-scarlet: #e63946; --bg: #ffffff; --bg-soft: #f6f8fb; --panel: #ffffff; --line: #dde2ea; --line-strong: #c5ccd6; --text: #14161a; --text-muted: #5b6470; --text-faint: #8b95a3; --good: #1a8754; --warn: #b97700; --sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; --mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, monospace; --topbar-h: 44px; --formbar-h: auto; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; font: 14px/1.45 var(--sans); color: var(--text); background: var(--bg-soft); min-height: 100vh; } a { color: var(--nyc-blue); text-decoration: none; } a:hover { text-decoration: underline; } /* ----- Topbar ----- */ .topbar { height: var(--topbar-h); background: #fff; border-bottom: 1px solid var(--line); position: sticky; top: 0; z-index: 20; } .topbar-inner { max-width: 1480px; margin: 0 auto; height: 100%; padding: 0 20px; display: flex; align-items: center; justify-content: space-between; gap: 16px; } .brand { display: inline-flex; align-items: baseline; gap: 8px; font-size: 13.5px; } .brand-name { font-weight: 700; font-size: 16px; color: var(--nyc-blue); letter-spacing: -0.005em; } .brand-sep { color: var(--text-faint); } .brand-tag { color: var(--text-muted); } .topbar-right { display: flex; align-items: center; gap: 12px; } .local-pill { display: inline-flex; align-items: center; gap: 8px; padding: 4px 10px; font-size: 11.5px; font-family: var(--mono); color: var(--good); background: rgba(26, 135, 84, 0.08); border: 1px solid rgba(26, 135, 84, 0.30); border-radius: 999px; cursor: help; } .local-pill .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--good); box-shadow: 0 0 6px rgba(26, 135, 84, 0.7); animation: pulse 2s infinite; } @keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.45} } /* Backend pill state colors. Green = primary reachable; amber = running on the configured fallback; gray = checking; red = nothing reachable. */ .local-pill[data-state="loading"] { color: #6c757d; background: rgba(108, 117, 125, 0.08); border-color: rgba(108, 117, 125, 0.30); } .local-pill[data-state="loading"] .dot { background: #6c757d; box-shadow: none; } .local-pill[data-state="fallback"] { color: #b06b00; background: rgba(176, 107, 0, 0.10); border-color: rgba(176, 107, 0, 0.35); } .local-pill[data-state="fallback"] .dot { background: #b06b00; box-shadow: 0 0 6px rgba(176, 107, 0, 0.7); } .local-pill[data-state="down"] { color: #b00020; background: rgba(176, 0, 32, 0.08); border-color: rgba(176, 0, 32, 0.35); } .local-pill[data-state="down"] .dot { background: #b00020; box-shadow: 0 0 6px rgba(176, 0, 32, 0.7); } /* ----- Form bar ----- */ .form-bar { background: #fff; border-bottom: 1px solid var(--line); padding: 14px 20px 12px; } #qform { max-width: 1480px; margin: 0 auto; display: flex; gap: 8px; } input[type="text"] { flex: 1; padding: 9px 12px; font: inherit; font-size: 14px; color: var(--text); background: #fff; border: 1px solid var(--line-strong); border-radius: 3px; outline: none; transition: border-color 0.12s, box-shadow 0.12s; } input[type="text"]:focus { border-color: var(--nyc-blue); box-shadow: 0 0 0 2px rgba(22, 66, 223, 0.16); } button { padding: 9px 18px; font: inherit; font-size: 14px; font-weight: 500; color: #fff; background: var(--nyc-blue); border: 1px solid var(--nyc-blue); border-radius: 3px; cursor: pointer; transition: background 0.12s; } button:hover:not(:disabled) { background: var(--nyc-blue-dark); border-color: var(--nyc-blue-dark); } button:disabled { opacity: 0.55; cursor: not-allowed; } .suggest { max-width: 1480px; margin: 8px auto 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; } .suggest-label { font-size: 11.5px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-faint); margin-right: 4px; } button.chip { padding: 3px 9px; font-size: 12px; font-weight: 400; color: var(--text-muted); background: #fff; border: 1px solid var(--line); border-radius: 999px; cursor: pointer; } button.chip:hover { background: var(--nyc-blue-soft); border-color: var(--nyc-blue); color: var(--nyc-blue-dark); } /* ----- Workbench (3-column: trace | map | report) ----- */ .workbench { max-width: 1640px; margin: 0 auto; padding: 14px 20px; display: grid; grid-template-columns: 320px minmax(0, 1fr) 400px; gap: 14px; align-items: start; } .col-left { display: flex; flex-direction: column; gap: 12px; position: sticky; top: calc(var(--topbar-h) + 14px); } .col-mid { display: flex; flex-direction: column; gap: 12px; min-width: 0; } .col-right { display: flex; flex-direction: column; gap: 12px; /* No viewport clamp: report flows to its natural height. The page scrolls vertically when content exceeds viewport — with an internal scrollbar (the previous behavior) the bottom citations were unreachable for users who didn't notice the thin inner scrollbar. */ } /* ----- Panels ----- */ .panel { background: var(--panel); border: 1px solid var(--line); border-radius: 4px; overflow: hidden; } .panel > h2, .panel-head h2 { margin: 0; padding: 9px 14px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.10em; color: var(--text-muted); background: var(--bg-soft); border-bottom: 1px solid var(--line); display: flex; align-items: baseline; gap: 10px; } .panel > h2 .hint, .panel-head h2 .hint { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--text-faint); font-size: 10.5px; margin-left: auto; } /* let panel sections style their own bodies */ #trace, #meta, #report { padding: 0; } .panel-head { border-bottom: 1px solid var(--line); background: var(--bg-soft); } .hidden { display: none; } /* ----- Specialist trace ----- */ #steps { list-style: none; margin: 0; padding: 4px 0; font-size: 12.5px; } #steps li { display: grid; grid-template-columns: 18px 1fr auto; gap: 10px; padding: 7px 14px; border-bottom: 1px solid var(--line); align-items: baseline; } #steps li:last-child { border-bottom: 0; } #steps .icon { font-weight: 700; font-size: 14px; line-height: 1; } #steps .pending .icon { color: var(--text-faint); } #steps .running .icon { color: var(--nyc-blue); } #steps .ok .icon { color: var(--good); } #steps .err .icon { color: var(--nyc-scarlet); } #steps .label { color: var(--text); font-weight: 500; } #steps .meta { color: var(--text-muted); font-size: 11px; } #steps .time { font-family: var(--mono); color: var(--text-faint); font-size: 11.5px; } #steps .running { background: rgba(22, 66, 223, 0.04); } #steps .result { grid-column: 2 / -1; color: var(--text-muted); font-size: 11px; font-family: var(--mono); margin-top: 3px; word-break: break-word; line-height: 1.4; } /* ----- Address resolved ----- */ #addr { margin: 0; padding: 10px 14px; display: grid; grid-template-columns: max-content 1fr; column-gap: 14px; row-gap: 4px; font-size: 12.5px; } #addr dt { color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; font-size: 10.5px; } #addr dd { margin: 0; font-family: var(--mono); color: var(--text); font-size: 12px; word-break: break-word; } /* ----- Map ----- */ .panel-map { padding: 0; } #map { width: 100%; height: 60vh; min-height: 440px; background: var(--bg-soft); } .legend { display: flex; flex-wrap: wrap; gap: 14px; padding: 8px 14px; font-size: 11px; color: var(--text-muted); font-family: var(--mono); border-top: 1px solid var(--line); align-items: center; } .legend i.sw { display: inline-block; width: 11px; height: 11px; border-radius: 2px; margin-right: 5px; vertical-align: middle; border: 1px solid rgba(0,0,0,0.12); } .legend i.sandy { background: rgba(230, 57, 70, 0.45); } .legend i.dep { background: rgba(22, 66, 223, 0.30); } .legend i.prithvi { background: rgba(13, 148, 136, 0.20); border-color: #0d9488; } .legend i.fnDot { border-radius: 50%; background: var(--good); } .legend i.fnDotHot { border-radius: 50%; background: var(--nyc-scarlet); } .legend i.addr { border-radius: 50%; background: var(--nyc-blue); border-color: #fff; } /* ----- Civic-assessment report panel ----- */ .report { padding: 0; } .report-head { padding: 14px 16px 12px; border-bottom: 1px solid var(--line); background: linear-gradient(180deg, var(--bg-soft) 0%, #fff 100%); } .report-eyebrow { font-size: 10px; font-weight: 700; letter-spacing: 0.10em; text-transform: uppercase; color: var(--nyc-blue); } .report-addr { margin-top: 4px; font-size: 16px; font-weight: 600; line-height: 1.25; color: var(--text); } .report-meta { margin-top: 4px; font-family: var(--mono); font-size: 11.5px; color: var(--text-muted); display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px; } .report-meta .sep { color: var(--text-faint); margin: 0 2px; } .report-meta-k { text-transform: uppercase; font-size: 10px; letter-spacing: 0.05em; color: var(--text-faint); } .report-meta-v { color: var(--text); } /* Tier block */ .tier-block { display: grid; grid-template-columns: 64px 1fr; gap: 14px; align-items: center; padding: 14px 16px; border-bottom: 1px solid var(--line); background: #fff; } .tier-badge { width: 64px; height: 64px; border-radius: 6px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #fff; font-family: var(--mono); line-height: 1; } .tier-badge-num { font-size: 30px; font-weight: 700; letter-spacing: -0.02em; } .tier-badge-of { font-size: 10px; font-weight: 500; letter-spacing: 0.06em; text-transform: uppercase; margin-top: 2px; opacity: 0.9; } .tier-pending { background: var(--text-faint); } .tier-badge.t-1 { background: var(--nyc-scarlet); } .tier-badge.t-2 { background: #d97706; } .tier-badge.t-3 { background: #ca8a04; } .tier-badge.t-4 { background: var(--nyc-blue); } .tier-badge.t-0 { background: var(--good); } .tier-text { min-width: 0; } .tier-label { font-size: 14px; font-weight: 600; color: var(--text); line-height: 1.2; } .tier-help { margin-top: 3px; font-size: 12px; color: var(--text-muted); line-height: 1.35; } /* Section headings (small civic-style) */ .report-section-h { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.10em; color: var(--text-muted); padding: 12px 16px 6px; display: flex; align-items: baseline; } .hint-inline { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--text-faint); margin-left: 6px; font-size: 11px; } /* Summary lede */ .summary-box { border-bottom: 1px solid var(--line); background: var(--nyc-blue-soft); } .summary-box #paragraph { margin: 0; padding: 0 16px 14px; font-size: 13.5px; line-height: 1.55; color: var(--text); } /* Section structure inside the summary (Status / Empirical / Modeled / Policy). The reconciler emits markdown headers like `**Status.**` on their own line; renderMarkdown() converts them to

. */ .summary-box #paragraph .rsum-h { margin: 12px 0 4px; font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); } .summary-box #paragraph .rsum-h:first-child { margin-top: 0; } .summary-box #paragraph .rsum-p { margin: 0 0 4px; } .summary-box #paragraph .rsum-p strong { font-weight: 600; background: linear-gradient(transparent 60%, var(--nyc-blue-soft) 60%); padding: 0 2px; } .summary-box #paragraph .cite { display: inline-block; vertical-align: super; font-size: 9.5px; line-height: 1; font-family: var(--mono); color: var(--nyc-blue); background: #fff; border: 1px solid rgba(22, 66, 223, 0.30); padding: 1px 4px; margin-left: 1px; border-radius: 3px; cursor: help; font-weight: 500; } /* Key findings dl */ .key-findings { border-bottom: 1px solid var(--line); } #keyFindings { margin: 0; padding: 0 16px 14px; display: grid; grid-template-columns: minmax(140px, max-content) 1fr; column-gap: 14px; row-gap: 6px; font-size: 12.5px; } #keyFindings dt { color: var(--text-muted); font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; padding-top: 1px; } #keyFindings dd { margin: 0; color: var(--text); font-family: var(--mono); font-size: 12px; word-break: break-word; } #keyFindings dd.hit { color: var(--nyc-scarlet); font-weight: 600; } #keyFindings dd.miss { color: var(--text-faint); } /* Evidence cards */ .evidence-stack { border-bottom: 1px solid var(--line); padding-bottom: 10px; } #evidenceCards { display: flex; flex-direction: column; gap: 8px; padding: 0 16px 4px; } .ec { border: 1px solid var(--line); border-radius: 4px; background: #fff; overflow: hidden; } .ec-head { display: flex; align-items: center; justify-content: space-between; padding: 7px 11px; background: var(--bg-soft); border-bottom: 1px solid var(--line); cursor: pointer; user-select: none; } .ec-title { font-size: 12px; font-weight: 600; color: var(--text); display: flex; align-items: center; gap: 8px; } .ec-title .ec-flag { width: 8px; height: 8px; border-radius: 50%; display: inline-block; } .ec-flag.hit { background: var(--nyc-scarlet); } .ec-flag.note { background: var(--nyc-blue); } .ec-flag.miss { background: var(--text-faint); } .ec-tag { font-family: var(--mono); font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); } .ec-body { display: block; padding: 8px 11px 10px; font-size: 12px; } .ec-body dl { margin: 0; display: grid; grid-template-columns: minmax(120px, max-content) 1fr; column-gap: 12px; row-gap: 4px; } .ec-body dt { color: var(--text-muted); font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.04em; } .ec-body dd { margin: 0; font-family: var(--mono); font-size: 11.5px; color: var(--text); } .ec-foot { font-size: 10px; color: var(--text-faint); font-family: var(--mono); padding: 4px 11px 8px; border-top: 1px dotted var(--line); } .ec-foot a { color: var(--nyc-blue); } .ec.collapsed .ec-body, .ec.collapsed .ec-foot { display: none; } .ec-toggle { font-family: var(--mono); font-size: 11px; color: var(--text-muted); } /* Policy context */ .policy-stack { border-bottom: 1px solid var(--line); padding-bottom: 12px; } #policyList { list-style: none; margin: 0; padding: 0 16px; display: grid; gap: 8px; } #policyList li { border-left: 3px solid var(--nyc-blue); background: var(--nyc-blue-soft); padding: 8px 12px; border-radius: 0 3px 3px 0; } .policy-title { font-size: 11.5px; font-weight: 600; color: var(--nyc-blue-dark); margin-bottom: 3px; } .policy-quote { font-size: 12px; line-height: 1.45; color: var(--text); font-style: italic; } .policy-quote::before { content: "\201C"; } .policy-quote::after { content: "\201D"; } .policy-cite { margin-top: 4px; font-size: 10.5px; color: var(--text-muted); font-family: var(--mono); } /* Energy footer */ .energy-footer { padding: 8px 16px; font-size: 11px; color: var(--text-muted); font-family: var(--mono); border-bottom: 1px solid var(--line); display: flex; flex-wrap: wrap; gap: 4px; align-items: baseline; } .energy-num-inline { font-weight: 700; color: var(--nyc-blue-dark); } .energy-footer .sep { color: var(--text-faint); margin: 0 2px; } /* Methodology disclosure */ .methodology { font-size: 11.5px; } .methodology summary { padding: 9px 16px; font-weight: 600; color: var(--nyc-blue); cursor: pointer; list-style: none; font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; } .methodology summary::-webkit-details-marker { display: none; } .methodology summary::before { content: "▸"; display: inline-block; margin-right: 6px; transition: transform 0.15s; } .methodology[open] summary::before { transform: rotate(90deg); } .method-body { padding: 4px 16px 14px; color: var(--text-muted); font-size: 11.5px; line-height: 1.5; } .method-body p { margin: 0 0 8px; } .method-body h4 { margin: 12px 0 4px; font-size: 10px; text-transform: uppercase; letter-spacing: 0.10em; color: var(--text-muted); font-weight: 700; } .method-body ol { margin: 0; padding-left: 16px; font-family: var(--mono); font-size: 11px; display: grid; gap: 4px; } .method-body ol li { padding-left: 4px; } .method-body code { background: var(--bg-soft); padding: 1px 4px; border-radius: 2px; font-size: 10.5px; } /* Methodology footer's numbered source list */ .method-body ol li { list-style: decimal; word-break: break-word; } /* Legacy section padding for compare.js / register.js panels */ .report-section { padding: 12px 16px 14px; border-bottom: 1px solid var(--line); } .report-section:last-child { border-bottom: 0; } .report-section h3 { margin: 0 0 8px; font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.10em; color: var(--text-muted); } /* Legacy classes still used by compare.js and register.js (will be migrated to the civic-assessment structure in a follow-up). Keep minimal styling so those pages still render. */ .glance-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr; gap: 4px; font-size: 12.5px; } .glance-list li { display: grid; grid-template-columns: 18px 1fr; align-items: baseline; gap: 6px; padding: 3px 0; } .glance-list li.hit { color: var(--text); } .glance-list li.miss { color: var(--text-faint); } .glance-list .gmark { font-family: var(--mono); font-weight: 700; line-height: 1; font-size: 13px; } .glance-list .hit .gmark { color: var(--nyc-scarlet); } .glance-list .miss .gmark { color: var(--text-faint); } .glance-list .note .gmark { color: var(--nyc-blue); } .glance-list .gnum { font-family: var(--mono); font-weight: 500; color: var(--text); } .sources-list { list-style: none; margin: 0; padding: 0; font-size: 11.5px; display: grid; gap: 4px; } .sources-list li { display: grid; grid-template-columns: max-content 1fr; gap: 8px; align-items: baseline; padding: 2px 0; border-bottom: 1px dotted var(--line); } .sources-list li:last-child { border-bottom: 0; } .sources-list .src-tag { font-family: var(--mono); font-size: 10.5px; color: var(--nyc-blue); background: var(--nyc-blue-soft); border: 1px solid rgba(22,66,223,0.25); border-radius: 3px; padding: 1px 5px; white-space: nowrap; font-weight: 500; } .sources-list .src-cite { color: var(--text-muted); line-height: 1.4; } /* Compare + register pages use simple #paragraph .cite — preserve that style */ .compare-mode #paragraph .cite, .register-mode #paragraph .cite, .report-section .cite, #detailParagraph .cite { display: inline-block; padding: 1px 5px; margin-left: 1px; border-radius: 3px; background: var(--nyc-blue-soft); color: var(--nyc-blue); font-family: var(--mono); font-size: 10.5px; font-weight: 500; border: 1px solid rgba(22,66,223,0.25); cursor: help; } /* ----- Footer ----- */ footer { border-top: 1px solid var(--line); background: #fff; margin-top: 28px; } .foot-inner { max-width: 1480px; margin: 0 auto; padding: 22px 20px 36px; display: grid; grid-template-columns: 1.5fr 1fr; gap: 32px; } footer h3 { margin: 0 0 6px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.10em; color: var(--text-muted); } footer p { margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--text-muted); } footer a { color: var(--nyc-blue); } .topbar-select { padding: 4px 8px; font: inherit; font-size: 12px; color: var(--text); background: #fff; border: 1px solid var(--line-strong); border-radius: 3px; margin-right: 12px; } /* ----- Compare mode ----- */ .modelink { font-size: 12px; color: var(--text-muted); margin-right: 12px; } .modelink:hover { color: var(--nyc-blue); text-decoration: underline; } .form-bar-compare #cform { max-width: 1640px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr auto; gap: 8px; align-items: end; } .cform-row { display: flex; flex-direction: column; gap: 3px; } .cform-row label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.10em; color: var(--text-muted); } .compare-workbench { grid-template-columns: 360px minmax(0, 1fr) 360px; } .cpane { display: flex; flex-direction: column; gap: 12px; position: sticky; top: calc(var(--topbar-h) + 14px); max-height: calc(100vh - var(--topbar-h) - 28px); overflow: auto; } .cpane-head { display: flex; align-items: center; gap: 10px; padding: 8px 12px; background: #fff; border: 1px solid var(--line); border-radius: 4px; font-size: 12.5px; font-weight: 500; color: var(--text); word-break: break-word; } .ctag { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; font-size: 12px; font-weight: 700; color: #fff; border-radius: 4px; flex-shrink: 0; } .ctag.a { background: var(--nyc-blue); } .ctag.b { background: #9333ea; } .compare-mid #map { height: calc(100vh - var(--topbar-h) - 200px); min-height: 500px; } @media (max-width: 1340px) { .compare-workbench { grid-template-columns: 1fr 1fr; } .cpane { position: static; max-height: none; } .compare-mid { grid-column: 1 / -1; order: -1; } } @media (max-width: 980px) { .compare-workbench { grid-template-columns: 1fr; } .form-bar-compare #cform { grid-template-columns: 1fr; } } /* ----- Register / Bulk mode ----- */ .register-summary { max-width: 1640px; margin: 0 auto; padding: 14px 20px; display: flex; gap: 22px; align-items: center; background: #fff; border-bottom: 1px solid var(--line); flex-wrap: wrap; } .reg-stat { display: flex; flex-direction: column; border-right: 1px solid var(--line); padding-right: 22px; } .reg-stat:last-of-type { border-right: 0; padding-right: 0; } .reg-stat-num { font-family: var(--mono); font-size: 22px; font-weight: 700; line-height: 1.05; color: var(--text); } .reg-stat-lbl { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); } .reg-stat.tier-1 .reg-stat-num { color: var(--nyc-scarlet); } .reg-stat.tier-2 .reg-stat-num { color: #d97706; } .reg-stat.tier-3 .reg-stat-num { color: var(--nyc-blue); } .reg-stat-spacer { flex: 1; } .reg-controls { display: flex; gap: 8px; align-items: center; } .reg-controls input, .reg-controls select { padding: 7px 10px; font: inherit; font-size: 13px; border: 1px solid var(--line-strong); border-radius: 3px; outline: none; } .reg-controls input { width: 280px; } .reg-controls input:focus, .reg-controls select:focus { border-color: var(--nyc-blue); box-shadow: 0 0 0 2px rgba(22, 66, 223, 0.16); } .btn-secondary { background: #fff; color: var(--nyc-blue); border: 1px solid var(--nyc-blue); padding: 7px 14px; font-size: 13px; } .btn-secondary:hover:not(:disabled) { background: var(--nyc-blue-soft); color: var(--nyc-blue-dark); } .register-workbench { max-width: 1640px; margin: 0 auto; padding: 14px 20px; display: grid; grid-template-columns: minmax(0, 1fr) 460px; gap: 14px; align-items: start; } .reg-table-wrap { padding: 0; overflow: hidden; } .reg-tablescroll { overflow: auto; max-height: calc(100vh - var(--topbar-h) - 200px); } #regTable { width: 100%; border-collapse: collapse; font-size: 13px; } #regTable thead { position: sticky; top: 0; z-index: 1; background: var(--bg-soft); } #regTable th { text-align: left; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); padding: 10px 14px; border-bottom: 1px solid var(--line); } #regTable th.num { text-align: right; } #regTable td { padding: 10px 14px; border-bottom: 1px solid var(--line); vertical-align: top; } #regTable td.num { text-align: right; font-family: var(--mono); } #regTable tbody tr { cursor: pointer; } #regTable tbody tr:hover { background: var(--nyc-blue-soft); } .tier-badge { display: inline-block; width: 24px; height: 24px; line-height: 22px; text-align: center; font-family: var(--mono); font-size: 12px; font-weight: 700; border-radius: 3px; border: 1px solid; color: #fff; } .tier-badge.tier-1 { background: var(--nyc-scarlet); border-color: var(--nyc-scarlet); } .tier-badge.tier-2 { background: #d97706; border-color: #d97706; } .tier-badge.tier-3 { background: var(--nyc-blue); border-color: var(--nyc-blue); } .rname { font-weight: 600; color: var(--text); } .raddr { color: var(--text-muted); font-size: 11.5px; margin-top: 2px; } .rmeta { color: var(--text-muted); font-size: 11.5px; font-family: var(--mono); margin-top: 4px; } .yn { font-family: var(--mono); font-size: 14px; line-height: 1; } .yn.yes { color: var(--nyc-scarlet); } .yn.no { color: var(--text-faint); } .reg-detail { position: sticky; top: calc(var(--topbar-h) + 14px); max-height: calc(100vh - var(--topbar-h) - 28px); overflow: auto; } .reg-detail-empty { padding: 18px; color: var(--text-muted); font-size: 13.5px; } .reg-detail-header { padding: 14px 16px; border-bottom: 1px solid var(--line); background: var(--bg-soft); } #detailMap { width: 100%; height: 220px; border-bottom: 1px solid var(--line); } @media (max-width: 1100px) { .register-workbench { grid-template-columns: 1fr; } .reg-detail { position: static; max-height: none; } } /* ----- Responsive guardrails ----- */ @media (max-width: 1340px) { .workbench { grid-template-columns: 280px minmax(0, 1fr); } .col-right { position: static; max-height: none; grid-column: 1 / -1; } } @media (max-width: 980px) { .workbench { grid-template-columns: 1fr; } .col-left { position: static; } .col-right { position: static; } .foot-inner { grid-template-columns: 1fr; } }