:root{--sea:#0B4F5C;--deep:#0A2F38;--saffron:#F2B632;--hibiscus:#C42B5B;--mist:#EAF4F3;--paper:#fff;--ink:#13262B;--muted:#4D6469}
@media(prefers-color-scheme:dark){:root{--paper:#0E1C20;--mist:#132A30;--ink:#EAF4F3;--muted:#9DB6BA;--sea:#5CC2D1}}
*{box-sizing:border-box;margin:0}
[hidden]{display:none!important}
body{font:17px/1.6 'Nunito Sans','Segoe UI',sans-serif;color:var(--ink);background:var(--mist);min-height:100vh}
h1,h2{font-family:'Bricolage Grotesque','Trebuchet MS',sans-serif;line-height:1.15}
:focus-visible{outline:3px solid var(--saffron);outline-offset:2px}
.kanga{height:16px;background:repeating-linear-gradient(90deg,var(--hibiscus) 0 22px,var(--saffron) 22px 44px,var(--sea) 44px 66px,var(--paper) 66px 88px);border-block:3px solid var(--deep)}
.btn{display:inline-block;padding:11px 22px;border-radius:999px;border:2px solid transparent;font-family:inherit;font-size:1rem;font-weight:700;line-height:1.3;background:var(--hibiscus);color:#fff;cursor:pointer;text-decoration:none}
.btn.line{background:none;color:var(--ink);border-color:currentColor}
.btn:disabled{opacity:.55;cursor:not-allowed}
.card{background:var(--paper);border-radius:16px;padding:26px}
label{display:grid;gap:6px;font-weight:700}
input,select,textarea{width:100%;padding:12px 14px;border-radius:10px;border:2px solid color-mix(in srgb,var(--ink) 30%,transparent);font:inherit;background:var(--paper);color:var(--ink)}
input[type=checkbox]{width:24px;height:24px;padding:0;accent-color:var(--hibiscus);justify-self:start}
.chk{display:flex;align-items:center;gap:8px;font-weight:700}
.msg{font-weight:700;min-height:1.6em}.msg.err{color:#c0392b}.msg.ok{color:#1f8a4c}
@media(prefers-color-scheme:dark){.msg.err{color:#ff8a7a}.msg.ok{color:#6fd49a}}
.tabs{display:flex;gap:8px;margin-bottom:18px}
.tabs button{flex:1;border:2px solid var(--sea);background:none;color:var(--ink);padding:8px;border-radius:999px;font-family:inherit;font-size:1rem;font-weight:700;cursor:pointer}
.tabs button[aria-selected=true]{background:var(--sea);color:#fff}
@media(prefers-color-scheme:dark){.tabs button[aria-selected=true]{color:#06242a}}
.auth{max-width:440px;margin:40px auto;padding:0 16px}
.auth form{display:grid;gap:14px}
.logo{font:800 1.5rem 'Bricolage Grotesque',sans-serif;color:var(--sea);text-decoration:none;display:block;text-align:center;margin-bottom:16px}.logo b{color:var(--hibiscus)}
/* dashboard */
.app{display:grid;grid-template-columns:250px 1fr;min-height:calc(100vh - 22px)}
.side{background:var(--deep);color:#fff;padding:22px 14px;display:flex;flex-direction:column;gap:4px}
.side .logo{color:#fff;text-align:left;padding:0 10px}.side .logo b{color:var(--saffron)}
.side button{background:none;border:0;color:#cfe3e6;text-align:left;padding:10px 12px;border-radius:10px;font-family:inherit;font-size:1rem;font-weight:600;cursor:pointer}
.side button:hover{background:#ffffff14}.side button[aria-current=true]{background:var(--saffron);color:#1b1500}
.side .out{margin-top:auto;border:2px solid #ffffff55}
.main{padding:32px;max-width:860px}
.main h1{font-size:2rem;margin-bottom:6px}
.empty{background:var(--paper);border:2px dashed color-mix(in srgb,var(--ink) 30%,transparent);border-radius:16px;padding:28px;margin-top:18px}
.empty p{color:var(--muted);margin:6px 0 14px}
.row{background:var(--paper);border-radius:12px;padding:16px 20px;margin-top:10px;display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}
.row>div:first-child{min-width:0;flex:1 1 220px}
.wide{max-width:1040px}
.form{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));align-items:end;background:var(--paper);padding:18px;border-radius:14px;margin:14px 0}
.form .full{grid-column:1/-1}
textarea{min-height:80px}
.sm{padding:5px 12px;font-size:.9rem;min-height:40px}
.btn.sm{display:inline-flex;align-items:center;justify-content:center}
.row .acts{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.pill{font-size:.8rem;font-weight:700;padding:2px 10px;border-radius:999px;background:var(--mist)}
.nav2{display:flex;gap:10px;align-items:center;margin:10px 0;flex-wrap:wrap}
.row small{color:var(--muted);display:block}
/* weekly timetable: day strip + agenda */
.tl-add{background:var(--paper);border-radius:14px;padding:4px 18px;margin:14px 0}
.tl-add>summary{cursor:pointer;font-weight:700;padding:12px 0;list-style:none}
.tl-add>summary::-webkit-details-marker{display:none}
.tl-add[open]>summary{border-bottom:1px solid color-mix(in srgb,var(--ink) 15%,transparent);margin-bottom:6px}
.tl-add .form{padding:12px 0;margin:6px 0 10px;background:none}
.tl-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:8px 0 14px}
.tl-bar strong{flex:1 1 auto;min-width:150px;text-align:center}
.tl-days{display:grid;grid-template-columns:repeat(7,minmax(64px,1fr));gap:8px;overflow-x:auto;padding-bottom:4px}
.tl-day{display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 6px;border-radius:14px;border:2px solid transparent;background:var(--paper);color:var(--ink);font:inherit;cursor:pointer}
.tl-day span{font-size:.78rem;color:var(--muted);font-weight:700;text-transform:uppercase}
.tl-day strong{font:800 1.4rem 'Bricolage Grotesque','Trebuchet MS',sans-serif}
.tl-day i{font-style:normal;font-size:.72rem;color:var(--muted)}
.tl-day.today{border-color:var(--saffron)}
.tl-day.sel{background:var(--hibiscus);color:#fff}
.tl-day.sel span,.tl-day.sel i{color:#fff}
.tl-h{font-size:1.4rem;margin:22px 0 12px}
.tl-list{display:grid;gap:12px}
.tl-card{display:grid;grid-template-columns:84px 1fr auto;gap:16px;align-items:center;background:var(--paper);border-left:5px solid var(--sea);border-radius:14px;padding:16px 18px}
.tl-card.booked{border-left-color:var(--hibiscus)}
.tl-card.open{border-left-color:var(--saffron)}
.tl-card.attended{border-left-color:#1f8a4c}
.tl-card.absent,.tl-card.cancelled{border-left-color:var(--muted);opacity:.85}
.tl-time strong{display:block;font:800 1.2rem 'Bricolage Grotesque','Trebuchet MS',sans-serif}
.tl-time span{color:var(--muted);font-size:.9rem}
.tl-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.tl-head h3{font-size:1.15rem}
.tl-main p{color:var(--muted);margin-top:4px;overflow-wrap:anywhere}
.tl-main small{color:var(--muted)}
.tl-acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.note{color:var(--muted);margin-top:14px}
/* error banner */
.banner{position:fixed;left:12px;right:12px;bottom:12px;z-index:50;background:var(--deep);color:#fff;border-left:6px solid var(--hibiscus);padding:14px 16px;border-radius:12px;display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.banner p{flex:1;min-width:200px}
.banner .btn.line{color:#fff}
/* phone menu */
.menu-btn{display:none}
@media(max-width:760px){
  .app{grid-template-columns:1fr}
  .main{padding:20px}
  .side{position:sticky;top:0;z-index:10;flex-direction:column;flex-wrap:nowrap;padding:10px 14px}
  .side>button:not(.menu-btn),.side>.out{display:none}
  .side.open>button:not(.menu-btn),.side.open>.out{display:block}
  .side .out{margin-top:0}
  .menu-btn{display:block;position:absolute;right:14px;top:10px;border:2px solid #ffffff55;color:#fff;padding:8px 14px;border-radius:999px;background:none;cursor:pointer}
  .tl-card{grid-template-columns:1fr}
  .tl-time{display:flex;gap:8px;align-items:baseline}
  .tl-time span::before{content:"to "}
  .tl-acts{justify-content:flex-start}
}
