:root{--paper: #f4efe4;--ink: #1c1914;--muted: #5c564c;--line: #c9bfae;--river: #2a4d63;--estuary: #2a4d63;--hub: #7a3e28;--upper: #3d5a3a;--neutral: #8a8376;--warn: #7a2e2e;--ok: #2f4f38}*{box-sizing:border-box}html,body{margin:0;background:var(--paper);color:var(--ink);font-family:Palatino Linotype,Palatino,Iowan Old Style,Georgia,serif}#app{max-width:1100px;margin:0 auto;padding:1.25rem 1.25rem 3rem}.mast h1{font-size:1.8rem;letter-spacing:.04em;margin:.2rem 0 .4rem}.instrument{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;color:var(--warn);margin:0}.lede,.status p,label,button,select,input,table,li,code,.stats p,.decision-support,.tip-term{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.lede{color:var(--muted);max-width:42rem}.status{display:grid;gap:.75rem;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:1rem 0;margin:1rem 0}.stats{display:grid;gap:.2rem}.commitment{display:grid;gap:.25rem}code{font-size:.78rem;word-break:break-all;background:#efe8d9;padding:.2rem .35rem}.decision-support{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:.85rem 0}.timing-note{margin:0 0 .75rem;color:var(--muted);font-size:.88rem}.decision-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.65rem;margin-bottom:.75rem}.decision-metric{display:grid;gap:.2rem;border:1px solid var(--line);padding:.65rem;background:#efe8d9}.decision-metric strong{font-size:1.05rem}.weather-forecast{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.65rem}.weather-card{border:1px solid var(--line);padding:.65rem;background:#fffdf7}.weather-card.flood-risk{border-color:var(--warn)}.weather-card-top{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem;margin-bottom:.35rem}.weather-card p{margin:.2rem 0;font-size:.85rem}.tip-term{position:relative;display:inline-block;border-bottom:1px dotted currentColor;cursor:help;outline-offset:2px}.tip-term:after{content:attr(data-tooltip);position:absolute;z-index:20;left:50%;bottom:calc(100% + .45rem);width:min(24rem,80vw);transform:translate(-50%);padding:.55rem .65rem;border:1px solid var(--ink);background:#fffdf7;color:var(--ink);font-size:.82rem;line-height:1.35;text-transform:none;letter-spacing:normal;white-space:normal;pointer-events:none;opacity:0;visibility:hidden}.tip-term:hover:after,.tip-term:focus:after{opacity:1;visibility:visible}.map-wrap{margin:1rem 0 1.5rem}.map{width:100%;height:auto;background:#efe8d9;border:1px solid var(--line)}.edge{stroke:var(--line);stroke-width:.35}.edge.valley{stroke:var(--river);stroke-width:.5}.node{fill:var(--neutral);stroke:var(--ink);stroke-width:.2}.node.estuary{fill:var(--estuary)}.node.hub{fill:var(--hub)}.node.upper{fill:var(--upper)}.label,.detail{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:2.1px;fill:var(--ink)}.detail{fill:var(--muted);font-size:1.7px}.grid{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}@media(max-width:800px){.grid,.decision-metrics{grid-template-columns:1fr}}h2,h3{font-weight:600;margin:1rem 0 .4rem}h2{font-size:1.15rem}h3{font-size:.95rem;color:var(--muted)}table{width:100%;border-collapse:collapse;font-size:.9rem}th,td{text-align:left;padding:.25rem .35rem;border-bottom:1px solid var(--line)}ul{padding-left:1.1rem}li{margin:.2rem 0;font-size:.9rem}.log{max-height:14rem;overflow:auto}.compose,.end{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--line)}.composer{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto;gap:.5rem;align-items:end;margin:.75rem 0}label{display:grid;gap:.25rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}select,input,button{font-size:.95rem;padding:.4rem .5rem;border:1px solid var(--ink);background:#fffdf7;color:var(--ink)}button{cursor:pointer}button.primary{background:var(--river);color:#f4efe4}button.danger{background:transparent}button.link{border:none;background:none;padding:0;text-decoration:underline}button:disabled{opacity:.45;cursor:not-allowed}.errors{color:var(--warn)}.ok{color:var(--ok);font-size:.9rem}.foot{display:flex;gap:.75rem;margin-top:2rem}pre{background:#efe8d9;padding:.75rem;overflow:auto;font-size:.85rem}
