:root{
  --paper:#FAFAF7; --card:#FFFFFF; --ink:#1B1A18; --ink2:#6F6A61; --line:#E8E4DB;
  --chipbg:#F2EFE8; --verde:#3E6257; --verdebg:#EDF2EF; --ambra:#A9762B; --ambrabg:#F7F0E2;
  --shadow:0 1px 2px rgba(27,26,24,.04), 0 8px 28px rgba(27,26,24,.06);
  --c-meeting:#C62828; --c-partners:#7986CB; --c-ddl:#8E24AA; --c-supplier:#616161;
  --serif:"Fraunces", Georgia, serif; --sans:"Instrument Sans", system-ui, -apple-system, sans-serif;
  --mono:"JetBrains Mono", ui-monospace, monospace;
}
*{box-sizing:border-box; margin:0; padding:0;}
body{background:var(--paper); color:var(--ink); font-family:var(--sans); font-size:15px; line-height:1.5; padding:28px 20px 48px;}
button{font:inherit; color:inherit; background:none; border:none; cursor:pointer;}
button:disabled{cursor:not-allowed; opacity:.35;}
button:focus-visible{outline:2px solid var(--verde); outline-offset:2px; border-radius:4px;}
input:focus-visible{outline:2px solid var(--verde); outline-offset:2px;}

.frame{max-width:1080px; margin:0 auto;}

/* ── Barra di stanza ── */
.topbar{display:flex; align-items:baseline; gap:20px; flex-wrap:wrap; padding-bottom:14px; border-bottom:1px solid var(--line); margin-bottom:22px;}
.brand{font-family:var(--serif); font-size:15px; letter-spacing:.14em;}
.brand .sep{color:var(--ink2); margin:0 4px;}
.tabs{display:flex; gap:18px; font-size:13.5px; color:var(--ink2); align-items:baseline;}
.tabs .on{color:var(--ink); font-weight:600; border-bottom:2px solid var(--ink); padding-bottom:2px;}
.lock{font-size:10px; opacity:.55; margin-left:3px;}

.pagehead{display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:18px;}
.pagehead h1{font-family:var(--serif); font-weight:500; font-size:24px;}
.team{font-size:10.5px; font-weight:600; letter-spacing:.06em; color:var(--verde); background:var(--verdebg); border:1px solid #CBDCD2; border-radius:999px; padding:3px 10px;}
.pagehead .note{flex-basis:100%; font-size:12px; color:var(--ink2);}

.panel{background:var(--card); border:1px solid var(--line); border-radius:14px; box-shadow:var(--shadow); padding:18px 20px; margin-bottom:22px;}
.panel h2{font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink2); font-weight:600;}

/* ── Calendario ── */
.calhead{display:flex; align-items:center; gap:14px; margin:10px 0 14px;}
.navbtn{width:30px; height:30px; border:1px solid var(--line); border-radius:8px; font-size:14px; line-height:1;}
.weeklabel{font-family:var(--serif); font-size:17px; min-width:200px;}
.calhead .hint{margin-left:auto; font-size:11.5px; color:var(--ink2);}

.week{display:grid; grid-template-columns:repeat(7,1fr); gap:8px;}
.day{border:1px solid var(--line); border-radius:10px; padding:8px; min-height:118px; background:var(--paper);}
.day.today{border-color:var(--ink); background:var(--card); box-shadow:var(--shadow);}
.day .dh{display:flex; align-items:baseline; gap:6px; margin-bottom:7px;}
.day .dn{font-size:10.5px; text-transform:uppercase; letter-spacing:.08em; color:var(--ink2); font-weight:600;}
.day .dd{font-family:var(--serif); font-size:16px;}
.day.today .oggi{font-size:9px; font-weight:600; letter-spacing:.08em; color:var(--verde); background:var(--verdebg); border-radius:999px; padding:1px 6px; margin-left:auto;}
.ev{border-left:3px solid var(--ink); background:var(--card); border-radius:6px; padding:5px 7px; margin-bottom:6px; box-shadow:0 1px 2px rgba(27,26,24,.05);}
.ev .t{font-family:var(--mono); font-size:10px; color:var(--ink2);}
.ev .n{font-size:12px; font-weight:500; line-height:1.3;}
.ev.meeting{border-color:var(--c-meeting);} .ev.partners{border-color:var(--c-partners);}
.ev.ddl{border-color:var(--c-ddl);} .ev.supplier{border-color:var(--c-supplier);}
.emptyday{font-size:11px; color:#A39D91; font-style:italic;}

.legend{display:flex; gap:14px; flex-wrap:wrap; margin-top:12px; font-size:11.5px; color:var(--ink2);}
.legend span{display:flex; align-items:center; gap:6px;}
.swatch{width:9px; height:9px; border-radius:50%; display:inline-block;}
.privnote{margin-top:8px; font-size:11.5px; color:var(--ink2);}

/* ── Tabella progetti ── */
table{width:100%; border-collapse:collapse; margin-top:12px; font-size:13.5px;}
th{text-align:left; font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--ink2); font-weight:600; padding:8px 10px; border-bottom:1px solid var(--line);}
td{padding:10px; border-bottom:1px solid var(--line); vertical-align:middle;}
tr:last-child td{border-bottom:none;}
.code{font-family:var(--mono); font-size:12px; font-weight:500;}
.proj .cl{color:var(--ink2); font-size:12px;}
.rev{font-family:var(--mono); font-size:12px; background:var(--chipbg); border-radius:6px; padding:2px 8px; white-space:nowrap;}
.pp{display:flex; gap:4px; flex-wrap:wrap;}
.av{position:relative; width:24px; height:24px; border-radius:50%; background:var(--ink); color:var(--paper); font-size:9.5px; font-weight:600; display:flex; align-items:center; justify-content:center; letter-spacing:.02em; cursor:pointer;}
.av.p{background:transparent; border:1.5px solid var(--ink); color:var(--ink);}
.av::after{content:attr(data-name); position:absolute; bottom:calc(100% + 7px); left:50%; transform:translateX(-50%); background:var(--ink); color:var(--paper); font-size:11px; font-weight:500; padding:4px 9px; border-radius:6px; white-space:nowrap; opacity:0; pointer-events:none; transition:opacity .12s; z-index:5;}
.av:hover::after, .av:focus-visible::after, .av.show::after{opacity:1;}
.stato{font-size:12px; color:var(--ink2);}

.foot{margin-top:4px; font-family:var(--serif); font-style:italic; font-size:13px; color:var(--ink2); text-align:center;}

/* ── Portiere (gate a codice) ── */
.gate{max-width:380px; margin:80px auto; text-align:center;}
.gate h1{font-family:var(--serif); font-weight:500; font-size:22px; margin-bottom:8px;}
.gate p{font-size:13px; color:var(--ink2); margin-bottom:20px;}
.gate input{width:100%; font-family:var(--mono); font-size:14px; padding:10px 12px; border:1px solid var(--line); border-radius:10px; background:var(--card);}
.gate button{margin-top:12px; width:100%; padding:10px 12px; border-radius:10px; background:var(--ink); color:var(--paper); font-weight:600; font-size:13.5px;}
.gate .errore{margin-top:10px; font-size:12.5px; color:#B23A3A; min-height:1.2em;}
.hidden{display:none !important;}

@media (max-width:820px){
  body{padding:18px 12px 40px;}
  .week{grid-template-columns:1fr; gap:6px;}
  .day{min-height:0;}
  .day:not(.hasev):not(.today){display:flex; align-items:baseline; gap:10px; padding:6px 8px;}
  .day:not(.hasev):not(.today) .dh{margin-bottom:0;}
  table, thead, tbody, tr{display:block;}
  thead{display:none;}
  tr{border:1px solid var(--line); border-radius:10px; margin-bottom:8px; padding:6px 4px;}
  td{display:block; border:none; padding:4px 10px;}
}
@media (prefers-reduced-motion:reduce){ *{transition:none !important;} }
