:root{color-scheme:dark;--bg:#08111e;--panel:#111f2e;--panel2:#15283a;--edge:#293e53;--text:#e8f1fc;--muted:#94adc2;--blue:#45baff;--sea:#5ee4cb;--orange:#f8b45f;--pink:#d494e5;--yellow:#f4de78}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse 80% 36% at 48% -9%,#12334b 0,transparent 90%),var(--bg);color:var(--text);font:14px/1.48 system-ui,-apple-system,'Segoe UI',Arial,sans-serif}button,select{font:inherit}button{cursor:pointer}button:disabled{opacity:.5;cursor:wait}a{color:var(--sea)}.app-head{border-bottom:1px solid #20384f;background:#0b1726bd;display:flex;justify-content:space-between;align-items:center;padding:15px max(calc((100vw - 1330px)/2),26px);gap:14px}.brand{display:flex;align-items:center;gap:11px}.brand-symbol{display:grid;place-items:center;width:46px;height:46px;font-size:38px;color:#071b2e;background:linear-gradient(135deg,#5be3d1,#53aaff);border-radius:14px;font-weight:700}.overline,.eyebrow{font-weight:700;letter-spacing:2px;font-size:10px;color:#6ee7d9}.brand h1{font-size:24px;line-height:1.05;margin:1px 0;font-weight:800;letter-spacing:-1px}.brand h1 span{color:#59c9ef}.brand h1 em{font-weight:600;font-size:13px;color:var(--muted);font-style:normal;letter-spacing:0;margin-left:6px}.head-right{display:flex;align-items:center;gap:20px}.status-pill{border:1px solid #277965;border-radius:22px;background:#0c322e;color:#79e5c9;padding:6px 12px;font-size:11px;font-weight:650}.external{font-size:12px;color:#b5cde2;text-decoration:none}main{width:min(1330px,calc(100% - 42px));margin:auto}.intro{display:flex;justify-content:space-between;align-items:center;gap:24px;margin:34px 0 27px}.intro h2{font-size:36px;font-weight:780;margin:5px 0;line-height:1.15;letter-spacing:-1.3px}.intro h2 span{color:#57bbef}.intro p{color:#a3b8c9;max-width:850px;margin:10px 0 0}.intro-aside{color:#8fd4bb;border:1px solid #264f49;background:#0d262d;border-radius:11px;padding:12px 14px;max-width:285px;font-size:12px}.green-dot{display:inline-block;border-radius:100%;width:9px;height:9px;background:#58d9a2;margin-right:5px}.panel{background:linear-gradient(145deg,#132333,#101c2b);border:1px solid #2b4257;border-radius:16px;box-shadow:0 9px 40px #00000025}.settings,.series{padding:24px}.settings-heading,.panel-head{display:flex;align-items:center;justify-content:space-between;gap:14px}.settings h3,.panel h3{font-size:16px;font-weight:740;margin:0 0 3px}.muted{color:var(--muted);font-size:12px}.section-n{color:#76d6e9;margin-right:9px;font-size:12px}.source-tag{padding:7px 10px;background:#0b332e;border:1px solid #226e65;border-radius:7px;color:#74dcc1;font-size:10px;font-weight:800;letter-spacing:1px}.controls{display:flex;flex-wrap:wrap;align-items:end;gap:14px;margin-top:23px}.control{min-width:175px;flex:1}.control label{display:block;font-size:11px;color:#a4bad1;font-weight:650;margin-bottom:7px}select{width:100%;padding:12px 13px;background:#0c1928;color:var(--text);border:1px solid #37516a;border-radius:9px;outline:0}select:focus{border-color:var(--blue)}.buttons{display:flex;gap:10px;flex-wrap:wrap}.btn{padding:12px 15px;border-radius:9px;border:1px solid #3d5872;color:var(--text);font-weight:700;white-space:nowrap}.btn.primary{background:linear-gradient(130deg,#148fc9,#17bad1);border-color:#3ba7cf;color:white}.btn.primary span{margin-left:9px}.btn.alt{background:#1b3245}.btn.subdued{background:transparent}.btn:hover:not(:disabled){filter:brightness(1.12)}.location{border-top:1px solid #2c4255;margin-top:18px;padding-top:12px;color:#98b8ce;font:12px ui-monospace,SFMono-Regular,Menlo,monospace}.columns{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:18px;margin-top:19px;align-items:stretch}.result,.diagnostics{padding:22px;min-width:0;min-height:333px}.small-label{color:var(--sea);background:#133a3c;border:1px solid #266867;border-radius:7px;font:11px ui-monospace,monospace;padding:7px 9px}.empty-state{height:214px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:#97afc2}.empty-state strong{color:#cfdef0}.empty-state span{font-size:12px;text-align:center}.empty-icon{font-size:54px;color:#56a3c1;line-height:1}.table-wrap{overflow-x:auto;margin-top:19px}table{width:100%;border-collapse:collapse}th{color:#879fb5;font-size:10px;text-transform:uppercase;letter-spacing:1px;text-align:right;padding:10px 9px;border-bottom:1px solid #345065}th:first-child{text-align:left}td{border-bottom:1px solid #23384b;padding:14px 9px;text-align:right;font-variant-numeric:tabular-nums}td:first-child{text-align:left;font-weight:720}tr:last-child td{border-bottom:none}.warm{color:var(--orange)}.sea{color:var(--sea)}.pink{color:var(--pink)}.yellow{color:var(--yellow)}.mutedValue{color:#7591a8}.fine-note{color:#93aabd;font-size:11px;line-height:1.65;margin:13px 0 0}.meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}.meta span{font:11px ui-monospace,monospace;background:#203349;color:#b9d2e3;border-radius:5px;padding:6px 8px}.error{border:1px solid #854f47;background:#422a30;color:#ffd3c0;padding:12px;border-radius:9px;white-space:pre-wrap;word-break:break-word}.errors{font-size:12px;border:1px solid #654a36;background:#342a2a;border-radius:10px;color:#f0cb9f;padding:12px;margin-top:10px;white-space:pre-wrap;max-height:150px;overflow-y:auto}.diag-empty{margin-top:23px;color:#93aabd;text-align:center;padding:35px 10px}.diag-list{margin-top:17px;display:grid;gap:8px}.diag-line{display:grid;grid-template-columns:100px 1fr;gap:8px;border-bottom:1px solid #263c50;padding:8px 0;font-size:12px}.diag-line span:first-child{color:#8facbf}.diag-line span:last-child{overflow-wrap:anywhere}.inventory{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:14px 0 3px}.field{font:11px ui-monospace,monospace;border-radius:6px;padding:8px 5px;text-align:center;border:1px solid #315467;background:#1c3c45;color:#99e4c9}.field.missing{background:#302532;color:#bb8e98;border-color:#70424e}.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:20px}.actions .btn{padding:9px 10px;font-size:11px}.series{margin-top:19px;min-height:200px}.chartbox{min-height:170px;display:flex;align-items:center;justify-content:center}.chart-empty{color:#849db1;font-size:13px}.wavechart{width:100%;height:230px}.wavechart text{fill:#9db6c7;font:12px system-ui}.wavechart line{stroke:#2b495a;stroke-dasharray:3 4}.wavechart .line{fill:none;stroke:#60d0db;stroke-width:2.8;stroke-linecap:round;stroke-linejoin:round}.wavechart circle{fill:#60d0db}.wavechart .wind{stroke:#fac276}.series-matrix{margin-top:10px;overflow:auto}.series-matrix table td,.series-matrix table th{text-align:center;white-space:nowrap;font-size:11px;padding:8px 10px}footer{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:29px 0 38px;font-size:10px;letter-spacing:0.3px;color:#7590a5}@media(max-width:940px){.columns{grid-template-columns:1fr}.intro-aside{display:none}.head-right{gap:10px}.status-pill{display:none}}@media(max-width:590px){main{width:calc(100% - 24px)}.app-head{padding:12px}.intro{margin:22px 0}.intro h2{font-size:27px}.external{font-size:10px}.settings,.series,.result,.diagnostics{padding:16px}.controls{gap:12px}.control{min-width:calc(50% - 8px)}.buttons{width:100%}.buttons .btn{flex:1;padding:11px 9px;font-size:12px}.source-tag{font-size:8px}.settings h3,.panel h3{font-size:14px}.source-tag{white-space:nowrap}.panel-head,.settings-heading{align-items:start}th,td{padding:11px 5px}.inventory{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* Composantes de houle : rendu inspiré du panneau d'observations Ørsted */
.chartcard{margin-top:19px;overflow:hidden;border:1px solid #2b4257;border-radius:14px;background:#142234}
.component-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:15px 19px;background:#1a2d43;border-bottom:1px solid #294359}
.component-heading{display:flex;gap:13px;align-items:center}.component-heading h3{font-size:20px;letter-spacing:.25px;margin:0 0 2px}.component-heading h3 small{font-size:11px;color:#acbacc;letter-spacing:0}.wave-emblem{font-size:39px;background:#135b63;border-radius:50%;color:#48d8c5;width:53px;height:53px;display:grid;place-items:center;flex-shrink:0}
.component-header-right{text-align:right;display:grid;gap:4px;font-size:12px}.component-header-right span{font-size:11px;color:#9cbbcf}
.component-recent{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;padding:11px 14px;background:#16263a;border-bottom:1px solid #20374d}
.recent-entry{padding:7px 12px;border-left:3px solid var(--series);min-width:0}.recent-entry>span{font-size:11px;font-weight:700;color:var(--series)}.recent-entry strong{font-size:16px;display:block;padding-top:3px;font-variant-numeric:tabular-nums}.recent-entry small{display:block;font-size:11px;color:#b1c2d6;white-space:nowrap}
.total{--series:#b18cf8}.wind{--series:#fb943d}.swell1{--series:#facc15}.swell2{--series:#38bdf8}.swell3{--series:#63dfac}
.component-actions{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:10px 20px;color:#b9d0df;font-size:12px}.component-actions label{display:flex;align-items:center;gap:12px;white-space:nowrap}.component-actions select{width:155px;padding:7px 9px;font-size:12px}
.chartcard .chartbox{position:relative;display:block;padding:0 15px;min-height:320px}.chartcard .chart-empty{display:flex;align-items:center;justify-content:center;text-align:center;min-height:295px;padding:25px}
.wavechart{height:auto;max-height:none;aspect-ratio:1060 / 335;display:block;touch-action:pan-y;cursor:crosshair;width:100%}.wavechart .axis-grid{stroke:#314459;stroke-dasharray:none;stroke-width:1}.wavechart .axis-tick{fill:#acbfd0;font-size:11px}.wavechart .component-line{fill:none;stroke-width:2.6;stroke-linejoin:round;stroke-linecap:round}.wavechart .component-dot{stroke:#13273a;stroke-width:2}.wavechart .threshold-line{stroke:#fb5f6a;stroke-width:1.4;stroke-dasharray:6 5}.wavechart .threshold-label{fill:#ff7782;font-size:11px;font-weight:700}.wavechart .cursor-line{stroke:#c4dcee;stroke-dasharray:3 4;opacity:.9}.wavechart .cursor-circle{fill:#eff6ff;stroke:#142234;stroke-width:2}
.direction-bar{margin:0 17px;background:#1b2c42;min-height:57px;padding:8px 12px}.direction-note{font-size:10px;color:#91b3ca;letter-spacing:.35px}.direction-points{display:flex;justify-content:space-between;gap:8px;overflow-x:auto;overflow-y:hidden;margin-top:2px}.direction-position{min-width:45px;text-align:center;display:grid;justify-items:center}.direction-position b{font-size:17px;font-weight:700;display:inline-block;line-height:22px}.direction-position small{font-size:10px;color:#8fb0c8}.direction-position.notavailable{opacity:.45}.graph-legend{display:flex;flex-wrap:wrap;gap:16px;padding:11px 19px 13px;color:#aebfd0;font-size:12px}.graph-legend span:not(.threshold)::before{content:'';display:inline-block;vertical-align:middle;width:18px;height:3px;background:var(--series);margin-right:7px;border-radius:2px}.graph-legend .threshold::before{content:'';display:inline-block;width:18px;height:0;border-top:1px dashed #fb5f6a;vertical-align:middle;margin-right:7px}
.panel-subfooter{border-top:1px solid #2c3d52;padding:15px 19px;display:flex;justify-content:space-between;align-items:center;gap:18px;font-size:12px;color:#aec1d5}.panel-subfooter .btn{padding:10px 14px}.chartcard .fine-note{margin:0 20px 12px}.chartcard .series-matrix{margin:0 16px 20px}
@media(max-width:1060px){.component-recent{grid-template-columns:repeat(3,1fr);row-gap:10px}.component-header-right strong{font-size:11px}.wavechart{min-height:290px}}
@media(max-width:590px){.component-banner{padding:12px 13px}.component-heading h3{font-size:14px}.component-heading h3 small{font-size:9px}.wave-emblem{width:37px;height:37px;font-size:28px}.component-recent{grid-template-columns:repeat(2,1fr);padding:10px}.recent-entry{padding:4px 8px}.recent-entry strong{font-size:14px}.recent-entry small{font-size:10px}.component-header-right{display:none}.component-actions{padding:11px;display:grid;gap:9px}.component-actions label{justify-content:space-between}.chartcard .chartbox{padding:0 3px;min-height:220px}.wavechart{min-height:220px}.direction-bar{margin:0 8px}.graph-legend{padding:12px;gap:8px;font-size:11px}.panel-subfooter{display:grid;padding:13px}.panel-subfooter .btn{white-space:normal}.chartcard .fine-note{margin:0 13px 13px}}

/* Override author display rules for hidden status and no-data placeholders. */
[hidden]{display:none!important}
@media(max-width:590px){.chartcard .chartbox{overflow-x:auto;min-height:250px;padding:0 6px}.chartcard .wavechart{min-width:720px;width:720px;height:245px;min-height:245px;max-height:none;aspect-ratio:auto}.direction-bar{overflow:hidden}.direction-points{min-width:0}.direction-position{flex:0 0 49px}.component-banner{gap:5px}}
