:root{--bg:#f3f5f7;--panel:#fff;--ink:#17212b;--mute:#5d6b79;--line:#dfe4ea;--accent:#2b50e6;--onaccent:#fff;--today:#e6eeff;--ok:#2f9e44;--bad:#c92a2a;--warnc:#b86e00;color-scheme:light}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--bg:#12181f;--panel:#1a222b;--ink:#e8edf2;--mute:#94a3b3;--line:#2b3641;--accent:#8aa2ff;--onaccent:#0d1420;--today:#1f2b45;--ok:#51cf66;--bad:#ff6b6b;--warnc:#ffa94d;color-scheme:dark}}
:root[data-theme="dark"]{--bg:#12181f;--panel:#1a222b;--ink:#e8edf2;--mute:#94a3b3;--line:#2b3641;--accent:#8aa2ff;--onaccent:#0d1420;--today:#1f2b45;--ok:#51cf66;--bad:#ff6b6b;--warnc:#ffa94d;color-scheme:dark}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);font:400 15px/1.4 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-tap-highlight-color:transparent}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
button:disabled{cursor:default;opacity:.45}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
a.btn{text-decoration:none;display:inline-flex;align-items:center}

/* login */
.login{min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:16px}
.login .card{width:min(380px,100%);background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:24px;display:flex;flex-direction:column}
.login .h1{margin-bottom:8px}
.login button{margin-top:8px;padding:10px}

#app{padding:16px 20px;max-width:none}
.top{display:flex;flex-direction:column;gap:10px;margin-bottom:12px;position:sticky;top:0;z-index:30;background:var(--bg);padding:8px 0;box-shadow:0 1px 0 var(--line)}
.h1{font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.15}
.sub{color:var(--mute);font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:28px}
.sub::first-letter{text-transform:uppercase}
.bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.bar .grow{flex:1}
.btn{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:7px 12px;line-height:1.3}
.btn:hover:not(:disabled){border-color:var(--mute)}
.btn.icon{width:38px;padding:7px 0;text-align:center}
.primary{background:var(--accent);border-color:var(--accent);color:var(--onaccent);font-weight:500}
.danger{color:var(--bad)}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--panel)}
.seg button{border:0;background:none;padding:7px 0;width:84px;text-align:center}
.seg button[aria-pressed="true"]{background:var(--accent);color:var(--onaccent)}
.syncst{font-size:13px;color:var(--mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}
.syncst.ok{color:var(--ok)}
.syncst.err{color:var(--bad)}
.syncst.dirty{color:var(--warnc)}

.tmwrap{position:relative}
.tmenu{width:max-content;position:absolute;left:0;top:calc(100% + 4px);z-index:40;min-width:260px;max-width:92vw;max-height:70vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.25);padding:6px;display:flex;flex-direction:column;gap:4px}
.tmenu[hidden]{display:none}
.tmenu .tmi{width:100%;justify-content:flex-start;text-align:left;white-space:nowrap}
.tmenu .tall{border:0;background:none;color:var(--accent);text-align:left;padding:6px 8px;font-weight:500}
.mchip{display:inline-flex;gap:7px;align-items:center;border:1px solid var(--line);background:var(--panel);border-radius:999px;padding:5px 12px 5px 8px}
.mchip i,.dot{width:10px;height:10px;border-radius:50%;background:var(--c);display:inline-block;flex:none}
.mchip[aria-pressed="false"]{opacity:.45;text-decoration:line-through}

.scroll{overflow-x:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px}
.empty{padding:40px 16px;text-align:center;color:var(--mute)}
.empty .btn{margin-left:8px}

/* semana / mês */
.chip{--bgc:color-mix(in srgb,var(--c) 16%,var(--panel));display:block;width:100%;text-align:left;background:var(--bgc);border:0;border-left:3px solid var(--c);border-radius:5px;padding:3px 6px;font-size:13px;line-height:1.3;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;user-select:none;-webkit-user-select:none}
.chip b{font-weight:700;margin-right:4px}
.chipgrip{cursor:grab;touch-action:none;user-select:none;color:var(--mute);margin-right:5px;padding:2px 3px}
.chip.chip-done{border-left-color:var(--ok)}
.chip.chip-cancel{opacity:.55;text-decoration:line-through}
.week{display:grid;grid-template-columns:repeat(7,minmax(130px,1fr));min-width:910px}
.wcol{border-left:1px solid var(--line);padding:8px;min-height:340px;display:flex;flex-direction:column;gap:5px}
.wcol:first-child{border-left:0}
.today{background:var(--today)}
.whead,.mhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.dn{background:none;border:0;padding:2px 4px;font-weight:700;text-transform:capitalize;border-radius:5px}
.dn:hover{text-decoration:underline}
.plus{width:24px;height:24px;border-radius:6px;border:1px solid var(--line);background:var(--panel);line-height:1;padding:0}
.month{display:grid;grid-template-columns:repeat(7,minmax(96px,1fr));min-width:690px}
.mlab{padding:8px;color:var(--mute);font-size:13px;border-bottom:1px solid var(--line);text-transform:capitalize}
.cell{border-left:1px solid var(--line);border-bottom:1px solid var(--line);padding:6px;min-height:104px;display:flex;flex-direction:column;gap:3px;min-width:0}
.cell.out{opacity:.5}
.more{background:none;border:0;color:var(--mute);font-size:12px;text-align:left;padding:1px 4px}

/* dia */
.day{display:grid}
.day>*{border-left:1px solid var(--line);margin-left:-1px}
.colhead{border-bottom:1px solid var(--line);padding:8px 10px;background:var(--panel);display:flex;gap:7px;align-items:flex-start;min-width:0;min-height:72px;cursor:grab;touch-action:pan-x pan-y;user-select:none;-webkit-user-select:none}
.colhead .htxt{flex:1 1 auto;min-width:0}
.colhead .hname{display:flex;gap:8px;align-items:flex-start;line-height:1.25;font-size:18px;font-weight:800;padding-top:1px;overflow-wrap:anywhere}
.colhead .hname::before{content:"";flex:0 0 12px;height:12px;margin-top:6px;border-radius:50%;background:var(--c)}
.colhead .hsub{display:flex;flex-wrap:wrap;gap:5px;margin:5px 0 0 20px}
.colhead .hact{margin-left:auto;display:flex;align-items:center;gap:6px;flex-shrink:0}
.colhead .plusb{width:28px;height:28px;font-size:18px;background:var(--accent);color:var(--onaccent);border-color:transparent}
.colhead .tgrip{opacity:.45;font-size:15px;line-height:1;padding:2px 4px;touch-action:none;cursor:grab}
.colhead .osmenu{white-space:nowrap}
.colhead.dropL,.col.dropL{box-shadow:inset 4px 0 0 var(--accent)}
.colhead.dropR,.col.dropR{box-shadow:inset -4px 0 0 var(--accent)}
.colhead.dragging{opacity:.5}
.col{padding:10px;display:flex;flex-direction:column;gap:8px;min-height:340px;min-width:0}
.col .empty{padding:16px 4px}
.col.off{background-image:repeating-linear-gradient(135deg,transparent 0 10px,color-mix(in srgb,var(--mute) 9%,transparent) 10px 20px)}
.os{display:grid;flex:none;grid-template-columns:auto auto 1fr auto;grid-template-rows:auto minmax(0,1fr);column-gap:6px;row-gap:4px;align-items:center;min-height:132px;background:color-mix(in srgb,var(--c) 14%,var(--panel));border-left:4px solid var(--c);border-radius:8px;padding:8px 8px 10px 6px}
.os>.grip{grid-area:1/1}
.os>.n{grid-area:1/2;font-size:18px;font-weight:700;line-height:1}
.os>.kw{grid-area:1/4}
.os>.body{grid-area:2/1/3/-1;align-self:start;min-width:0;text-align:left;padding:0 0 0 2px}
.os .body b{display:block;font-weight:600;line-height:1.3;overflow-wrap:anywhere}
.os .meta{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin-top:4px;min-width:0}
.os .osnote{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin-top:4px;font-size:12.5px;line-height:1.4;color:var(--mute);overflow-wrap:anywhere;white-space:pre-line}
.os-done{background:color-mix(in srgb,var(--ok) 20%,var(--panel))!important;border-left-color:var(--ok)!important}
.os-done .n{color:var(--ok)}
.os-cancel{opacity:.6}
.os-cancel .body b{text-decoration:line-through}
.os.dragging{opacity:.35}
.tag{font-size:11.5px;font-weight:600;padding:1px 6px;border-radius:4px;display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tag.done{color:var(--ok);background:color-mix(in srgb,var(--ok) 16%,transparent)}
.tag.cancel{color:var(--mute);background:color-mix(in srgb,var(--mute) 16%,transparent)}
.tag.sh{background:color-mix(in srgb,var(--c,#888) 14%,transparent);border:1px dashed color-mix(in srgb,var(--c,#888) 55%,transparent)}
.tag.lg{background:color-mix(in srgb,var(--mute) 18%,transparent)}
.tag.pp{background:color-mix(in srgb,var(--c,#888) 22%,transparent);border:1px solid color-mix(in srgb,var(--c,#888) 45%,transparent)}
.kw{position:relative}
.kebab{width:26px;height:26px;border-radius:6px;border:1px solid var(--line);background:var(--panel);line-height:1;padding:0;font-weight:700}
.osmenu{position:absolute;right:0;top:30px;z-index:20;background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:0 6px 18px rgba(0,0,0,.25);min-width:180px;overflow:hidden}
.osmenu[hidden]{display:none}
.osmenu.up{top:auto;bottom:30px}
.osmenu button,.osmenu a{display:block;width:100%;text-align:left;background:none;border:0;padding:8px 12px;font-size:13.5px;color:var(--ink);text-decoration:none}
.osmenu button:hover,.osmenu a:hover{background:var(--bg)}
.osmenu .dz{color:var(--bad)}
.grip{cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;color:var(--mute);font-size:18px;line-height:1;align-self:center;padding:4px 2px}
.ghost{position:fixed;z-index:50;pointer-events:none;box-shadow:0 8px 24px rgba(0,0,0,.3);margin:0;cursor:grabbing}
.os.ghost.fg{display:flex;min-height:0;gap:8px;align-items:center;padding:8px}
.col.over,.wcol.over,.cell.over{outline:2px dashed var(--accent);outline-offset:-4px;background:color-mix(in srgb,var(--accent) 8%,transparent)}
.plate{font-size:11px;letter-spacing:.06em;border:1px solid var(--line);border-radius:4px;padding:0 5px;color:var(--mute);background:var(--bg);font-weight:500}

/* folgas e informações */
.folga{--lc:#15aabf}.ferias{--lc:#f08c00}.plantao{--lc:#7048e8}.sm{--lc:#f08c00}
.lvchip{display:block;width:100%;text-align:left;border:0;border-left:3px solid var(--lc,#868e96);background:color-mix(in srgb,var(--lc,#868e96) 20%,var(--panel));color:var(--ink);border-radius:5px;padding:3px 6px;font-size:12.5px;line-height:1.3;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.lvbadge{font-size:11px;font-weight:600;padding:1px 8px;border-radius:999px;background:color-mix(in srgb,var(--lc) 28%,transparent);white-space:nowrap}
.lvblock{display:flex;flex-direction:column;gap:2px;border:1px solid color-mix(in srgb,var(--lc) 60%,transparent);background:color-mix(in srgb,var(--lc) 16%,var(--panel));border-radius:8px;padding:8px 10px;font-size:13px}
.lvblock small{color:var(--mute)}
.infoblk{display:flex;flex-direction:column;gap:2px;background:color-mix(in srgb,#f0a500 16%,var(--panel));border:1px solid color-mix(in srgb,#f0a500 55%,transparent);border-left:4px solid #f0a500;border-radius:8px;padding:7px 30px 7px 10px;position:relative;font-size:13px;white-space:pre-wrap;overflow-wrap:anywhere}
.infoblk b{font-size:12px}
.infoblk .ib{position:absolute;right:4px;top:4px;border:0;background:none;color:var(--mute);padding:4px 6px;border-radius:6px}
.lvrow{display:flex;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.lvrow .t{flex:1;min-width:0}
.lvrow small{display:block;color:var(--mute)}
.lvrow.past{opacity:.6}

/* tabelas */
#futuros{margin-top:6px}
.sec-title{font-weight:700;font-size:15px;margin:18px 4px 10px;padding-top:14px;border-top:1px solid var(--line)}
.tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:var(--panel)}
table.tbl{width:100%;border-collapse:collapse;font-size:13.5px;min-width:760px}
.tbl th{background:var(--bg);color:var(--mute);text-align:left;font-weight:600;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.tbl td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl td.late{color:var(--bad);font-weight:700}
.tbl td.dtc{white-space:nowrap}
.tbl td.obs{min-width:200px;white-space:pre-wrap;overflow-wrap:anywhere}
.tbl .who2{display:flex;gap:6px;align-items:center;white-space:nowrap}
.tbl .coordc{color:var(--mute);max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl .acts-cell{white-space:nowrap}
.tbl .acts-cell .btn{margin-right:6px;padding:5px 10px}
.fgrip{display:inline-block;margin-right:6px;vertical-align:middle}
.nothing{color:var(--mute);padding:4px 6px;font-size:13.5px}
.hist{border:0;background:none;overflow:visible}
.hsearch{display:flex;align-items:center;gap:10px;margin:0 0 10px;flex-wrap:wrap}
.hsearch input{flex:1;min-width:220px;max-width:520px}
.hsearch .cnt{color:var(--mute);font-size:13px}
.vwbody{display:flex;flex-direction:column;gap:10px;margin:6px 0 12px;max-height:60vh;overflow:auto}
.vwrow small{display:block;color:var(--mute);font-size:12px;margin-bottom:2px}
.vwrow div{white-space:pre-wrap;overflow-wrap:anywhere}

/* diálogos */
dialog{border:1px solid var(--line);border-radius:12px;background:var(--panel);color:var(--ink);padding:20px;width:min(460px,92vw);max-height:92vh;overflow:auto}
dialog::backdrop{background:rgba(0,0,0,.5)}
#dLeave,#dTeam{width:min(560px,94vw)}
.h2{margin:0 0 14px;font-size:18px;font-weight:700}
label{display:block;font-size:13px;color:var(--mute);margin:10px 0 3px}
input,select,textarea{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:8px}
textarea{resize:vertical}
select:disabled{opacity:.6}
.row{display:flex;gap:10px}
.row>div{flex:1;min-width:0}
.row>.narrow{flex:0 0 80px}
.acts{display:flex;gap:8px;margin-top:16px;justify-content:flex-end;flex-wrap:wrap}
.acts .left{margin-right:auto}
.err{color:var(--bad);font-size:13px;min-height:18px;margin-top:8px}
.warn{color:var(--warnc);font-size:13px;margin-top:4px}
.hint{color:var(--mute);font-size:13px;margin-top:4px;min-height:18px}
.mrow{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.mrow .nm{flex:1 1 140px;min-width:0}
.mrow small{display:block;color:var(--mute);font-size:12px}
.mmv{display:flex;flex-direction:column;gap:2px;flex:none}
.mmvb{padding:0 8px;height:22px;line-height:1;font-size:11px}
.sw{display:flex;gap:8px;flex-wrap:wrap}
.sw button{width:28px;height:28px;border-radius:50%;background:var(--c);border:2px solid transparent;padding:0}
.sw button[aria-pressed="true"]{border-color:var(--ink);box-shadow:0 0 0 2px var(--panel) inset}
.prow{display:flex;gap:6px;align-items:center}
.prow input{flex:1;min-width:0}
.pchips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 2px}
.pchip{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line);background:var(--bg);border-radius:999px;padding:2px 4px 2px 10px;font-size:13px}
.pchip button{border:0;background:none;padding:0 6px;font-size:15px;line-height:1.2;color:var(--mute)}

#toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:8px;font-size:14px;opacity:0;pointer-events:none;transition:opacity .2s;z-index:60;max-width:90vw}
#toast.show{opacity:1}

/* celular */
@media (max-width:700px){
  #app{padding:8px 10px}
  .top>.h1{display:none}
  .top{gap:6px;padding:6px 0;position:static;box-shadow:none}
  .sub{font-size:18px;min-height:24px}
  .bar{gap:6px}
  .seg{flex:1 1 100%}
  .seg button{flex:1;width:auto;min-height:40px;font-size:14px}
  .bar .btn{min-height:40px;padding:5px 10px}
  .syncst{flex:1 1 100%;max-width:none}
  .scroll{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}
  .scroll:has(.os.dragging){scroll-snap-type:none}
  .day>*{scroll-snap-align:start}
  .week{grid-template-columns:1fr;min-width:0}
  .wcol{min-height:0;border-left:0;border-top:1px solid var(--line);padding:10px}
  .wcol:first-child{border-top:0}
  .month{grid-template-columns:repeat(7,minmax(0,1fr));min-width:0}
  .mlab{padding:6px 2px;font-size:11px;text-align:center}
  .cell{min-height:70px;padding:3px;gap:2px;cursor:pointer}
  .cell .mhead{flex-direction:column;align-items:center;gap:0}
  .cell .plus{display:none}
  .cell .dn{font-size:14px;padding:2px}
  .cell .chip{pointer-events:none;font-size:0;height:6px;padding:0;border-left-width:0;border-radius:3px;background:var(--c)}
  .cell .lvchip{pointer-events:none;font-size:9px;padding:1px 3px;border-left-width:2px}
  .cell .more{pointer-events:none;font-size:10px;text-align:center}
  dialog{width:96vw;padding:16px}
  .row{flex-wrap:wrap}
  .tbl-wrap{border:0;overflow:visible;background:none}
  .tbl thead{display:none}
  table.tbl{min-width:0;width:100%}
  .tbl,.tbl tbody{display:block}
  .tbl tr{display:block;padding:10px 12px;margin-bottom:8px;border:1px solid var(--line);border-radius:10px;background:var(--panel)}
  .tbl td{display:block;border:0!important;padding:3px 0;white-space:normal!important;max-width:none!important;min-width:0!important}
  .tbl td[data-l]::before{content:attr(data-l);display:block;font-size:11px;color:var(--mute);font-weight:600;text-transform:uppercase;letter-spacing:.03em}
  .tbl td.acts-cell{padding-top:8px}
  .tbl td:empty{display:none}
  .hsearch input{min-width:0;max-width:none;width:100%}
}
@media (pointer:coarse){
  .kebab{width:36px;height:36px}
  .grip{padding:8px 6px;font-size:22px}
  .osmenu button,.osmenu a{padding:12px 14px;font-size:15px}
  .plus{width:34px;height:34px}
  .mmvb{height:34px;padding:0 12px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
