:root{
  --bg:#F0EEE9; --surface:#FAF9F6; --sunk:#E7E4DC; --line:#D8D4C9; --line2:#B9B4A7;
  --ink:#1E2125; --muted:#5B6068; --btn:#1E2125; --btn-on:#FAF9F6; --focus:#0F4C81;
  --danger:#A3361A; --ok:#2F6B2C; --wkend:#F4F2EC;
  --shadow:0 1px 2px rgba(30,33,37,.06), 0 8px 24px rgba(30,33,37,.06);
  --nat:#0F4C81; --nat-t:#D7E3EF;
  --int:#C4471F; --int-t:#F6DED3;
  --rec:#8C5A45; --rec-t:#EDDDD5;
  --vac:#3F7D3A; --vac-t:#DDEBD5;
  --acu:#5F4B8B; --acu-t:#E4DEEF; --acu-t2:#EFEBF6;
  --fes:#8A6A00; --fes-t:#F3E6BF; --hol:#A8324F;
  --des:#5F6B7A; --des-t:#E4E7EB;
  --on:#FFFFFF;
  color-scheme:light;
}
html[data-theme="dark"]{
  --bg:#141518; --surface:#1E2024; --sunk:#2A2D32; --line:#33363C; --line2:#52565E;
  --ink:#ECEAE4; --muted:#A5A9B0; --btn:#ECEAE4; --btn-on:#141518; --focus:#9CC2F0;
  --danger:#FF9A7A; --ok:#9BD08F; --wkend:#1A1C1F;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.35);
  --nat:#7FA8DC; --nat-t:#1F2C3F;
  --int:#F08A5D; --int-t:#3B2A22;
  --rec:#C9937C; --rec-t:#35292A;
  --vac:#8CC083; --vac-t:#25321F;
  --acu:#B4A3E0; --acu-t:#2D2840; --acu-t2:#363050;
  --fes:#E0B84A; --fes-t:#3A3016; --hol:#F28BA6;
  --des:#A3ADBA; --des-t:#2B2F35;
  --on:#14151A;
  color-scheme:dark;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:'Geist',system-ui,-apple-system,'Segoe UI',sans-serif;font-size:15px;line-height:1.4;-webkit-tap-highlight-color:transparent}
button,input,select,textarea{font-family:inherit;touch-action:manipulation}
.disp{font-family:'Bricolage Grotesque','Geist',system-ui,sans-serif}
.mono{font-family:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,monospace}
h1,h2,p{margin:0}

.app{max-width:1360px;margin:0 auto;padding:calc(28px + env(safe-area-inset-top)) calc(28px + env(safe-area-inset-right)) calc(28px + env(safe-area-inset-bottom)) calc(28px + env(safe-area-inset-left));display:flex;flex-direction:column;gap:20px}

.card{background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:18px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:14px;min-width:0}
.eyebrow{font-family:'Geist Mono',ui-monospace,monospace;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:500}
.big{font-family:'Bricolage Grotesque','Geist',sans-serif;font-size:52px;font-weight:600;line-height:1;letter-spacing:-0.03em}
.sub{font-size:13px;color:var(--muted)}
.note{font-size:12px;color:var(--muted);line-height:1.5}

/* Botones y campos */
.btn,.btn-o{display:flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 18px;border-radius:999px;font-size:14px;font-weight:500;cursor:pointer;text-decoration:none;white-space:nowrap}
.btn{border:none;background:var(--btn);color:var(--btn-on)}
.btn:hover{filter:brightness(1.12)}
.btn-o{border:1px solid var(--line2);background:transparent;color:var(--ink)}
.btn-o:hover{background:var(--sunk)}
.btn-d{border-color:var(--danger);color:var(--danger)}
.btn-ok{background:var(--vac);color:var(--on)}
.icon{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;border:1px solid var(--line2);border-radius:50%;background:transparent;color:var(--ink);cursor:pointer;padding:0}
.icon:hover{background:var(--sunk)}
.field{min-height:44px;padding:0 12px;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--ink);font-size:16px;width:100%}
textarea.field{padding:10px 12px;font-size:12px}
.lab{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:500;color:var(--muted);min-width:0}
.lab.inline{flex-direction:row;align-items:center;gap:10px}
.rowflex{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}
.rowflex>.lab{flex:1 1 150px}
.seg{display:flex;gap:2px;padding:3px;background:var(--sunk);border-radius:999px}
.segb{min-height:40px;padding:0 16px;border:none;border-radius:999px;background:transparent;color:var(--muted);font-size:14px;font-weight:500;cursor:pointer;white-space:nowrap}
.segb.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.18)}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid var(--focus);outline-offset:2px}

/* Cabecera */
.head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px}
.head h1{margin-top:4px;font-size:36px;font-weight:600;letter-spacing:-0.02em;line-height:1.05}
.head-r{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.userpill{display:flex;align-items:center;gap:8px;min-height:44px;padding:0 16px 0 6px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:14px;font-weight:500;max-width:220px}
.userpill span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--btn);color:var(--btn-on);display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:600;flex:none}

/* KPIs */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:12px}
.kpis .card{gap:12px}

/* Layout */
.layout{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start}
.main{flex:999 1 560px;min-width:0;display:flex;flex-direction:column;gap:16px}
.side{flex:1 1 340px;min-width:0;display:flex;flex-direction:column;gap:16px}

/* Tarjetas de tipo */
.sws{display:flex;flex-wrap:wrap;gap:8px}
.sw{flex:1 1 76px;max-width:132px;display:flex;flex-direction:column;padding:0;border-radius:14px;overflow:hidden;background:var(--surface);cursor:pointer;text-align:left;color:var(--ink);border:2px solid var(--line)}
.sw.on{border-color:var(--ink);box-shadow:0 0 0 3px var(--surface),0 0 0 5px var(--ink)}
.sw-b{display:flex;align-items:center;justify-content:center;height:44px;font-family:'Bricolage Grotesque','Geist',sans-serif;font-size:22px;font-weight:600;color:var(--on)}
.sw-b.erase{background:var(--sunk);color:var(--ink);font-weight:500;font-size:24px}
.sw-t{display:flex;flex-direction:column;gap:2px;padding:8px 10px 10px}
.sw-t b{font-size:12px;font-weight:500;line-height:1.25}
.sw-t i{font-style:normal;font-size:12px;color:var(--muted)}
.c-nat{background:var(--nat)} .c-int{background:var(--int)} .c-rec{background:var(--rec)} .c-vac{background:var(--vac)} .c-acu{background:var(--acu)} .c-fes{background:var(--fes)} .c-des{background:var(--des)}

/* Calendario */
.cal-h{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}
.cal-h h2{font-size:28px;font-weight:600;letter-spacing:-0.02em}
.tools{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:10px}
.tools .l{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px}
.tools .nav{display:flex;gap:8px;align-items:center}
.g7{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.wh{display:contents}
.wh div{text-align:center;padding:4px 0}
.dcell{display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;gap:6px;min-height:80px;padding:8px;min-width:0;border-radius:14px;cursor:pointer;text-align:left;color:var(--ink);background:var(--surface);border:1px solid var(--line);font:inherit}
.wk .dcell{min-height:150px}
.dcell.we{background:var(--wkend)}
.dcell.t-nat{background:var(--nat-t);border:2px solid var(--nat)}
.dcell.t-int{background:var(--int-t);border:2px solid var(--int)}
.dcell.t-rec{background:var(--rec-t);border:2px solid var(--rec)}
.dcell.t-vac{background:var(--vac-t);border:2px solid var(--vac)}
.dcell.t-acu{background:repeating-linear-gradient(135deg,var(--acu-t) 0,var(--acu-t) 6px,var(--acu-t2) 6px,var(--acu-t2) 12px);border:2px solid var(--acu)}
.dcell.t-fes{background:var(--fes-t);border:2px solid var(--fes)}
.dcell.t-des{background:var(--des-t);border:2px solid var(--des)}
.dcell,.mini{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.dcell.drag,.mini.drag{outline:3px dashed var(--ink);outline-offset:-3px}
.rband{position:fixed;z-index:50;pointer-events:none;border:2px solid var(--focus);background:color-mix(in srgb,var(--focus) 16%,transparent);border-radius:6px}
.dcell.hol .dn{color:var(--hol);font-weight:600}
.dcell.hol.today .dn{color:var(--bg)}
.dcell.sel{outline:3px solid var(--ink);outline-offset:-3px}
.chips{display:flex;flex-wrap:wrap;gap:4px}
.dhol{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:500;color:var(--hol);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dhol::before{content:'';flex:none;width:6px;height:6px;border-radius:50%;background:var(--hol)}
.dn{font-family:'Geist Mono',ui-monospace,monospace;font-size:13px;font-weight:500}
.dcell.we .dn{color:var(--muted)}
.dcell.today .dn{background:var(--ink);color:var(--bg);padding:3px 8px;border-radius:999px;font-weight:600}
.dc-b{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0;max-width:100%}
.chip{font-family:'Geist Mono',ui-monospace,monospace;font-size:12px;font-weight:600;line-height:1;padding:4px 7px;border-radius:6px;color:var(--on)}
.c-none{background:var(--muted)}
.dproj{font-size:11px;font-weight:500;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.yr{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(210px,100%),1fr));gap:16px}
.yr-m{display:flex;flex-direction:column;gap:6px}
.yr-t{align-self:flex-start;min-height:36px;padding:0 2px;border:none;background:none;color:var(--ink);font-size:16px;font-weight:600;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.mg{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
.mini{aspect-ratio:1;min-height:28px;padding:0;border:none;border-radius:8px;font-size:11px;font-weight:500;cursor:pointer;background:var(--bg);color:var(--ink)}
.mini.we{background:var(--sunk);color:var(--muted)}
.mini.m-nat{background:var(--nat);color:var(--on)} .mini.m-int{background:var(--int);color:var(--on)} .mini.m-rec{background:var(--rec);color:var(--on)} .mini.m-vac{background:var(--vac);color:var(--on)} .mini.m-acu{background:var(--acu);color:var(--on)}
.mini{position:relative}
.mini.m-fes{background:var(--fes);color:var(--on)}
.mini.m-des{background:var(--des);color:var(--on)}
.mini.f{box-shadow:inset 0 0 0 3px var(--fes)}
.mini.hol::after{content:'';position:absolute;top:3px;right:3px;width:5px;height:5px;border-radius:50%;background:var(--hol);box-shadow:0 0 0 1px var(--surface)}
.mini.hol:not([class*=' m-']){color:var(--hol);font-weight:700}
.mini.sel{outline:3px solid var(--ink);outline-offset:1px}
.mini.today{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--ink)}
.lrow{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-height:52px;padding:6px 14px;border:1px solid var(--line);border-radius:14px;background:var(--bg);color:var(--ink);font-size:14px;text-align:left;cursor:pointer;width:100%}
.list{display:flex;flex-direction:column;gap:6px}

/* Barras y filas */
.bar{height:10px;background:var(--sunk);border-radius:5px;overflow:hidden}
.bar>div{height:100%;border-radius:5px}
.prog{display:flex;flex-direction:column;gap:8px}
.prog .t{display:flex;justify-content:space-between;align-items:baseline;font-size:14px}
.row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}
.row:last-child{border-bottom:none}
.row b{font-family:'Geist Mono',ui-monospace,monospace;font-weight:600}
.warn{font-size:14px;font-weight:500;color:var(--danger)}
.okmsg{font-size:14px;font-weight:500;color:var(--ok)}
.selpanel{border:2px solid var(--ink)}
details summary{min-height:36px;cursor:pointer;font-weight:500;font-size:14px}
.stack{display:flex;flex-direction:column;gap:10px}
.rules{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(120px,100%),1fr));gap:10px}
.chk{display:flex;align-items:center;gap:10px;min-height:44px;font-size:14px;cursor:pointer}
.chk input{width:22px;height:22px;accent-color:var(--ink);flex:none}
.holname{display:flex;align-items:baseline;gap:10px;min-height:44px;padding:0;border:none;background:none;color:var(--ink);font-size:14px;text-align:left;cursor:pointer;min-width:0}
.holname .mono{color:var(--hol);font-weight:600;flex:none;min-width:48px}
.hint{font-size:13px;color:var(--muted);line-height:1.5;padding:0 4px}

/* Navegación inferior (solo móvil) */
.tabbar{display:none}

@media (max-width: 760px){
  .app{padding:calc(14px + env(safe-area-inset-top)) calc(14px + env(safe-area-inset-right)) calc(92px + env(safe-area-inset-bottom)) calc(14px + env(safe-area-inset-left));gap:14px}
  .head h1{font-size:28px}
  .head-r{width:100%;justify-content:space-between}
  .userpill{flex:1 1 auto}
  .card{padding:14px;border-radius:18px}
  .big{font-size:38px}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .kpis .card{padding:12px;gap:8px}
  .kpis .sub{font-size:12px}
  body[data-tab="cal"] .kpis .sub{display:none}
  body[data-tab="cal"] .kpis .big{font-size:30px}
  body[data-tab="cal"] .kpis .card{padding:10px 12px;gap:6px}
  body[data-tab="cal"] .kpis .eyebrow{font-size:11px;letter-spacing:.04em}
  .cal-h h2{font-size:24px}
  .cal-h .seg{width:100%}
  .segb{flex:1 1 0;padding:0 6px;font-size:13px}
  .tools .l,.tools .nav{width:100%}
  .tools .nav{justify-content:space-between}
  .tools .lab{flex:1 1 100%}
  .g7{gap:4px}
  .mes .dcell{min-height:58px;padding:5px;border-radius:10px}
  .mes .dn{font-size:12px}
  .wk{grid-template-columns:minmax(0,1fr)}
  .wh{display:none}
  .wk .dcell{min-height:58px;flex-direction:row;align-items:center;justify-content:space-between;gap:10px}
  .sws{flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x proximity;padding:4px 4px 8px;margin:0 -4px}
  .sw{flex:0 0 108px;scroll-snap-align:start}
  .lab.inline{flex-direction:column;align-items:stretch;gap:6px}
  .side{display:contents}
  /* Pestañas: solo se muestra la sección activa */
  [data-tabsec]{display:none !important}
  body[data-tab="cal"] [data-tabsec~="cal"],
  body[data-tab="res"] [data-tabsec~="res"],
  body[data-tab="set"] [data-tabsec~="set"]{display:flex !important}
  body[data-tab="cal"] .kpis[data-tabsec~="cal"],
  body[data-tab="res"] .kpis[data-tabsec~="res"]{display:grid !important}
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:10;gap:4px;padding:8px 12px calc(8px + env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line);box-shadow:0 -6px 20px rgba(0,0,0,.08)}
  .tab{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:52px;border:none;border-radius:14px;background:transparent;color:var(--muted);font-size:12px;font-weight:500;cursor:pointer}
  .tab.on{background:var(--sunk);color:var(--ink)}
}
@media (prefers-reduced-motion: reduce){*{transition:none !important;animation:none !important}}

/* Proyectos */
.prow{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;padding:10px 0;border-bottom:1px solid var(--line)}
.prow:last-child{border-bottom:none}
.prow.edit{flex-direction:column;align-items:stretch}
.pmain{min-width:0;flex:1 1 140px}
.pname{font-weight:500;font-size:14px;overflow:hidden;text-overflow:ellipsis}
.pill-a{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;background:var(--btn);color:var(--btn-on);font-size:11px;font-weight:500;vertical-align:1px}
.pbtns{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.btn-o.sm,.btn.sm{min-height:40px;padding:0 12px;font-size:13px}
.icon.sm{min-width:40px;min-height:40px}
/* Editor de día */
.modal{position:fixed;inset:0;z-index:60;background:rgba(10,12,16,.5);display:flex;align-items:center;justify-content:center;padding:16px}
.dlg{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);width:100%;max-width:460px;max-height:calc(100vh - 32px);overflow:auto;padding:18px;display:flex;flex-direction:column;gap:14px;outline:none}
.dlg-h{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.dlg-h h2{font-size:22px;font-weight:600}
.seg.wrap{flex-wrap:wrap;border-radius:16px;height:auto}
.seg.wrap .segb{flex:1 1 30%}
@media (max-width:760px){.modal{align-items:flex-end;padding:0}.dlg{max-width:none;border-radius:22px 22px 0 0;padding-bottom:calc(18px + env(safe-area-inset-bottom))}}
/* Nube */
.syncpill{display:flex;align-items:center;gap:8px;min-height:44px;padding:0 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:13px;font-weight:500;max-width:220px;white-space:nowrap}
.syncpill span{overflow:hidden;text-overflow:ellipsis}
.syncpill i{width:9px;height:9px;border-radius:50%;background:var(--muted);flex:none}
.syncpill[data-s="ok"] i{background:var(--ok)}
.syncpill[data-s="sync"] i{background:var(--focus)}
.syncpill[data-s="err"] i{background:var(--danger)}
.syncpill[data-s="offline"] i{background:var(--fes)}
.syncstat{font-size:13px;font-weight:500;color:var(--muted)}
.syncstat[data-s="ok"]{color:var(--ok)}
.syncstat[data-s="err"]{color:var(--danger)}
