@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Libre+Caslon+Display&display=swap');
:root{--ink:#163a40;--deep:#112e35;--paper:#f6f5eb;--muted:#6c7d79;--line:#d7ded4;--orange:#c85e35;--green:#286856;--blue:#c6dfe0}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px 'DM Sans',sans-serif}button,select{font:inherit;color:inherit}button{cursor:pointer;border:1px solid var(--line);border-radius:5px;background:#fffdf6;min-height:42px;padding:9px 13px;font-weight:600;transition:background .15s,transform .15s}button:hover{background:#e8ede4}button:active{transform:translateY(1px)}button:disabled{opacity:.45;cursor:not-allowed}button:focus-visible,select:focus-visible{outline:3px solid #d58444;outline-offset:2px}button.primary{background:var(--ink);color:white;border-color:var(--ink)}button.orange{background:var(--orange);color:white;border-color:var(--orange)}small,.eyebrow{font-size:11px;letter-spacing:1.3px;font-weight:600}small{color:var(--muted)}header{height:82px;display:flex;align-items:center;padding:0 30px;gap:22px;background:var(--deep);color:#f5f4df}.brand{display:flex;align-items:center;gap:13px}.brandmark{font-size:43px;color:#dfa764}h1{font:600 24px 'DM Sans',sans-serif;letter-spacing:5px;margin:0 0 3px}header small{color:#acc1ba;font-size:10px}.topstats{margin-left:auto;display:flex;gap:42px}.topstats div{display:flex;flex-direction:column;gap:4px}.topstats strong{font-size:23px;font-weight:500;font-variant-numeric:tabular-nums}.icon{border:none;background:transparent;font-size:24px;width:42px;padding:0}header .icon{color:white;border:1px solid #4c686b;font-size:20px}.timebar{height:48px;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 30px;gap:26px;font-size:13px;font-weight:600}.speed{margin-left:auto;display:flex;gap:3px}.speed button{min-height:30px;padding:3px 10px;font-size:12px;background:transparent;border:none}.speed button.active,.layers button.active{color:white;background:var(--ink)}main{display:grid;grid-template-columns:minmax(0,1fr) 330px;height:calc(100dvh - 192px);min-height:550px}.chart-area{position:relative;overflow:hidden;background:#c9dfe0}.chart-heading{position:absolute;top:25px;left:28px;z-index:1;pointer-events:none;background:linear-gradient(90deg,#d3e5e4e8,transparent);padding:4px 20px 6px 0}.chart-heading .eyebrow{color:#52787b;font-size:10px}h2{margin:0;font-weight:500}.chart-heading h2{font:42px 'Libre Caslon Display',Georgia,serif;margin:4px 0}.chart-heading p{font-size:12px;color:#52787b;margin:0}.layers{position:absolute;right:20px;top:24px;display:flex;z-index:2;box-shadow:0 3px 16px #153d4210;border-radius:6px;background:var(--paper);padding:3px}.layers button{min-height:30px;padding:5px 10px;font-size:12px;border:none;background:transparent}canvas{display:block;width:100%;height:100%;touch-action:none}.map-controls{position:absolute;bottom:80px;right:20px;display:grid;gap:4px}.map-controls button{width:40px;min-height:38px;padding:0;font-size:23px;background:#f6f5ebed}.map-legend{position:absolute;left:22px;bottom:15px;display:flex;gap:18px;align-items:center;color:#43666b;font-size:11px;pointer-events:none}.map-legend span{display:flex;align-items:center;gap:6px}.map-legend i{width:8px;height:8px;border-radius:50%;display:inline-block}.legend-pot{background:var(--orange)}.legend-ground{border:1px dashed #386e73}#mapHint{position:absolute;bottom:42px;left:50%;transform:translateX(-50%);background:#f6f5ebf0;border:1px solid #ffffffb0;border-radius:5px;padding:9px 15px;font-size:12px;white-space:nowrap;box-shadow:0 2px 8px #163a4012}aside{background:var(--paper);border-left:1px solid #b4c7c5;overflow:auto;padding:22px 20px}.section-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.section-heading h2{font:26px 'Libre Caslon Display',Georgia,serif}.section-heading>span{font-size:11px;color:var(--muted)}#fleet{display:flex;flex-direction:column;gap:7px}.fleetboat{display:flex;align-items:center;gap:10px;text-align:left;background:transparent;border-color:transparent;width:100%;padding:10px}.fleetboat.active{background:#e5ebdf;border:1px solid #c7d4c2}.boat-icon{font-size:22px;width:31px;height:35px;display:grid;place-items:center;color:var(--green)}.fleetboat strong{font-size:14px;display:block}.fleetboat small{display:block;font-size:11px;letter-spacing:0;margin-top:4px;font-weight:400}.fleetboat em{margin-left:auto;width:6px;height:6px;background:#63916a;border-radius:50%}#vessel{padding:19px 0;border-bottom:1px solid var(--line)}.vessel-title{display:flex;justify-content:space-between;align-items:center;font-size:13px;margin-bottom:14px}.tag{padding:4px 7px;background:#e8eddf;border-radius:3px;font-size:10px;letter-spacing:.4px;text-transform:uppercase}.meters{display:grid;grid-template-columns:1fr 1fr;gap:15px}.meter-label{display:flex;justify-content:space-between;font-size:11px;color:#647b77;margin-bottom:7px}.meter{height:4px;background:#dce3d6;border-radius:3px;overflow:hidden}.meter i{display:block;height:100%;background:#63877c}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0}.row small{letter-spacing:0;font-size:12px}.row strong{font-size:13px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px}label{font-size:11px;color:var(--muted);display:block}select{width:100%;font-size:12px;background:#fffdf7;border:1px solid var(--line);padding:9px 6px;border-radius:4px;margin-top:5px}.text-button{padding:4px 0;border:0;background:none;min-height:28px;font-size:12px;text-decoration:underline;color:var(--green)}.actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.actions button{font-size:12px;padding:9px 6px}.actions .full{grid-column:1/-1}#inspector{padding:18px 0}#inspector h3{font:25px 'Libre Caslon Display',Georgia,serif;margin:5px 0 12px}.measurements{display:flex;gap:22px;margin:12px 0}.measurements strong{display:block;font-size:19px;font-weight:500}.measurements small{letter-spacing:0;font-size:11px}.suitability{font-size:12px;color:#5e7971}.objective{margin-top:5px;padding:15px;background:#e8eadb;border-left:2px solid #a8a56d}.objective strong{font-size:13px}.objective p{font-size:12px;line-height:1.6;margin:7px 0 0;color:#66766b}nav{height:62px;display:flex;align-items:stretch;background:var(--deep);padding:0 30px;gap:6px}nav button{color:#dce7df;border:none;background:transparent;min-width:125px;font-size:13px;font-weight:400;border-radius:0;display:flex;align-items:center;justify-content:center;gap:10px}nav button:hover{background:#28474c}nav button span{font-size:22px;color:#d7b478}dialog{border:1px solid #acbbb2;border-radius:12px;padding:26px;background:var(--paper);color:var(--ink);max-height:86dvh;width:min(760px,94vw);box-shadow:0 24px 120px #08252955}dialog::backdrop{background:#08252988;backdrop-filter:blur(3px)}.modal-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding-bottom:18px;margin-bottom:18px}.modal-header h2{font:36px 'Libre Caslon Display',Georgia,serif;margin-top:5px}.modal-header .eyebrow{color:var(--muted)}#modalContent{font-size:14px;line-height:1.65}#modalContent h3{font:27px 'Libre Caslon Display',Georgia,serif;margin:24px 0 10px}#modalContent p{color:#5c736e}.cards{display:grid;grid-template-columns:1fr 1fr;gap:12px}.card{padding:17px;border:1px solid var(--line);border-radius:7px;background:#fffdf650}.card h3{margin:0!important}.card p{font-size:12px}.card button{font-size:13px}.price{font-size:25px;font-family:Georgia,serif}.market-row{display:grid;grid-template-columns:1.6fr 1fr 1fr;align-items:center;padding:15px 0;border-bottom:1px solid var(--line);gap:10px}.market-row strong{display:block}.market-row small{font-size:11px;letter-spacing:0}.spark{width:100%;height:28px}.positive{color:#367956}.negative{color:#b25b3c}.season-row{padding:12px 0;border-bottom:1px solid var(--line)}.months{display:flex;gap:3px;margin-top:9px}.months span{flex:1;padding:6px 0;text-align:center;background:#e8ebe3;font-size:10px;border-radius:3px}.months span.on{background:#3f7066;color:white}.months span.current{outline:2px solid #d58f4f;outline-offset:1px}.notice{background:#e6ebde;padding:12px 15px;border-radius:4px;font-size:12px}.logrow{padding:12px 0;border-bottom:1px solid var(--line)}.logrow small{display:block;margin-bottom:3px;font-size:10px}.harbor-tabs{display:flex;gap:8px}.harbor-tabs .active{background:var(--ink);color:white}.berth{padding:18px;background:#dfebdf;margin:15px 0;border-radius:5px}.harbor-layout{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0}.harbor-layout button{flex:1;min-width:130px;background:#e5eada;min-height:64px}.harbor-layout span{display:block;font-size:11px;color:#667d74}#toast{position:fixed;bottom:78px;left:50%;transform:translateX(-50%);max-width:90vw;background:#163a40;color:#fffcef;padding:12px 20px;border-radius:7px;z-index:20;box-shadow:0 8px 30px #14333830;opacity:0;pointer-events:none;transition:opacity .2s;font-size:13px}#toast.show{opacity:1}.help-list{padding-left:22px}.help-list li{padding:8px 0}.check{display:flex;gap:8px;align-items:center;margin-top:12px;font-size:12px}.check input{width:18px;height:18px}.danger{color:#a3412d}a{color:var(--green)}
@media(min-width:1450px){main{grid-template-columns:minmax(0,1fr) 370px}aside{padding:25px 28px}.chart-heading h2{font-size:50px}}
@media(max-width:800px){header{height:66px;padding:0 16px;gap:13px}.brandmark{font-size:31px}.brand{gap:8px}h1{font-size:18px;letter-spacing:3px}header small{font-size:8px;letter-spacing:.9px}.topstats{gap:12px}.topstats strong{font-size:19px}.wide{display:none!important}header .icon{width:30px;min-height:32px}.timebar{height:44px;padding:0 13px;gap:10px;font-size:11px}.timebar #weather{font-size:10px}.speed{gap:0}.speed button{padding:4px 7px;min-width:30px}.chart-heading{top:15px;left:16px}.chart-heading h2{font-size:31px}.chart-heading p{font-size:10px;max-width:175px}.chart-heading .eyebrow{font-size:8px}.layers{top:15px;right:10px;gap:0;flex-direction:column}.layers button{min-height:32px;padding:4px 8px;font-size:11px}main{display:flex;flex-direction:column;height:auto;min-height:0;padding-bottom:72px}.chart-area{height:53dvh;min-height:340px;max-height:590px}.map-legend{left:12px;font-size:9px;gap:14px;bottom:11px}.map-controls{right:10px;bottom:69px}.map-controls button{width:36px;min-height:35px}#mapHint{font-size:10px;max-width:calc(100% - 24px);white-space:normal;width:max-content;text-align:center;bottom:33px;padding:7px 10px}aside{border:0;border-top:1px solid #b4c7c5;overflow:visible;padding:16px}.fleet-section .section-heading{margin-bottom:9px}.section-heading h2{font-size:23px}#fleet{flex-direction:row;overflow:auto}.fleetboat{min-width:148px;width:auto;padding:8px}.fleetboat strong{font-size:12px}.fleetboat small{font-size:10px}.boat-icon{font-size:18px;width:20px}.fleetboat em{display:none}#vessel{padding:15px 0}.form-row{margin-top:12px}.form-row select{font-size:14px;min-height:42px}#inspector{padding:14px 0}.actions button{font-size:14px;min-height:44px}.objective{margin-bottom:8px}nav{position:fixed;bottom:0;width:100%;height:calc(62px + env(safe-area-inset-bottom));padding:0 4px env(safe-area-inset-bottom);gap:0;z-index:10}nav button{min-width:0;flex:1;font-size:10px;flex-direction:column;gap:3px}nav button span{font-size:20px}dialog{padding:20px 17px;width:96vw;max-height:90dvh}.modal-header h2{font-size:31px}.cards{grid-template-columns:1fr}.market-row{grid-template-columns:1.5fr 1fr .75fr;font-size:12px}.months span{font-size:9px}.brand small{display:block}.meters{gap:20px}.meter-label{font-size:12px}.row small,.row strong{font-size:13px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* Mobile chart workspace: controls scroll within their own dock, never the page. */
.mobile-dock,.mobile-quick{display:none}
@media(max-width:800px){
 html,body{height:100%;overflow:hidden;overscroll-behavior:none}
 body{height:100dvh;display:grid;grid-template-rows:60px 40px minmax(0,1fr) auto}
 header{height:60px}.timebar{height:40px}
 main{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;height:100%;min-width:0;min-height:0;padding:0;overflow:hidden}
 main>.chart-area{grid-column:1;grid-row:1;min-width:0}
 main>aside{grid-column:1;grid-row:2;min-width:0;width:100%;align-self:end}
 .chart-area{height:100%;min-height:0;max-height:none}
 .chart-heading{top:10px;left:12px}.chart-heading h2{font-size:26px;margin:2px 0}.chart-heading p,.chart-heading .eyebrow{display:none}
 .layers{top:9px;right:10px;flex-direction:row}.layers button{min-height:36px}
 .map-controls{bottom:36px;right:10px;gap:3px}.map-controls button{min-height:38px;width:38px}
 #mapHint{display:none}.map-legend{bottom:9px;font-size:10px}
 aside{padding:0 12px 10px;height:min(39dvh,340px);max-height:min(39dvh,340px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;border-radius:14px 14px 0 0;box-shadow:0 -3px 18px #183c4015;border-top:1px solid #bacac1;z-index:3}
 .mobile-dock{display:block;position:sticky;top:0;background:var(--paper);z-index:2;padding:7px 0 0}
 .dock-vessel{display:flex;align-items:center;gap:8px;min-height:40px}.dock-vessel>label{font-size:11px;white-space:nowrap}.dock-vessel select{flex:1;min-width:0;margin:0;font-size:14px;font-weight:600;min-height:40px;background:transparent;border:0;padding-left:4px}
 #dockToggle{width:44px;min-height:40px;font-size:22px;padding:0;border:0;background:transparent}
 .dock-tabs{display:flex;border-bottom:1px solid var(--line);gap:8px}.dock-tabs button{flex:1;min-height:40px;background:none;border:0;border-radius:0;padding:7px 5px;font-size:13px;font-weight:500;color:var(--muted)}.dock-tabs button[aria-selected=true]{border-bottom:2px solid var(--green);color:var(--ink);font-weight:700}
 aside>.fleet-section,aside>#vessel,aside>#inspector,aside>#objective{display:none}
 aside[data-mobile-tab=orders]:not(.dock-minimized)>#inspector,aside[data-mobile-tab=vessel]:not(.dock-minimized)>#vessel,aside[data-mobile-tab=fleet]:not(.dock-minimized)>.fleet-section{display:block}
 .dock-minimized .dock-tabs{display:none}.dock-minimized{height:52px;max-height:52px;padding-bottom:4px}
 #inspector{padding:10px 0 0;display:grid!important;grid-template-columns:1fr auto;gap:4px 10px}
 aside:not([data-mobile-tab=orders])>#inspector,aside.dock-minimized>#inspector{display:none!important}
 #inspector>.eyebrow{display:none}#inspector h3{font:600 14px 'DM Sans',sans-serif;margin:0;align-self:center}
 #inspector .measurements{margin:0;gap:12px;justify-content:flex-end}#inspector .measurements strong{font-size:13px}#inspector .measurements small{font-size:11px}#inspector .measurements>div>small{display:none}
 #inspector .suitability{grid-column:1/-1;font-size:12px;line-height:1.4}#inspector>.notice{grid-column:1/-1;margin-top:3px!important;padding:6px 9px;font-size:12px}
 #inspector .actions{grid-column:1/-1;margin-top:4px;gap:6px}#inspector .actions button{min-height:42px;padding:7px;font-size:13px}
 #inspector .actions .full{grid-column:auto}#inspector .actions>.primary.full,#inspector .actions>.orange.full{grid-column:1/-1}
 .mobile-quick{display:block}#inspector>label{grid-column:1/-1;margin-top:6px!important;font-size:11px}#knownGround{min-height:40px;font-size:13px;margin-top:3px}
 #vessel{border:0;padding:10px 0 0}#vessel .vessel-title{margin-bottom:10px}.fleet-section{padding-top:12px}.fleet-section #fleet{flex-direction:column}.fleetboat{width:100%;min-height:46px}
 nav{position:static;height:calc(56px + env(safe-area-inset-bottom));padding:0 4px env(safe-area-inset-bottom)}nav button{font-size:11px}
 dialog{position:fixed;top:auto;bottom:0;margin:0;width:100%;max-width:none;max-height:58dvh;border-radius:16px 16px 0 0;padding:16px 16px calc(16px + env(safe-area-inset-bottom));overscroll-behavior:contain}
 dialog::backdrop{background:#08252925;backdrop-filter:none}.modal-header{position:sticky;top:-16px;background:var(--paper);z-index:2;margin:-1px 0 12px;padding:9px 0 10px}.modal-header h2{font-size:27px}.modal-header .icon{min-height:44px;min-width:44px}
 #toast{bottom:calc(60px + env(safe-area-inset-bottom));max-width:94vw;font-size:12px;padding:10px 14px}
}
@media(min-width:600px) and (max-width:800px) and (max-height:550px) and (orientation:landscape){
 body{grid-template-rows:44px 34px minmax(0,1fr) auto}header{height:44px}.timebar{height:34px}header .brand small{display:none}nav{height:calc(44px + env(safe-area-inset-bottom))}nav button{flex-direction:row}
 main{grid-template-columns:minmax(0,1fr) 280px;grid-template-rows:minmax(0,1fr)}main>aside{grid-column:2;grid-row:1;align-self:stretch}aside,aside.dock-minimized{max-height:none;height:100%;border-radius:0;border-left:1px solid var(--line)}dialog{width:55%;left:auto;right:0;max-height:85dvh}
}

.pressure-readout{display:flex;flex-wrap:wrap;justify-content:space-between;gap:5px;margin-top:9px;font-size:12px;color:#58736b}.pressure-readout .meter{width:100%;height:4px}
@media(max-width:800px){#inspector .pressure-readout{grid-column:1/-1;margin-top:2px}.chart-heading h2{font-size:20px}.layers button{padding:4px 6px;font-size:10px}}

#haulFeedback{position:absolute;left:50%;top:66px;transform:translateX(-50%);width:min(330px,calc(100% - 32px));max-height:45%;overflow:auto;z-index:4;pointer-events:none;background:#fffdf4f5;border:1px solid #c7d5c4;border-radius:9px;box-shadow:0 5px 24px #173e4030;padding:12px 30px 12px 14px;color:var(--ink)}
#haulFeedback[hidden]{display:none}.haul-result+.haul-result{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}.haul-head{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12px}.haul-head strong{color:#39754d}.haul-result.poor .haul-head strong{color:#b04d32}.haul-result.fair .haul-head strong{color:#8d6b20}.haul-weight{font-size:27px;font-weight:700;margin:3px 0}.haul-weight span{font-size:13px;font-weight:400}.haul-reason{font-size:11px;line-height:1.4;color:#5d726a}#dismissHaul{position:absolute;right:0;top:0;border:0;background:transparent;font-size:22px;min-height:40px;width:32px;padding:0;pointer-events:auto}
@media(max-width:800px){#haulFeedback{top:52px;padding:9px 30px 9px 12px}.haul-weight{font-size:23px}.haul-head{font-size:11px}.haul-reason{font-size:10px}}

.tide-hud{position:absolute;left:12px;bottom:34px;z-index:2;font-size:12px;font-weight:600;padding:7px 10px;text-align:left;background:#f8f6e9ed;max-width:calc(100% - 72px);min-height:40px;box-shadow:0 2px 10px #163a4012}.tide-hud span{display:block;font-size:10px;font-weight:400;color:#52766d;margin-top:2px}.spot-links{display:flex;gap:12px;justify-content:space-between;grid-column:1/-1}.spot-links button{font-size:11px}.spot-form{margin:16px 0;display:grid;grid-template-columns:1fr auto;gap:8px}.spot-form label{grid-column:1/-1}.spot-form input{min-width:0;width:100%;padding:10px;border:1px solid var(--line);border-radius:5px;background:#fffef7;font:inherit;font-size:16px;color:var(--ink)}.spot-card{margin:10px 0}.spot-card details{margin-top:12px;font-size:13px}.spot-card summary{cursor:pointer;min-height:34px}.tide-forecast{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}.tide-forecast>div{text-align:center;padding:10px 3px;border-radius:4px;background:#e8ebdf}.tide-forecast strong,.tide-forecast span{display:block}.tide-forecast small{font-size:11px;letter-spacing:0}.tide-forecast span{font-size:10px}.tide-forecast .good-tide{background:#cde0c9}.tide-forecast strong{font-size:15px}

/* Keep voyage tools inside the existing fixed-size control dock. */
.route-tools{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.route-tools button{font-size:14px;min-height:44px;flex:1}.equipment-tags{display:flex;gap:5px;flex-wrap:wrap;margin:8px 0}.equipment-tags .tag{font-size:12px}.route-stop{display:grid;grid-template-columns:1fr auto;gap:6px;padding:12px 0;border-bottom:1px solid #ccd8d1}.route-stop small{grid-column:1}.route-stop button{grid-column:2;grid-row:1/3}.forecast-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px;margin-top:12px}.trip-costs{display:grid;grid-template-columns:1fr auto;gap:8px;font-size:14px}.spot-links{flex-wrap:wrap}
