/* Manvel permit assistant. The world is the permit counter: a plat sheet, the FEMA flood map, the zoning map, the inspector's stamp. */
:root{
  --paper:#e9eef4; --card:#ffffff; --ink:#14222c; --mute:#44596a; --rule:#6c8194; --hair:#d3dce5;
  --banner:#1c2a57; --banner-ink:#ffffff; --banner-mute:#cdd6e8; --hero:#d8e5f0;
  --accent:#26704f; --accent-ink:#ffffff; --flood:#d6e7f4; --flood-line:#1b5f9c; --warn:#9c2520; --warn-bg:#fbe9e7; --ok:#1f6b45; --ok-bg:#e3f2e9;
  --zone-res:#f6edc2; --zone-com:#f3d4cf; --zone-pud:#f8dfc0; --zone-mf:#e2e8d2; --grid:rgba(27,95,156,.07);
  --shadow:0 2px 6px rgba(20,34,44,.08),0 12px 28px -12px rgba(20,34,44,.18);
  /* map ink: the Leaflet layers in app.js draw these on light OSM tiles in both themes, so the legend reuses them as-is */
  --map-land:#f2efe9; --map-city:#14222c; --map-etj:#1b5f9c; --map-zone:#f6edc2; --map-zone-line:#8a7a2a; --map-flood:#d6e7f4; --map-flood-line:#1b5f9c; --map-fw:#fbe9e7; --map-fw-line:#9c2520;
  --display:"Archivo Narrow","Arial Narrow",system-ui,sans-serif; --body:"Public Sans",system-ui,-apple-system,sans-serif; --mono:ui-monospace,"SFMono-Regular",Menlo,monospace;
  color-scheme:light;
}
:root[data-theme="dark"]{
  --banner:#111a36; --banner-ink:#ffffff; --banner-mute:#b9c5dc; --hero:#132232;
  --paper:#0f171e; --card:#16222b; --ink:#e4ecf2; --mute:#a6b8c5; --rule:#6b8294; --hair:#2b3b48;
  --accent:#7fd1ae; --accent-ink:#0f171e; --flood:#17334a; --flood-line:#7fc0f2; --warn:#f0a39c; --warn-bg:#3a1f1c; --ok:#8fd3ad; --ok-bg:#163326;
  --zone-res:#4a4322; --zone-com:#4b2a26; --zone-pud:#4a3620; --zone-mf:#2f3a2a; --grid:rgba(127,192,242,.07);
  --shadow:0 2px 6px rgba(0,0,0,.35),0 12px 28px -12px rgba(0,0,0,.6); color-scheme:dark;}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper) ;color:var(--ink);font:16px/1.55 var(--body);font-variant-numeric:tabular-nums;
  background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:32px 32px;
  -webkit-tap-highlight-color:transparent;caret-color:var(--accent);accent-color:var(--accent);scrollbar-color:var(--rule) transparent}
::selection{background:var(--flood);color:var(--ink)}
a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:2px}
a:hover{text-decoration-thickness:2px}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
button,input,textarea,select{font:inherit;color:inherit}
button{touch-action:manipulation;cursor:pointer}
[id]{scroll-margin-top:16px}
.wrap{max-width:1180px;margin:0 auto;padding:24px 16px 48px}
/* banner and hero: the city's own page layout (navy band, landscape band), our own wordmark and art */
.banner{background:var(--banner);color:var(--banner-ink)}
.banner-in{max-width:1180px;margin:0 auto;padding:14px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px 24px;flex-wrap:wrap}
.mark{display:flex;align-items:center;gap:12px;color:var(--banner-ink);text-decoration:none;min-height:44px}
.mark svg{width:40px;height:40px;flex:none}
.word{font:700 24px/1.05 var(--display)}
.word small{display:block;font:400 15px/1.35 var(--body);color:var(--banner-mute);margin-top:3px}
.banner nav{display:flex;flex-wrap:wrap;align-items:center;gap:4px 20px;font-weight:600}
.banner nav a{color:var(--banner-ink);display:inline-flex;align-items:center;min-height:44px;text-decoration:none}
.banner nav a:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:4px}
.banner :focus-visible{outline-color:var(--banner-ink)}
.theme{min-height:40px;padding:8px 14px;border-radius:8px;border:1px solid var(--banner-mute);background:transparent;color:var(--banner-ink);font-weight:600;transition:background-color .12s ease-out}
.theme:hover{background:color-mix(in oklab,var(--banner-ink) 12%,transparent)}
.hero{background:var(--hero)}
.hero-in{max-width:1180px;margin:0 auto;padding:36px 16px 32px;display:grid;grid-template-columns:minmax(0,1fr) 240px;gap:24px;align-items:center}
.hero img{width:240px;height:auto;justify-self:end}
.hero .lead{margin-bottom:0}
@media(max-width:720px){.hero-in{grid-template-columns:1fr;padding:24px 16px}.hero img{display:none}.word{font-size:21px}}
h1{font:600 clamp(30px,4.2vw,44px)/1.05 var(--display);margin:0 0 10px;max-width:22ch}
.lead{font-size:18px;color:var(--mute);margin:0 0 24px;max-width:60ch}
/* the ask form */
.ask{background:var(--card);border:1px solid var(--hair);border-radius:12px;box-shadow:var(--shadow);padding:20px;display:grid;gap:14px}
.field{display:grid;gap:6px}
.field label{font-weight:600;font-size:16px}
.field .hint{color:var(--mute);font-size:16px;font-weight:400}
.field input{width:100%;padding:12px 14px;border:1px solid var(--rule);border-radius:8px;background:var(--paper);font-size:17px;transition:border-color .12s ease-out,box-shadow .12s ease-out}
.field input::placeholder{color:var(--mute);opacity:1}
.field input:hover{border-color:var(--accent)}
.field input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px color-mix(in oklab,var(--accent) 22%,transparent)}
.row{display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:end}
.btn{min-height:44px;padding:12px 18px;border-radius:8px;border:1px solid var(--rule);background:var(--card);font-weight:600;transition:background-color .12s ease-out,transform .1s ease-out,border-color .12s ease-out}
.btn:hover{border-color:var(--accent)}
.btn:active{transform:translateY(1px)}
.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
/* hover mixes toward --ink: darker in light, lighter in dark, so the label contrast rises in both themes */
.btn.primary:hover{background:color-mix(in oklab,var(--accent) 85%,var(--ink));border-color:color-mix(in oklab,var(--accent) 85%,var(--ink))}
.btn[disabled]{opacity:.6;cursor:default}
.btn.icon{display:inline-flex;align-items:center;gap:8px}
.btn.icon svg{width:18px;height:18px}
.btn.listening{border-color:var(--warn);color:var(--warn)}
.suggest{position:relative}
.suggest ul{position:absolute;z-index:5;left:0;right:0;top:calc(100% + 4px);margin:0;padding:6px;list-style:none;background:var(--card);border:1px solid var(--rule);border-radius:8px;box-shadow:var(--shadow);max-height:240px;overflow:auto}
.suggest li{min-height:44px;padding:8px 10px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px}
.suggest li:hover,.suggest li[aria-selected="true"]{background:var(--flood)}
.suggest li span{color:var(--mute);font-size:16px}
.examples{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
@media(max-width:700px){.examples{grid-template-columns:1fr}}
.examples button{min-height:44px;font-size:16px;line-height:1.35;text-align:left;padding:10px 14px;border-radius:8px;border:1px solid var(--rule);background:var(--paper);transition:border-color .12s ease-out,box-shadow .12s ease-out}
.examples button:hover{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
/* the answer */
.answer{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,380px);gap:20px;margin-top:24px;align-items:start}
@media(max-width:900px){.answer{grid-template-columns:1fr}.row{grid-template-columns:1fr}.row .btn{width:100%}}
.sheet{background:var(--card);border:1px solid var(--hair);border-radius:12px;box-shadow:var(--shadow);overflow:hidden;min-width:0}
.layer p{overflow-wrap:break-word}
.sheet h2{font:600 28px/1.1 var(--display);letter-spacing:-.01em;margin:0;padding:20px 20px 6px}
.sheet .q{margin:0;padding:0 20px 14px;color:var(--mute)}
.sheet .q .addr{display:block;color:var(--ink);font-weight:600}
.layer{padding:16px 20px;border-top:1px solid var(--hair)}
.layer h3{font:600 20px/1.2 var(--display);margin:0 0 10px;display:flex;align-items:center;gap:12px}
/* layer numbers: flood tint, ink numeral. Readable at a glance, quieter than the heading, no accent spent */
.layer h3 .n{flex:none;display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--flood);color:var(--ink);font:600 16px/1 var(--body)}
.layer p{margin:0 0 8px;max-width:72ch}
.layer p:last-child{margin-bottom:0}
/* sources sit on their own row under the sentence they back */
.cites{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 0}
.cite{display:inline-flex;align-items:center;min-height:44px;font-size:16px;line-height:1.3;padding:4px 12px;border-radius:6px;background:var(--paper);border:1px solid var(--rule);color:var(--mute);text-decoration:none;overflow-wrap:break-word}
.cite.again{background:transparent;border-style:dashed}
.cite:hover{border-color:var(--accent);color:var(--ink);text-decoration:underline}
.chip{display:inline-block;padding:3px 10px;border-radius:6px;font-weight:600;font-size:16px;color:var(--ink)}
.chip.city,.chip.etj,.chip.county{background:var(--flood)}
.chip.flood{background:var(--flood);border:1px solid var(--flood-line)}
.chip.floodway{background:var(--warn-bg);color:var(--warn)}
.chip.z6,.chip.z7,.chip.z4{background:var(--zone-res)}.chip.z1,.chip.z2{background:var(--zone-com)}.chip.z5,.chip.z9,.chip.z11,.chip.z8{background:var(--zone-pud)}.chip.z3{background:var(--zone-mf)}
.stamp{display:inline-block;margin:6px 0 2px;padding:6px 12px;border:2px solid var(--warn);color:var(--warn);border-radius:6px;font:700 16px/1.1 var(--display);transform:rotate(-1.5deg)}
.stamp.ok{border-color:var(--ok);color:var(--ok)}
.notsure{background:var(--warn-bg);color:var(--ink);padding:14px 20px;border-top:1px solid var(--hair)}
.notsure a{color:inherit;font-weight:600}
.withheld{padding:4px 20px 12px;border-top:1px solid var(--hair);color:var(--mute);font-size:16px}
.withheld summary{cursor:pointer;font-weight:600;min-height:44px;display:flex;align-items:center}
.withheld div{margin-top:6px;padding-left:12px;border-left:1px solid var(--hair)}
.dates{padding:12px 20px;border-top:1px solid var(--hair);color:var(--mute);font-size:16px;display:flex;flex-wrap:wrap;gap:6px 18px}
.request{margin:0;padding:16px 20px;border-top:1px solid var(--hair)}
.request h3{margin:0 0 6px;font-family:var(--display);font-size:20px}
.request.open{background:var(--flood);border-left:4px solid var(--flood-line)}
.request textarea{width:100%;box-sizing:border-box;margin:8px 0;padding:12px;border:1px solid var(--rule);border-radius:8px;background:var(--card);color:var(--ink);font:15px/1.5 var(--body);resize:vertical}
.request .actions{display:flex;flex-wrap:wrap;gap:8px}
a.btn{display:inline-flex;align-items:center;text-decoration:none;color:var(--ink)}
.rqpre{display:none}
.feenote{margin:8px 0 0;color:var(--mute)}
.govline{margin:0;padding:10px 20px 14px;color:var(--mute);font-size:16px;border-top:1px solid var(--hair)}
/* actions sit under the question, before the layers, so they are found without scrolling */
.actions{display:flex;gap:8px;flex-wrap:wrap;padding:0 20px 16px}
.actions .btn{padding:10px 16px;font-size:16px}
/* the map */
.mapcard{position:sticky;top:16px;display:grid;gap:0}
#map{height:360px;border-radius:12px 12px 0 0;background:var(--paper)}
/* each swatch is a small piece of map: light tile ground, the same stroke and fill the map draws, framed so it reads on either theme */
.legend{padding:12px 16px 14px;font-size:16px;color:var(--mute);display:grid;gap:8px}
.legend span{display:inline-flex;align-items:center;gap:10px}
.legend i{flex:none;display:inline-block;width:28px;height:18px;border:1px solid var(--rule);border-radius:3px;background-color:var(--map-land)}
.legend .lc{background:linear-gradient(var(--map-city),var(--map-city)) center/100% 3px no-repeat,var(--map-land)}
.legend .le{background:repeating-linear-gradient(90deg,var(--map-etj) 0 6px,transparent 6px 10px) center/100% 2px no-repeat,var(--map-land)}
.legend .lz{background:color-mix(in srgb,var(--map-zone) 60%,var(--map-land));box-shadow:inset 0 0 0 1.5px var(--map-zone-line)}
.legend .lf{background:color-mix(in srgb,var(--map-flood) 75%,var(--map-land));box-shadow:inset 0 0 0 1.5px var(--map-flood-line)}
.legend .lfw{background:color-mix(in srgb,var(--map-fw) 75%,var(--map-land));box-shadow:inset 0 0 0 1.5px var(--map-fw-line)}
/* Leaflet controls: 44px zoom buttons, 16px credit; the optional Leaflet prefix link (a 14px target) is hidden, the OpenStreetMap credit stays on the map */
.leaflet-touch .leaflet-bar a,.leaflet-bar a{width:44px;height:44px;line-height:44px;font-size:22px}
.leaflet-container .leaflet-control-attribution{font:16px/1.5 var(--body);padding:0 8px;color:var(--map-city)}
.leaflet-control-attribution a[href="https://leafletjs.com"],.leaflet-control-attribution a[href="https://leafletjs.com"] + span{display:none}
.feeimg{padding:12px 20px 16px;border-top:1px solid var(--hair)}
.feeimg img{max-width:100%;border:1px solid var(--hair);border-radius:6px;box-shadow:var(--shadow)}
.feeimg p{margin:0 0 8px;font-size:16px;color:var(--mute)}
/* skeleton and states */
.skeleton{display:grid;gap:10px;padding:20px}
.skeleton i{display:block;height:14px;border-radius:6px;background:linear-gradient(90deg,var(--hair),var(--paper),var(--hair));background-size:200% 100%;animation:sk 1.2s linear infinite}
.skeleton i:nth-child(2){width:80%}.skeleton i:nth-child(3){width:60%}
@keyframes sk{to{background-position:-200% 0}}
.error{padding:16px 20px;background:var(--warn-bg);border-radius:12px;margin-top:20px}
.empty{color:var(--mute);margin-top:20px;max-width:60ch}
footer{margin-top:40px;color:var(--mute);font-size:16px;max-width:68ch;line-height:1.6}
footer p{margin:0 0 8px}
.sr{position:absolute;left:-9999px}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}html{scroll-behavior:auto}}
@media print{body.print-request .answer > *:not(article), body.print-request article > *:not(.request), body.print-request header, body.print-request .ask, body.print-request footer, body.print-request .examples, body.print-request .request .actions, body.print-request .request > p{display:none!important}
  body.print-request .request{display:block!important;border:0;background:none}body.print-request textarea{display:none!important}body.print-request .rqpre{display:block!important;white-space:pre-wrap;font:12pt/1.5 var(--body)}}
@media print{body{background:#fff;color:#000}.ask,.examples,header.top nav,.actions,.mapcard,footer,.withheld{display:none!important}.sheet{box-shadow:none;border:1px solid #000}.answer{grid-template-columns:1fr}.cite{border:0;padding:0;min-height:0;background:none}.stamp{transform:none}}
/* setexasbuild region sections */
.band{margin-top:48px;padding-top:32px;border-top:1px solid var(--hair);scroll-margin-top:16px}
.band h2{font:600 28px/1.1 var(--display);letter-spacing:-.01em;margin:0 0 12px;color:var(--ink)}
.offers{display:grid;gap:0;margin:0 0 24px;max-width:75ch;background:var(--card);border:1px solid var(--hair);border-radius:8px}
.offers>div{padding:16px 20px}
.offers>div+div{border-top:1px solid var(--hair)}
.offers dt{font:600 19px/1.25 var(--display);margin:0 0 4px;color:var(--ink)}
.offers dd{margin:0;color:var(--mute);line-height:1.55}
.pilot{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;margin:0}
.pilot .btn{text-decoration:none;display:inline-flex;align-items:center}
.pilot span{color:var(--mute);max-width:60ch}
.rules{margin:0 0 24px;padding-left:20px;max-width:72ch;line-height:1.6}
.rules li{margin:0 0 6px}
.coverage{border-collapse:collapse;width:100%;max-width:880px;background:var(--card);border:1px solid var(--hair);border-radius:8px;font-variant-numeric:tabular-nums}
.coverage caption{text-align:left;font:600 19px/1.25 var(--display);padding:0 0 8px;color:var(--ink)}
.coverage th,.coverage td{text-align:left;padding:10px 14px;border-top:1px solid var(--hair);vertical-align:top;line-height:1.45}
.coverage thead th{border-top:0;color:var(--mute);font-weight:600;font-size:15px}
.coverage tbody th{font-weight:600;color:var(--ink)}
.coverage td{color:var(--mute)}
@media (max-width:640px){.coverage thead{display:none}.coverage tr{display:block;border-top:1px solid var(--hair);padding:8px 0}.coverage th,.coverage td{display:block;border:0;padding:4px 14px}.band h2{font-size:24px}}
.field select{width:100%;max-width:420px;min-height:48px;padding:12px 14px;border:1px solid var(--rule);border-radius:8px;background:var(--paper);font-size:17px;transition:border-color .12s ease-out,box-shadow .12s ease-out}
.field select:hover{border-color:var(--accent)}
.field select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px color-mix(in oklab,var(--accent) 22%,transparent)}
