:root{
  --bg:#0d1020;--side:#0b0e1b;--panel:#11152a;--card:#151a30;--card2:#1a2038;--line:#262c45;
  --ink:#e8eaf4;--muted:#8b91ab;--accent:#7c5cff;--accent2:#9b82ff;--green:#34d399;--yellow:#fbbf24;
  --orange:#fb923c;--blue:#60a5fa;--pink:#f472b6;--red:#f87171;
  --f-title:'Space Grotesk',system-ui,sans-serif;--f-body:'Inter',system-ui,sans-serif;--f-mono:'JetBrains Mono',ui-monospace,monospace}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 var(--f-body)}
a{color:var(--accent2);text-decoration:none}a:hover{text-decoration:underline}
h1,h2,h3,h4{font-family:var(--f-title);margin:0}h1{font-size:28px;font-weight:600}h2{font-size:20px}h4{margin:8px 0;color:var(--muted)}
.muted{color:var(--muted)}.small,small{font-size:12px}.mono{font-family:var(--f-mono);font-weight:600;font-size:15px}
.y{color:var(--yellow)}.warn{color:var(--red)}
.app{display:flex;min-height:100vh}
/* sidebar */
.sidebar{width:240px;flex-shrink:0;background:var(--side);border-right:1px solid var(--line);padding:18px 14px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{display:flex;gap:10px;align-items:center;color:var(--ink);margin-bottom:22px}.brand:hover{text-decoration:none}
.brand-ico{width:38px;height:38px;border-radius:10px;background:var(--accent);display:grid;place-items:center;font-size:20px}
.brand b{font-family:var(--f-title);font-size:17px;display:block}.brand small{color:var(--muted)}
.nav-title{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:14px 6px 6px}
.nav{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:8px;color:#c9cde0;margin:2px 0}
.nav:hover{background:var(--card);text-decoration:none}.nav.on{background:#221d4a;color:#fff}
.count{margin-left:auto;background:var(--accent);color:#fff;border-radius:20px;font-size:11px;padding:0 7px}
.side-foot{margin-top:auto}.maxcard{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px;font-size:12px}
.maxcard p{margin:6px 0 0;color:var(--muted)}.sync{font-size:12px;color:var(--muted);margin-top:12px}
.dot-live{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--green);margin-right:4px}
/* main */
.main{flex:1;min-width:0}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 24px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.route-pill{border:1px solid var(--line);border-radius:10px;padding:8px 14px;background:var(--panel)}
.top-actions{display:flex;gap:8px;align-items:center}
.content{padding:24px}.content.with-panel{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:24px}
.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;flex-wrap:wrap}
.page-head p{margin:4px 0 0}
.seg{display:flex;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:4px}
.seg a{padding:6px 14px;border-radius:7px;color:var(--muted)}.seg a.on{background:var(--card2);color:#fff;font-weight:600}.seg a:hover{text-decoration:none;color:#fff}
.chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 16px}
.chip{border:1px solid #3a3470;border-radius:20px;padding:5px 12px;color:#d7d2ff;font-size:13px;background:transparent;display:inline-flex;align-items:center;gap:6px}
.chip.on{background:#2a2160;border-color:var(--accent)}.chip:hover{text-decoration:none;border-color:var(--accent)}
.chip input{width:56px;background:transparent;border:0;border-bottom:1px solid var(--line);color:var(--ink);padding:0 2px}
.sep{flex:1}.found{margin-left:auto;color:var(--green)}
/* buttons */
.btn{display:inline-flex;align-items:center;gap:4px;border-radius:8px;padding:8px 14px;font-weight:600;font-size:13px;border:1px solid var(--line);color:var(--ink);background:var(--card);cursor:pointer;font-family:var(--f-body);white-space:nowrap}
.btn:hover{text-decoration:none;filter:brightness(1.15)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.outline{background:transparent}
.btn.ghost{background:transparent}.small-btn{padding:4px 10px;font-size:12px}
/* tags */
.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;align-items:center}
.tag{display:inline-flex;align-items:center;gap:4px;font-size:12px;padding:2px 8px;border-radius:6px;background:var(--card2);color:var(--muted);white-space:nowrap}
.tag.green{background:#0f3a2c;color:var(--green)}.tag.violet{background:#2a2160;color:#c4b5fd}.tag.yellow{background:#3a2e0b;color:var(--yellow)}
.tag.orange{background:#3d240f;color:var(--orange)}.tag.blue{background:#122a47;color:var(--blue)}.tag.pink{background:#3d1530;color:var(--pink)}
.meteo{display:inline-flex;align-items:center;gap:4px;font-size:12px;padding:2px 8px;border-radius:6px;background:#13233d;color:#cfe3ff;white-space:nowrap}
.meteo.none{background:transparent;color:var(--muted)}.meteo .rain{color:var(--blue)}.meteo.big{font-size:13px}
/* date box */
.datebox{width:48px;height:52px;border-radius:9px;background:var(--card2);border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;flex-shrink:0}
.datebox small{font-size:10px;color:var(--accent2);letter-spacing:.08em}.datebox b{font-family:var(--f-title);font-size:20px;line-height:1}
/* hero */
.hero{border:1.5px solid var(--accent);border-radius:14px;background:var(--panel);margin-bottom:16px;overflow:hidden}
.hero.dim{border-color:var(--line)}
.hero-head{display:flex;gap:14px;align-items:center;padding:16px 18px;border-bottom:1px solid var(--line)}
.hero-title{flex:1}.rank-label{font-size:12px;color:var(--yellow);font-weight:600;letter-spacing:.04em}
.hero-price{text-align:right}.price{font-family:var(--f-mono);font-size:26px;color:var(--yellow);font-weight:600}
.hero-foot{display:flex;gap:8px;padding:12px 18px;justify-content:flex-end}
.trip-block{padding:14px 18px;border-bottom:1px solid var(--line)}
.grid2 .trip-block{background:var(--panel);border:1px solid var(--line);border-radius:10px;margin-bottom:8px}
.tb-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.tb-title{font-size:12px;letter-spacing:.12em;color:var(--muted);font-weight:600}
.leg-line{display:grid;grid-template-columns:150px 1fr 150px auto;gap:12px;align-items:center;margin:6px 0}
.leg-line .t{display:flex;flex-direction:column}.leg-line .t.r{text-align:right}.leg-line small{color:var(--muted)}
.bar{border-top:1px dashed var(--line);position:relative;height:0}
.train{position:absolute;left:50%;top:-11px;transform:translateX(-50%);background:var(--panel);padding:0 8px;font-family:var(--f-mono);font-size:11px;color:#c4b5fd;white-space:nowrap}
.hint{font-size:12px;color:var(--muted);margin:2px 0 0 4px}
/* table rows */
.table{display:flex;flex-direction:column;gap:8px}
.thead,.trow{display:grid;grid-template-columns:30px 2.2fr 1.5fr 1fr 1.5fr 1.1fr auto;gap:12px;align-items:center}
.thead.s,.trow.s{grid-template-columns:30px 2.4fr 1.7fr 1.7fr 1fr 1fr auto}
.thead{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding:0 14px}
.trow{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 14px}
.trow:hover{border-color:#3a3470}
.rank{font-family:var(--f-mono);color:var(--muted);font-size:13px}.rank.big{font-size:22px;color:var(--yellow);width:30px;text-align:center}
.cell-day{display:flex;gap:10px;align-items:center;color:var(--ink)}.cell-day:hover{text-decoration:none}
.actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.sub{font-size:16px;margin:26px 0 10px}
.mini-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}
.mini{display:flex;gap:10px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 10px;color:var(--ink)}
.mini .meteo{margin-left:auto}.mini:hover{text-decoration:none;border-color:#3a3470}
/* right panel */
.panel{display:flex;flex-direction:column;gap:18px}
.panel-sec{display:flex;flex-direction:column;gap:8px}
.ps-head{display:flex;justify-content:space-between}
.channel{display:flex;gap:10px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.ch-ico{width:32px;height:32px;border-radius:8px;background:var(--card2);display:grid;place-items:center}
.switch{margin-left:auto;width:36px;height:20px;border-radius:20px;background:#333a55;position:relative}
.switch::after{content:"";position:absolute;width:16px;height:16px;border-radius:50%;background:#fff;top:2px;left:2px}
.switch.on{background:var(--green)}.switch.on::after{left:18px}
.rules{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px;font-size:13px;color:#c9cde0}
.teaser{background:#17143a;border:1px solid var(--accent);border-radius:12px;padding:14px}.teaser p{margin:4px 0;color:#c9cde0;font-size:13px}
.log-line{font-size:12px;padding:3px 0;border-bottom:1px solid var(--line)}
/* cards */
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:12px}
.card.info{border-color:var(--accent)}.card.warn{border-color:var(--red);color:var(--red)}.card.empty{text-align:center;padding:30px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.row-center{display:flex;gap:14px;align-items:center}.row-between{display:flex;justify-content:space-between;align-items:center;gap:8px}
/* calendrier */
.cal-head,.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.cal-head span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;padding-left:6px}
.cday{background:var(--panel);border:1px solid var(--line);border-top:4px solid #2c3250;border-radius:10px;padding:8px 10px;min-height:96px;display:flex;flex-direction:column;gap:2px;color:var(--ink)}
.cday:hover{text-decoration:none;border-color:#3a3470}
.cday.ok{border-top-color:var(--green)}.cday.half{border-top-color:var(--orange)}.cday.filtered{opacity:.4}
.cd-top{display:flex;align-items:center;gap:6px}.cd-top b{font-family:var(--f-title);font-size:16px}.cd-top .meteo{margin-left:auto;padding:1px 5px}
.cd-big{font-family:var(--f-mono);font-size:20px;color:var(--green);font-weight:600}.star{color:var(--yellow)}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%}.dot.g{background:var(--green)}.dot.o{background:var(--orange)}.dot.n{background:#2c3250}
/* hébergements */
.lodg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}
.lodg{background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden;display:flex;flex-direction:column}
.lodg.over{opacity:.5}
.lodg-img{height:140px;background:#1d2340 center/cover no-repeat;position:relative}
.ribbon{position:absolute;top:10px;left:10px;background:var(--green);color:#062b1e;font-size:11px;font-weight:700;padding:2px 8px;border-radius:6px}
.lodg-body{padding:12px;display:flex;flex-direction:column;gap:6px;flex:1}
.lodg-name{color:var(--ink);font-weight:600;font-family:var(--f-title);font-size:15px;line-height:1.25}
.lodg-price{margin-top:auto}.lodg-price b{font-family:var(--f-mono);font-size:20px}
/* réglages */
.settings fieldset{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:0}
.settings legend{font-family:var(--f-title);font-weight:600;padding:0 6px}
.settings label{display:flex;justify-content:space-between;gap:10px;align-items:center;margin:8px 0}
.settings label.cb{justify-content:flex-start}.settings label.cb.inline{display:inline-flex;margin-right:12px}
.settings .grid2{margin-bottom:14px}
input{background:var(--card2);border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:5px 8px;font:inherit}
input[type=number]{width:80px}input[type=checkbox]{accent-color:var(--accent)}
/* responsive */
@media(max-width:1200px){.content.with-panel{grid-template-columns:1fr}}
@media(max-width:900px){
  .sidebar{display:none}.content{padding:14px}
  .thead{display:none}.trow,.trow.s{grid-template-columns:1fr 1fr;row-gap:8px}.trow .rank{display:none}.cell-day{grid-column:1/-1}
  .actions{grid-column:1/-1;justify-content:flex-start}
  .leg-line{grid-template-columns:1fr 1fr}.leg-line .bar{display:none}.leg-line .btn{grid-column:1/-1;justify-self:start}
  .grid2{grid-template-columns:1fr}.cal-head,.cal{grid-template-columns:repeat(2,1fr)}.cal-head,.cal>div:empty{display:none}
}

/* v3 : canaux, météo détaillée, graphique prix, accès */
.inline-form{display:inline;margin:0}
.pill-toggle{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:20px;padding:5px 10px;font:600 12px var(--f-body);cursor:pointer}
.pill-toggle.on{border-color:#1f6f52;background:#0f3a2c;color:var(--green)}.pill-toggle.warn{border-color:#7a5a12;color:var(--yellow)}
button.switch{border:0;cursor:pointer;padding:0}.sw-form{margin-left:auto}
.meteo-strip{display:flex;flex-wrap:wrap;gap:18px;align-items:center;padding:10px 18px;background:#0f1830;border-bottom:1px solid var(--line);font-size:13px;color:#cfe3ff}
.meteo-strip.none{color:var(--muted)}.meteo-strip .ms-src{margin-left:auto}
.card>.meteo-strip,.content>.meteo-strip{border:1px solid var(--line);border-radius:10px;margin-bottom:14px}
.hero-foot{align-items:center}.hf-left{margin-right:auto}
.chart-card{padding-bottom:10px}
.chart{display:grid;grid-template-columns:repeat(30,1fr);gap:4px;height:190px;align-items:end;margin:14px 0 6px}
.bar-col{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;color:var(--muted);font-size:10px;text-decoration:none}
.bar-col:hover{text-decoration:none}.bar-col:hover .bb{filter:brightness(1.3)}
.bb{width:100%;border-radius:4px 4px 0 0;background:#2c3250;min-height:4px}
.bar-col.tgv .bb{background:var(--accent)}.bar-col.journee .bb{background:var(--green)}.bar-col.min .bb{background:var(--yellow)}
.bar-col.notgv .bb{background:#2c3250}
.bv{font-family:var(--f-mono);font-size:10px;margin-bottom:2px;color:#c9cde0}.bar-col.min .bv{color:var(--yellow)}
.bd{margin-top:4px;font-family:var(--f-mono)}.bm{font-size:11px;height:14px}
.chart-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.lg{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.lg.min{background:var(--yellow)}.lg.tgv{background:var(--accent)}.lg.journee{background:var(--green)}.lg.notgv{background:#2c3250}
.alert-price{display:flex;justify-content:space-between;align-items:center}
.ch-on{border-color:#1f6f52!important}.big-toggle{font-weight:600}
.acces{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.ribbon{background:#0b0e1bcc;color:#fff}.ribbon.first{background:var(--green);color:#062b1e}
.cd-price{color:var(--yellow);font-family:var(--f-mono)}
code{background:var(--card2);padding:1px 5px;border-radius:4px}
@media(max-width:900px){.chart{grid-template-columns:repeat(15,1fr);height:auto;row-gap:14px}.bar-col{height:120px}}

.settings input:not([type=number]):not([type=time]):not([type=checkbox]){width:min(300px,55%)}

.freshness{margin:14px 24px 0;padding:9px 14px;border:1px solid #7a5a12;background:#2a210b;color:#f6d892;border-radius:10px;font-size:13px}
.sync b{color:var(--ink)}

.g{color:var(--green)}
.steps{padding-left:18px;line-height:1.7}.steps li{margin-bottom:8px}

.raw{white-space:pre-wrap;word-break:break-all;font:11px var(--f-mono);color:var(--muted);max-height:220px;overflow:auto}

.login-page{display:grid;place-items:center;min-height:100vh}
.login-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:26px;width:min(360px,90vw);display:flex;flex-direction:column;gap:10px}
.login-card .brand{margin-bottom:8px}.login-card input{padding:10px}
