/* Impianti Sportivi — design system (IBM Plex, navy/blu istituzionale) */
:root{--navy:#14222F;--navy2:#1F3142;--acc:#1F4E79;--acc-d:#163A5A;--acc-l:#DCE7F2;--ok:#1E6B3A;--ok-l:#D6EEDF;--warn:#B4541E;--warn-l:#FBEEE4;--ko:#A3232B;--ko-l:#FBEAEB;
--c-comune:#1F4E79;--c-societa:#2A7F6F;--c-azienda:#C9622B;--c-privata:#6B4C9A;--c-scuola:#1F4E79;--c-corso:#2A7F6F;--c-pagato:#C9622B;--c-privata-l:#E8E0F2;
--bg:#F1F3F5;--card:#FFFFFF;--line:#E1E6EB;--line2:#CDD4DB;--txt:#1B1F24;--mut:#5B6773;--soft:#F5F7F9;--r:8px;--font:'IBM Plex Sans',system-ui,-apple-system,'Segoe UI',sans-serif;--mono:'IBM Plex Mono',ui-monospace,Menlo,monospace}
*{box-sizing:border-box}html,body{margin:0}body{font-family:var(--font);font-size:14px;color:var(--txt);background:var(--bg);line-height:1.45}
a{color:var(--acc)}a:hover{color:var(--acc-d)}h1,h2,h3{margin:0;font-weight:600}h1{font-size:22px}h2{font-size:16px}h3{font-size:14px}
.app{display:flex;min-height:100vh}
.side{width:236px;flex:0 0 236px;background:var(--navy);color:#D5DCE3;display:flex;flex-direction:column;padding:18px 14px;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto}
.side .brand{display:flex;gap:10px;align-items:center;padding:4px 8px 18px;color:#fff;text-decoration:none}.side .logo{width:34px;height:34px;border-radius:6px;background:var(--acc);display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff}
.side .brand small{display:block;font-size:11px;color:#8C9AA8;font-weight:400}
.side a.nav{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:6px;color:#D5DCE3;text-decoration:none;font-size:13.5px}.side a.nav:hover{background:var(--navy2);color:#fff}.side a.nav.on{background:var(--acc);color:#fff;font-weight:500}
.side .sez{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:#7D8B99;padding:14px 12px 4px}
.side .nav .n{margin-left:auto;background:var(--warn);color:#fff;font-size:11px;padding:0 6px;border-radius:9px}
.side .chi{margin-top:auto;padding:12px;background:var(--navy2);border-radius:6px;font-size:12px}.side .chi b{color:#fff;font-weight:500;display:block}
.main{flex:1 1 auto;min-width:0;padding:22px 28px 40px;display:flex;flex-direction:column;gap:18px}
.top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.top .sub{color:var(--mut);font-size:13px}
.top .az{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:40px;padding:0 15px;border-radius:6px;border:1px solid var(--line2);background:#fff;color:var(--txt);font:inherit;font-weight:500;text-decoration:none;cursor:pointer;white-space:nowrap}
.btn:hover{border-color:#9AA6B2;color:var(--txt)}.btn.p{background:var(--acc);border-color:var(--acc);color:#fff}.btn.p:hover{background:var(--acc-d)}.btn.d{background:var(--navy);border-color:var(--navy);color:#fff}
.btn.ko{background:#fff;border-color:#E2B4B7;color:var(--ko)}.btn.ko:hover{background:var(--ko-l)}.btn.okb{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.s{height:32px;padding:0 10px;font-size:12.5px}.btn.xs{height:28px;padding:0 8px;font-size:12px}.btn[disabled]{opacity:.5;cursor:not-allowed}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:18px}.card>h2{margin-bottom:12px}.card .hd{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.card .hd h2{margin:0}
.g{display:grid;gap:16px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.g5{grid-template-columns:repeat(5,minmax(0,1fr))}.span2{grid-column:span 2}.span3{grid-column:span 3}
.kpi .l{font-size:12px;color:var(--mut)}.kpi .v{font-size:28px;font-weight:600;margin-top:2px}.kpi .s{font-size:12px;color:var(--mut);margin-top:2px}.bar{height:6px;background:#E9EDF1;border-radius:3px;margin-top:8px}.bar>i{display:block;height:6px;border-radius:3px;background:var(--acc)}
.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{text-align:left;font-weight:500;font-size:12px;color:var(--mut);padding:8px;border-bottom:1px solid var(--line);white-space:nowrap}.tbl td{padding:9px 8px;border-bottom:1px solid #EEF1F4;vertical-align:top}.tbl tr:last-child td{border-bottom:0}.tbl tr.hl td{background:#FBF4F4}
.scroll{overflow-x:auto}
.b{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600;white-space:nowrap;background:#EEF1F4;color:#3A4651}.b.ok{background:var(--ok-l);color:var(--ok)}.b.warn{background:var(--warn-l);color:#8A3F14}.b.ko{background:var(--ko-l);color:var(--ko)}.b.neutro{background:#EEF1F4;color:#3A4651}
.b.comune{background:var(--acc-l);color:var(--acc-d)}.b.societa{background:#D6EEE9;color:#1C5A4E}.b.azienda{background:#F6E2D5;color:#8A3F14}.b.palestra_privata{background:var(--c-privata-l);color:#4A3570}.b.scuola{background:var(--acc-l);color:var(--acc-d)}.b.fornitore{background:#EEF1F4;color:#3A4651}
.mut{color:var(--mut)}.small{font-size:12px}.mono{font-family:var(--mono)}.right{text-align:right}.nowrap{white-space:nowrap}.mt{margin-top:12px}.mb0{margin-bottom:0}
.flash{padding:12px 14px;border-radius:6px;border:1px solid;font-size:13.5px}.flash.ok{background:var(--ok-l);border-color:#A9D5B8;color:#14502A}.flash.ko{background:var(--ko-l);border-color:#E8C9CB;color:#7A1C22}.flash.warn{background:var(--warn-l);border-color:#EBC7AE;color:#7A3611}
.todo{border-left:3px solid var(--mut);padding:8px 10px;background:var(--soft);border-radius:0 6px 6px 0;display:block;text-decoration:none;color:var(--txt)}.todo:hover{color:var(--txt);filter:brightness(.98)}.todo.ko{border-color:var(--ko);background:#FBF4F4}.todo.warn{border-color:var(--warn);background:#FBF5F0}.todo b{font-weight:500;display:block}.todo span{font-size:12px;color:var(--mut)}
.form{display:grid;gap:14px}.fg{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.f{display:flex;flex-direction:column;gap:4px}.f.w2{grid-column:span 2}.f.full{grid-column:1/-1}
.f label,.lbl{font-size:12px;color:var(--mut);font-weight:500}.f .help{font-size:11.5px;color:var(--mut)}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=time],input[type=datetime-local],input[type=search],input[type=tel],input[type=url],select,textarea{height:40px;border:1px solid var(--line2);border-radius:6px;padding:0 10px;font:inherit;background:#fff;color:var(--txt);width:100%}
textarea{height:auto;min-height:90px;padding:8px 10px;resize:vertical}select[multiple]{height:auto;min-height:110px;padding:6px}
input:focus,select:focus,textarea:focus{outline:2px solid #9DBBD8;outline-offset:0;border-color:var(--acc)}
.chk{display:flex;align-items:center;gap:8px;font-size:13.5px;min-height:36px}.chk input{width:18px;height:18px}
.chips{display:flex;flex-wrap:wrap;gap:6px}.chips label{display:inline-flex;gap:6px;align-items:center;border:1px solid var(--line2);border-radius:16px;padding:5px 10px;font-size:12.5px;background:#fff;cursor:pointer}.chips input{margin:0}
.err{color:var(--ko);font-size:12px}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);flex-wrap:wrap}.tabs a{padding:9px 14px;text-decoration:none;color:var(--mut);border-bottom:2px solid transparent;font-weight:500;font-size:13px}.tabs a.on{color:var(--acc);border-color:var(--acc)}
.dl{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px 16px;font-size:13px}.dl div span{display:block;font-size:11.5px;color:var(--mut)}.dl div b{font-weight:500}
.leg{display:flex;flex-wrap:wrap;gap:14px;font-size:12px;color:var(--mut);align-items:center}.leg i{display:inline-block;width:12px;height:12px;border-radius:2px;vertical-align:middle;margin-right:5px}
.searchbox{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line2);border-radius:6px;padding:0 10px;height:40px}.searchbox input{border:0;height:38px;padding:0;outline:0;width:220px}
.bell{position:relative;display:inline-flex;width:40px;height:40px;align-items:center;justify-content:center;border:1px solid var(--line2);border-radius:6px;background:#fff;color:var(--txt)}.bell .n{position:absolute;top:-6px;right:-6px;background:var(--ko);color:#fff;font-size:10.5px;border-radius:9px;padding:0 5px}
.box-blocco{background:#FBF4F4;border:1px solid #E8C9CB;border-radius:6px;padding:10px;font-size:12.5px;color:#7A1C22}
.box-info{background:#EEF3F8;border:1px solid #CFDDEA;border-radius:6px;padding:10px;font-size:12.5px;color:var(--acc-d)}
details.pan{border:1px solid var(--line);border-radius:6px;background:#fff}details.pan>summary{cursor:pointer;padding:10px 12px;font-weight:500;list-style:none}details.pan>summary::before{content:'▸ ';color:var(--mut)}details.pan[open]>summary::before{content:'▾ '}details.pan>div{padding:0 12px 12px}
.pag{display:flex;gap:4px;flex-wrap:wrap;margin-top:12px}.pag a,.pag span{min-width:34px;height:34px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line2);border-radius:6px;background:#fff;text-decoration:none;font-size:13px}.pag .on{background:var(--acc);color:#fff;border-color:var(--acc)}.pag .dis{opacity:.4}
.empty{padding:20px;text-align:center;color:var(--mut);font-size:13px}
.timeline-bar{display:flex;height:16px;gap:2px;min-width:220px;background:#F2F4F6;position:relative;border-radius:2px;overflow:hidden}
.tl-ev{position:absolute;top:0;bottom:0;border-radius:2px}
.stars{display:flex;gap:4px}.stars label{border:1px solid var(--line2);border-radius:4px;padding:4px 9px;cursor:pointer}.stars input{display:none}.stars input:checked+span{font-weight:700;color:var(--acc)}
.coord-map{height:260px;border:1px solid var(--line2);border-radius:6px}
/* calendario */
.cal-wrap{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:auto}
.cal{display:grid;min-width:780px;font-size:12px;position:relative}
.cal .hcell{padding:8px 6px;border-bottom:1px solid var(--line);border-left:1px solid #EEF1F4;text-align:center;position:sticky;top:0;background:#fff;z-index:3}.cal .hcell b{display:block;font-size:15px}.cal .hcell.oggi{background:#EEF3F8;color:var(--acc)}
.cal .ore{border-right:1px solid var(--line)}.cal .ore div{height:44px;padding:2px 6px;color:var(--mut);font-family:var(--mono);font-size:11px}
.cal .col{position:relative;border-left:1px solid #EEF1F4;background:repeating-linear-gradient(#fff 0 43px,#EEF1F4 43px 44px);cursor:copy}
.cal .col.oggi{background:repeating-linear-gradient(#F7FAFD 0 43px,#E3EAF1 43px 44px)}
.cal .chiuso{position:absolute;left:0;right:0;background:repeating-linear-gradient(135deg,#E6EAEE 0 4px,#F4F6F8 4px 8px);opacity:.75;pointer-events:none}
.ev{position:absolute;border-radius:4px;padding:4px 6px;color:#fff;overflow:hidden;font-size:11.5px;line-height:1.3;text-decoration:none;box-shadow:0 0 0 1px rgba(255,255,255,.7);cursor:pointer;z-index:2}
.ev b{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ev:hover{filter:brightness(1.07);color:#fff}
.ev.corso{background:var(--c-corso)}.ev.scuola{background:var(--c-scuola)}.ev.evento{background:#3D6A8E}.ev.pagato{background:var(--c-pagato);box-shadow:inset 0 0 0 2px #8A3F14}.ev.attesa{background:#FDF6F1;color:#8A3F14;border:2px dashed var(--warn)}.ev.hold{background:#FFF8E6;color:#7A5A00;border:2px dashed #C99A00}
.ev.coda{background:#F1EAF9;color:#4A3570;border:2px dashed var(--c-privata)}.ev.manutenzione{background:repeating-linear-gradient(135deg,#C8CFD6 0 4px,#EEF1F4 4px 8px);color:var(--txt)}.ev.chiusura{background:repeating-linear-gradient(135deg,#E8C9CB 0 4px,#F6E1E2 4px 8px);color:#7A1C22}
.ev.ricollocare{outline:2px solid var(--ko);outline-offset:-2px}.ev .tag{display:inline-block;background:#fff;color:#8A3F14;font-size:10px;padding:0 5px;border-radius:3px;font-weight:700;margin-top:3px}
.mese{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));min-width:780px}.mese .gg{min-height:110px;border-left:1px solid #EEF1F4;border-bottom:1px solid #EEF1F4;padding:4px;font-size:11px}.mese .gg.fuori{background:#FAFBFC;color:#A0AAB4}.mese .gg .num{font-weight:600}.mese .pill{display:block;border-radius:3px;padding:1px 4px;margin-top:2px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none}
.pano{min-width:900px}.pano .riga{display:grid;grid-template-columns:220px 1fr;border-bottom:1px solid #EEF1F4;align-items:stretch}.pano .nome{padding:8px;font-weight:500;font-size:13px;border-right:1px solid var(--line)}.pano .linea{position:relative;height:46px;background:repeating-linear-gradient(90deg,#fff 0 calc(100%/15 - 1px),#EEF1F4 calc(100%/15 - 1px) calc(100%/15))}.pano .linea .ev{top:5px;bottom:5px}
/* mappa */
.mappa{height:640px;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:#E6EBE4}
.pin{width:26px;height:26px;border:3px solid #fff;border-radius:50% 50% 50% 0;transform:rotate(-45deg);box-shadow:0 2px 6px rgba(0,0,0,.35)}
.leaflet-popup-content{font-family:var(--font);font-size:12.5px;margin:12px 14px;min-width:260px}.pop h3{font-size:14px}.pop .dl{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 10px;font-size:12px;margin-top:8px}
.risultati{max-height:640px;overflow-y:auto;display:flex;flex-direction:column;gap:8px}.ris{border:1px solid var(--line);border-radius:6px;padding:10px;display:flex;gap:10px;cursor:pointer;background:#fff}.ris:hover{border-color:var(--acc)}.ris .dot{width:10px;height:10px;border-radius:50%;margin-top:5px;flex:0 0 10px}
/* auth / pubblico */
.auth{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--navy)}.auth .card{width:100%;max-width:440px;padding:28px}.auth .card.wide{max-width:820px}
.pub-head{background:var(--navy);color:#fff;padding:18px 0}.pub-wrap{max-width:1180px;margin:0 auto;padding:0 20px}.pub-head a{color:#fff;text-decoration:none}
.hero{background:linear-gradient(0deg,#fff,#fff);padding:26px 0;border-bottom:1px solid var(--line)}
@media (max-width:1100px){.g5{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(2,minmax(0,1fr))}.span3{grid-column:span 2}}
@media (max-width:820px){.app{flex-direction:column}.side{width:100%;flex:none;height:auto;position:relative;flex-direction:row;flex-wrap:wrap;padding:10px}.side .sez,.side .chi{display:none}.side .brand{padding:4px 8px;width:100%}.side a.nav{padding:7px 10px}
.main{padding:16px}.g2,.g3,.g4,.g5{grid-template-columns:minmax(0,1fr)}.span2,.span3{grid-column:auto}.f.w2{grid-column:auto}.searchbox input{width:130px}.mappa{height:420px}}
@media print{.side,.top .az,.no-print{display:none!important}.main{padding:0}.card{border:0}}
