:root{
  --paper:#FAFAF7; --card:#FFFFFF; --ink:#1B1A18; --ink2:#6F6A61; --line:#E8E4DB;
  --chipbg:#F2EFE8; --verde:#3E6257; --verdebg:#EDF2EF; --ambra:#A9762B; --ambrabg:#F7F0E2;
  --staroff:#C6C0B4;
  --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; --c-sopralluogo:#E67C73;
  --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);}
.ev.sopralluogo{border-color:var(--c-sopralluogo);}
.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;}

/* ── Rubrica: layout a due pannelli (fedeltà a rubrica-quadro-mockup-v0) ── */
.rlayout{display:grid; grid-template-columns:300px 1fr; gap:24px; align-items:start;}

.rside{background:var(--card); border:1px solid var(--line); border-radius:14px; box-shadow:var(--shadow); padding:16px 16px 14px;}
.rsearch{margin-bottom:10px;}
.rsearch input{width:100%; font-family:var(--sans); font-size:14px; padding:11px 14px; border:1px solid var(--line); border-radius:10px; background:var(--paper);}
.rchips{display:flex; gap:6px; flex-wrap:wrap; margin-bottom:10px;}
.rchip{font-family:var(--mono); font-size:11px; letter-spacing:.02em; border:1px solid var(--line); border-radius:999px; padding:5px 11px; color:var(--ink2); background:var(--card);}
.rchip.on{background:var(--ink); border-color:var(--ink); color:var(--paper);}
.rcount{font-size:11.5px; color:var(--ink2); margin-bottom:10px;}

.people{display:flex; flex-direction:column; gap:6px;}
.p{display:flex; align-items:center; gap:10px; width:100%; text-align:left; background:var(--card); border:1px solid var(--line); border-radius:10px; padding:10px 12px; transition:border-color .15s;}
.p:hover{border-color:#CFC9BC;}
.p.sel{border-color:var(--ink); box-shadow:var(--shadow);}
.p .who{flex:1; min-width:0;}
.p .nm{font-weight:600; font-size:13.5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.p .co{font-size:11.5px; color:var(--ink2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.p .badges{display:flex; gap:3px; flex-wrap:wrap; margin-top:3px;}
.dot{width:7px; height:7px; border-radius:50%; flex:none;}
.dot.grigio{background:var(--staroff);}
.dot.verde{background:var(--verde);}
.listnote{margin-top:12px; font-size:11.5px; color:var(--ink2); line-height:1.45;}

.rbadge{font-family:var(--mono); font-size:10.5px; background:var(--chipbg); border-radius:6px; padding:2px 7px; white-space:nowrap;}

.remptystate{font-size:11px; color:#A39D91; font-style:italic; padding:22px 4px; text-align:center;}
.rerror{font-size:12.5px; color:var(--ink2); text-align:center; padding:20px 4px;}
.rretry{margin-top:10px; border:1px solid var(--line); border-radius:8px; padding:6px 16px; font-size:12.5px; font-weight:600; color:var(--ink);}
.rretry:hover{background:var(--chipbg);}

/* ── Scheda persona (pannello destro) ── */
.detail{background:var(--card); border:1px solid var(--line); border-radius:14px; box-shadow:var(--shadow); overflow:hidden;}
.detail .remptystate{padding:60px 20px;}
.dhead{padding:22px 26px 18px; border-bottom:1px solid var(--line);}
.dhead h1{font-family:var(--serif); font-weight:500; font-size:26px; line-height:1.15;}
.dmeta{display:flex; gap:8px 16px; flex-wrap:wrap; margin-top:8px; font-size:12.5px; color:var(--ink2); align-items:center;}
.dbody{padding:18px 26px 24px;}

/* contatti estesi: testo pieno, click-to-copy, tre azioni */
.contatti{display:flex; flex-direction:column; gap:4px; margin-bottom:14px;}
.copiabile{display:inline-flex; align-items:center; gap:7px; font-size:13.5px; color:var(--ink); background:none; border:none; padding:3px 0; cursor:pointer; text-align:left;}
.copiabile:hover{color:var(--verde);}
.copiabile .ic{opacity:.5; font-size:12px;}
.azioni3{display:flex; gap:8px; flex-wrap:wrap; margin-bottom:6px;}
.azioni3 a{font-size:12.5px; font-weight:600; padding:7px 14px; border-radius:9px; border:1px solid var(--line); background:var(--card); display:inline-flex; align-items:center; gap:6px;}
.azioni3 a:hover{border-color:#CFC9BC;}
.azioni3 a.wa{border-color:#CDE8D5; background:var(--verdebg); color:var(--verde);}

.grp{margin-top:18px;}
.grp h3{font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink2); font-weight:600; margin-bottom:4px;}

.row{border-bottom:1px solid var(--line);}
.grp .row:last-child{border-bottom:none;}
.rowhead{display:flex; align-items:center; gap:12px; width:100%; text-align:left; padding:11px 0;}
.dim{width:112px; flex:none; font-weight:600; font-size:14px;}
.hint{flex:1; font-size:12px; color:var(--ink2); min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.stars{display:flex; gap:2px; flex:none;}
.st{font-size:19px; line-height:1; color:var(--staroff); padding:2px 1px; transition:transform .1s;}
.st.on{color:var(--ink);}
button.st:hover{transform:scale(1.15);}
.state{flex:none; font-size:10.5px; letter-spacing:.04em; padding:3px 9px; border-radius:999px; border:1px solid var(--line); color:var(--ink2); background:var(--paper); white-space:nowrap;}
.row.firmata .state{background:var(--verdebg); border-color:#CBDCD2; color:var(--verde); font-weight:600;}
.chev{flex:none; color:var(--staroff); font-size:11px; transition:transform .2s;}
.row.open .chev{transform:rotate(180deg);}

.drawer{max-height:0; overflow:hidden; transition:max-height .25s ease;}
.row.open .drawer{max-height:420px;}
.drawer-in{padding:2px 0 14px 112px;}
.sig{display:flex; gap:12px; align-items:baseline; padding:5px 0; font-size:13px;}
.sig .q{flex:1; min-width:0;}
.sig .src{flex:none; font-family:var(--mono); font-size:10.5px; color:var(--ink2); background:var(--chipbg); border-radius:5px; padding:2px 7px;}
.sig.empty{color:#9B958A; font-style:italic;}

/* firma per-riga (dentro il cassetto di una proposta) */
.vfirma{margin-top:8px; padding-top:10px; border-top:1px dashed var(--line);}
.vfirma label{display:block; font-size:11px; color:var(--ink2); margin-bottom:4px;}
.vfirma textarea{width:100%; font-family:var(--sans); font-size:13px; padding:8px 10px; border:1px solid var(--line); border-radius:8px; resize:vertical; min-height:44px; background:var(--paper); color:var(--ink);}
.vfirma-azioni{display:flex; gap:8px; align-items:center; margin-top:8px; flex-wrap:wrap;}
.vfirma-esito{font-size:12px; color:var(--ink2); margin-top:6px;}
.vfirma-esito.errore{color:#B23A3A;}

/* firma di gruppo — bottom nota (mockup) */
.nota{margin-top:22px; border:1px solid var(--line); border-radius:11px; padding:14px; background:var(--paper);}
.nota label{display:block; font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--ink2); font-weight:600; margin-bottom:8px;}
.nota textarea{width:100%; min-height:56px; resize:vertical; border:1px solid var(--line); border-radius:8px; padding:10px 12px; font:inherit; font-size:13.5px; background:var(--card); color:var(--ink);}
.nota textarea::placeholder{color:#A39D91;}
.actions{display:flex; gap:10px; margin-top:12px; flex-wrap:wrap; align-items:center;}
.btn{font-size:13px; font-weight:600; padding:9px 16px; border-radius:9px; border:1px solid var(--line); background:var(--card);}
.btn.primary{background:var(--ink); border-color:var(--ink); color:var(--paper);}
.btn:disabled{opacity:.4; cursor:not-allowed;}

.legend{margin-top:20px; font-size:12px; color:var(--ink2); text-align:center;}
.legend b{color:var(--ink); font-weight:600;}

.toast{position:fixed; left:50%; bottom:26px; transform:translateX(-50%) translateY(20px); background:var(--ink); color:var(--paper); font-size:12.5px; padding:9px 16px; border-radius:999px; opacity:0; pointer-events:none; transition:all .25s; z-index:30;}
.toast.show{opacity:1; transform:translateX(-50%) translateY(0);}

@media (max-width:780px){
  .rlayout{grid-template-columns:1fr; gap:14px;}
  .rside{padding:12px 12px 10px; min-width:0;}
  .people{flex-direction:row; overflow-x:auto; padding-bottom:6px; gap:8px; min-width:0;}
  .p{min-width:190px; flex:none;}
  .listnote{display:none;}
  .hint{display:none;}
  .dim{width:96px;}
  .drawer-in{padding-left:0;}
  .dhead, .dbody{padding-left:16px; padding-right:16px;}
}

/* ── 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;} }
