Files

359 lines
8.4 KiB
CSS
Raw Permalink Normal View History

2026-10-07 12:21:45 -07:00
:root {
--ink: #17212B;
--muted: #5A6874;
--paper: #F2F4F5;
--panel: #FCFDFD;
--line: #D6DCE1;
--strand: #0A8F99;
--strand-deep: #06656C;
--jacket: #F0B400;
--contract: #A23B72;
--error: #9B2C2C;
--field: #FFFFFF;
--map-bg: #E4E8EA;
--button: #17212B;
--button-text: #FFFFFF;
--badge-bg: #F3E4EC;
--badge-open-bg: #FCEFC4;
--badge-open-text: #6B5000;
--legend-bg: rgba(252, 253, 253, 0.94);
--glint: rgba(255, 255, 255, 0.95);
color-scheme: light;
2026-10-07 12:21:45 -07:00
--font: "Barlow", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--display: "Barlow Condensed", "Arial Narrow", "Roboto Condensed", sans-serif;
}
:root[data-theme="dark"] {
--ink: #E3E9EE;
--muted: #9AA9B6;
--paper: #0E161D;
--panel: #141E27;
--line: #2A3946;
--strand: #2BB5C0;
--strand-deep: #6FD3DA;
--jacket: #F2BE1E;
--contract: #D86FA8;
--error: #F29A9A;
--field: #0F1922;
--map-bg: #1C252C;
--button: #E3E9EE;
--button-text: #141E27;
--badge-bg: #3A2231;
--badge-open-bg: #3A3010;
--badge-open-text: #F2D27A;
--legend-bg: rgba(20, 30, 39, 0.94);
--glint: rgba(255, 255, 255, 0.6);
color-scheme: dark;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--ink: #E3E9EE;
--muted: #9AA9B6;
--paper: #0E161D;
--panel: #141E27;
--line: #2A3946;
--strand: #2BB5C0;
--strand-deep: #6FD3DA;
--jacket: #F2BE1E;
--contract: #D86FA8;
--error: #F29A9A;
--field: #0F1922;
--map-bg: #1C252C;
--button: #E3E9EE;
--button-text: #141E27;
--badge-bg: #3A2231;
--badge-open-bg: #3A3010;
--badge-open-text: #F2D27A;
--legend-bg: rgba(20, 30, 39, 0.94);
--glint: rgba(255, 255, 255, 0.6);
color-scheme: dark;
}
}
2026-10-07 12:21:45 -07:00
* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
body {
font-family: var(--font);
font-size: 16px;
line-height: 1.45;
color: var(--ink);
background: var(--paper);
}
.app {
display: grid;
grid-template-columns: minmax(320px, 410px) 1fr;
height: 100%;
}
.panel {
display: flex;
flex-direction: column;
gap: 24px;
overflow-y: auto;
padding: 28px 26px 18px;
background: var(--panel);
border-right: 1px solid var(--line);
}
.map { height: 100%; min-height: 320px; background: var(--map-bg); }
2026-10-07 12:21:45 -07:00
h1 {
margin: 0;
font-family: var(--display);
font-weight: 700;
font-size: 2.75rem;
line-height: 0.95;
letter-spacing: -0.01em;
}
.lede { margin: 10px 0 0; color: var(--muted); max-width: 36ch; }
.search { display: flex; flex-direction: column; gap: 10px; }
.search input {
font: inherit;
padding: 12px 14px;
color: var(--ink);
background: var(--field);
2026-10-07 12:21:45 -07:00
border: 1.5px solid var(--line);
border-radius: 6px;
}
.search input:focus-visible {
outline: none;
border-color: var(--strand);
box-shadow: 0 0 0 3px rgba(10, 143, 153, 0.22);
}
.search button {
font: 600 1rem var(--font);
padding: 12px 16px;
color: var(--button-text);
background: var(--button);
2026-10-07 12:21:45 -07:00
border: 0;
border-radius: 6px;
cursor: pointer;
}
.search button:hover { color: var(--button-text); background: var(--strand); }
2026-10-07 12:21:45 -07:00
.search button:focus-visible { outline: 3px solid var(--jacket); outline-offset: 2px; }
.search button[disabled] { opacity: 0.6; cursor: progress; }
.top { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.theme {
flex-shrink: 0;
margin-top: 4px;
padding: 5px 10px;
font: 500 0.85rem var(--font);
color: var(--ink);
background: transparent;
border: 1px solid var(--line);
border-radius: 14px;
cursor: pointer;
}
.theme:hover { border-color: var(--strand); }
.theme:focus-visible { outline: 3px solid var(--jacket); outline-offset: 2px; }
.leaflet-container { background: var(--map-bg); font-family: var(--font); }
.leaflet-tooltip {
color: var(--ink);
background: var(--panel);
border-color: var(--line);
}
.leaflet-tooltip-top::before { border-top-color: var(--panel); }
.leaflet-tooltip-bottom::before { border-bottom-color: var(--panel); }
.leaflet-tooltip-left::before { border-left-color: var(--panel); }
.leaflet-tooltip-right::before { border-right-color: var(--panel); }
.leaflet-bar a,
.leaflet-bar a:hover {
color: var(--ink);
background: var(--panel);
border-bottom-color: var(--line);
}
.leaflet-control-attribution.leaflet-control {
color: var(--muted);
background: var(--legend-bg);
}
.leaflet-control-attribution a { color: var(--strand-deep); }
2026-10-07 12:21:45 -07:00
.result { display: flex; flex-direction: column; gap: 26px; }
.result:empty { display: none; }
.address { margin: 0 0 6px; font-size: 0.92rem; color: var(--muted); }
.verdict h2 {
margin: 0;
font-family: var(--display);
font-weight: 700;
font-size: 2.2rem;
line-height: 1.02;
}
.verdict.yes h2 { color: var(--strand-deep); }
.verdict p { margin: 6px 0 0; color: var(--muted); }
.strand {
position: relative;
height: 4px;
margin-top: 14px;
overflow: hidden;
background: var(--line);
border-radius: 2px;
}
.verdict.yes .strand { background: var(--strand); }
.verdict.near .strand { background: linear-gradient(90deg, var(--strand) 0 55%, var(--line) 55%); }
.verdict.yes .strand::after,
.verdict.near .strand::after {
content: "";
position: absolute;
inset: 0;
width: 30%;
background: linear-gradient(90deg, transparent, var(--glint), transparent);
2026-10-07 12:21:45 -07:00
transform: translateX(-120%);
animation: pulse 1.4s ease-out 0.15s 1 forwards;
}
@keyframes pulse { to { transform: translateX(420%); } }
.block h3 { margin: 0 0 6px; font: 600 1.05rem var(--font); }
.list { margin: 0; padding: 0; list-style: none; }
.list li {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 12px;
padding: 8px 0;
border-top: 1px solid var(--line);
}
.list li:first-child { border-top: 0; }
.list li[hidden] { display: none; }
.list .sub { flex-shrink: 0; max-width: 55%; font-size: 0.9rem; color: var(--muted); text-align: right; }
.statewide { margin-top: 6px; }
.statewide h4 { margin: 0 0 4px; font-size: 1rem; }
.statewide .note { margin-bottom: 6px; }
.more {
margin: 4px 0 8px;
padding: 0;
font: 600 0.9rem var(--font);
color: var(--strand-deep);
background: none;
border: 0;
cursor: pointer;
text-decoration: underline;
}
.more:focus-visible { outline: 3px solid var(--jacket); outline-offset: 2px; }
2026-10-07 12:21:45 -07:00
.contract { margin: 0 0 14px; padding: 2px 0 4px 12px; border-left: 3px solid var(--contract); }
.contract.open { border-left-color: var(--jacket); }
.contract h4 { margin: 0; font-size: 1rem; }
.contract p { margin: 4px 0 0; font-size: 0.92rem; }
.facts {
display: flex;
flex-wrap: wrap;
gap: 4px 12px;
margin-top: 4px;
font-size: 0.9rem;
color: var(--muted);
}
.badge {
display: inline-block;
padding: 1px 8px;
font-size: 0.8rem;
font-weight: 600;
color: var(--contract);
background: var(--badge-bg);
2026-10-07 12:21:45 -07:00
border-radius: 10px;
}
.badge.open { color: var(--badge-open-text); background: var(--badge-open-bg); }
2026-10-07 12:21:45 -07:00
.result a, .meta a { color: var(--strand-deep); }
2026-10-07 16:32:51 -07:00
.referral { margin: 6px 0; font-size: 0.95rem; }
.tag {
display: inline-block;
padding: 0 6px;
font-size: 0.75rem;
color: var(--muted);
border: 1px solid var(--line);
border-radius: 8px;
vertical-align: 1px;
}
2026-10-07 12:21:45 -07:00
.note { margin: 0; font-size: 0.92rem; color: var(--muted); }
.error { margin: 0; color: var(--error); }
.meta {
margin-top: auto;
padding-top: 12px;
font-size: 0.82rem;
color: var(--muted);
border-top: 1px solid var(--line);
}
.meta p { margin: 0 0 4px; }
.pin {
width: 18px;
height: 18px;
background: var(--jacket);
border: 3px solid var(--ink);
border-radius: 50%;
box-shadow: 0 0 0 4px rgba(240, 180, 0, 0.35);
}
.legend {
padding: 8px 10px;
font: 0.82rem var(--font);
color: var(--ink);
background: var(--legend-bg);
2026-10-07 12:21:45 -07:00
border: 1px solid var(--line);
border-radius: 6px;
}
.legend div { display: flex; align-items: center; gap: 8px; }
.legend i { display: inline-block; width: 14px; height: 10px; border-radius: 2px; }
.sr-only {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
white-space: nowrap;
}
@media (prefers-reduced-motion: reduce) {
.strand::after { display: none; }
}
@media (max-width: 760px) {
html, body { height: auto; }
.app { grid-template-columns: 1fr; grid-template-rows: 44vh auto; height: auto; }
.map { grid-row: 1; height: 44vh; }
.panel { grid-row: 2; overflow: visible; border-right: 0; border-top: 1px solid var(--line); padding: 22px 18px 16px; }
h1 { font-size: 2.3rem; }
}