/* ZA Cigars — Task Center. Brand: black / crimson / cream.
   v1.5: every colour is a token → dark (default) and light themes; mobile-first phone UX. */

/* ---------- Theme tokens ---------- */
:root,[data-theme="dark"]{
  --bg:#0e0e10; --panel:#17171b; --panel2:#1e1e24; --line:#2a2a31; --line2:#3a3a44; --hover:#24242b;
  --ink:#f3efe6; --ink2:#d8d2c6; --muted:#a09a8e;
  --red:#8B1E1E; --red2:#b32626; --red-soft:#3a1414; --red-ink:#e79a9a; --red-line:#4a2020;
  --gold:#c9a24b; --green:#3f9c5a; --amber:#d08a2a; --blue:#4a7bb5;
  --track:#0e0e10; --scroll:#2c2c34;
  --sidebar-bg:linear-gradient(180deg,#141416,#0f0f11);
  --topbar-bg:rgba(14,14,16,.86); --bar-bg:rgba(20,20,23,.94);
  --ok-bg:#16281c; --ok-line:#234a30; --ok-ink:#a8e0ba; --alert-ink:#f0b4b4;
  --danger-ink:#ff9a9a; --danger-hover:#2a1414;
  --p-low-bg:#20303a; --p-low:#8fc0d6; --p-med-bg:#2f2a1a; --p-med:#d6c08f;
  --p-high-bg:#3a2418; --p-high:#e0a273; --p-urg-bg:#3a1414; --p-urg:#ec8a8a; --p-dept-bg:#25252c;
  --s-todo-bg:#23262b; --s-todo:#9aa2ac; --s-prog-bg:#1a2634; --s-prog:#7fb0e0;
  --s-rev-bg:#2b2416; --s-rev:#d6b673; --s-done-bg:#1a2a1f; --s-done:#7fd39a;
  --due-overdue:#ec8a8a;
  --shadow:0 6px 24px rgba(0,0,0,.35); --sheet-shadow:0 -12px 40px rgba(0,0,0,.55);
  --logo-filter:none;
  --radius:14px;
  --font:'Jost','Segoe UI',system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;
  color-scheme:dark;
}
[data-theme="light"]{
  --bg:#f5f1ea; --panel:#ffffff; --panel2:#f8f5f0; --line:#e6dfd3; --line2:#d3c9b8; --hover:#f1ece3;
  --ink:#1d1a16; --ink2:#3b362e; --muted:#6f6858;
  --red:#8B1E1E; --red2:#a52323; --red-soft:#f8e6e4; --red-ink:#8B1E1E; --red-line:#eecfcb;
  --gold:#8f6a1c; --green:#2e7a45; --amber:#a2650c; --blue:#2f64a3;
  --track:#ece6dc; --scroll:#d6cdbd;
  --sidebar-bg:linear-gradient(180deg,#fbf9f5,#f3eee5);
  --topbar-bg:rgba(245,241,234,.9); --bar-bg:rgba(255,255,255,.96);
  --ok-bg:#e6f4ea; --ok-line:#bfe0c9; --ok-ink:#23633a; --alert-ink:#8a2a2a;
  --danger-ink:#b42323; --danger-hover:#fbe9e9;
  --p-low-bg:#e2eff5; --p-low:#2d6b87; --p-med-bg:#f5eed9; --p-med:#7a611a;
  --p-high-bg:#fbe6d6; --p-high:#974c12; --p-urg-bg:#f9dfdf; --p-urg:#a52323; --p-dept-bg:#efeae1;
  --s-todo-bg:#eef0f3; --s-todo:#515b66; --s-prog-bg:#e3edf8; --s-prog:#285a95;
  --s-rev-bg:#f7efda; --s-rev:#7d5c0d; --s-done-bg:#e1f2e6; --s-done:#2a6d3f;
  --due-overdue:#b42323;
  --shadow:0 6px 24px rgba(60,40,20,.10); --sheet-shadow:0 -12px 40px rgba(60,40,20,.18);
  --logo-filter:invert(1);
  color-scheme:light;
}

/* ---------- Base ---------- */
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:15px;line-height:1.45;
  -webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font-family:inherit;font-size:14px}
input,select,textarea{color:var(--ink)}
::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--scroll);border-radius:6px}
.i{display:block;flex-shrink:0}

/* ---------- Layout ---------- */
.app{display:flex;min-height:100vh;min-height:100dvh}
.sidebar{width:230px;background:var(--sidebar-bg);border-right:1px solid var(--line);
  padding:20px 14px 16px;position:sticky;top:0;height:100vh;height:100dvh;flex-shrink:0;
  display:flex;flex-direction:column}
.brand{display:flex;align-items:center;gap:10px;padding:4px 8px 18px;border-bottom:1px solid var(--line);margin-bottom:14px}
.brand .logo{width:34px;height:34px;border-radius:9px;background:var(--red);display:grid;place-items:center;
  font-weight:800;color:#fff;letter-spacing:.5px;box-shadow:0 0 0 2px rgba(201,162,75,.25)}
.brand b{font-size:15px;font-weight:700;letter-spacing:.3px}.brand small{display:block;color:var(--muted);font-size:11px;font-weight:500}
.logo-img{max-width:140px;width:140px;height:auto;display:block;filter:var(--logo-filter)}
.brand-sub{text-align:center;color:var(--muted);font-size:10px;letter-spacing:3px;margin:-6px 0 14px}
.nav{flex:1;overflow-y:auto;min-height:0}
.nav a{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:10px;color:var(--muted);
  font-weight:600;margin-bottom:2px;transition:.15s}
.nav a:hover{background:var(--panel2);color:var(--ink)}
.nav a.active{background:var(--red-soft);color:var(--ink);box-shadow:inset 3px 0 0 var(--red2)}
[data-theme="dark"] .nav a.active{color:#fff}
.nav .ico{width:20px;display:grid;place-items:center;opacity:.9}
.sb-bottom{margin-top:14px}
.sb-user{width:100%;justify-content:center;gap:8px}
.sb-user span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.langsw{display:flex;gap:6px;margin-bottom:10px}
.langsw a{flex:1;text-align:center;padding:6px;border:1px solid var(--line);border-radius:8px;color:var(--muted);font-weight:700;font-size:12px}
.langsw a.on{background:var(--red);color:#fff;border-color:var(--red)}
.themesw{display:flex;gap:4px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:3px;margin-bottom:10px}
.themesw button{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 6px;border:0;border-radius:7px;
  background:transparent;color:var(--muted);font-weight:700;font-size:12px;cursor:pointer}
.themesw button.on{background:var(--red);color:#fff}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:12px;padding:16px 26px;border-bottom:1px solid var(--line);
  position:sticky;top:0;background:var(--topbar-bg);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);z-index:20}
.topbar h1{font-size:19px;margin:0;font-weight:700;letter-spacing:.2px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar .spacer{flex:1}
.content{padding:24px 26px;max-width:1400px;width:100%}
.icon-btn{padding:7px 9px}
.when-dark,.when-light{display:inline-flex}
[data-theme="dark"] .when-light,[data-theme="light"] .when-dark{display:none}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:8px;background:var(--panel2);border:1px solid var(--line);
  color:var(--ink);padding:9px 15px;border-radius:10px;font-weight:600;cursor:pointer;transition:.15s;line-height:1.2}
.btn:hover{border-color:var(--line2);background:var(--hover)}
.btn.primary{background:var(--red);border-color:var(--red);color:#fff}
.btn.primary:hover{background:var(--red2);border-color:var(--red2)}
.btn.ghost{background:transparent}
.btn.sm{padding:6px 11px;font-size:13px;border-radius:8px}
.btn.danger{color:var(--danger-ink);border-color:var(--red-line)}.btn.danger:hover{background:var(--danger-hover)}
.btn[disabled]{opacity:.55;cursor:not-allowed}

/* ---------- Cards / panels ---------- */
.grid{display:grid;gap:16px}
.stats{grid-template-columns:repeat(4,1fr)}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px}
.stat .n{font-size:30px;font-weight:800;line-height:1}
.stat .l{color:var(--muted);font-size:13px;margin-top:6px;font-weight:600}
.stat.red .n{color:var(--red2)} .stat.amber .n{color:var(--amber)} .stat.green .n{color:var(--green)}

.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:18px}
.panel h2{margin:0 0 14px;font-size:16px;font-weight:700}
.section-title{font-size:13px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:700;margin:0 0 10px}

/* ---------- Kanban board ---------- */
.board{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;align-items:start}
.board-tabs{display:none}
.col{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:12px;min-height:120px}
.col.dragover{outline:2px dashed var(--red2);outline-offset:-4px}
.col-head{display:flex;align-items:center;justify-content:space-between;padding:4px 6px 12px;font-weight:700}
.col-head .dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:8px}
.col-head .count{color:var(--muted);font-size:13px;font-weight:700}
.dot.todo{background:#6b7280}.dot.in_progress{background:var(--blue)}.dot.review{background:var(--amber)}.dot.done{background:var(--green)}
.col.is-empty .col-body::after{content:attr(data-empty);display:block;color:var(--muted);font-size:13px;text-align:center;
  padding:18px 6px;border:1px dashed var(--line);border-radius:10px}

.card{position:relative;background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:12px 13px;margin-bottom:10px;cursor:grab;transition:.12s}
.card:hover{border-color:var(--line2);transform:translateY(-1px)}
.card.dragging{opacity:.5}
.card.moved{animation:za-pop .5s ease}
@keyframes za-pop{0%{box-shadow:0 0 0 0 rgba(179,38,38,.5)}100%{box-shadow:0 0 0 10px rgba(179,38,38,0)}}
.card .ttl{font-weight:600;margin-bottom:9px;font-size:14px;overflow-wrap:break-word}
.card .meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.card-move{position:absolute;top:8px;right:8px;width:30px;height:30px;border-radius:8px;border:1px solid var(--line);
  background:var(--panel);color:var(--muted);display:grid;place-items:center;padding:0;cursor:pointer;opacity:0;transition:.15s;
  box-shadow:0 0 0 4px var(--panel2)}
.card:hover .card-move,.card-move:focus-visible{opacity:1}
/* Touch screens of any width (phones, iPad landscape): always show it. Desktop: hover only,
   over the card corner, so no title space is reserved there. */
@media(hover:none){ .board .card .ttl{padding-right:40px} .card-move{opacity:1} }
.card-move:hover{color:var(--ink);border-color:var(--line2)}
.pill{font-size:11px;font-weight:700;padding:3px 8px;border-radius:20px;white-space:nowrap}
.pill.low{background:var(--p-low-bg);color:var(--p-low)}.pill.medium{background:var(--p-med-bg);color:var(--p-med)}
.pill.high{background:var(--p-high-bg);color:var(--p-high)}.pill.urgent{background:var(--p-urg-bg);color:var(--p-urg)}
.pill.dept{background:var(--p-dept-bg);color:var(--muted)}
.pill.lt{background:var(--red-soft);color:var(--red-ink);margin-right:6px}
.avatar{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:11px;font-weight:700;flex-shrink:0}
.due{font-size:12px;color:var(--muted);font-weight:600;margin-left:auto}
.due.due-overdue{color:var(--due-overdue)}.due.due-today{color:var(--amber)}.due.due-soon{color:var(--gold)}

/* ---------- Table (list view) ---------- */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.tasks{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
table.tasks th{text-align:left;padding:12px 14px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-bottom:1px solid var(--line)}
table.tasks td{padding:12px 14px;border-bottom:1px solid var(--line)}
table.tasks tr:last-child td{border-bottom:0}
table.tasks tr:hover td{background:var(--panel2)}
.status-chip{font-size:12px;font-weight:700;padding:4px 10px;border-radius:8px;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.status-chip.todo{background:var(--s-todo-bg);color:var(--s-todo)}.status-chip.in_progress{background:var(--s-prog-bg);color:var(--s-prog)}
.status-chip.review{background:var(--s-rev-bg);color:var(--s-rev)}.status-chip.done{background:var(--s-done-bg);color:var(--s-done)}

/* ---------- Forms ---------- */
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:6px}
.field input,.field select,.field textarea{width:100%;background:var(--panel2);border:1px solid var(--line);
  color:var(--ink);padding:10px 12px;border-radius:10px;outline:none}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--red2)}
.field textarea{min-height:110px;resize:vertical}
.field input[type=checkbox]{width:auto}
.inp{background:var(--panel2);border:1px solid var(--line);color:var(--ink);padding:9px 11px;border-radius:9px;outline:none}
.inp:focus{border-color:var(--red2)}
.row{display:flex;gap:14px}.row>*{flex:1;min-width:0}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.toolbar select,.toolbar input{background:var(--panel2);border:1px solid var(--line);color:var(--ink);padding:8px 11px;border-radius:9px}
.toolbar .fx{display:contents}
.filter-toggle{display:none}
.filter-toggle .fcount{background:var(--red);color:#fff;border-radius:10px;padding:0 6px;font-size:11px;min-width:18px;text-align:center}
.tabs{display:flex;gap:4px;background:var(--panel2);padding:4px;border-radius:11px}
.tabs a{padding:7px 14px;border-radius:8px;color:var(--muted);font-weight:600}
.tabs a.on{background:var(--red);color:#fff}

/* ---------- Task detail ---------- */
.detail{display:grid;grid-template-columns:1fr 320px;gap:18px;align-items:start}
.desc{white-space:pre-wrap;color:var(--ink2);line-height:1.6;overflow-wrap:anywhere}
.comment{display:flex;gap:11px;margin-bottom:14px}
.comment .body{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;flex:1;min-width:0;overflow-wrap:anywhere}
.comment .who{font-weight:700;font-size:13px;margin-bottom:3px}
.comment .when{color:var(--muted);font-size:11px;font-weight:600}
.comment-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.attach{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--panel2);border:1px solid var(--line);border-radius:9px;margin-bottom:8px}
.act{font-size:12px;color:var(--muted);padding:5px 0;border-bottom:1px dashed var(--line)}
.badge-role{font-size:11px;font-weight:700;padding:2px 8px;border-radius:6px;background:var(--red-soft);color:var(--red-ink)}
.badge-role.emp{background:var(--p-dept-bg);color:var(--muted)}
.lt-box{background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:14px 16px;margin-bottom:14px}
.bar{height:9px;background:var(--track);border-radius:6px;overflow:hidden}
.bar>div{height:100%;background:linear-gradient(90deg,var(--red),var(--gold));border-radius:6px}
.who-chip{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600}

/* ---------- Login / install ---------- */
.auth-wrap{min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:20px;
  background:radial-gradient(1200px 500px at 50% -10%,rgba(139,30,30,.25),transparent),var(--bg)}
.auth-card{width:100%;max-width:400px;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:34px;box-shadow:var(--shadow)}
.auth-card .brand{justify-content:center;border:0;margin-bottom:20px;padding-bottom:0}
.auth-card h1{text-align:center;font-size:20px;margin:0 0 6px}
.auth-card p.sub{text-align:center;color:var(--muted);margin:0 0 22px;font-size:14px}
.alert{background:var(--red-soft);border:1px solid var(--red-line);color:var(--alert-ink);padding:10px 13px;border-radius:10px;margin-bottom:16px;font-size:14px}
.ok{background:var(--ok-bg);border-color:var(--ok-line);color:var(--ok-ink)}
.empty{text-align:center;color:var(--muted);padding:40px 10px}

/* ---------- Long-term progress + subtasks ---------- */
.progress-mini{height:6px;background:var(--track);border-radius:5px;overflow:hidden;margin-top:9px}
.progress-mini>div{height:100%;background:linear-gradient(90deg,var(--red),var(--gold));border-radius:5px}
.subrow{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px dashed var(--line)}
.subrow:last-of-type{border-bottom:0}
.subcheck{width:22px;height:22px;flex-shrink:0;border-radius:6px;border:1.5px solid var(--line2);background:var(--panel2);
  color:#fff;cursor:pointer;display:grid;place-items:center;font-size:13px;font-weight:800;padding:0}
.subcheck.on{background:var(--green);border-color:var(--green)}

/* ---------- Mentions & notifications ---------- */
.mention{color:var(--red-ink);background:var(--red-soft);padding:1px 5px;border-radius:5px;font-weight:600}
.nbadge{display:inline-block;background:var(--red2);color:#fff;font-size:11px;font-weight:800;min-width:18px;text-align:center;padding:1px 6px;border-radius:10px;margin-left:4px;line-height:1.5}
.notif{display:flex;gap:11px;align-items:flex-start;padding:12px 8px;border-bottom:1px dashed var(--line);color:var(--ink)}
.notif:last-child{border-bottom:0}
.notif.unread{background:var(--red-soft);border-radius:10px}
.notif:hover{background:var(--panel2)}
.notif .n-body{flex:1;min-width:0}
.notif .n-line{display:block;line-height:1.5;overflow-wrap:anywhere}
.notif .n-sub{color:var(--muted);font-size:12px}
.notif .n-when{color:var(--muted);font-size:12px;white-space:nowrap}
.n-type{display:inline-block;font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:1px 7px;border-radius:6px;margin-right:6px;vertical-align:1px}
.n-type.assign{background:var(--s-prog-bg);color:var(--s-prog)}.n-type.mention{background:var(--red-soft);color:var(--red-ink)}
.n-type.deadline{background:var(--s-rev-bg);color:var(--s-rev)}
.sys-avatar{background:var(--panel2);color:var(--muted);border:1px solid var(--line)}
.push-card{border-left:3px solid var(--red2)}
.push-card .ps-state{display:flex;align-items:center;gap:8px;font-weight:600;margin:10px 0 12px}
.push-card .ps-dot{width:10px;height:10px;border-radius:50%;background:var(--muted)}
.push-card .ps-dot.on{background:var(--green)}
.push-card .ps-actions{display:flex;gap:8px;flex-wrap:wrap}
.push-card .ps-hint{color:var(--muted);font-size:13px;margin-top:10px}
.push-banner{display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--red2);
  border-radius:12px;padding:10px 12px;margin-bottom:16px;flex-wrap:wrap}
.push-banner .pb-ico{color:var(--red2);display:grid}
.push-banner .pb-txt{flex:1 1 200px;font-size:14px;font-weight:500}

/* v1.4.0 — locked column (employees can't drop into "Done") + inline hints */
.col.locked{background:repeating-linear-gradient(135deg,var(--panel),var(--panel) 10px,var(--panel2) 10px,var(--panel2) 20px)}
.col.locked.dragover{outline-color:var(--muted)}
.col-head .lockico{font-size:12px;opacity:.75;margin-left:4px}
.field small.hint{display:block;color:var(--muted);font-size:11px;margin-top:4px}

/* v1.4.1 — board date-range filter + list sort */
.toolbar .daterange{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:4px 10px}
.toolbar .daterange .drlbl{color:var(--muted);font-size:12px;font-weight:600}
.toolbar .daterange .drsep{color:var(--muted)}
.toolbar .daterange input[type=date]{width:auto;min-width:120px;margin:0;border:none;background:transparent;padding:4px 2px}

/* ---------- Bottom sheet (move card / pickers) ---------- */
.sheet-scrim{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:90;opacity:0;transition:opacity .2s;pointer-events:none}
.sheet-scrim.on{opacity:1;pointer-events:auto}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:91;background:var(--panel);border:1px solid var(--line);
  border-top-left-radius:18px;border-top-right-radius:18px;box-shadow:var(--sheet-shadow);
  padding:10px 12px calc(12px + env(safe-area-inset-bottom));transform:translateY(105%);transition:transform .22s ease;visibility:hidden}
.sheet.on{transform:none;visibility:visible}
.sheet .grab{width:40px;height:4px;border-radius:3px;background:var(--line2);margin:0 auto 10px}
.sheet h3{margin:2px 6px 8px;font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.1em}
.sheet .sheet-title{margin:0 6px 10px;font-weight:700;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sheet .opt{display:flex;align-items:center;gap:12px;width:100%;padding:14px 12px;border:0;background:transparent;color:var(--ink);
  font-weight:600;font-size:16px;border-radius:12px;text-align:left;cursor:pointer}
.sheet .opt:hover{background:var(--panel2)}
.sheet .opt.cur{background:var(--red-soft)}
.sheet .opt .tick{margin-left:auto;color:var(--red2)}
.sheet .opt[disabled]{opacity:.45;cursor:not-allowed}
.sheet .opt-cancel{justify-content:center;color:var(--muted);margin-top:4px;border-top:1px solid var(--line);border-radius:0 0 12px 12px}
@media(min-width:901px){
  .sheet{left:50%;right:auto;bottom:auto;top:50%;width:380px;border-radius:16px;padding:14px;
    transform:translate(-50%,-46%) scale(.97);opacity:0;transition:.18s}
  .sheet.on{transform:translate(-50%,-50%);opacity:1}
  .sheet .grab{display:none}
}

/* ---------- Mobile nav (hidden on desktop) ---------- */
.hamburger{display:none}
.bottombar,.fab{display:none}

/* ================= Tablet & phone ================= */
@media(max-width:900px){
  .sidebar{position:fixed;left:-270px;top:0;width:250px;z-index:60;transition:left .25s ease;box-shadow:var(--shadow);
    padding-bottom:calc(16px + env(safe-area-inset-bottom))}
  .sidebar.open{left:0}
  .scrim{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:50;display:none}.scrim.on{display:block}

  .topbar{padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top));gap:8px;
    padding-left:calc(14px + env(safe-area-inset-left));padding-right:calc(14px + env(safe-area-inset-right))}
  .topbar h1{font-size:17px}
  .new-task-btn{display:none}
  .content{padding:14px;padding-bottom:calc(92px + env(safe-area-inset-bottom));
    padding-left:calc(14px + env(safe-area-inset-left));padding-right:calc(14px + env(safe-area-inset-right))}

  /* Bottom tab bar + floating "+" */
  .bottombar{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;z-index:40;
    background:var(--bar-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--line);
    padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}
  .bottombar a,.bottombar button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    min-height:58px;padding:6px 2px;background:none;border:0;color:var(--muted);font-size:11px;font-weight:600;cursor:pointer;
    overflow:hidden}
  .bottombar a span:last-child,.bottombar button span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bottombar a.active{color:var(--red2)}
  [data-theme="dark"] .bottombar a.active{color:#f0b4b4}
  .bottombar .bb-ico{position:relative;display:grid}
  .bottombar .nbadge{position:absolute;top:-6px;left:14px;margin:0;font-size:10px;min-width:16px;padding:0 4px}
  .fab{display:grid;place-items:center;position:fixed;right:calc(16px + env(safe-area-inset-right));bottom:calc(72px + env(safe-area-inset-bottom));z-index:41;
    width:56px;height:56px;border-radius:50%;background:var(--red);color:#fff;box-shadow:0 8px 24px rgba(139,30,30,.45)}
  .fab:active{transform:scale(.95)}

  /* Stack everything that sat side by side */
  .row{flex-direction:column;gap:0}
  .row>*{flex:1 1 auto!important;width:100%}
  .detail{grid-template-columns:1fr}
  .stats{grid-template-columns:repeat(2,1fr);gap:10px}
  .stat{padding:14px}
  .stat .n{font-size:26px}
  .panel{padding:14px;margin-bottom:14px}

  /* Inputs ≥16px so iPhone Safari doesn't zoom in on focus; bigger touch targets */
  input,select,textarea,.field input,.field select,.field textarea,.toolbar select,.toolbar input,.inp{font-size:16px}
  .btn{min-height:40px}
  .btn.sm{min-height:36px}
  .field input,.field select{min-height:44px}

  /* Filters collapse behind one button */
  .toolbar{gap:8px}
  .toolbar>input[type=text]{flex:1 1 140px;min-width:0}
  .filter-toggle{display:inline-flex}
  .toolbar .fx{display:none}
  .toolbar.open .fx{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}
  .toolbar.open .fx>*{width:100%;min-width:0}
  .toolbar.open .fx .daterange{grid-column:1/-1;justify-content:space-between}
  .toolbar.open .fx .daterange input[type=date]{min-width:0;flex:1}

  /* Board: swipe between status columns */
  .board-tabs{display:flex;gap:6px;overflow-x:auto;margin:0 -14px 10px;padding:2px 14px 4px;scrollbar-width:none}
  .board-tabs::-webkit-scrollbar{display:none}
  .board-tabs button{flex:0 0 auto;display:inline-flex;align-items:center;gap:7px;padding:8px 13px;border-radius:999px;
    border:1px solid var(--line);background:var(--panel);color:var(--muted);font-weight:700;font-size:13px;cursor:pointer}
  .board-tabs button b{font-weight:800;opacity:.8}
  .board-tabs button.on{background:var(--red);border-color:var(--red);color:#fff}
  .board{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;margin:0 -14px;padding:0 14px 8px;
    scroll-padding:0 14px;overscroll-behavior-x:contain;scrollbar-width:none;align-items:flex-start}
  .board::-webkit-scrollbar{display:none}
  .board .col{flex:0 0 88%;scroll-snap-align:start;min-height:58vh}
  .card{cursor:pointer}
  .card-move{opacity:1;width:36px;height:36px;top:6px;right:6px}
  .board .card .ttl{padding-right:40px}

  /* Tables become cards */
  table.tasks.stack{background:transparent;border:0;border-radius:0}
  table.tasks.stack thead{display:none}
  table.tasks.stack,table.tasks.stack tbody,table.tasks.stack tr,table.tasks.stack td{display:block;width:100%}
  table.tasks.stack tr{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:10px}
  table.tasks.stack td{border:0;padding:3px 0}
  table.tasks.stack tr:hover td{background:transparent}
  table.tasks.stack td[data-label]::before{content:attr(data-label);display:inline-block;min-width:96px;color:var(--muted);font-size:12px;font-weight:600}
  table.tasks.stack td.t-title{font-size:15px;padding-bottom:6px}
  table.tasks.stack td:empty{display:none}

  /* Notifications: time goes under the text instead of squeezing it */
  .notif{display:grid;grid-template-columns:24px minmax(0,1fr);column-gap:11px;row-gap:3px}
  .notif .n-when{grid-column:2;white-space:normal}

  .comment-actions select,.comment-actions input[type=file]{flex:1 1 100%}
  .comment-actions .btn{margin-left:auto}
  .auth-card{padding:26px 20px}
  .push-banner .pb-txt{flex-basis:100%}
}
@media(max-width:380px){
  .bottombar a,.bottombar button{font-size:10px}
  .board .col{flex-basis:92%}
}
@media(hover:none){ .card:hover{transform:none} }
@media(prefers-reduced-motion:reduce){ *{transition:none!important;animation:none!important} }


/* ===== v1.5.1 · task ===== */
/* ---------- v1.5.1 · task page: due-date rule, cancel sheet, cancelled banner ---------- */
.req{color:var(--red2);margin-left:3px;font-weight:700}
.field.has-err input,.field.has-err select{border-color:var(--red2);box-shadow:0 0 0 3px var(--red-soft)}
.field-err{margin-top:6px;color:var(--danger-ink);font-size:13px;font-weight:600;line-height:1.35}
.static-field{min-height:42px;display:flex;align-items:center}
.due.due-review{color:var(--muted)}
/* Task page only (.detail = task.php view): the board chip reuses .due-late with its own styling below. */
.detail .due .due-late{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:6px;background:var(--red-soft);color:var(--due-overdue);font-weight:800}
.detail .due .due-note{font-weight:500}
.status-chip.cancelled{background:var(--p-dept-bg);color:var(--muted)}
.task-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.task-actions form{display:flex;margin:0}
.cancel-banner{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap;background:var(--panel2);border:1px solid var(--line);
  border-left:3px solid var(--muted);border-radius:12px;padding:12px 14px;margin:0 0 16px;color:var(--ink2);font-size:14px}
.cancel-banner .cb-text{flex:1 1 240px;min-width:0;overflow-wrap:anywhere}
.cancel-banner .cb-actions{display:flex;gap:8px;flex-wrap:wrap}
.cancel-banner form{margin:0}
.cancel-form .cancel-ttl{margin:0 0 2px;font-size:17px;font-weight:700}
.cancel-form .cancel-name{color:var(--muted);font-size:14px;margin:0 0 14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cancel-opts{border:0;margin:0 0 14px;padding:0;min-width:0;display:grid;gap:8px}
.cancel-opts legend{padding:0;margin:0 0 8px}
.cancel-opt{display:flex;align-items:center;gap:12px;min-height:52px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;
  background:var(--panel2);color:var(--ink);font-size:16px;font-weight:600;cursor:pointer;transition:border-color .15s,background .15s}
.cancel-opt:hover{border-color:var(--line2)}
.cancel-opt input{width:20px;height:20px;margin:0;flex-shrink:0;accent-color:var(--red2)}
.cancel-opt:has(input:checked){border-color:var(--red2);background:var(--red-soft)}
.cancel-opt:has(input:focus-visible){outline:2px solid var(--red2);outline-offset:2px}
.cancel-form .field textarea{min-height:80px;font-size:16px}
.cancel-form .hint.need{color:var(--amber);font-weight:600}
.cancel-info{color:var(--muted);font-size:13px;margin:0 0 14px}
.cancel-actions{display:flex;gap:10px}
.cancel-actions .btn{flex:1;justify-content:center;min-height:44px}
.panel.cancel-form{border-color:var(--red-line);max-width:560px;scroll-margin-top:90px}
.sheet.cancel-form{max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow-y:auto;overscroll-behavior:contain;
  padding-left:16px;padding-right:16px;
  padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
@media(min-width:901px){ .sheet.cancel-form{width:440px;max-height:calc(100vh - 48px);padding:18px 20px} }
@media(max-width:900px){
  .task-head .btn{min-height:44px}
  .task-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .task-actions>*{min-width:0}
  .task-actions>:last-child:nth-child(odd){grid-column:1/-1}
  .task-actions .btn,.cancel-banner .btn{width:100%;justify-content:center;min-height:44px;font-size:14px}
  .cancel-banner .cb-actions{width:100%;display:grid;grid-template-columns:1fr 1fr}
  .form-actions .btn{flex:1;justify-content:center;min-height:44px}
}

/* ===== v1.5.1 · archive_board ===== */
/* v1.5.1 — board due chips. The card's column decides what the chip shows, so it stays right
   after a drag / tap-to-move without a reload: "−N дн" in red in the late columns, grey date +
   "на проверке" in review (never overdue), plain grey date in "Готово". */
.board .due{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.board .due .due-late,.board .due .due-rev{display:none}
.board .col[data-status="todo"] .due[data-past],.board .col[data-status="in_progress"] .due[data-past]{
  color:var(--due-overdue);background:var(--red-soft);padding:2px 8px;border-radius:20px;font-weight:700}
.board .col[data-status="todo"] .due[data-past] .due-d,.board .col[data-status="in_progress"] .due[data-past] .due-d{display:none}
.board .col[data-status="todo"] .due[data-past] .due-late,.board .col[data-status="in_progress"] .due[data-past] .due-late{display:inline}
.board .col[data-status="review"] .due,.board .col[data-status="done"] .due{color:var(--muted);background:none;padding:0}
.board .col[data-status="review"] .due .due-rev{display:inline}
/* Narrow phones: a long department name shrinks (…) instead of pushing the chip off the card. */
.board .card .meta .pill.dept{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis}

/* v1.5.1 — archive: Все / Выполненные / Отменённые + the "Итог" cell (done vs cancelled). */
.arch-kind{display:inline-flex;max-width:100%;margin-bottom:14px}
.arch-kind a{display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}
.arch-kind a .n{font-size:12px;font-weight:800;opacity:.75}
.pill.arch-done{background:var(--s-done-bg);color:var(--s-done)}
.pill.arch-cancelled{background:var(--s-todo-bg);color:var(--s-todo)}
.arch-out{display:inline-flex;flex-direction:column;gap:4px;min-width:0;max-width:100%;vertical-align:top}
.arch-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.arch-when{color:var(--muted);font-size:13px;font-weight:600}
.arch-reason{color:var(--ink2);font-size:13px;line-height:1.4;overflow-wrap:anywhere}
tr.is-cancelled .t-title strong{color:var(--ink2)}
@media(min-width:901px){ table.tasks td.arch-act{width:1%;white-space:nowrap;text-align:right} }
@media(max-width:900px){
  .arch-kind{display:flex;width:100%}
  .arch-kind a{flex:1 1 auto;min-height:44px;padding:8px 10px;font-size:14px}
  table.tasks.stack td .arch-out{max-width:calc(100% - 100px)}
  table.tasks.stack td.arch-act{padding-top:8px}
  table.tasks.stack td.arch-act .btn{width:100%;justify-content:center;min-height:44px}
}
@media(max-width:380px){ .arch-kind a{padding:8px 6px;font-size:13px;gap:4px} }

/* ===== v1.5.1 · lists ===== */
/* v1.5.1 — overdue: dashboard tile link, list chip + overdue table, scheduler warning (index.php, list.php) */
.stat-link{display:block;position:relative;color:inherit;transition:.15s}
.stat-link::after{content:"→";position:absolute;top:14px;right:16px;color:var(--muted);font-weight:700;transition:.15s}
.stat-link:hover{border-color:var(--red-line);background:var(--panel2)}
.stat-link:hover::after{color:var(--red2);transform:translateX(2px)}
.stat-link:focus-visible,.od-chip:focus-visible,.more-link:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.od-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;border:1px solid var(--line);
  background:var(--panel);color:var(--muted);font-weight:700;font-size:13px;white-space:nowrap;cursor:pointer;transition:.15s}
.od-chip:hover{border-color:var(--line2);color:var(--ink)}
.od-chip.hot{color:var(--red-ink);border-color:var(--red-line);background:var(--red-soft)}
.od-chip.on{background:var(--red);border-color:var(--red);color:#fff}
.od-days{color:var(--due-overdue);font-weight:800;white-space:nowrap}
.od-who{display:inline-flex;align-items:center;gap:7px;font-weight:600;font-size:13px;min-width:0}
.odot{width:9px;height:9px;border-radius:50%;flex-shrink:0;display:inline-block}
.od-last{color:var(--muted);font-size:13px;white-space:nowrap}
.od-lbl{display:none}
.more-link{display:block;text-align:center;color:var(--red-ink);font-weight:700;font-size:13px;padding:8px 0 2px;border-radius:8px}
.more-link:hover{text-decoration:underline}
.sched-warn{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border:1px solid var(--line);border-left:3px solid var(--amber);
  background:var(--panel);background:color-mix(in srgb,var(--amber) 12%,var(--panel));border-radius:12px;padding:10px 12px;margin-bottom:16px}
.sched-warn .sw-ico{color:var(--amber);display:grid}
.sched-warn .sw-txt{flex:1 1 220px;font-size:14px;font-weight:600}
.sched-warn.red{background:var(--red-soft);border-color:var(--red-line);border-left-color:var(--red2);color:var(--alert-ink)}
.sched-warn.red .sw-ico{color:var(--red2)}
@media(max-width:900px){
  .od-chip{min-height:40px;padding:8px 14px}
  table.tasks.stack.od-table tr{position:relative}
  table.tasks.stack.od-table td.t-title{padding-right:78px}
  table.tasks.stack.od-table td.od-dcell{position:absolute;top:12px;right:14px;width:auto;padding:0}
  table.tasks.stack.od-table td.od-last{padding-top:4px}
  .od-lbl{display:inline}
  .sched-warn .sw-txt{flex-basis:calc(100% - 40px)}
}

/* ===== v1.5.1 · settings_notif ===== */
/* v1.5.1 — Settings: time zone, weekly overdue reminder, scheduler (cron) */
.cfg-anchor{scroll-margin-top:84px}
.cfg-sub{margin:18px 0 10px}
.cfg-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}
.cfg-note{color:var(--muted);font-size:13px;line-height:1.5;margin:0 0 14px}
.cfg-muted{color:var(--muted)}
.cfg-kv{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:9px 16px;margin:0 0 18px;font-size:14px}
.cfg-kv dt{color:var(--muted);font-weight:600}
.cfg-kv dd{margin:0;min-width:0;overflow-wrap:anywhere}
.cfg-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--muted);margin-right:7px;vertical-align:1px}
.cfg-dot.ok{background:var(--green)}.cfg-dot.warn{background:var(--amber)}.cfg-dot.bad{background:var(--red2)}
.cfg-warn{display:block;color:var(--amber);font-size:12px;font-weight:600;margin-top:2px}
.cfg-steps{margin:0 0 12px;padding-left:20px;font-size:14px;color:var(--ink2)}
.cfg-steps li{margin-bottom:12px}
.cfg-steps li::marker{color:var(--muted);font-weight:700}
.cfg-steps .cfg-note{margin:10px 0 0}
.cfg-copy{display:flex;gap:8px;align-items:flex-start;margin-top:6px}
.cfg-cmd{flex:1;min-width:0;display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;line-height:1.45;
  background:var(--panel2);border:1px solid var(--line);color:var(--ink);border-radius:9px;padding:8px 11px;
  overflow-wrap:anywhere;word-break:break-all;-webkit-user-select:all;user-select:all}
.cfg-copy .btn{flex-shrink:0}
/* v1.5.1 — notification types */
.n-type.submitted{background:var(--s-done-bg);color:var(--s-done)}
.n-type.cancelled{background:var(--s-todo-bg);color:var(--s-todo)}
.n-type.overdue_digest,.n-type.overdue_team{background:var(--red);color:#fff}
.n-type.other{background:var(--p-dept-bg);color:var(--muted)}
.sys-avatar.sys-alert{color:var(--due-overdue);border-color:var(--red-line)}
.notif .n-go{color:var(--red-ink);font-weight:600}
@media(max-width:900px){
  .cfg-kv{grid-template-columns:minmax(0,1fr);gap:1px}
  .cfg-kv dd{margin-bottom:10px}
  .cfg-copy{flex-direction:column;align-items:stretch}
  .cfg-copy .btn{align-self:flex-start;justify-content:center;min-height:44px;padding:0 18px}
  .cfg-cmd{font-size:14px}
}

/* ===== v1.6 · process ===== */
/* ===== v1.6 · process boards («Процессы», process.php) ===== */
/* Board chips: every active process, the current one filled. --bc = the board's own colour. */
.proc-chips{display:flex;align-items:center;gap:8px;overflow-x:auto;scrollbar-width:none;margin:0 0 10px;padding:2px 0 4px}
.proc-chips::-webkit-scrollbar{display:none}
.pchip{flex:0 0 auto;display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:5px 12px 5px 6px;border-radius:999px;
  border:1px solid var(--line);background:var(--panel);color:var(--ink2);font-weight:700;font-size:14px;white-space:nowrap;transition:.15s}
.pchip:hover{border-color:var(--line2);color:var(--ink)}
.pchip:focus-visible,.pchip-cfg:focus-visible,.pcard:focus-visible,.p-link:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.pchip-ico{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;color:var(--bc,var(--red2));
  background:var(--panel2);background:color-mix(in srgb,var(--bc,var(--red)) 20%,transparent)}
.pchip-n{min-width:22px;padding:1px 7px;border-radius:10px;background:var(--panel2);color:var(--muted);font-size:12px;font-weight:800;text-align:center}
.pchip.on{background:var(--red);border-color:var(--red);color:#fff}
.pchip.on .pchip-ico{background:rgba(255,255,255,.18);color:#fff}
.pchip.on .pchip-n{background:rgba(255,255,255,.22);color:#fff}
.pchip-cfg{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:6px 12px;margin-left:auto;border-radius:999px;
  border:1px dashed var(--line2);color:var(--muted);font-weight:600;font-size:13px;white-space:nowrap;transition:.15s}
.pchip-cfg:hover{color:var(--ink);border-color:var(--muted)}
.proc-desc{margin:-2px 0 12px;color:var(--muted);font-size:13px}
.proc-toolbar .proc-new{margin-left:auto}

/* Empty board / nothing matches / no processes at all */
.proc-empty{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--panel);border:1px dashed var(--line2);
  border-radius:12px;padding:12px 14px;margin-bottom:14px}
.proc-empty-ico{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;flex-shrink:0;color:var(--bc,var(--red2));
  background:var(--panel2);background:color-mix(in srgb,var(--bc,var(--red)) 18%,transparent)}
.proc-empty-txt{flex:1 1 200px;font-weight:600;color:var(--ink2)}
.panel.proc-none{max-width:520px;margin:24px auto;text-align:center;padding:28px 22px}
.proc-none-ico{width:60px;height:60px;border-radius:18px;margin:0 auto 12px;display:grid;place-items:center;background:var(--red-soft);color:var(--red-ink)}
.panel.proc-none h2{margin:0 0 6px;font-size:18px}
.panel.proc-none p{color:var(--muted);margin:0 0 16px}

/* Columns: as many as the board has — side by side with horizontal scroll on desktop */
.pboard{display:flex;gap:14px;align-items:flex-start;overflow-x:auto;padding-bottom:8px}
.pboard .pcol{flex:1 0 260px;max-width:380px;min-width:0}
.pdot{width:9px;height:9px;border-radius:50%;display:inline-block;flex-shrink:0;background:var(--muted)}
.pdot.k-first{background:#6b7280}.pdot.k-open{background:var(--blue)}.pdot.k-done{background:var(--green)}.pdot.k-fail{background:var(--red2)}
.pcol .col-head{align-items:flex-start;gap:8px}
.pc-title{display:flex;flex-direction:column;gap:2px;min-width:0}
.pc-name{display:flex;align-items:center;gap:8px;overflow-wrap:anywhere}
.pc-sla{padding-left:17px;color:var(--muted);font-size:12px;font-weight:600}
.pcol .col-head .count{flex-shrink:0;padding-top:1px}
.pcol.is-closed:not(.locked){background:transparent}
.pcol.is-closed{border-style:dashed}
.pcol.is-closed .col-head{color:var(--muted)}
.pc-note{margin-top:4px;color:var(--muted);font-size:12px;text-align:center}

/* Cards */
.pcard .ttl{display:block;color:var(--ink);margin-bottom:8px}
.pcard .ttl .pill{margin-right:2px;vertical-align:1px}
.pcard[aria-busy="true"]{opacity:.7}
.pcard.is-stuck{border-color:var(--red-line);box-shadow:inset 3px 0 0 var(--red2)}
.pf{margin:0 0 9px;display:grid;gap:3px;font-size:13px;line-height:1.35}
.pf>div{display:flex;gap:6px;min-width:0}
.pf dt{flex-shrink:0;max-width:48%;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf dt::after{content:":"}
.pf dd{margin:0;min-width:0;color:var(--ink2);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf dd.num{font-variant-numeric:tabular-nums}
.p-who{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;color:var(--ink2);font-size:12px;font-weight:600}
.p-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p-who.p-none{color:var(--muted);font-weight:500}
.p-link{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:var(--panel);color:var(--muted);flex-shrink:0}
.p-link:hover{color:var(--ink);border-color:var(--line2)}
.p-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px;font-size:12px}
.p-stage{color:var(--muted);font-weight:600}
.pcard.is-stuck .p-stage{color:var(--due-overdue)}
.p-stuck{padding:2px 8px;border-radius:20px;background:var(--red);color:#fff;font-size:11px;font-weight:800;letter-spacing:.02em}
.pcol.is-closed .p-foot{display:none}
/* Due chip: "−N дн" in red while the card sits in an open column; a plain muted date once closed.
   The column decides (CSS), so the chip stays right after a drag / ⇄ move without a reload. */
.pboard .due{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.pboard .due .due-late{display:none}
.pboard .pcol[data-kind="open"] .due[data-past]{color:var(--due-overdue);background:var(--red-soft);padding:2px 8px;border-radius:20px;font-weight:700}
.pboard .pcol[data-kind="open"] .due[data-past] .due-d{display:none}
.pboard .pcol[data-kind="open"] .due[data-past] .due-late{display:inline}
.pboard .pcol.is-closed .due{color:var(--muted)}
@media(hover:none){ .pboard .pcard .ttl{padding-right:40px} }

/* ⇄ sheet: the board's columns */
.proc-sheet{max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow-y:auto;overscroll-behavior:contain}
.proc-sheet .pdot{width:10px;height:10px}
.proc-sheet .opt-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.proc-sheet .opt-hint{margin-left:auto;padding-left:8px;color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap}
.proc-sheet .opt.cur[disabled]{opacity:1;cursor:default}
.proc-toast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:120;max-width:90vw;
  padding:10px 16px;border-radius:12px;background:var(--ink);color:var(--bg);font-weight:600;font-size:14px;text-align:center;
  box-shadow:var(--shadow);opacity:0;transition:opacity .2s;pointer-events:none}
.proc-toast.on{opacity:1}

@media(max-width:900px){
  .proc-chips{margin:0 -14px 10px;padding:2px 14px 4px}
  .pchip,.pchip-cfg{min-height:44px}
  .pchip-cfg{padding:6px 12px}
  .pchip-cfg span{display:none}
  .proc-desc{display:none}
  .proc-toolbar .proc-new{display:none}             /* the FAB creates a card on this board */
  .proc-tabs button{min-height:44px}
  /* Columns swipe one at a time, like the main board */
  .pboard{scroll-snap-type:x mandatory;margin:0 -14px;padding:0 14px 8px;scroll-padding:0 14px;
    overscroll-behavior-x:contain;scrollbar-width:none}
  .pboard::-webkit-scrollbar{display:none}
  .pboard .pcol{flex:0 0 86vw;max-width:none;scroll-snap-align:start;min-height:58vh}
  .pboard .card-move{width:40px;height:40px;top:5px;right:5px}
  .pboard .card-move::after{content:"";position:absolute;inset:-4px}
  .pboard .pcard .ttl{padding-right:44px}
  .p-link{width:36px;height:36px}
  .panel.proc-none{margin:12px auto}
}

/* ===== v1.6 · boards_admin ===== */
/* ===== v1.6 · boards_admin ===== */
/* «Настройка процессов» (boards_admin.php): board list, icon picker, column/field rows (a grid on
   wide screens, cards below 1100px), no-JS delete confirm (<details>), day-limit dimming. */
.ba-wrap{max-width:1080px}
.ba-anchor,.ba-row{scroll-margin-top:90px}
.ba-sr,.ba-lbl{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.ba-ph{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.ba-ph h2{margin:0}
.ba-badge{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;flex-shrink:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.12)}
.ba-badge.lg{width:52px;height:52px;border-radius:14px}
.pill.ba-arch{background:var(--p-dept-bg);color:var(--muted);margin-left:8px;vertical-align:2px}
.ba-flash{margin:0 0 14px}

/* board list */
.ba-bitem{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;padding:12px 0;border-bottom:1px solid var(--line)}
.ba-bitem:first-child{padding-top:2px}
.ba-bitem:last-child{border-bottom:0;padding-bottom:2px}
.ba-bitem.off .ba-badge{filter:grayscale(1);opacity:.55}
.ba-binfo{flex:1 1 200px;min-width:0}
.ba-bname{font-weight:700;font-size:15px;overflow-wrap:anywhere}
.ba-bname:hover{color:var(--red-ink)}
.ba-bitem.off .ba-bname{color:var(--muted)}
.ba-bdesc{color:var(--ink2);font-size:13px;margin-top:2px;overflow-wrap:anywhere}
.ba-bmeta{color:var(--muted);font-size:12px;font-weight:600;margin-top:3px}
.ba-bacts{display:flex;align-items:center;gap:6px;margin-left:auto}
.ba-mvform{display:contents}
.btn.ba-sq{width:34px;height:34px;padding:0;justify-content:center;flex-shrink:0}

/* one board: header, basics */
.ba-backlink{display:inline-flex;align-items:center;gap:6px;min-height:32px;margin-bottom:10px;color:var(--muted);font-weight:600;font-size:14px}
.ba-backlink:hover{color:var(--ink)}
.ba-head{display:flex;align-items:center;gap:14px;margin-bottom:18px}
.ba-head h2{margin:0;font-size:20px;font-weight:700;overflow-wrap:anywhere}
.ba-grid2{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 14px}
.field input.ba-color{width:76px;height:44px;padding:4px;cursor:pointer}
.field textarea.ba-desc{min-height:64px}
.ba-icons{border:0;margin:0 0 14px;padding:0;min-width:0}
.ba-icons legend{font-size:13px;font-weight:600;color:var(--muted);margin:0 0 6px;padding:0}
.ba-opts{display:flex;flex-wrap:wrap;gap:8px}
.ba-ico{position:relative;cursor:pointer}
.ba-ico input{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}
.ba-ico .tile{width:44px;height:44px;border-radius:11px;border:1px solid var(--line);background:var(--panel2);color:var(--muted);
  display:grid;place-items:center;transition:border-color .15s,background .15s,color .15s}
.ba-ico:hover .tile{border-color:var(--line2);color:var(--ink)}
.ba-ico input:checked+.tile{border-color:var(--red2);background:var(--red-soft);color:var(--red-ink);box-shadow:0 0 0 1px var(--red2)}
.ba-ico input:focus-visible+.tile{outline:2px solid var(--red2);outline-offset:2px}
.ba-check{display:inline-flex;align-items:center;gap:9px;min-height:40px;cursor:pointer;font-weight:600;font-size:14px;color:var(--ink)}
.ba-check input{width:18px;height:18px;margin:0;flex-shrink:0;accent-color:var(--red2);cursor:pointer}

/* columns: the card's path + help */
.ba-flow{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 14px}
.ba-flow-lbl{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-right:4px}
.ba-step{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;border:1px solid var(--line);
  background:var(--panel2);font-size:13px;font-weight:600;max-width:100%;overflow-wrap:anywhere}
.ba-step small{color:var(--muted);font-size:11px;font-weight:700;white-space:nowrap}
.ba-step.done{background:var(--s-done-bg);border-color:transparent;color:var(--s-done)}
.ba-step.fail{background:var(--s-todo-bg);border-color:transparent;color:var(--s-todo)}
.ba-arrow{color:var(--muted);font-size:13px}
.ba-kdot{width:8px;height:8px;border-radius:50%;flex-shrink:0;background:var(--blue)}
.ba-kdot.done{background:var(--green)}.ba-kdot.fail{background:var(--muted)}
.ba-help{margin:0 0 16px;padding-left:18px;color:var(--muted);font-size:13px;line-height:1.5}
.ba-help li{margin-bottom:4px}
.ba-help li::marker{color:var(--line2)}

/* column / field rows: a table-like grid on wide screens */
.ba-table{border-top:1px solid var(--line)}
.ba-thead,.ba-row{display:grid;gap:10px;align-items:center}
.ba-cols .ba-thead,.ba-cols .ba-row{grid-template-columns:minmax(0,1.5fr) minmax(0,1.35fr) 96px 118px 232px}
.ba-flds .ba-thead,.ba-flds .ba-row{grid-template-columns:minmax(0,1.8fr) minmax(0,1fr) 118px 118px 232px}
.ba-thead{padding:10px 0 8px;border-bottom:1px solid var(--line);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.ba-row{margin:0;padding:10px 0;border-bottom:1px solid var(--line)}
.ba-row:target{animation:ba-hl 1.8s ease}
@keyframes ba-hl{0%,40%{box-shadow:0 0 0 2px var(--red2)}100%{box-shadow:0 0 0 2px transparent}}
.ba-row .inp{width:100%;min-width:0;min-height:40px}
.ba-row .ba-flash,.ba-addttl{grid-column:1/-1;margin:0}
.ba-addttl{padding-top:6px}
.ba-add{border-bottom:0;padding-top:14px}
.ba-meta{display:block;margin-top:4px;color:var(--muted);font-size:12px;font-weight:600}
.ba-none{color:var(--muted);font-size:14px;padding:14px 0}
.ba-acts{display:flex;align-items:center;justify-content:flex-end;gap:6px}
.ba-row.dirty .ba-save{background:var(--red);border-color:var(--red);color:#fff}
/* the day limit only matters in open columns */
.ba-row:not(:has(select[name="kind"] option[value="open"]:checked)) .ba-c-sla{opacity:.45}

/* delete: a small confirm pop-up that works without JS */
.ba-del{position:relative}
.ba-del>summary{list-style:none}
.ba-del>summary::-webkit-details-marker{display:none}
.ba-del[open]>summary{background:var(--danger-hover);border-color:var(--red-line)}
.ba-pop{position:absolute;right:0;top:calc(100% + 6px);z-index:30;width:270px;max-width:calc(100vw - 48px);padding:12px;
  background:var(--panel);border:1px solid var(--red-line);border-radius:12px;box-shadow:var(--shadow);
  color:var(--ink2);font-size:13px;line-height:1.45;text-align:left;white-space:normal}
.ba-pop p{margin:0 0 10px;overflow-wrap:anywhere}
.ba-pop p:last-child{margin:0}
.ba-pop .btn{width:100%;justify-content:center}

/* below 1100px a row becomes a card with its own labels */
@media(max-width:1100px){
  .ba-table{border-top:0}
  .ba-thead{display:none}
  .ba-cols .ba-row,.ba-flds .ba-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px 12px;padding:12px;margin-bottom:10px;
    background:var(--panel2);border:1px solid var(--line);border-radius:12px}
  .ba-row .inp{background:var(--panel)}
  .ba-c-name,.ba-acts,.ba-cols .ba-c-chk,.ba-flds .ba-c-type{grid-column:1/-1}
  .ba-table .ba-row.ba-add{background:transparent;border-style:dashed}
  .ba-add .inp{background:var(--panel2)}
  .ba-lbl{position:static;width:auto;height:auto;margin:0 0 4px;overflow:visible;clip:auto;white-space:normal;
    display:block;font-size:12px;font-weight:600;color:var(--muted)}
  .ba-check .ba-lbl{display:inline;margin:0;font-size:14px;color:var(--ink)}
  .ba-acts{justify-content:flex-start}
  .ba-acts .ba-save{flex:1 1 auto;justify-content:center}
  .ba-addttl{padding-top:0}
}
@media(max-width:900px){
  .ba-head{flex-wrap:wrap}
  .ba-head .ba-binfo{flex:1 1 180px}
  .ba-head>.btn{width:100%;justify-content:center;min-height:44px}
  .ba-backlink{min-height:44px;margin-bottom:4px}
  .ba-ph .btn{min-height:40px}
  .ba-bacts{width:100%;margin-left:0;gap:8px}
  .ba-bacts .btn{min-height:44px}
  .ba-bacts>a.btn{flex:1 1 0;justify-content:center;min-width:0}
  .btn.ba-sq{width:44px;height:44px}
  .ba-acts{gap:8px}
  .ba-acts .btn{min-height:44px}
  .ba-row .inp{min-height:44px}
  .ba-check{min-height:44px}
  .ba-pop{width:280px}
}

/* ===== v1.6 · projects_list ===== */
/* ===== v1.6 · projects list (projects.php) ===== */
/* Mobile first: one column of project cards; 2 columns from 700px, 3 from 1280px. */
.pj-head{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap;margin-bottom:12px}
.pj-summary{flex:1 1 220px;min-width:0;display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;font-size:14px;font-weight:600;color:var(--ink2)}
.pj-sum{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;color:inherit}
.pj-sum b{font-weight:800;color:var(--ink)}
.pj-sum.zero{color:var(--muted)}.pj-sum.zero b{color:var(--muted)}
a.pj-sum{border-radius:6px}
a.pj-sum:hover{color:var(--ink);text-decoration:underline}
a.pj-sum:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.pj-sep{color:var(--muted)}
.pj-dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0;background:var(--muted)}
.pj-dot.red{background:var(--red2)}.pj-dot.yellow{background:var(--amber)}.pj-dot.green{background:var(--green)}
.pj-dot.paused{background:var(--blue)}.pj-dot.done{background:var(--green)}.pj-dot.cancelled{background:var(--muted)}
.pj-new{margin-left:auto;flex-shrink:0;min-height:44px;justify-content:center}

/* Scope chips: a segmented control that scrolls sideways on narrow phones. */
.pj-scope{display:flex;max-width:100%;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;margin-bottom:14px}
.pj-scope::-webkit-scrollbar{display:none}
.pj-scope a{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;min-height:44px;padding:8px 13px}
.pj-scope a .n{font-size:12px;font-weight:800;opacity:.75}
.pj-scope a:focus-visible{outline:2px solid var(--red2);outline-offset:-2px}

/* Cards */
.pj-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}
.pj-card{position:relative;display:flex;flex-direction:column;gap:10px;min-width:0;color:var(--ink);
  background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--pc,var(--red));border-radius:var(--radius);
  padding:13px 14px 12px;transition:border-color .15s,background .15s}
.pj-card:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.pj-card:active{background:var(--hover)}
.pj-card.lvl-done,.pj-card.lvl-cancelled{background:var(--panel2)}
.pj-card.lvl-cancelled .pj-name{color:var(--ink2)}
.pj-top{display:flex;align-items:flex-start;gap:10px}
.pj-name{flex:1;min-width:0;margin:0;font-size:16px;font-weight:700;line-height:1.3;overflow-wrap:anywhere}
.pj-health{flex-shrink:0;display:inline-flex;align-items:center;gap:6px;margin-top:1px;padding:3px 9px 3px 7px;border-radius:20px;
  font-size:12px;font-weight:700;white-space:nowrap;background:var(--p-dept-bg);color:var(--muted)}
.pj-health .pj-dot{width:8px;height:8px}
.pj-health.red{background:var(--red-soft);color:var(--due-overdue)}
.pj-health.yellow{background:var(--s-rev-bg);color:var(--s-rev)}
.pj-health.green{background:var(--s-done-bg);color:var(--s-done)}
.pj-health.paused{background:var(--s-prog-bg);color:var(--s-prog)}
.pj-health.done{background:var(--s-done-bg);color:var(--s-done)}
.pj-health.cancelled{background:var(--s-todo-bg);color:var(--s-todo)}

/* Why it is red / yellow (first reason prominent, the rest small), pause reason, closing note */
.pj-why{margin-top:-4px;min-width:0;font-size:13px;line-height:1.4;color:var(--ink2);overflow-wrap:anywhere}
.pj-why .w1{font-weight:600}
.pj-card.lvl-red .pj-why .w1{color:var(--due-overdue)}
.pj-card.lvl-yellow .pj-why .w1{color:var(--amber)}
.pj-card.lvl-done .pj-why,.pj-card.lvl-cancelled .pj-why{color:var(--muted)}
.pj-card.lvl-done .pj-why .w1,.pj-card.lvl-cancelled .pj-why .w1{font-weight:500}
.pj-why ul{list-style:none;margin:3px 0 0;padding:0;font-size:12px;color:var(--muted)}
.pj-why li{position:relative;padding-left:12px}
.pj-why li::before{content:"·";position:absolute;left:3px;font-weight:800}
.pj-why li.more{font-style:italic}

/* Progress «7 из 12 · 58%» */
.pj-prog-txt{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 6px;font-size:13px;margin-bottom:6px}
.pj-prog-txt b{font-weight:700}
div.pj-prog-txt.pj-muted{margin-bottom:0}
.pj-muted{color:var(--muted)}
.pj-card .bar{height:6px}

/* Current stage «Этап 2/4: … — до 15.10» */
.pj-stage{font-size:13px;line-height:1.4;color:var(--ink2);overflow-wrap:anywhere}
.pj-stage .pj-lbl{color:var(--muted);font-weight:700}
.pj-stage .late{color:var(--due-overdue);font-weight:700}

/* Footer: owner (+ department) on the left, deadline on the right */
.pj-foot{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin-top:auto;padding-top:10px;border-top:1px dashed var(--line)}
.pj-owner{display:inline-flex;align-items:center;gap:7px;min-width:0;max-width:100%;font-size:13px;font-weight:600}
.pj-owner .nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pj-foot .pj-dept{min-width:0;max-width:40%;overflow:hidden;text-overflow:ellipsis}
.pj-when{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:2px;text-align:right;min-width:0}
.pj-due{font-size:13px;font-weight:600;color:var(--muted)}
.pj-due.soon{color:var(--amber)}
.pj-due.ok{color:var(--s-done)}
.pj-due.late{color:var(--due-overdue);background:var(--red-soft);padding:2px 9px;border-radius:20px;font-weight:700}
.pj-card.lvl-paused .pj-due{color:var(--muted);background:none;padding:0;font-weight:600}
.pj-moved{font-size:11px;font-weight:600;color:var(--muted)}

/* Empty state */
.pj-empty{max-width:600px;margin:12px auto 0;text-align:center;padding:26px 18px}
.pj-empty-ico{width:56px;height:56px;margin:0 auto 12px;border-radius:16px;display:grid;place-items:center;background:var(--red-soft);color:var(--red-ink)}
.pj-empty h2{margin:0 0 8px;font-size:18px}
.pj-empty p{margin:0 0 14px;color:var(--ink2);font-size:14px;line-height:1.55}
.pj-empty .pj-empty-lead{color:var(--ink);font-weight:600}
.pj-empty .pj-new{display:flex;margin:0 auto 14px;width:100%;max-width:280px}
.pj-empty .pj-empty-hint{margin:0;padding-top:12px;border-top:1px dashed var(--line);color:var(--muted);font-size:13px}

@media(min-width:700px){
  .pj-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
}
@media(min-width:901px){
  .pj-scope{display:inline-flex}
  .pj-scope a{min-height:36px;padding:7px 14px}
  .pj-new{min-height:0}
  .pj-card{padding:15px 16px 13px}
  .pj-empty{padding:34px 28px}
}
@media(min-width:1280px){
  .pj-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media(max-width:380px){
  .pj-scope a{padding:8px 10px;font-size:13px}
  .pj-health{padding:3px 7px 3px 6px}
}
@media(hover:hover){ .pj-card:hover{border-color:var(--line2);border-left-color:var(--pc,var(--red));background:var(--panel2)} }

/* ===== v1.6 · project_page ===== */
/* ===== v1.6 · project page (project.php) ===== */
.pv-gap{height:14px}
.pv-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;align-items:start}
.pv-layout.pv-single{grid-template-columns:minmax(0,1fr);max-width:920px}
.pv-main,.pv-side{min-width:0}
.pv-anchor{scroll-margin-top:84px}
.pv-notice{margin-bottom:14px}
.pv-count{color:var(--muted);font-weight:600;font-size:14px}
.pv-note{color:var(--muted);font-size:13px;line-height:1.45;margin:8px 0 10px;overflow-wrap:anywhere}
.pv-empty{color:var(--muted);font-size:13px;margin:0 0 12px}
.pv-muted{color:var(--muted);font-weight:500}
.pv-inline{display:inline-flex;margin:0}
.btn.pv-ico{min-width:36px;justify-content:center;padding-left:0;padding-right:0;font-size:16px;font-weight:700}
.pv-lbl{display:block;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:4px}

/* Header: name, health, goal, progress, dates, people */
.pv-head{border-left:4px solid var(--pv-c,var(--red))}
.pv-head .cancel-banner{margin-bottom:14px}
.pv-title-row{display:flex;align-items:flex-start;gap:10px}
.pv-dot{width:12px;height:12px;border-radius:50%;background:var(--pv-c,var(--red));flex-shrink:0;margin-top:8px}
.pv-head .pv-title{flex:1;min-width:0;margin:0;font-size:21px;line-height:1.3;font-weight:700;overflow-wrap:anywhere}
.pv-chips{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px}
.pv-health{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:800;
  white-space:nowrap;background:var(--p-dept-bg);color:var(--muted)}
.pv-health::before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor;flex-shrink:0}
.pv-health.red{background:var(--red-soft);color:var(--due-overdue)}
.pv-health.yellow{background:var(--s-rev-bg);color:var(--s-rev)}
.pv-health.green,.pv-health.done{background:var(--s-done-bg);color:var(--s-done)}
.pv-health.active{background:var(--s-prog-bg);color:var(--s-prog)}
.pv-health.paused{background:var(--s-todo-bg);color:var(--s-todo)}
.pv-health.cancelled{background:var(--p-dept-bg);color:var(--muted)}
.pv-reasons{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:4px}
.pv-reasons li{position:relative;padding-left:16px;font-size:13px;line-height:1.45;color:var(--ink2);overflow-wrap:anywhere}
.pv-reasons li::before{content:"";position:absolute;left:3px;top:.5em;width:6px;height:6px;border-radius:50%;background:var(--muted)}
.pv-reasons.red li::before{background:var(--due-overdue)}
.pv-reasons.yellow li::before{background:var(--amber)}
.pv-goal{margin-top:16px;padding:12px 14px;background:var(--panel2);border:1px solid var(--line);border-radius:12px}
.pv-goal p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink2);line-height:1.55}
.pv-prog{margin-top:16px}
.pv-prog-top{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:7px;font-size:13px;font-weight:600;color:var(--muted)}
.pv-rev{color:var(--s-rev)}
.pv-pct{font-size:20px;font-weight:800;color:var(--gold);line-height:1}
.pv-now{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:13px;font-weight:600;color:var(--ink2);overflow-wrap:anywhere}
.pv-now .i{color:var(--green)}
.pv-dates{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;margin-top:14px;font-size:14px;font-weight:600}
.pv-left{color:var(--muted)}
.pv-left.today{color:var(--amber)}
.pv-left.late{color:var(--due-overdue);font-weight:700}
.pv-baseline{flex-basis:100%;font-size:12px;font-weight:500;color:var(--muted)}
.pv-people{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.pv-owner{display:flex;align-items:center;gap:10px;min-width:0}
.avatar.pv-av-lg{width:34px;height:34px;font-size:13px}
.pv-who{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.pv-who small{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
.pv-who b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-stack{display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:4px 14px;border:1px solid var(--line);border-radius:999px;
  background:var(--panel2);color:var(--ink2);font-size:13px;font-weight:700;transition:.15s}
.pv-stack:hover{border-color:var(--line2);color:var(--ink)}
.pv-stack:focus-visible,.pv-stage>summary:focus-visible,.pv-t-title:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.pv-avs{display:inline-flex;margin-left:-9px}
.pv-avs .avatar{width:30px;height:30px;font-size:11px;border:2px solid var(--panel2);margin-left:-9px}
.pv-avs .avatar:first-child{margin-left:0}
.avatar.pv-more{background:var(--line2);color:var(--ink)}
.pv-stack-lbl{white-space:nowrap}

/* Stages (accordion) and their tasks */
.pv-stage{background:var(--panel2);border:1px solid var(--line);border-radius:12px;margin-bottom:10px}
.pv-stage.is-current{border-color:var(--red-line);box-shadow:inset 3px 0 0 var(--red2)}
.pv-stage>summary{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 14px;min-height:56px;
  cursor:pointer;list-style:none;border-radius:12px}
.pv-stage>summary::-webkit-details-marker{display:none}
.pv-num{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--panel);border:1.5px solid var(--line2);
  font-size:13px;font-weight:800;color:var(--ink2)}
.pv-stage.is-current .pv-num{border-color:var(--red2);color:var(--red-ink)}
.pv-stage.is-closed .pv-num{background:var(--green);border-color:var(--green);color:#fff}
.pv-st-main{display:flex;flex-direction:column;gap:4px;min-width:0}
.pv-st-title{font-weight:700;font-size:15px;overflow-wrap:anywhere}
.pv-stage.is-closed .pv-st-title{color:var(--ink2)}
.pv-st-sub{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:12px;font-weight:600;color:var(--muted)}
.pv-st-sub .due{margin-left:0}
.pv-st-ok{color:var(--s-done)}
.pv-st-main .progress-mini{display:block;margin-top:4px;max-width:260px}
.pv-st-main .progress-mini>span{display:block;height:100%;background:linear-gradient(90deg,var(--red),var(--gold));border-radius:5px}
.pv-late{display:inline-block;padding:1px 7px;border-radius:6px;background:var(--red-soft);color:var(--due-overdue);font-size:11px;font-weight:800;white-space:nowrap}
.pv-chev{width:9px;height:9px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);margin:0 4px 4px;transition:transform .15s}
.pv-stage[open]>summary .pv-chev{transform:rotate(-135deg);margin:4px 4px 0}
.pv-st-body{padding:0 14px 12px}
.pv-tasks{list-style:none;margin:0;padding:0}
.pv-task{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:8px 0;border-top:1px dashed var(--line)}
.pv-t-title{flex:1 1 220px;min-width:0;font-weight:600;overflow-wrap:anywhere;padding:4px 0;border-radius:6px}
.pv-t-title:hover{color:var(--red-ink)}
.pv-task.is-done .pv-t-title{color:var(--muted);text-decoration:line-through}
.pv-t-meta{display:flex;align-items:center;gap:10px;margin-left:auto;font-size:13px;min-width:0}
.pv-t-meta .due{margin-left:0;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.pv-t-who{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:170px;font-weight:600;color:var(--ink2)}
.pv-t-who .avatar{width:22px;height:22px;font-size:10px}
.pv-t-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-st-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding-top:10px;border-top:1px dashed var(--line)}
.pv-spacer{flex:1}
.pv-st-edit>summary{list-style:none}
.pv-st-edit>summary::-webkit-details-marker{display:none}
.pv-st-edit[open]{flex-basis:100%}
.pv-st-edit[open]>summary{background:var(--hover);border-color:var(--line2)}
.pv-st-edit form{margin-top:10px}
.pv-grid-form{display:grid;grid-template-columns:minmax(0,1fr) 170px auto;gap:10px;align-items:end}
.pv-grid-form .field{margin:0;min-width:0}
.pv-grid-form .btn{justify-content:center;min-height:42px}
.pv-add-stage{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}

/* Side: status actions + members */
.pv-cur-status{margin:-4px 0 14px}
.pv-act{margin-bottom:10px}
.pv-act>summary{list-style:none;width:100%;justify-content:center}
.pv-act>summary::-webkit-details-marker{display:none}
.pv-act[open]>summary{border-color:var(--line2);background:var(--hover)}
.pv-act form{margin-top:10px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}
.pv-act form .btn{width:100%;justify-content:center}
.pv-act .field textarea{min-height:80px}
.pv-act-form{margin:0 0 10px}
.pv-act-form .btn{width:100%;justify-content:center}
.pv-act-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pv-act-row .btn{justify-content:center}
.pv-del{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.pv-mlist{list-style:none;margin:0;padding:0}
.pv-m{display:flex;align-items:center;gap:10px;min-height:48px;padding:6px 0;border-bottom:1px dashed var(--line)}
.pv-m:last-child{border-bottom:0}
.pv-m-name{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-m-name small{color:var(--muted);font-weight:500}
.pv-m .badge-role{white-space:nowrap}
.btn.pv-rm{color:var(--muted)}
.btn.pv-rm:hover{color:var(--danger-ink)}
.pv-add-member{display:grid;grid-template-columns:minmax(0,1fr) 130px;gap:10px;align-items:end;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.pv-add-member .field{margin:0;min-width:0}
.pv-add-member .btn{grid-column:1/-1;justify-content:center}

/* Create / edit form */
.pv-form-panel{max-width:760px}
.pv-color input[type=color]{height:44px;padding:4px 6px;cursor:pointer}
.pv-static-owner{gap:9px;font-weight:600}

/* Members sheet (reuses .sheet). Without JS the avatars link opens it via :target. */
.pv-sheet{max-height:85vh;max-height:85dvh;overflow-y:auto;overscroll-behavior:contain}
.pv-sheet .pv-mlist{padding:0 8px 6px}
.pv-sheet .pv-sheet-go{color:var(--red-ink)}
.pv-sheet:target{transform:none;visibility:visible}
@media(min-width:901px){
  .pv-sheet{max-height:80vh}
  .pv-sheet:target{transform:translate(-50%,-50%);opacity:1}
}

@media(max-width:900px){
  .pv-layout{grid-template-columns:minmax(0,1fr);gap:0}
  .pv-head .pv-title{font-size:19px}
  .pv-title-row .btn{min-height:40px}
  .pv-stage>summary{padding:12px}
  .pv-st-body{padding:0 12px 12px}
  /* Task row: title on its own line (big tap target), status + who + due under it */
  .pv-t-title{order:-1;flex-basis:100%;display:flex;align-items:center;min-height:40px;padding:2px 0}
  .pv-t-meta{flex:1 1 auto;justify-content:flex-end;margin-left:0}
  .pv-t-who{max-width:none;flex:0 1 auto}
  .pv-st-tools .pv-spacer{display:none}
  .pv-st-tools .pv-add-task{flex:1 1 100%;justify-content:center}
  .pv-st-tools .btn,.btn.pv-ico,.btn.pv-rm{min-height:44px}
  .btn.pv-ico,.btn.pv-rm{min-width:44px}
  .pv-grid-form,.pv-add-member{grid-template-columns:minmax(0,1fr)}
  .pv-grid-form .btn,.pv-add-member .btn,.pv-act>summary,.pv-act-row .btn,.pv-act-form .btn,.pv-act form .btn{min-height:44px}
  .pv-m{min-height:52px}
}
@media(max-width:380px){
  .pv-act-row{grid-template-columns:minmax(0,1fr)}
}

/* ===== v1.6 · taskpage ===== */
/* ===== v1.6 · task ===== */
/* Task page: «Проект › Этап» / «Процесс › Колонка» crumbs, process-card column + fields + move,
   card form header and fields, «Сделать проектом» (reuses the cancel sheet: .cancel-form). */
.tk-crumbs{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;margin:8px 0 0;font-size:13px;font-weight:600;color:var(--muted);min-width:0}
.tk-crumb{display:inline-flex;align-items:center;gap:7px;min-width:0;max-width:100%;overflow-wrap:anywhere}
a.tk-crumb{color:var(--ink2);border-radius:8px;transition:color .15s}
a.tk-crumb:hover{color:var(--ink)}
a.tk-crumb:hover span:last-child{text-decoration:underline;text-underline-offset:3px}
a.tk-crumb:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.tk-crumb.cur{color:var(--muted)}
.tk-crumb-ico{display:grid;color:var(--bc,var(--muted));color:color-mix(in srgb,var(--bc,var(--muted)) 72%,var(--ink))}
.tk-sep{color:var(--line2);font-weight:700}
.tk-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;display:inline-block;box-shadow:0 0 0 2px var(--panel2)}
.tk-crumbs .pill{font-size:10px;padding:2px 7px}

/* Card: column chip, days in column, «Застряло» */
.status-chip.tk-col-open{background:var(--s-prog-bg);color:var(--s-prog)}
.status-chip.tk-col-done{background:var(--s-done-bg);color:var(--s-done)}
.status-chip.tk-col-fail{background:var(--s-todo-bg);color:var(--s-todo)}
.tk-age{font-size:12px;font-weight:600;color:var(--muted);white-space:nowrap}
.tk-stuck{display:inline-flex;align-items:center;font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;
  padding:3px 9px;border-radius:20px;background:var(--red-soft);color:var(--due-overdue);border:1px solid var(--red-line);white-space:nowrap}

/* Card fields on the task page (label: value) */
.tk-fields{display:grid;grid-template-columns:minmax(90px,max-content) minmax(0,1fr);gap:8px 16px;margin:0 0 14px;padding:12px 14px;
  background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--bc,var(--line2));border-radius:11px;font-size:14px;line-height:1.4}
.tk-fields dt{color:var(--muted);font-weight:600;font-size:13px}
.tk-fields dd{margin:0;min-width:0;overflow-wrap:anywhere;color:var(--ink)}
.tk-fields .tk-empty{color:var(--muted)}
.tk-fields a{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;
  color:var(--red-ink);font-weight:600;text-decoration:underline;text-underline-offset:2px}
.tk-fields a:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:4px}

/* Card: move to another column */
.tk-move{display:flex;align-items:center;gap:8px 10px;flex-wrap:wrap;margin:16px 0 0;padding-top:14px;border-top:1px solid var(--line)}
.tk-move label{font-size:13px;font-weight:600;color:var(--muted)}
.tk-move select{flex:1 1 180px;min-width:0;max-width:340px}

/* Card form: process header + fields grid; locked project on the task form */
.tk-board{display:flex;align-items:center;gap:12px;margin:0 0 16px;padding:10px 12px;min-width:0;background:var(--panel2);
  border:1px solid var(--line);border-left:3px solid var(--bc,var(--red));border-radius:12px}
.tk-board-ico{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;flex-shrink:0;background:var(--panel);border:1px solid var(--line);
  color:var(--bc,var(--red));color:color-mix(in srgb,var(--bc,var(--red)) 72%,var(--ink))}
.tk-board-txt{display:flex;flex-direction:column;min-width:0}
.tk-board-txt small{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.tk-board-txt b{font-size:16px;font-weight:700;overflow-wrap:anywhere}
.tk-cf{border:0;margin:0;padding:0;min-width:0}
.tk-cf legend{padding:0}
.tk-cf-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 14px}
.tk-pstatic{gap:8px;font-weight:600;overflow-wrap:anywhere}

/* «Сделать проектом» sheet / inline panel */
.tk-conv .tk-conv-steps{margin:0 0 14px;font-size:15px;line-height:1.35}
.tk-conv .row{gap:0 12px}

@media(max-width:900px){
  a.tk-crumb{min-height:40px}
  .tk-cf-grid{grid-template-columns:minmax(0,1fr)}
  .tk-move label{flex-basis:100%}
  .tk-move select{max-width:none;min-height:44px}
  .tk-move .btn{min-height:44px;padding:0 18px;justify-content:center}
}
@media(max-width:380px){
  .tk-fields{grid-template-columns:minmax(0,1fr);gap:0}
  .tk-fields dd{margin-bottom:8px}
  .tk-fields dd:last-child{margin-bottom:0}
}

/* ===== v1.6 · nav ===== */
/* ===== v1.6 · layout / board / list / dashboard ===== */
/* Phones: the bottom bar no longer has a «Меню» tab, so the topbar ☰ opens the sidebar
   (Список, Повторяющиеся, Архив, Сотрудники, Настройки, theme, logout). */
@media(max-width:900px){
  .topbar .btn.hamburger{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 10px;margin-left:-4px;flex-shrink:0}
}

/* Project chip (colour dot + name): board cards, list rows (links), dashboard «Назначенные мне» (plain) */
.projchip{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;padding:3px 9px 3px 7px;border-radius:20px;
  background:var(--p-dept-bg);border:1px solid var(--line);color:var(--ink2);font-size:11px;font-weight:700;line-height:1.35;
  white-space:nowrap;vertical-align:middle}
.projchip-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.projchip-name{min-width:0;overflow:hidden;text-overflow:ellipsis}
a.projchip{cursor:pointer;transition:border-color .15s,color .15s,background .15s}
a.projchip:hover{border-color:var(--line2);color:var(--ink);background:var(--hover)}
a.projchip:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.projchip.is-paused{opacity:.72;border-style:dashed}
.t-proj{margin-top:6px;max-width:100%}
table.tasks td.t-title strong a:hover{text-decoration:underline}
@media(max-width:900px){
  .projchip{font-size:12px;padding:5px 11px 5px 9px}
  .projchip-dot{width:9px;height:9px}
}

/* Dashboard: «Проекты под риском» + «Процессы» */
.dz-panel{min-width:0}
.dz-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 6px}
.dz-head h2{margin:0;display:flex;align-items:center;gap:8px;min-width:0}
.dz-count{font-size:12px;font-weight:800;min-width:22px;padding:1px 7px;border-radius:10px;background:var(--red-soft);color:var(--red-ink);text-align:center;line-height:1.5}
.dz-all{flex-shrink:0;color:var(--red-ink);font-weight:700;font-size:13px;white-space:nowrap;padding:8px 2px;border-radius:8px}
.dz-all:hover{text-decoration:underline}
.dz-all:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.dz-item{display:flex;align-items:center;gap:12px;min-height:52px;padding:10px 8px;margin:0 -8px;border-radius:10px;color:var(--ink);
  border-bottom:1px dashed var(--line);transition:background .15s}
.dz-item:last-child{border-bottom:0}
.dz-item:hover{background:var(--panel2)}
.dz-item:focus-visible{outline:2px solid var(--red2);outline-offset:-2px}
.dz-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.dz-ico{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:#fff;flex-shrink:0}
.dz-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.dz-name{font-weight:700;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dz-why{color:var(--muted);font-size:13px;line-height:1.35;overflow-wrap:anywhere}
.dz-pill{flex-shrink:0;font-size:11px;font-weight:800;padding:3px 9px;border-radius:20px;white-space:nowrap}
.dz-pill.red{background:var(--red-soft);color:var(--due-overdue)}
.dz-pill.yellow{background:var(--s-rev-bg);color:var(--s-rev)}
.dz-pill.green{background:var(--s-done-bg);color:var(--s-done)}
.dz-ok{color:var(--ok-ink);background:var(--ok-bg);border:1px solid var(--ok-line);border-radius:10px;padding:12px 14px;font-weight:600;font-size:14px}
@media(max-width:900px){
  .dz-item{min-height:56px}
  .dz-all{min-height:44px;display:inline-flex;align-items:center}
}

/* ===== v1.6.1 · process ===== */
/* ===== v1.6.1 · process cards that stay put ===== */
/* A card in an admin-only column («Выплачено») seen by a non-admin: not draggable, no ⇄ button,
   so the title needs no room for the button (phones / touch keep 40–44px otherwise). */
.pboard .pcard.is-fixed{cursor:pointer}
.pboard .pcard.is-fixed .ttl{padding-right:0}
/* No column accepts this person's cards (every column admin-only) → no «+» on the page.
   process.js also removes the FAB and topbar button; this rule stops them flashing before JS runs. */
body:has(#pboard[data-new-url=""]) .fab,
body:has(#pboard[data-new-url=""]) .new-task-btn{display:none}

/* ===== v1.6.1 · task_archive_notif ===== */
/* v1.6.1: project crumb without a link, card locked in an admin-only column, «Проект» notification chip */
.tk-crumb-plain{color:var(--ink2);cursor:default}
.field.tk-col-locked select:disabled{opacity:.75;cursor:not-allowed;background:var(--panel2)}
.n-type.project_assign{background:var(--p-med-bg);color:var(--p-med)}

/* ===== v1.6.1 · lists_projects ===== */
/* ===== v1.6.1 · lists / dashboard / projects (list.php, board.php, index.php, project.php) ===== */
/* Title cell: project chip + process chip side by side (overdue view), wrapping on phones */
.t-proj{display:flex;flex-wrap:wrap;gap:6px;min-width:0}

/* «Проект» filter: a long project name must not widen the toolbar */
.toolbar select[name="project"]{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:900px){
  .toolbar.open .fx select[name="project"]{max-width:none}
}

/* Project page: add / edit stage forms wrap instead of squeezing the title input (901–1100px).
   Mobile-first: stacked; from 901px title (min 180px) + date on one line, the button wraps when short of room.
   form.… outranks the old .pv-grid-form grid rules whatever the file order. */
form.pv-grid-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px}
form.pv-grid-form>.field{flex:1 1 100%;min-width:0}
form.pv-grid-form>.btn{flex:1 1 100%}
@media(min-width:901px){
  form.pv-grid-form>.field:first-of-type{flex:1 1 180px;min-width:180px}
  form.pv-grid-form>.field+.field{flex:0 1 170px;min-width:150px}
  form.pv-grid-form>.btn{flex:0 0 auto}
}

/* Process chip / empty-state icons: the board colour mixed with the ink colour, so the glyph stays
   readable on the dark theme (dark board colours) and on the light one (pale board colours).
   The filled .pchip.on state keeps its white icon (higher-specificity rule already in the file). */
.pchip-ico,.proc-empty-ico{color:var(--ink2);color:color-mix(in srgb,var(--bc,var(--red2)) 55%,var(--ink))}

/* ===== v1.6.1 · boards_admin ===== */
/* boards_admin.php: «who sees which cards» note in the board header (tokens only — follows dark/light) */
.ba-vis{display:flex;align-items:flex-start;gap:6px;margin:6px 0 0;max-width:62ch;color:var(--muted);font-size:13px;line-height:1.45}
.ba-vis svg{flex-shrink:0;margin-top:2px;color:var(--gold)}

/* ===== v1.6.1 · due range quick chips ===== */
.due-quick{display:inline-flex;gap:6px;flex-wrap:wrap}

/* ===== v1.7 · task_explain ===== */
/* ===== v1.7 · lateness on the task page (task.php) ===== */
/* «вовремя» / «опоздание N дн.» chip: next to the due date, in the explanations, on the «написать» summary */
.lx-badge{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:800;line-height:1.2;padding:3px 9px;
  border-radius:20px;white-space:nowrap;border:1px solid transparent}
.lx-badge.is-late{background:var(--red-soft);color:var(--due-overdue);border-color:var(--red-line)}
.lx-badge.is-ontime{background:var(--s-done-bg);color:var(--s-done);border-color:var(--ok-line)}

/* The red «объяснительная» block: top of the task (and inside the edit form after a refused hand-in) */
.lx-block{background:var(--panel);border:1px solid var(--red-line);border-left:4px solid var(--red2);border-radius:var(--radius);
  padding:16px 18px;margin:0 0 18px;scroll-margin-top:90px;box-shadow:0 0 0 3px var(--red-soft)}
.lx-block.lx-inform{background:var(--panel2);box-shadow:none}
.lx-block.lx-inform .cancel-opt{background:var(--panel)}
.lx-head{display:flex;align-items:flex-start;gap:12px;margin:0 0 14px}
.lx-ico{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;background:var(--red2);color:#fff;
  font-weight:800;font-size:19px;line-height:1}
.lx-head-txt{min-width:0}
/* .lx-head .lx-ttl beats .panel h2 (the «late» panel and the edit form sit in panels) */
.lx-head .lx-ttl{margin:0;font-size:17px;font-weight:700;line-height:1.3;color:var(--ink);overflow-wrap:anywhere}
.lx-sub{margin:4px 0 0;color:var(--muted);font-size:13px;line-height:1.4}
.lx-block .alert{margin-bottom:12px}
/* two columns of reasons once the block is wide enough (a phone and the narrow desktop column: one) */
.lx-opts{grid-template-columns:repeat(auto-fill,minmax(min(260px,100%),1fr))}
.lx-opts .lx-err{grid-column:1/-1;margin:0}
.lx-opts.has-err .cancel-opt{border-color:var(--red-line)}
.lx-opt span{min-width:0;overflow-wrap:anywhere;line-height:1.3}
.lx-field textarea{min-height:96px;font-size:16px}
.lx-field.has-err textarea{border-color:var(--red2);box-shadow:0 0 0 3px var(--red-soft)}
.lx-count{font-variant-numeric:tabular-nums}
.lx-count.need{color:var(--amber);font-weight:600}
.lx-count.ok{color:var(--green);font-weight:600}
.lx-then{margin:0 0 12px;color:var(--ink2);font-size:13px;font-weight:600}
.lx-actions{display:flex}
.lx-actions .btn{min-height:44px;justify-content:center}
@media(max-width:900px){
  .lx-block{padding:14px;margin-bottom:14px}
  .lx-actions .btn{flex:1}
}

/* Work closed late with no explanation: offered, collapsed */
.lx-late{border-color:var(--red-line);scroll-margin-top:90px}
.lx-late>summary{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-height:44px;cursor:pointer;list-style:none;font-weight:700}
.lx-late>summary::-webkit-details-marker{display:none}
.lx-late>summary::before{content:'▸';color:var(--muted);transition:transform .15s}
.lx-late[open]>summary::before{transform:rotate(90deg)}
.lx-late>summary:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:8px}
.lx-late-body{margin-top:12px}

/* «Объяснительные» on the task */
.lx-list{scroll-margin-top:90px}
.lx-list:focus{outline:none}
.lx-n{color:var(--muted);font-weight:400;font-size:14px}
.lx-wait{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px;color:var(--ink2);font-size:14px}
.lx-item{padding:14px 0;border-top:1px solid var(--line);scroll-margin-top:90px}
.lx-item:first-of-type{border-top:0;padding-top:2px}
.lx-who{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px;min-width:0}
.lx-who b{overflow-wrap:anywhere}
.lx-when{color:var(--muted);font-size:12px;font-weight:600}
.lx-tags{display:flex;align-items:center;gap:6px 8px;flex-wrap:wrap;margin:8px 0}
.lx-reason{font-size:12px;font-weight:700;padding:3px 9px;border-radius:20px;background:var(--p-dept-bg);color:var(--ink2);
  max-width:100%;overflow-wrap:anywhere}
.lx-due{color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap}
.lx-text{color:var(--ink);line-height:1.55;overflow-wrap:anywhere;background:var(--panel2);border:1px solid var(--line);
  border-radius:10px;padding:10px 12px}
.lx-verdict{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
.lx-v{font-size:12px;font-weight:800;padding:3px 10px;border-radius:20px;white-space:nowrap;border:1px solid transparent}
.lx-v-pending{background:var(--s-rev-bg);color:var(--s-rev)}
.lx-v-accepted{background:var(--s-done-bg);color:var(--s-done);border-color:var(--ok-line)}
.lx-v-rejected{background:var(--red-soft);color:var(--due-overdue);border-color:var(--red-line)}
.lx-by{color:var(--muted);font-size:12px;font-weight:600}
.lx-vnote{margin-top:6px;color:var(--ink2);font-size:13px;line-height:1.45;padding-left:10px;border-left:2px solid var(--line2);overflow-wrap:anywhere}
.lx-vform{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
.lx-vform .inp{flex:1 1 200px;min-width:0}
.lx-vbtns{display:flex;gap:8px}
.btn.lx-ok{color:var(--ok-ink);border-color:var(--ok-line)}
.btn.lx-ok:hover{background:var(--ok-bg)}
.lx-change{margin-top:8px}
.lx-change>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;cursor:pointer;list-style:none;color:var(--muted);font-size:13px;font-weight:600}
.lx-change>summary::-webkit-details-marker{display:none}
.lx-change>summary::before{content:'▸';transition:transform .15s}
.lx-change[open]>summary::before{transform:rotate(90deg)}
.lx-change>summary:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:6px}
@media(max-width:900px){
  .lx-vform .inp{flex-basis:100%;min-height:44px}
  .lx-vbtns{width:100%;display:grid;grid-template-columns:1fr 1fr}
  .lx-vbtns .btn{min-height:44px;justify-content:center}
  .lx-change>summary{min-height:44px}
}

/* ===== v1.7 · efficiency ===== */
/* ===== v1.7.0 · efficiency ===== */
/* efficiency.php «Эффективность» + the team.php link. Tokens only, so it follows dark / light. */
.ef-period{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-bottom:12px}
.ef-chips{display:flex;gap:6px;max-width:100%;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:2px 0}
.ef-chips::-webkit-scrollbar{display:none}
.ef-chips .od-chip{flex:0 0 auto;justify-content:center}
.ef-custom{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px}
.ef-dl{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:13px;font-weight:600}
.ef-custom input[type=date]{background:var(--panel2);border:1px solid var(--line);color:var(--ink);padding:6px 9px;border-radius:9px;min-height:36px}
.ef-custom input[type=date]:focus{outline:none;border-color:var(--red2)}
.ef-custom.on input[type=date]{border-color:var(--red-line)}
.ef-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.ef-filters select{background:var(--panel2);border:1px solid var(--line);color:var(--ink);padding:8px 11px;border-radius:9px;min-height:38px;max-width:280px}
.ef-range{color:var(--muted);font-size:13px;margin:0 0 4px}
.ef-range b{color:var(--ink);font-weight:700}
.ef-intro{color:var(--muted);font-size:13px;line-height:1.45;margin:0 0 14px;max-width:72ch}
.ef-muted{color:var(--muted)}
.ef-small{font-size:12px}
.ef-num{font-weight:700;font-variant-numeric:tabular-nums}
.ef-miss{color:var(--due-overdue);font-weight:700}
.ef-empty{padding:22px 10px}

/* Drill-down: whose numbers these are */
.ef-person{display:flex;align-items:center;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 14px;margin-bottom:12px}
.ef-person .ef-av{width:40px;height:40px;font-size:14px}
.ef-person-body{flex:1;min-width:0}
.ef-person-name{font-weight:700;font-size:16px;overflow-wrap:anywhere}
.ef-back{flex-shrink:0}

/* Summary tiles: a second line under the label */
.ef-stats .ef-sub{color:var(--muted);font-size:12px;font-weight:600;margin-top:4px}
.ef-stats .stat .l{overflow-wrap:anywhere}

/* Per-person table (desktop: compact cells, headers may wrap; phones: the shared stack cards) */
@media(min-width:901px){
  table.tasks.ef-people th,table.tasks.ef-people td{padding:10px}
  table.tasks.ef-people th{white-space:normal;line-height:1.25;vertical-align:bottom}
  table.tasks.ef-people td{vertical-align:middle}
  table.tasks.ef-people td.t-title{min-width:170px}
  .ef-oldest{display:block}
}
.ef-nw{white-space:nowrap}
.ef-who{display:flex;align-items:center;gap:9px;min-width:0;color:var(--ink)}
.ef-who:hover .ef-who-name{text-decoration:underline}
.ef-who:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:8px}
.ef-who-body{display:flex;flex-direction:column;min-width:0}
.ef-who-name{font-weight:700;overflow-wrap:anywhere}
.ef-who-dept{color:var(--muted);font-size:12px;font-weight:500}
.ef-pct{display:inline-flex;align-items:center;gap:8px;min-width:104px;vertical-align:middle}
.ef-pct b{min-width:38px;font-variant-numeric:tabular-nums}
.ef-pbar{flex:1;min-width:48px;height:8px;background:var(--track);border-radius:5px;overflow:hidden}
.ef-pbar>i{display:block;height:100%;border-radius:5px;background:var(--green)}
.ef-pct.mid .ef-pbar>i{background:var(--amber)}
.ef-pct.low .ef-pbar>i{background:var(--red2)}

/* Reasons: horizontal bars, biggest first (one series → one colour) */
.ef-reasons{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.ef-reason{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:5px 12px}
.ef-rl{font-size:14px;font-weight:600;min-width:0;overflow-wrap:anywhere}
.ef-rn{font-size:13px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.ef-rn b{color:var(--ink);font-weight:800}
.ef-rbar{grid-column:1/-1;height:10px;background:var(--track);border-radius:6px;overflow:hidden}
.ef-rbar>i{display:block;height:100%;border-radius:6px;background:var(--gold)}

/* Late tasks */
.ef-late-sum{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 12px;font-size:13px}
.ef-list{display:flex;flex-direction:column;gap:10px}
.ef-li{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:12px 14px;scroll-margin-top:84px;min-width:0}
.ef-li.is-missing{border-left:3px solid var(--red2)}
.ef-li:target{border-color:var(--red2);box-shadow:0 0 0 2px var(--red-soft)}
.ef-li-top{display:flex;align-items:flex-start;gap:10px}
.ef-li-title{flex:1;min-width:0;font-weight:700;font-size:15px;line-height:1.35;overflow-wrap:anywhere;color:var(--ink)}
.ef-li-title:hover{text-decoration:underline}
.ef-li-title:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:6px}
.ef-days{flex-shrink:0;font-size:12px;font-weight:800;padding:3px 9px;border-radius:20px;background:var(--red-soft);color:var(--due-overdue);white-space:nowrap}
.ef-li-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:6px;color:var(--muted);font-size:13px}
.ef-li-who{color:var(--ink2);font-weight:600}
.ef-exp{margin-top:10px;padding:10px 12px;border-radius:10px;background:var(--panel);border:1px solid var(--line)}
.ef-exp-reason{font-weight:700;font-size:14px}
.ef-exp-text{margin-top:4px;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink2);font-size:14px;line-height:1.5}
.ef-exp-foot{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:8px;font-size:12px;color:var(--muted)}
.ef-vnote{margin-top:6px;font-size:13px;color:var(--ink2);overflow-wrap:anywhere}
.ef-v{font-size:11px;font-weight:800;padding:3px 9px;border-radius:20px;white-space:nowrap}
.ef-v.accepted{background:var(--s-done-bg);color:var(--s-done)}
.ef-v.rejected{background:var(--red-soft);color:var(--due-overdue)}
.ef-v.pending{background:var(--s-rev-bg);color:var(--s-rev)}
.ef-noexp{display:inline-flex;align-items:center;gap:6px;margin-top:10px;font-weight:700;font-size:13px;color:var(--due-overdue)}
.ef-vform{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px}
.ef-vform input[type=text]{flex:1 1 220px;min-width:0;background:var(--panel);border:1px solid var(--line);color:var(--ink);
  padding:8px 11px;border-radius:9px;min-height:36px;outline:none}
.ef-vform input[type=text]:focus{border-color:var(--red2)}
.btn.ef-accept{background:var(--ok-bg);border-color:var(--ok-line);color:var(--ok-ink)}
.btn.ef-accept:hover{border-color:var(--green)}
.ef-change{margin-top:8px}
.ef-change summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;cursor:pointer;color:var(--muted);font-size:12px;font-weight:700;border-radius:6px;list-style:none}
.ef-change summary::-webkit-details-marker{display:none}
.ef-change summary::after{content:"";width:6px;height:6px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .15s}
.ef-change[open] summary::after{transform:rotate(-135deg) translateY(-1px)}
.ef-change summary:hover{color:var(--ink)}
.ef-change summary:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.ef-change[open] summary{color:var(--ink)}

/* Waiting for an explanation */
.ef-await{scroll-margin-top:84px}
.ef-await .dz-item{margin:0 -8px}

/* team.php: «Эффективность» next to «Изменить» */
.team-eff{white-space:nowrap}

/* Phones & tablets */
@media(max-width:900px){
  .ef-period{flex-direction:column;align-items:stretch;gap:10px}
  .ef-chips{margin:0 -14px;padding:2px 14px 4px}
  .ef-chips .od-chip{min-height:44px}
  .ef-custom{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}
  .ef-dl{flex-direction:column;align-items:stretch;gap:4px;min-width:0}
  .ef-custom input[type=date]{width:100%;min-width:0;min-height:44px}
  .ef-custom .btn{grid-column:1/-1;justify-content:center;min-height:44px}
  .ef-filters{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .ef-filters select{max-width:none;width:100%;min-width:0;min-height:44px}
  .ef-back{min-height:44px}

  table.tasks.stack.ef-people tr{position:relative}
  table.tasks.stack.ef-people td{white-space:normal}
  table.tasks.stack.ef-people td.t-title{padding-bottom:8px}
  table.tasks.stack.ef-people td[data-label]::before{min-width:140px;margin-right:6px;vertical-align:middle}
  .ef-rowlink::after{content:"";position:absolute;inset:0;border-radius:12px}
  table.tasks.stack.ef-people tr:active{background:var(--hover)}
  .ef-pct{width:calc(100% - 150px);min-width:0}
  .ef-pbar{min-width:0}

  .ef-li{padding:12px}
  .ef-vform{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .ef-vform input[type=text]{grid-column:1/-1;min-height:44px}
  .ef-vform .btn{min-height:44px;justify-content:center}
  .ef-change summary{min-height:44px}
  .ef-li-title{padding:6px 0;margin:-6px 0}
}
@media(max-width:380px){
  .ef-filters{grid-template-columns:minmax(0,1fr)}
  .ef-person{flex-wrap:wrap}
  .ef-back{width:100%;justify-content:center}
  .ef-li-top{flex-direction:column;gap:6px}
}

/* ===== v1.7 · dash_notif ===== */
/* ===== v1.7 · dashboard lateness + explanation notifications (index.php, notifications.php) ===== */
/* Employee: «Нужна объяснительная» — red block at the very top of the dashboard */
.xd-block{background:var(--red-soft);border:1px solid var(--red-line);border-left:4px solid var(--red2);border-radius:var(--radius);
  padding:14px 16px;margin-bottom:18px;color:var(--ink)}
.xd-head{display:flex;align-items:center;gap:10px}
.xd-ico{color:var(--red2);display:grid;flex-shrink:0}
.xd-head h2{margin:0;font-size:16px;font-weight:800;color:var(--alert-ink);display:flex;align-items:center;gap:8px;min-width:0}
.xd-count{font-size:12px;font-weight:800;min-width:22px;padding:1px 7px;border-radius:10px;background:var(--red2);color:#fff;text-align:center;line-height:1.5}
.xd-intro{margin:6px 0 8px;font-size:14px;color:var(--ink2);line-height:1.45}
.xd-list{list-style:none;margin:0;padding:0}
.xd-item{display:flex;align-items:center;gap:12px;padding:8px 0;border-top:1px dashed var(--red-line)}
.xd-body{flex:1;min-width:0;min-height:44px;display:flex;flex-direction:column;justify-content:center;gap:2px;color:var(--ink);border-radius:8px}
.xd-body:hover .xd-name{text-decoration:underline}
/* focus ring in --ink: red on the red-soft block would be too faint */
.xd-body:focus-visible,.xd-btn:focus-visible,.xd-more summary:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.xd-name{font-weight:700;font-size:14px;line-height:1.35;overflow-wrap:anywhere}
.xd-meta{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:13px}
.xd-due{color:var(--muted)}
.xd-btn{flex-shrink:0;min-height:40px;padding:0 16px;justify-content:center}
.xd-more summary{display:flex;align-items:center;gap:6px;min-height:44px;cursor:pointer;list-style:none;
  color:var(--red-ink);font-weight:700;font-size:13px;border-top:1px dashed var(--red-line);border-radius:0}
.xd-more summary::-webkit-details-marker{display:none}
.xd-more summary::before{content:"";width:0;height:0;border-left:5px solid currentColor;border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .15s}
.xd-more[open] summary::before{transform:rotate(90deg)}
.xd-more[open] summary{display:none}

/* Admin: «Опоздания» — team totals for the last 7 days + who still owes an explanation */
.lz-panel .dz-head h2{flex-wrap:wrap;row-gap:0}
.lz-period{font-size:12px;font-weight:600;color:var(--muted)}
.lz-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:10px 0 16px}
.lz-kpi{display:flex;flex-direction:column;gap:4px;min-width:0;background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:12px 14px}
.lz-n{font-size:24px;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.lz-l{color:var(--muted);font-size:13px;font-weight:600;overflow-wrap:anywhere}
.lz-note{color:var(--due-overdue);font-size:12px;font-weight:600;overflow-wrap:anywhere}
.lz-kpi.good .lz-n{color:var(--green)}
.lz-kpi.warn .lz-n{color:var(--amber)}
.lz-kpi.bad .lz-n{color:var(--due-overdue)}
.lz-wait-h{display:flex;align-items:center;gap:8px;margin:0 0 4px;font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
.dz-count.zero{background:var(--ok-bg);color:var(--ok-ink)}

/* Notifications: «Объяснительная» chips + the call to action under them */
.n-type.explain_needed{background:var(--red);color:#fff}
.n-type.explained{background:var(--s-rev-bg);color:var(--s-rev)}
.n-type.explain_verdict{background:var(--p-low-bg);color:var(--p-low)}
.notif .n-cta{display:block;margin-top:2px}

@media(max-width:900px){
  .xd-block{padding:12px 14px;margin-bottom:14px}
  .xd-btn{min-height:44px}
  .lz-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:8px 0 14px}
  .lz-kpi{padding:10px 12px}
  .lz-n{font-size:22px}
  .lz-panel .more-link{min-height:44px;display:flex;align-items:center;justify-content:center}
}
@media(max-width:380px){
  .xd-item{gap:10px}
  .xd-btn{padding:0 12px}
}

/* v1.7.1 co-owners */
/* ===== v1.7.1 · project owners ===== */
/* Several owners («Ответственные») per project: the form picker + read-only chips (project.php),
   the owners in the project header and members panel, the owners on the projects.php cards.
   Tokens only, so it follows dark / light; 44px tap targets on phones. */

/* Form: checkbox chips, grouped by department (admins) */
.pv-owners{border:0;margin:0 0 14px;padding:0;min-width:0}
.pv-owners legend{padding:0;margin:0 0 6px;font-size:13px;font-weight:600;color:var(--muted)}
.pv-og+.pv-og{margin-top:10px}
.pv-og-lbl{margin:0 0 6px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.pv-oc-list,.pv-owners-ro{display:flex;flex-wrap:wrap;gap:8px}
.pv-oc{position:relative;display:inline-flex;min-width:0;max-width:100%;cursor:pointer}
.pv-owners .pv-oc input[type=checkbox]{position:absolute;top:0;left:0;width:1px;height:1px;min-height:0;margin:0;padding:0;opacity:0;pointer-events:none}
.pv-oc-in{display:inline-flex;align-items:center;gap:8px;min-width:0;max-width:100%;min-height:40px;padding:5px 12px 5px 6px;border-radius:999px;
  border:1px solid var(--line);background:var(--panel2);color:var(--ink2);font-size:14px;font-weight:600;line-height:1.2;
  transition:border-color .15s,background .15s,color .15s,box-shadow .15s}
.pv-oc-in .avatar{width:28px;height:28px;font-size:11px}
.pv-oc-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-oc-name small{color:var(--muted);font-weight:500}
.pv-oc-tick{display:none;place-items:center;width:20px;height:20px;margin-right:-4px;border-radius:50%;flex-shrink:0;background:var(--red2);color:#fff}
@media(hover:hover){ .pv-oc:hover .pv-oc-in{border-color:var(--line2);color:var(--ink)} }
.pv-oc input:checked+.pv-oc-in{border-color:var(--red2);background:var(--red-soft);color:var(--ink);box-shadow:inset 0 0 0 1px var(--red2)}
.pv-oc input:checked+.pv-oc-in .pv-oc-tick{display:grid}
.pv-oc input:focus-visible+.pv-oc-in{outline:2px solid var(--red2);outline-offset:2px}
.pv-oc.is-off .pv-oc-in{border-style:dashed}
.pv-oc.is-off .avatar{opacity:.6}
.pv-owners.has-err .pv-oc input:not(:checked)+.pv-oc-in{border-color:var(--red-line)}
.pv-owners .field-err{margin-top:8px}
.pv-owners>.hint{display:block;margin-top:6px;color:var(--muted);font-size:11px}
/* An owner editing the project: the owners, read-only — plain avatar + name, no pill (nothing to tap) */
.pv-owners-ro{gap:6px 16px;padding:2px 0}
.pv-oc-in.pv-oc-ro{min-height:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:var(--ink);cursor:default}

/* Project header: every owner (avatars overlap, names wrap) */
.pv-oavs{display:inline-flex;flex-shrink:0}
.pv-oavs .avatar{margin-left:-10px;box-shadow:0 0 0 2px var(--panel)}
.pv-oavs .avatar:first-child{margin-left:0}
.pv-owner.is-multi .pv-who b{white-space:normal;overflow-wrap:anywhere}

/* Members panel: owners first; admins get «Сделать ответственным» / «Снять с ответственных» under the name */
.pv-m.has-acts{flex-wrap:wrap;row-gap:2px;padding-bottom:10px}
.pv-m-acts{flex:1 0 100%;display:flex;flex-wrap:wrap;gap:6px;padding-left:34px}
.btn.pv-role-btn{min-height:30px;padding:4px 10px;gap:6px;font-size:12px;color:var(--muted)}
.btn.pv-role-btn:hover{color:var(--ink)}
.btn.pv-role-btn.to-owner{color:var(--red-ink);border-color:var(--red-line)}
.btn.pv-role-btn.to-owner:hover{background:var(--red-soft);border-color:var(--red2)}
.btn.pv-role-btn:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
/* Admins pick among three roles → the role select gets its own line */
.pv-add-member.has-owner-opt{grid-template-columns:minmax(0,1fr)}

/* Form: department + a compact colour swatch on one line (desktop) */
@media(min-width:901px){ .pv-form .row>.field.pv-color{flex:0 0 140px} }

/* projects.php card: up to 3 owner avatars + «+N», names joined with «, » */
.pj-avs{display:inline-flex;flex-shrink:0}
.pj-avs .avatar{margin-left:-7px;box-shadow:0 0 0 2px var(--pj-ring,var(--panel))}
.pj-avs .avatar:first-child{margin-left:0}
.avatar.pj-more{background:var(--line2);color:var(--ink);font-size:10px}
.pj-card.lvl-done,.pj-card.lvl-cancelled{--pj-ring:var(--panel2)}
.pj-card:active{--pj-ring:var(--hover)}
@media(hover:hover){ .pj-card:hover{--pj-ring:var(--panel2)} }

@media(max-width:900px){
  .pv-oc-in{min-height:44px;padding:6px 14px 6px 8px;font-size:15px}
  .pv-oc-in .avatar{width:30px;height:30px}
  .btn.pv-role-btn{min-height:44px;padding:0 14px;font-size:13px}
  .pv-m.has-acts{row-gap:4px}
}
@media(max-width:380px){
  .pv-m-acts{padding-left:0}
}

/* v1.7.2 push diagnostics */
/* Notifications page: why push can't be turned on + numbered fix steps (#pushCard hint) and
   «Проверка этого устройства» (✓ / ✗ rows). Tokens only → dark + light themes. */
.push-card .ps-hint.is-problem{color:var(--ink2);font-size:14px;background:var(--panel2);border:1px solid var(--line);
  border-left:3px solid var(--amber);border-radius:10px;padding:10px 12px}
.push-card .ps-msg{font-weight:600;color:var(--ink);overflow-wrap:anywhere}
.push-card .ps-steps{margin:8px 0 0;padding-left:22px;display:grid;gap:6px}
.push-card .ps-steps li{padding-left:2px;line-height:1.4;overflow-wrap:anywhere}
.push-card .ps-steps li::marker{color:var(--red-ink);font-weight:700}
.ps-diag{margin-top:12px;border-top:1px solid var(--line);padding-top:2px}
.ps-diag>summary{display:flex;align-items:center;gap:8px;min-height:44px;cursor:pointer;list-style:none;font-size:14px;font-weight:600;color:var(--muted)}
.ps-diag>summary::-webkit-details-marker{display:none}
.ps-diag>summary::before{content:'▸';transition:transform .15s}
.ps-diag[open]>summary::before{transform:rotate(90deg)}
.ps-diag[open]>summary,.ps-diag>summary:hover{color:var(--ink)}
.ps-diag>summary:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:6px}
.ps-diag-pl{color:var(--muted);font-size:13px;margin:0 0 8px;overflow-wrap:anywhere}
.ps-checks{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:10px;background:var(--panel2);overflow:hidden}
.ps-ck{display:grid;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:4px 8px;padding:9px 12px;font-size:14px}
.ps-ck+.ps-ck{border-top:1px solid var(--line)}
.ps-ck-i{font-weight:800;text-align:center;line-height:1}
.ps-ck.is-ok .ps-ck-i{color:var(--green)}
.ps-ck.is-bad .ps-ck-i,.ps-ck.is-bad .ps-ck-v{color:var(--danger-ink)}
.ps-ck.is-unk .ps-ck-i{color:var(--muted)}
.ps-ck-l{min-width:0;overflow-wrap:anywhere}
.ps-ck-v{color:var(--muted);font-size:12px;text-align:right;max-width:10em;overflow-wrap:anywhere}
/* Team page «Уведомления на телефоне» column (admins only): newest device report + «история». */
.pdg-last{margin-top:4px;font-size:12px;font-weight:600;line-height:1.4;overflow-wrap:anywhere}
.pdg-last.pdg-ok{color:var(--ok-ink);opacity:.8}
.pdg-last.pdg-warn{color:var(--amber)}
.pdg-last.pdg-bad{color:var(--danger-ink)}
.pdg-last.pdg-env{margin-top:1px;color:var(--muted);font-weight:500} /* a later 'page' state under the last attempt */
.pdg-hist{margin-top:2px}
.pdg-hist>summary{display:inline-flex;align-items:center;gap:6px;min-height:28px;cursor:pointer;list-style:none;color:var(--muted);font-size:12px;font-weight:600;border-radius:6px}
.pdg-hist>summary::-webkit-details-marker{display:none}
.pdg-hist>summary::before{content:'▸';transition:transform .15s}
.pdg-hist[open]>summary::before{transform:rotate(90deg)}
.pdg-hist>summary:hover,.pdg-hist[open]>summary{color:var(--ink)}
.pdg-hist>summary:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.pdg-hist ol{list-style:none;margin:4px 0 2px;padding:0 0 0 10px;border-left:2px solid var(--line2);display:grid;gap:8px;max-width:440px}
.pdg-hist li{font-size:12px;line-height:1.4;color:var(--ink2);overflow-wrap:anywhere;min-width:0}
.pdg-hist li.pdg-ok .pdg-code{color:var(--ok-ink)}
.pdg-hist li.pdg-bad .pdg-code{color:var(--danger-ink)}
.pdg-when{color:var(--muted);font-variant-numeric:tabular-nums}
.pdg-code{font-weight:700}
.pdg-step{display:inline-block;font:600 11px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:0 5px;vertical-align:1px}
.pdg-meta{margin-top:1px;color:var(--muted);font-size:11.5px}
@media(max-width:900px){
  .pdg-hist>summary{min-height:44px}
  .pdg-hist ol{max-width:none}
}

/* v1.7.3 kpi excel + touch */
/* ===== v1.7.3 · KPI Excel export ===== */
/* efficiency.php (admins): «Excel для KPI» — month picker + «Скачать Excel». Tokens only (dark / light). */
.ef-xl{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--radius);padding:12px 14px;margin-bottom:14px}
.ef-xl-head{display:flex;align-items:center;gap:11px;flex:1 1 280px;min-width:0}
.ef-xl-ico{flex-shrink:0;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;
  background:var(--ok-bg);border:1px solid var(--ok-line);color:var(--green)}
.ef-xl-txt{display:flex;flex-direction:column;gap:1px;min-width:0}
.ef-xl-txt b{font-size:14px;font-weight:700;color:var(--ink)}
.ef-xl-hint{color:var(--muted);font-size:12.5px;line-height:1.35;overflow-wrap:anywhere}
.ef-xl-ctl{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ef-xl input[type=month]{background:var(--panel2);border:1px solid var(--line);color:var(--ink);padding:6px 9px;border-radius:9px;
  min-height:36px;min-width:150px;font-variant-numeric:tabular-nums}
.ef-xl input[type=month]:focus{outline:none;border-color:var(--red2)}
.ef-xl input[type=month]::-webkit-date-and-time-value{text-align:left}
.ef-xl-ctl .btn{white-space:nowrap}
.ef-xl-foot{flex:1 1 100%;margin:0;color:var(--muted);font-size:12px;line-height:1.4;overflow-wrap:anywhere}
.ef-xl-foot a{color:var(--ink2);text-decoration:underline;text-underline-offset:2px}
.ef-xl-foot a:hover{color:var(--ink)}
.ef-xl-foot a:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:4px}
@media(max-width:900px){
  .ef-xl{flex-direction:column;align-items:stretch;gap:10px;padding:12px}
  .ef-xl-head{flex:none}
  .ef-xl-ctl{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:8px}
  .ef-xl input[type=month]{display:block;width:100%;min-width:0;min-height:44px}
  .ef-xl-ctl .btn{min-height:44px;justify-content:center}
  .ef-xl-foot a{display:inline-block;padding:6px 0}
}
@media(max-width:380px){
  .ef-xl-ctl{grid-template-columns:minmax(0,1fr)}
}

/* ===== v1.7.3 · phone gestures + on-screen keyboard (assets/touch.js) ===== */
/* While typing (html.kb-open) the tab bar and «+» step aside like in native apps: iOS otherwise leaves the
   fixed bar where the keyboard's top edge was. The page's bottom padding (room for the bar) shrinks too. */
@media(max-width:900px){
  html.kb-open .bottombar,html.kb-open .fab{display:none}
  html.kb-open .content{padding-bottom:calc(24px + env(safe-area-inset-bottom))}
  /* Menu swipe: sideways pans on the menu / dimmer are ours (no native horizontal handling); vertical scroll and
     pinch-zoom stay native (people zoom in to read the menu) */
  #sidebar,#scrim{touch-action:pan-y pinch-zoom}
  html.sb-drag,html.sb-drag *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
  html.sb-drag .sidebar{transition:none;will-change:transform}
  html.sb-drag .scrim{transition:none}
}

/* v1.7.4 archive + unread + attention */
/* v1.7.4 — notifications: «Новые» / «Все» tabs, «Отметить все прочитанными» */
.notif-bar{display:flex;align-items:center;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;margin-bottom:12px}
.notif-bar h2{margin:0}
.notif-readall{margin:0}
.notif-tabs{display:inline-flex;max-width:100%;margin-bottom:12px}
.notif-tabs a{display:inline-flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;min-height:36px}
.notif-tabs a .n{font-size:12px;font-weight:800;opacity:.8}
.notif-tabs a:focus-visible{outline:2px solid var(--red2);outline-offset:-2px}
.notif-hint{color:var(--muted);font-size:13px;margin:0 0 6px}
.notif-list.only-new .notif.unread:not(:hover){background:transparent}
.notif-more{color:var(--muted);font-size:13px;text-align:center;margin:10px 0 0}
.notif-empty a{color:var(--red-ink);font-weight:700}
@media(max-width:900px){
  .notif-tabs{display:flex;width:100%}
  .notif-tabs a{flex:1 1 0;min-height:44px;padding:8px 10px;font-size:14px}
  .notif-readall .btn{min-height:44px}
  .notif-empty{padding:28px 8px}
}
/* v1.7.4 — task files: who added each, a thumbnail for photos; «новое» since my last visit */
.tk-att{align-items:center;gap:11px;min-height:54px;padding:8px 10px;color:var(--ink);transition:border-color .12s,background .12s}
.tk-att:hover{border-color:var(--line2);background:var(--hover)}
.tk-att:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.tk-att-ico{position:relative;flex:0 0 40px;width:40px;height:40px;border-radius:8px;overflow:hidden;display:grid;place-items:center;background:var(--red-soft);border:1px solid var(--red-line)}
.tk-att-ext{font-size:9.5px;font-weight:800;letter-spacing:.4px;color:var(--red-ink)}
.tk-att-ico img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:var(--panel2)}
.tk-att-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.tk-att-name{font-size:13.5px;font-weight:600;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tk-att-by{display:flex;align-items:center;gap:6px;min-width:0;color:var(--muted);font-size:11.5px;line-height:1.35}
.tk-att-by .avatar{width:18px;height:18px;font-size:8.5px}
.tk-att-meta{min-width:0;overflow-wrap:anywhere}
.tk-att.is-new{border-color:var(--red-line);box-shadow:inset 3px 0 0 var(--red2)}
.tk-new{display:inline-block;flex-shrink:0;padding:1px 7px;border-radius:999px;background:var(--red);color:#fff;font-size:10px;font-weight:800;letter-spacing:.3px;text-transform:uppercase;vertical-align:1px}
.comment.is-new .body{border-color:var(--red-line);box-shadow:inset 3px 0 0 var(--red2)}
@media(max-width:900px){
  .tk-att{min-height:58px}
  .tk-att-name{white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
}

/* ===== v1.7.4 · «!» attention badges (board.php, list.php, process.php, index.php) ===== */
/* amber = news you haven't opened yet; red = a late task's explanation awaiting an admin's verdict */
.attn,.attn-dot{display:inline-grid;place-items:center;flex-shrink:0;border-radius:50%;background:var(--amber);color:#1d1a16;
  font-weight:900;font-style:normal;line-height:1;text-align:center}
[data-theme="light"] .attn,[data-theme="light"] .attn-dot{color:#fff}
.attn{width:18px;height:18px;font-size:12px;margin-right:6px;vertical-align:1px}
.attn.attn-x,.attn-chip.hot .attn-dot{background:var(--red2);color:#fff}
.attn-dot{width:16px;height:16px;font-size:11px}
.card.has-attn:not(.is-stuck){border-color:color-mix(in srgb,var(--amber) 50%,var(--line))}
.card.has-attn:not(.is-stuck):has(.attn-x){border-color:var(--red-line)}
/* toolbar chip «Требуют внимания (N)»: amber tint; red (.hot) while an explanation waits; filled when on */
.od-chip.attn-chip:not(.on):not(.hot){color:var(--ink);border-color:color-mix(in srgb,var(--amber) 55%,var(--line));
  background:color-mix(in srgb,var(--amber) 12%,var(--panel))}
.od-chip.attn-chip.on .attn-dot{background:#fff;color:var(--red)}
.empty.attn-empty{padding:14px 10px 18px}
.attn-empty a{color:var(--red-ink);font-weight:700}
.attn-empty a:hover{text-decoration:underline}
/* «Готово» column footer: «Архив (N) →» */
.col-arch{display:block;margin-top:4px;padding:10px 8px 4px;border-top:1px dashed var(--line);text-align:center;
  color:var(--muted);font-size:13px;font-weight:700}
.col-arch:hover{color:var(--ink)}
.col-arch:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:8px}
/* dashboard strip «Требуют внимания: N» → board.php?attn=1 */
.attn-strip{display:flex;align-items:center;gap:12px;min-height:52px;border:1px solid var(--line);border-left:3px solid var(--amber);
  border-radius:12px;background:var(--panel);background:color-mix(in srgb,var(--amber) 10%,var(--panel));padding:10px 14px;margin-bottom:16px;color:var(--ink)}
.attn-strip.x{border-left-color:var(--red2);background:var(--red-soft)}
.attn-strip .attn{width:26px;height:26px;font-size:15px;margin:0}
.attn-strip .as-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.attn-strip .as-txt b{font-size:15px}
.attn-strip .as-sub{font-size:12.5px;color:var(--muted);line-height:1.35}
.attn-strip .as-go{color:var(--muted);font-weight:800;transition:transform .15s}
.attn-strip:hover{border-color:var(--line2)}
.attn-strip:hover .as-go{color:var(--ink);transform:translateX(2px)}
.attn-strip:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
@media(max-width:900px){
  .attn{width:20px;height:20px;font-size:13px}
  .col-arch{display:flex;align-items:center;justify-content:center;min-height:44px;padding:4px 8px 0}
  table.tasks.stack tr.has-attn{border-color:color-mix(in srgb,var(--amber) 50%,var(--line))}
  table.tasks.stack tr.has-attn:has(.attn-x){border-color:var(--red-line)}
}

/* ===== v1.7.4 · auto-archive settings + archive page ===== */
/* Settings: «Убирать «Готово» в архив через [N] рабочих дней (пн–пт)» — the number field sits inside the sentence. */
.cfg-aw{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin:0 0 10px;font-size:14px;font-weight:600;line-height:1.4;color:var(--ink2)}
.cfg-aw input{flex:0 0 auto;width:76px;min-height:44px;padding:8px 10px;text-align:center;font-family:inherit;font-size:16px;font-weight:700;
  color:var(--ink);background:var(--panel2);border:1px solid var(--line);border-radius:10px;outline:none}
.cfg-aw input:focus{border-color:var(--red2)}
.cfg-aw.cfg-ad{margin-top:6px;font-size:13px;font-weight:500;color:var(--muted)}
.cfg-aw-ex{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:4px;font-size:13px;line-height:1.45;color:var(--muted)}
.cfg-aw-ex li{position:relative;padding-left:14px;overflow-wrap:anywhere}
.cfg-aw-ex li::before{content:"";position:absolute;left:2px;top:.62em;width:5px;height:5px;border-radius:50%;background:var(--line2)}
/* Archive: the rule in one muted line, month group rows, project chip after the title, «Показать ещё». */
.arch-note{margin:-4px 0 12px;color:var(--muted);font-size:13px;line-height:1.45}
table.tasks tr.arch-month th{padding:9px 14px;background:var(--panel2);color:var(--ink2);font-size:12px;font-weight:800}
table.tasks tr.arch-month th .n{margin-left:6px;color:var(--muted)}
.arch-table td.t-title .projchip{margin-left:6px;vertical-align:middle}
.arch-more{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 12px;margin:14px 0 4px}
.arch-left{color:var(--muted);font-size:13px;font-weight:600}
@media(max-width:900px){
  table.tasks.stack tr.arch-month{margin:0;padding:12px 2px 6px;background:transparent;border:0;border-radius:0}
  table.tasks.stack tr.arch-month:first-child{padding-top:0}
  table.tasks.stack tr.arch-month th{display:block;padding:0;background:transparent;border:0}
  .arch-table td.t-title .projchip{margin:4px 0 0}
  .arch-more .btn{flex:1 1 100%;justify-content:center;min-height:44px}
}

/* v1.7.4 fixes */
/* Notifications page: chips for the 1.7.4 types 'comment', 'status' and 'file' */
.n-type.comment{background:var(--p-low-bg);color:var(--p-low)}
.n-type.status{background:var(--s-prog-bg);color:var(--s-prog)}
.n-type.file{background:var(--ok-bg);color:var(--ok-ink)}
/* Task page: files refused on the last send (or too big to send), under the comment form's file input */
.tk-file-err{overflow-wrap:anywhere}
.tk-file-err>div+div{margin-top:4px}

/* v1.7.5 mobile audit */
/* ================= v1.7.5 — where you were (NAV) ================= */
/* NAV-10: the «←» in the sticky topbar of a task / card / form / project / error page (layout_head($back)):
   the only way back in the Home-Screen app stays in reach on a long page. Sized like the ☰. */
.topbar .topbar-back{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:6px 9px}
@media(max-width:900px){
  .topbar .topbar-back{min-width:44px;min-height:44px;padding:0 10px}
  /* VISUAL-6: «← Назад» / «← Проекты» in the page itself — a full-size tap target (it was 79×36) */
  .content a.back-link{min-height:44px;padding:10px 16px;font-size:14px}
}
/* FORMS-5 / NAV-2: the panel's active filters as chips next to «Фильтры» (a remembered view never hides one) */
.od-chip.fchip{max-width:100%;min-width:0}
.od-chip.fchip .fchip-l{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* PERF-9: «Нет связи» / «Сеть не отвечает» from layout.php's early script while app.js (its toast) isn't loaded yet */
.za-nav-msg{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:120;
  background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:12px;font-weight:600;font-size:14px;
  box-shadow:var(--shadow);max-width:90vw;text-align:center;pointer-events:none}
.za-nav-msg[hidden]{display:none}
/* TOUCH-6: a project row opens from anywhere on it (data-href) */
.pv-task[data-href]{cursor:pointer}
/* NAV-14: «Вернуть на доску» lands on the next archive row (#arch-N) — below the sticky topbar, not under it */
table.arch-table tr[id^="arch-"]{scroll-margin-top:calc(90px + env(safe-area-inset-top))}
/* ================= v1.7.5 — taps on the phone (TOUCH-1/4/7, PERF-4, FORMS-4) ================= */
/* A tap shows at once that it worked: the pressed card / row lights up (:active works on iOS because touch.js
   listens to touchstart), the opening one dims (.is-opening) and a thin bar runs on top while the next page
   loads (html.is-nav — set by layout.php's early script / zaNav()). */
.card[data-href]:active,tr[data-href]:active,li[data-href]:active,.notif:active,.pj-card:active{background:var(--hover)}
.is-opening{opacity:.55;transition:opacity .12s}
html.is-nav body::after{content:"";position:fixed;left:0;right:0;top:env(safe-area-inset-top,0px);height:3px;z-index:300;
  pointer-events:none;background:linear-gradient(90deg,transparent,var(--red2),transparent) no-repeat;background-size:40% 100%;
  animation:za-nav 1s linear infinite}
@keyframes za-nav{from{background-position:-60% 0}to{background-position:160% 0}}
/* («*{animation:none}» doesn't reach ::after) */
@media(prefers-reduced-motion:reduce){html.is-nav body::after{animation:none;background:var(--red2);opacity:.6}}
@media (hover:none) and (pointer:coarse){
  /* iPhone: a long press lifted a draggable card (iOS drag & drop) and dropping it on the next column's visible
     edge moved it. The ⇄ sheet moves cards on phones. (Not draggable="false": process.js reads that as «fixed».) */
  .board .card[draggable="true"],.pboard .pcard[draggable="true"]{-webkit-user-drag:none}
  /* The project chip inside a board card / a list row: a tap there opens the task like the rest of the card
     (the project is one tap away on the task page) — before, 17 % of a card led to the project instead. */
  .board .card a.projchip,table.tasks.stack .t-proj a{pointer-events:none}
}
/* The filter panel is open (app.js): the floating «+» steps aside — it covered «Фильтр» and the last select. */
@media(max-width:900px){html.fx-open .fab{display:none}}
/* ===== v1.7.5 · file_view.php — an attachment inside the app (FILES) ===== */
.fv-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 12px}
.fv-bar .btn{min-height:40px}
.fv-head{display:flex;align-items:flex-start;gap:12px;padding:14px 16px}
.fv-head .fv-ico{flex:0 0 44px;width:44px;height:44px}
.fv-head-main{flex:1;min-width:0}
.fv-name{margin:0 0 6px;font-size:16px;line-height:1.35;overflow-wrap:anywhere}
.fv-meta{display:flex;align-items:center;gap:7px;min-width:0;color:var(--muted);font-size:12.5px;line-height:1.4}
.fv-meta .avatar{width:20px;height:20px;font-size:9px;flex-shrink:0}
.fv-meta span:last-child{min-width:0;overflow-wrap:anywhere}
.fv-na{text-align:center;padding:28px 18px}
.fv-na p,.fv-na-in p{margin:0 0 16px;color:var(--ink2);line-height:1.5}
.fv-na .btn,.fv-na-in .btn{min-height:44px;justify-content:center}
.fv-note{margin:8px 2px 0;color:var(--muted);font-size:12.5px;line-height:1.45}
.fv-more{margin:10px 0 0}
.fv-empty{padding:28px 10px}
/* sheets (xlsx / csv): tabs, then a scroll box of its own — the first row and the row numbers stay in view; at its
   top / bottom a vertical swipe goes on to the page (only sideways swipes stay inside) */
.fv-tabs{display:flex;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 0 10px;padding-bottom:2px;scrollbar-width:none}
.fv-tabs::-webkit-scrollbar{display:none}
.fv-tab{flex:0 0 auto;display:inline-flex;align-items:center;min-height:36px;max-width:70vw;padding:7px 14px;border-radius:999px;border:1px solid var(--line);
  background:var(--panel2);color:var(--ink2);font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fv-tab.on{background:var(--red);border-color:var(--red);color:#fff}
.fv-sheet{overflow:auto;max-height:calc(100vh - 230px);max-height:calc(100dvh - 230px - env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch;
  overscroll-behavior-x:contain;border:1px solid var(--line);border-radius:12px;background:var(--panel)}
/* as wide as its content (the box scrolls sideways), a column at most 18em: short values stay on one line,
   long text wraps at words (never «Арти/кул») */
.fv-table{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%;font-size:13px;line-height:1.4}
.fv-table th,.fv-table td{min-width:3em;max-width:18em;padding:6px 10px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  text-align:left;vertical-align:top;white-space:pre-wrap;overflow-wrap:break-word}
.fv-table thead th{position:sticky;top:0;z-index:2;background:var(--panel2);color:var(--ink);font-weight:700}
.fv-table .fv-rn{position:sticky;left:0;z-index:1;width:1%;min-width:0;background:var(--panel2);color:var(--muted);font-size:11px;font-weight:600;
  text-align:right;white-space:nowrap}
.fv-table thead .fv-rn{z-index:3}
.fv-table .c-n{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.fv-table .c-f{color:var(--muted);font-style:italic}
.fv-table .c-e{color:var(--due-overdue)}
.fv-table tbody tr:last-child>*{border-bottom:0}
.fv-table tr>:last-child{border-right:0}
/* Word text, plain text, photos, PDF pages */
.fv-doc .fv-p{margin:0 0 10px;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.55;tab-size:4}
.fv-doc .fv-h{font-size:1.1em;font-weight:700}
.fv-doc .fv-gap{min-height:.6em;margin:0}
.fv-doc .fv-dtable{max-height:none;margin:6px 0 14px}
.fv-pre{margin:0 0 18px;white-space:pre-wrap;overflow-wrap:anywhere;font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;tab-size:4}
.fv-imgbox{padding:10px;text-align:center}
.fv-img{display:block;max-width:100%;height:auto;margin:0 auto;border-radius:8px}
.fv-imgbox .fv-na-in{display:none;padding:18px 8px}
.fv-imgbox.is-bad .fv-img{display:none}
.fv-imgbox.is-bad .fv-na-in{display:block}
.fv-pdf{margin:0 0 18px}
.fv-page{position:relative;margin:0 0 10px;background:#fff;border:1px solid var(--line);border-radius:6px;overflow:hidden}
.fv-page canvas{position:absolute;top:0;left:0;width:100%;height:100%}
.fv-page-n{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);color:#8a8478;font-size:13px;text-align:center}
.fv-loading{padding:30px 0;color:var(--muted);text-align:center}
/* task page: «Вложения: N» among the status chips — a jump to the files panel */
.tk-files-jump{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;border:1px solid var(--line2);background:var(--panel2);
  color:var(--ink2);font-size:12px;font-weight:700;white-space:nowrap}
.tk-files-jump:hover{border-color:var(--red2);color:var(--ink)}
@media(max-width:900px){
  .fv-bar .btn{min-height:44px}
  .fv-sheet{max-height:calc(100vh - 200px);max-height:calc(100dvh - 200px - env(safe-area-inset-bottom))}
  .tk-files-jump{min-height:32px}
}
/* FORMS-11 — the comment form on a phone: «@ Отметить» and «Добавить» on one row right under the text box
   (the button sat 127 px lower, under the keyboard), the file picker below them */
@media(max-width:900px){
  .comment-actions select{flex:1 1 0;min-width:0}
  .comment-actions input[type=file]{flex:1 1 100%;order:2}
  .comment-actions .btn{margin-left:0;min-height:44px}
}
/* VISUAL-1/2 — a long link without spaces (a shared Google-Sheets address) in a task title, a subtask or the
   history no longer makes the task page or the notifications wider than the phone */
.detail>*{min-width:0}
.subrow>form,.subrow>div{min-width:0}
.subrow span,.act,.notif .n-sub{overflow-wrap:anywhere}
/* v1.7.5 final — a long link without spaces in a board card's title no longer stretches its column past the
   screen (on a phone the whole «К выполнению» column and every card in it were cut off at the right edge, and
   a tap aimed at a card's middle landed off the screen); on a computer the column no longer squeezes the others */
.board .col{min-width:0}
.card .ttl{overflow-wrap:anywhere}

/* v1.8.0 calendar + estimates */

/* ===== v1.8.0 · calendar (calendar.php + assets/calendar.js) ===== */
.cal{max-width:1200px}
.cal-who{margin-bottom:12px}
.cal-who select{min-width:240px}
.cal-weeknav{display:flex;align-items:center;gap:8px;margin:0 0 10px}
.cal-weeknav .cal-range{flex:1;min-width:0;text-align:center;font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-weeknav .icon-btn{width:40px;height:40px;padding:0;justify-content:center}
.cal-todaybtn{flex-shrink:0}
.cal-range .cr-short{display:none}
@media(max-width:520px){ .cal-weeknav.has-today .cr-long{display:none}.cal-weeknav.has-today .cr-short{display:inline} }
/* the week strip: Mon–Sun, a load bar each (green, red past the working day) */
.cal-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin:0 0 18px}
.cal-wd{position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;min-width:0;min-height:76px;padding:8px 2px 7px;
  border:1px solid var(--line);border-radius:12px;background:var(--panel);color:var(--ink);transition:border-color .15s,background .15s,transform .15s}
.cal-wd .wd-name{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.cal-wd .wd-num{font-size:18px;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.cal-wd .wd-bar{width:calc(100% - 14px);max-width:52px;height:5px;border-radius:3px;background:var(--track);overflow:hidden}
.cal-wd .wd-bar i{display:block;height:100%;border-radius:3px;background:var(--green);transition:width .25s}
.cal-wd .wd-h{font-size:11px;font-weight:600;color:var(--muted);white-space:nowrap}
.cal-wd.is-wkend{background:var(--panel2)}
.cal-wd.is-today .wd-num{color:var(--red-ink)}
.cal-wd.is-today::after{content:'';position:absolute;top:6px;right:6px;width:6px;height:6px;border-radius:50%;background:var(--red2)}
.cal-wd.on{border-color:var(--red2);background:var(--red-soft);box-shadow:inset 0 0 0 1px var(--red2)}
.cal-wd.is-over .wd-bar i{background:var(--red2)}
.cal-wd.is-over .wd-h{color:var(--danger-ink);font-weight:800}
.cal-wd:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
@media(hover:hover){.cal-wd:hover{border-color:var(--line2)}}
.cal.is-dnd .cal-wd{border-style:dashed}
.cal-wd.is-drop{border-style:solid;border-color:var(--red2);background:var(--red-soft);transform:scale(1.06)}

.cal-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:18px}
.cal-dayhead{margin:0 0 12px}
.cal-dayhead h2{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 4px;font-size:19px;font-weight:800}
.cal-todaytag{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;padding:2px 8px;border-radius:999px;background:var(--red);color:#fff}
.cal-whose{color:var(--muted);font-size:13px;margin:0 0 4px}
.cal-whose b{color:var(--ink)}
.cal-sum{font-size:14px;font-weight:600;color:var(--ink2)}
.cal-sum .cs-over{color:var(--danger-ink);font-weight:800}
.cal-sum .cs-bar{display:block;height:6px;margin-top:8px;border-radius:4px;background:var(--track);overflow:hidden}
.cal-sum .cs-bar i{display:block;height:100%;border-radius:4px;background:var(--green);transition:width .25s}
.cal-sum.is-over .cs-bar i{background:var(--red2)}
.cal-hint{color:var(--muted);font-size:12px;margin:8px 2px 0}
.cal-subh{display:flex;align-items:center;gap:8px;margin:20px 0 8px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.cal .cnt{display:inline-block;min-width:22px;padding:1px 7px;border-radius:999px;border:1px solid var(--line);background:var(--panel2);
  color:var(--muted);font-size:12px;font-weight:800;letter-spacing:0;text-align:center}
.cal-poolcol{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px}
.cal-poolhead{display:flex;align-items:center;gap:8px;margin:0 0 2px;font-size:17px;font-weight:800}
.cal-poolsub{color:var(--muted);font-size:13px;margin:0 0 12px}
.cal-poolcol.is-drop{border-color:var(--red2);box-shadow:inset 0 0 0 1px var(--red2);background:var(--red-soft)}
.cal-poolmore{width:100%;justify-content:center;margin-top:10px;min-height:44px}

/* a task row: time + controls on top, the title and its chips below; the pool shows «+ на этот день» instead */
/* taps land on the button / row itself, never on an icon's SVG */
.cal svg,.cal-sheet svg{pointer-events:none}
.cal-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.cal-list[data-is-empty]::after{content:attr(data-empty);display:block;padding:22px 12px;border:1px dashed var(--line2);border-radius:12px;
  color:var(--muted);font-size:14px;text-align:center}
.cal-item{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:4px 6px 10px;cursor:pointer;
  -webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:manipulation;
  transition:border-color .15s,box-shadow .15s,opacity .15s,transform .2s}
.cal-item:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.cal-item:active:not(.is-lifted){background:var(--hover)}
.cal-item.is-late{box-shadow:inset 3px 0 0 var(--due-overdue)}
.cal-item[aria-busy="true"],.cal-item.is-opening{opacity:.65}
.cal-item.is-moved{animation:za-pop .5s ease}
.ci-top{display:flex;align-items:center;gap:4px;min-height:44px}
.ci-grip{display:grid;place-items:center;flex-shrink:0;width:32px;height:44px;color:var(--muted);opacity:.75;cursor:grab;touch-action:none}
.ci-time{flex-shrink:0;white-space:nowrap;font-size:15px;font-weight:800;font-variant-numeric:tabular-nums}
.ci-time .ci-dash{margin:0 2px;color:var(--muted);font-weight:600}
.ci-time .ci-end{color:var(--muted);font-weight:700}
.cal-item.is-after .ci-time .ci-end{color:var(--danger-ink)}
.cal-item.is-locked .ci-time{padding-left:8px}
.ci-ctrl{display:flex;gap:2px;margin-left:auto}
.ci-btn{display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;border-radius:10px;background:transparent;color:var(--muted);cursor:pointer}
.ci-btn[aria-disabled="true"]{opacity:.28;cursor:default}
.ci-btn:active:not([aria-disabled="true"]){background:var(--panel2);color:var(--ink)}
.ci-btn:focus-visible{outline:2px solid var(--red2);outline-offset:-2px}
@media(hover:hover){.ci-btn:not([aria-disabled="true"]):hover{background:var(--panel2);color:var(--ink)}}
.ci-main{display:flex;align-items:center;gap:10px;padding:0 4px 0 36px}
.cal-item.is-locked .ci-main{padding-left:8px}
.ci-body{flex:1;min-width:0}
.ci-ttl{margin:0 0 6px;font-size:15px;font-weight:600;line-height:1.35;overflow-wrap:anywhere}
.ci-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.ci-meta .due{margin-left:0}
.ci-meta .projchip{max-width:100%}
.ci-est{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border:1px solid var(--line2);border-radius:999px;background:var(--panel2);
  color:var(--ink2);font:inherit;font-size:12px;font-weight:700;line-height:1.3;white-space:nowrap}
button.ci-est{min-height:32px;cursor:pointer}
.ci-est.is-guess{border-style:dashed;background:transparent;color:var(--muted)}
.ci-late{font-weight:800}
.ci-missed{font-size:12px;font-weight:600;color:var(--amber)}
.ci-foot{display:none}
.cal-pool .ci-top{display:none}
.cal-pool .cal-item{background:var(--panel2);padding:10px 10px 10px 12px}
.cal-pool .ci-main{padding:0}
.cal-pool .ci-foot{display:flex;align-items:center;gap:8px;margin-top:10px}
.ci-foot .ci-add{min-height:44px;padding:0 14px}
.ci-foot .ci-more{width:44px;height:44px;padding:0;justify-content:center;color:var(--muted)}
.cal.is-past .ci-add{display:none}
.cal-pool.is-clipped>li:nth-child(n+13){display:none}
.cal-donelist .cal-item{background:var(--panel2);opacity:.78}
.cal-donelist .ci-top{min-height:30px}
.ci-donelbl{display:inline-flex;align-items:center;gap:6px;padding-left:8px;color:var(--green);font-size:13px;font-weight:700}
.cal-donelist .ci-main{padding-left:8px}

/* dragging: the row follows the finger, a dashed gap shows where it lands */
.cal.is-dnd{-webkit-user-select:none;user-select:none}
.cal-ph{list-style:none;border:2px dashed var(--red2);border-radius:12px;background:var(--red-soft);opacity:.75}
.cal-ph.is-off,.cal-ph.is-origin{border-color:var(--line2);background:transparent;opacity:.5}
.cal-item.is-dragging:not(.is-lifted){display:none}
.cal-item.is-pressing{transform:scale(.985)}
.cal-item.is-lifted{position:fixed;z-index:95;margin:0;pointer-events:none;border-color:var(--red2);opacity:.96;
  box-shadow:0 16px 40px rgba(0,0,0,.45);transition:none;will-change:transform}

/* sheets: «Перенести» and «Оценка времени» */
.cal-sheet{max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow-y:auto;overscroll-behavior:contain}
.cal-sheet .opt-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-sheet .opt-sub{margin-left:auto;color:var(--muted);font-size:14px;font-weight:600;white-space:nowrap}
.cal-sheet .opt .tick{margin-left:10px}
.cal-sheet .opt-danger{color:var(--danger-ink)}
.cal-sheet .opt-quiet{color:var(--muted)}
.cal-pick{display:flex;gap:8px;padding:2px 12px 10px}
.cal-pick input{flex:1;min-width:0;min-height:44px;font-size:16px}
.cal-pick .btn,.cal-estform .btn{min-height:44px;flex-shrink:0}
.cal-estchips{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:2px 6px 12px}
.cal-estchip{min-height:48px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);color:var(--ink);font:inherit;font-size:16px;font-weight:700;cursor:pointer}
.cal-estchip.on{background:var(--red);border-color:var(--red);color:#fff}
.cal-estchip:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.cal-estform{display:flex;gap:8px;padding:0 6px 8px}
.cal-estform input{flex:1;min-width:0;min-height:44px;font-size:16px}
.cal-esterr{padding:0 8px 8px;color:var(--danger-ink);font-size:13px;font-weight:600}

@media(min-width:1100px){
  .cal-grid{grid-template-columns:minmax(0,1fr) 360px;align-items:start}
  .cal-poolcol{position:sticky;top:84px;max-height:calc(100vh - 104px);overflow-y:auto}
  .ci-foot .ci-add{min-height:36px}.ci-foot .ci-more{width:36px;height:36px}
}
@media(max-width:900px){
  .cal-who select{width:100%;min-width:0}
  .cal-weeknav .icon-btn{width:44px;height:44px}
  .cal-todaybtn{min-height:44px}
  .cal-week{gap:4px;margin:0 0 14px}
  .cal-wd{min-height:72px;padding:7px 0 6px;border-radius:10px}
  .cal-wd .wd-num{font-size:17px}
  .cal-poolcol{padding:12px}
}
@media(max-width:380px){
  .cal-weeknav{gap:6px}
  .cal-weeknav.has-today .cal-range{font-size:14px}
  .cal-todaybtn{padding-left:10px;padding-right:10px}
  .cal-wd .wd-h{font-size:10px}
  .ci-time{font-size:14px}
}
/* app.js's toast only informs — taps pass through it (faded out, it still covered buttons at the bottom) */
#zaToast{pointer-events:none}

/* ===== v1.8.0 · estimate + plan on the task, cards, «Мой день», nav ===== */
/* «⏱ 1 ч 30 мин» — a task's time estimate on cards, list rows, the task page. */
.est-chip{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:20px;
  background:var(--p-dept-bg);color:var(--ink2);white-space:nowrap;line-height:1.35;font-variant-numeric:tabular-nums}
a.est-chip{cursor:pointer}
.est-chip.est-add{background:transparent;border:1px dashed var(--line2);color:var(--muted);font-size:13px;padding:5px 11px}
.est-chip.est-add:hover{color:var(--ink);border-color:var(--red2)}
.est-chip.est-add:focus-visible{outline:2px solid var(--red2);outline-offset:2px}

/* Task form: «Оценка времени» — chips + an own value. */
.est-field{scroll-margin-top:90px}
.est-lbl{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:8px}
.est-chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}
.est-opt{position:relative;display:inline-flex;margin:0}
.est-field .est-opt input{position:absolute;opacity:0;width:1px;height:1px;min-height:0;margin:0;padding:0;border:0;pointer-events:none}
.est-opt span{display:inline-flex;align-items:center;min-height:40px;padding:8px 14px;border:1px solid var(--line);border-radius:20px;
  background:var(--panel2);color:var(--ink);font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap;
  -webkit-user-select:none;user-select:none;transition:border-color .15s,background .15s}
.est-opt:hover span{border-color:var(--line2)}
.est-opt input:checked+span{border-color:var(--red2);background:var(--red-soft)}
.est-opt input:focus-visible+span{outline:2px solid var(--red2);outline-offset:2px}
.est-own{display:flex;align-items:center;gap:10px}
.est-field .est-own label{margin:0;white-space:nowrap;font-size:13px}
.est-field .est-own input{max-width:150px}
@media(max-width:900px){
  .est-chips{gap:7px}
  .est-opt span{min-height:44px;padding:9px 15px;font-size:15px}
  .est-field .est-own input{max-width:none;flex:1;min-width:0}
}

/* Task page: estimate · «В плане: ср 30.09 · 2-я» · «Запланировать». */
.tk-plan{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:-2px 0 14px;padding:10px 12px;
  border:1px solid var(--line);border-radius:12px;background:var(--panel2)}
.tk-plan-est{display:inline-flex;align-items:center;gap:6px;min-width:0}
.tk-plan-lbl{font-size:13px;font-weight:600;color:var(--muted)}
.tk-plan .est-chip{font-size:13px;padding:4px 10px}
.plan-chip{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:4px 11px;border-radius:20px;max-width:100%;
  background:var(--s-prog-bg);color:var(--s-prog);font-size:13px;font-weight:700}
.plan-chip span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
a.plan-chip:hover span{text-decoration:underline}
a.plan-chip:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.plan-chip.is-past{background:var(--s-rev-bg);color:var(--amber)}
.plan-chip.is-done{background:var(--p-dept-bg);color:var(--muted)}
.tk-plan-btn{margin-left:auto}
@media(max-width:900px){
  .tk-plan{padding:10px}
  .plan-chip{min-height:36px}
  .tk-plan a.plan-chip,.tk-plan .est-chip.est-add{min-height:44px} /* links: a full finger */
  .btn.sm.tk-plan-btn{flex:1 1 100%;margin-left:0;min-height:44px;justify-content:center;font-size:14px} /* beats .btn.sm{min-height:36px} */
}

/* «Запланировать» sheet / inline panel (reuses the cancel form's sheet + options). */
.panel.tk-plan-form{border-color:var(--line2)}
.plan-opt{min-height:56px}
.plan-opt-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.plan-opt-day{color:var(--muted);font-weight:500}
.plan-opt-cur{color:var(--red-ink);font-size:13px;font-weight:700;white-space:nowrap}
.plan-load{color:var(--muted);font-size:12px;font-weight:600}
.plan-load.is-over{color:var(--due-overdue)}
.plan-date{display:grid;gap:8px}
.plan-date input[type=date]{width:100%;min-height:44px;font-size:16px;background:var(--panel2);border:1px solid var(--line);
  border-radius:10px;padding:10px 12px;color:var(--ink);outline:none}
.plan-date input[type=date]:focus{border-color:var(--red2)}
.plan-off .plan-opt-txt{color:var(--danger-ink)}
.plan-first{display:flex;align-items:center;gap:10px;min-height:44px;margin:0 0 14px;font-size:15px;font-weight:600;color:var(--ink);cursor:pointer}
.plan-first input{width:20px;height:20px;margin:0;flex-shrink:0;accent-color:var(--red2)}

/* Dashboard «Мой день». */
.md-panel .dz-head h2{align-items:baseline}
.md-date{color:var(--muted);font-size:14px;font-weight:600}
.md-empty{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:4px 0 2px}
.md-empty-txt{color:var(--muted);font-size:14px}
.md-empty .btn{min-height:40px}
.md-sum{display:flex;align-items:center;justify-content:space-between;gap:6px 10px;flex-wrap:wrap;margin:2px 0 8px;font-size:14px;color:var(--ink2)}
.md-txt b{color:var(--ink)}
.md-over{font-size:12px;font-weight:800;padding:2px 9px;border-radius:20px;background:var(--red-soft);color:var(--due-overdue);white-space:nowrap}
.md-bar{height:8px;border-radius:6px;background:var(--track);overflow:hidden;margin:0 0 6px}
.md-bar span{display:block;height:100%;border-radius:6px;background:var(--green);transition:width .3s}
.md-panel.is-over .md-bar span{background:var(--red2)}
.md-time{flex-shrink:0;width:46px;display:flex;flex-direction:column;font-size:12px;line-height:1.35;color:var(--muted);font-variant-numeric:tabular-nums}
.md-time b{color:var(--ink);font-size:14px;font-weight:700}
.md-time.is-after b,.md-time.is-after span{color:var(--due-overdue)} /* ends after the working day */
.md-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.md-meta:empty{display:none}
.md-guess{font-size:12px;color:var(--muted)}
@media(max-width:900px){ .md-empty .btn{min-height:44px} }

/* Settings «Рабочий день». */
.cfg-workday{max-width:640px}
.est-field .est-own input::placeholder{color:var(--muted);opacity:.55}

/* v1.8.0 · notifications page: «Календарь» — someone else changed your day plan */
.n-type.plan{background:var(--s-prog-bg);color:var(--s-prog)}

/* v1.8.0 · review fixes: 44 px targets, a past / empty day, timeline past midnight, planned after the due date,
   a project owner's view of someone else's day, the dragged card over the week strip, reassigning a planned task */
@media(max-width:900px){ .btn.sm.cal-todaybtn{min-height:44px} } /* beats .btn.sm{min-height:36px} */
/* ⏱ in the calendar: a 44 px button (WebKit clips hit-testing to a button's box) drawn as the 32 px chip */
button.ci-est{position:relative;z-index:0;min-height:44px;margin:-6px 0;padding:3px 10px;border:0;background:transparent}
button.ci-est::before{content:'';position:absolute;z-index:-1;left:0;right:0;top:6px;bottom:6px;border:1px solid var(--line2);border-radius:999px;background:var(--panel2)}
button.ci-est.is-guess::before{border-style:dashed;background:transparent}
.cal-list[data-is-empty]+.cal-hint{display:none}
.cal-hidden{margin:10px 2px 0;padding:8px 12px;border:1px dashed var(--line2);border-radius:10px;color:var(--muted);font-size:13px}
.cal-item.is-overflow .ci-dash{display:none}
.cal-item.is-overflow .ci-start{color:var(--danger-ink);font-size:13px;font-weight:700}
.ci-afterdue{display:none;font-weight:800}
.cal-item.is-afterdue .due{color:var(--due-overdue)}
.cal-item.is-afterdue .ci-afterdue{display:inline}
.cal-sheet .opt.is-afterdue .opt-sub{color:var(--danger-ink)}
.cal-item.is-lifted{transform-origin:0 0}
.cal-item.is-lifted.is-overweek{opacity:.92}
.cal-droplbl{position:fixed;z-index:96;pointer-events:none;padding:6px 12px;border-radius:999px;background:var(--red);color:#fff;
  font-size:14px;font-weight:800;white-space:nowrap;box-shadow:0 6px 18px rgba(0,0,0,.35)}
.field small.tk-reassign-note{color:var(--amber);font-size:12px;font-weight:600}

/* v1.9.0 process reports + bloggers */
/* ===== v1.9 · bloggers on process boards and cards (process.php, task.php) ===== */
/* ★ average rating chip of a blogger (pbl_star_chip): on board cards, the card page, the picker's list */
.bl-star{display:inline-flex;align-items:center;flex-shrink:0;padding:1px 7px;border-radius:999px;font-size:12px;font-weight:800;line-height:1.5;
  white-space:nowrap;color:var(--p-med);background:var(--p-med-bg);border:1px solid color-mix(in srgb,var(--gold) 35%,transparent);font-variant-numeric:tabular-nums}
/* (--p-med on --p-med-bg: the «medium» priority pill's pair — ≥ 4.5:1 in both themes; --gold was 4.3:1 on light) */
.bl-star-n{font-weight:600;color:var(--muted)}
/* board card: «Блогер: Иван Блог ★ 4,5» — the name shrinks, the ★ stays whole */
.pf dd.pf-bl{display:flex;align-items:center;gap:6px;min-width:0;overflow:visible}
.pf-bl-n{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p-bl{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;color:var(--ink2);font-size:12px;font-weight:600}
.p-bl-n{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* process.php: «Список блогеров →» on the blogger board */
.proc-bl-link{display:inline-flex;align-items:center;gap:8px;min-height:40px;margin:0 0 12px;padding:6px 14px 6px 10px;border-radius:999px;
  border:1px solid var(--line);background:var(--panel);color:var(--ink2);font-weight:700;font-size:14px;transition:.15s}
.proc-bl-link .i{color:var(--gold)}
.proc-bl-link:hover{border-color:var(--line2);color:var(--ink)}
.proc-bl-link:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.proc-bl-arr{color:var(--muted)}

/* process.php: «Excel» (admins) + its period sheet (reuses .sheet.cancel-form; no JS → :target) */
.proc-toolbar .proc-xl-btn{margin-left:auto}
.proc-toolbar .proc-xl-btn+.proc-new{margin-left:0}
.proc-xl-btn .i{color:var(--green)}
.proc-xl:target{transform:none;visibility:visible}
.pxl-presets{border:0;margin:0 0 6px;padding:0;min-width:0}
.pxl-presets legend{padding:0;margin:0 0 8px}
.pxl-chips{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pxl-chips .od-chip{justify-content:center;min-height:44px;font-size:15px;cursor:pointer;font-family:inherit;background:var(--panel2)}
.pxl-chips .od-chip.on{background:var(--red);border-color:var(--red);color:#fff}
.pxl-chips .od-chip:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.pxl-dates{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;margin-top:12px}
.pxl-dates .field{margin-bottom:8px;min-width:0}
.pxl-dates input[type=date]{min-height:44px;font-size:16px;min-width:0;-webkit-appearance:none;appearance:none}
.pxl-dates input[type=date]::-webkit-date-and-time-value{text-align:left}
.pxl-err{margin:0 0 10px}
.pxl-what{margin:4px 0 14px}
@media(min-width:901px){
  .proc-xl:target{transform:translate(-50%,-50%);opacity:1}
}
@media(max-width:900px){
  .proc-toolbar .proc-xl-btn{min-height:44px;padding:0 14px}
  .proc-bl-link{min-height:44px}
}

/* task.php form: the «Блогер» picker of a blogger-board card */
.tk-cf-grid .bl-pick{grid-column:1/-1}
.bl-pick .bl-search{margin-bottom:8px}
.bl-pick.has-err .bl-search,.bl-pick.has-err .bl-new input:not([aria-invalid]),.bl-pick.has-err .bl-new select{border-color:var(--line);box-shadow:none}
.bl-search-none{margin-top:6px;color:var(--muted);font-size:13px}
.bl-new-btn{margin-top:8px}
.bl-new-btn .bl-nb-ico{display:inline-flex}
.bl-new{margin-top:10px;padding:12px 12px 2px;border:1px dashed var(--line2);border-radius:12px;background:var(--panel2)}
.bl-new .field input,.bl-new .field select{background:var(--panel)}
.bl-new-ttl{font-size:13px;font-weight:700;color:var(--ink2);margin:0 0 10px}
.bl-new .row{gap:0 12px}
.bl-new>.hint{display:block;margin:-4px 0 10px;color:var(--muted);font-size:12px}
.bl-pick .bl-dir-link{color:var(--ink2);text-decoration:underline;text-underline-offset:2px;white-space:nowrap}
@media(max-width:900px){
  .btn.sm.bl-new-btn{min-height:44px;width:100%;justify-content:center} /* beats .btn.sm{min-height:36px} */
}

/* task.php view: the card's blogger + this card's rating + «Оценить блогера» */
.tk-fields dd.tk-f-bl{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px}
.tk-bl{margin:0 0 14px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);scroll-margin-top:90px}
.tk-bl-head{display:flex;align-items:center;gap:12px;min-width:0}
.tk-bl-ico{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;flex-shrink:0;color:var(--gold);
  background:var(--panel);border:1px solid var(--line)}
.tk-bl-main{display:flex;flex-direction:column;min-width:0;flex:1}
.tk-bl-main small{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.tk-bl-name{font-size:16px;font-weight:700;color:var(--ink);overflow-wrap:anywhere;text-decoration:underline;text-decoration-color:var(--line2);text-underline-offset:3px}
.tk-bl-name:focus-visible{outline:2px solid var(--red2);outline-offset:2px;border-radius:4px}
.tk-bl-sub{color:var(--muted);font-size:13px;overflow-wrap:anywhere}
.tk-bl-st{display:inline-block;padding:0 7px;border-radius:999px;font-size:11px;font-weight:800;vertical-align:1px}
.tk-bl-st.is-paused{background:var(--s-rev-bg);color:var(--s-rev)}
.tk-bl-st.is-blacklist{background:var(--red-soft);color:var(--red-ink);border:1px solid var(--red-line)}
.tk-bl-avg{flex-shrink:0}
.tk-bl-avg .bl-star{font-size:14px;padding:3px 10px}
.tk-bl-avg.is-none{color:var(--muted);font-size:12px;font-weight:600;text-align:right;max-width:40%}
.tk-bl-rate{margin:12px 0 0;padding:10px 12px;border-radius:10px;background:var(--panel);border:1px solid var(--line)}
.tk-bl-rate-top{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px}
.tk-bl-rate-lbl{font-size:13px;font-weight:600;color:var(--muted)}
.tk-bl-num{font-size:13px;font-weight:700;color:var(--ink2);font-variant-numeric:tabular-nums;white-space:nowrap}
.tk-bl-rate-c{margin-top:6px;color:var(--ink);font-size:14px;overflow-wrap:anywhere}
.tk-bl-rate-by{display:block;margin-top:6px;color:var(--muted);font-size:12px}
.tk-bl-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.tk-bl-none{margin:0;color:var(--muted);font-size:14px}
.tk-bl-none a{color:var(--red-ink);font-weight:600;text-decoration:underline;text-underline-offset:2px}
/* read-only stars «★★★★☆» */
.bl-stars{display:inline-flex;font-size:17px;letter-spacing:1px;line-height:1;white-space:nowrap}
.bl-stars .on{color:var(--gold)}
.bl-stars .off{color:var(--line2)}
@media(max-width:900px){
  .tk-bl-acts{display:grid;grid-template-columns:1fr 1fr}
  .tk-bl-acts .btn{min-height:44px;justify-content:center;width:100%;text-align:center}
  .tk-bl-acts .btn:only-child{grid-column:1/-1}
}
@media(max-width:520px){ .tk-bl-acts{grid-template-columns:1fr} } /* a phone: one full-width button per row, no wrapped labels */

/* «Оценить блогера» sheet / inline panel (reuses .cancel-form): five big star radios */
.bl-rate-stars{border:0;margin:0 0 12px;padding:0;min-width:0}
.bl-rate-stars legend{padding:0;margin:0 0 6px}
.bl-star-row{display:flex;gap:6px}
.bl-star-opt{position:relative;flex:1 1 0;max-width:64px;min-height:52px;display:grid;place-items:center;border-radius:12px;cursor:pointer;
  border:1px solid var(--line);background:var(--panel2);transition:border-color .15s,background .15s}
.bl-star-opt input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}
.bl-star-g{font-size:28px;line-height:1;color:var(--line2);pointer-events:none;transition:color .12s,transform .12s}
.bl-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.bl-star-opt:has(input:focus-visible){outline:2px solid var(--red2);outline-offset:2px}
.bl-star-row[data-v="1"] .bl-star-opt:nth-child(-n+1) .bl-star-g,
.bl-star-row[data-v="2"] .bl-star-opt:nth-child(-n+2) .bl-star-g,
.bl-star-row[data-v="3"] .bl-star-opt:nth-child(-n+3) .bl-star-g,
.bl-star-row[data-v="4"] .bl-star-opt:nth-child(-n+4) .bl-star-g,
.bl-star-row[data-v="5"] .bl-star-opt:nth-child(-n+5) .bl-star-g{color:var(--gold)}
.bl-star-row:has(.bl-star-opt:nth-child(1) input:checked) .bl-star-opt:nth-child(-n+1) .bl-star-g,
.bl-star-row:has(.bl-star-opt:nth-child(2) input:checked) .bl-star-opt:nth-child(-n+2) .bl-star-g,
.bl-star-row:has(.bl-star-opt:nth-child(3) input:checked) .bl-star-opt:nth-child(-n+3) .bl-star-g,
.bl-star-row:has(.bl-star-opt:nth-child(4) input:checked) .bl-star-opt:nth-child(-n+4) .bl-star-g,
.bl-star-row:has(.bl-star-opt:nth-child(5) input:checked) .bl-star-opt:nth-child(-n+5) .bl-star-g{color:var(--gold)}
.bl-star-opt:has(input:checked){border-color:var(--gold);background:var(--p-med-bg)}
.bl-star-opt:has(input:checked) .bl-star-g{transform:scale(1.08)}
.bl-star-cap{margin-top:6px;min-height:20px;font-size:14px;font-weight:700;color:var(--ink2)}
.bl-rate-nums{gap:0 12px}
.bl-rate-nums input{min-height:44px}
.bl-rate .field textarea{min-height:76px}

/* ================= v1.9.0 — «Блогеры»: the directory (bloggers.php), a profile + rating (blogger.php) ================= */
/* Platform mark: a round brand-coloured badge with a short code (white text: readable on both themes). */
.bd-pf{display:inline-grid;place-items:center;flex-shrink:0;width:40px;height:40px;border-radius:50%;color:#fff;
  font-size:12px;font-weight:800;letter-spacing:.02em;line-height:1;background:var(--muted);box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.bd-pf.sm{width:22px;height:22px;font-size:9px}
.bd-pf.lg{width:56px;height:56px;font-size:15px}
.pf-instagram{background:linear-gradient(45deg,#f9a825 0%,#e1306c 50%,#833ab4 100%)}
.pf-youtube{background:#e62117}
.pf-tiktok{background:#111;box-shadow:inset 0 0 0 2px #25f4ee}
.pf-telegram{background:#229ed9}
.pf-xiaohongshu{background:#ff2442}
.pf-douyin{background:#1c1a24;box-shadow:inset 0 0 0 2px #fe2c55}
.pf-weibo{background:#e6162d}
.pf-wechat{background:#07c160}
.pf-bilibili{background:#00a1d6}
.pf-vk{background:#0077ff}
.pf-other{background:#6f6858}

/* ---- the list ---- */
.bd-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.bd-count{margin:0;color:var(--muted);font-size:14px;font-weight:600}
.bd-head-act{display:flex;gap:8px;margin-left:auto}
.bd-head-act .btn{min-height:40px}
.bd-pfchips{display:flex;gap:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;margin:0 0 14px;padding:2px 1px 4px}
.bd-pfchips::-webkit-scrollbar{display:none}
.bd-pfchips .od-chip{flex-shrink:0}
.bd-pfchips .od-chip b{font-weight:800;opacity:.75}
.bd-pfchip .bd-pf{box-shadow:none}
.bd-list{display:flex;flex-direction:column;gap:8px}
.bd-row{display:flex;align-items:center;gap:12px;min-height:72px;padding:12px 12px 12px 14px;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);min-width:0}
.bd-row:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
.bd-row.is-paused{opacity:.8}
.bd-row.is-blacklist{border-left:3px solid var(--red2)}
@media(hover:hover){ .bd-row:hover{border-color:var(--line2);background:var(--panel2)} }
.bd-row:active{background:var(--hover)}
.bd-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.bd-l1{display:flex;align-items:center;gap:8px;min-width:0}
.bd-name{font-weight:700;font-size:16px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bd-l2,.bd-l3{display:flex;flex-wrap:wrap;align-items:center;gap:2px 10px;color:var(--muted);font-size:13px;min-width:0}
.bd-l2>span,.bd-l3>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.bd-handle{color:var(--ink2);font-weight:600}
.bd-l3{color:var(--ink2)}
.bd-rate{font-weight:800;color:var(--ink)}
.bd-rate small{font-weight:600;color:var(--muted);font-size:12px}
.bd-star{color:var(--gold);margin-right:2px}
.bd-norate{color:var(--muted);font-style:italic}
.bd-last{color:var(--muted)}
.bd-chev{color:var(--muted);font-size:22px;line-height:1;flex-shrink:0;padding-left:2px}
.bd-st{display:inline-flex;align-items:center;flex-shrink:0;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:700;
  background:var(--p-med-bg);color:var(--p-med);white-space:nowrap}
.bd-st.st-blacklist{background:var(--red-soft);color:var(--danger-ink)}
.bd-none{text-align:center;color:var(--muted);padding:28px 10px}
.bd-none p{margin:0 0 12px}
.bd-empty{text-align:center;padding:30px 20px}
.bd-empty-ico{display:inline-grid;place-items:center;width:64px;height:64px;border-radius:50%;background:var(--panel2);color:var(--gold);margin-bottom:10px}
.bd-empty h2{margin:0 0 8px}
.bd-empty p{color:var(--muted);max-width:460px;margin:0 auto 18px}
.bd-empty .btn{min-height:44px;justify-content:center}

/* ---- a profile ---- */
.bd-prof{display:grid;grid-template-columns:minmax(0,1fr);gap:0 18px;align-items:start}
@media(min-width:1100px){ .bd-prof{grid-template-columns:minmax(0,5fr) minmax(0,6fr)} }
.bd-col{min-width:0}
.bd-hero-top{display:flex;align-items:flex-start;gap:14px;min-width:0}
.bd-hero-id{flex:1;min-width:0}
.panel h2.bd-hero-name{margin:2px 0 4px;font-size:20px;line-height:1.25;overflow-wrap:anywhere}
.bd-hero-sub{display:flex;flex-wrap:wrap;gap:2px 10px;color:var(--muted);font-size:14px}
.bd-hero-sub>span{min-width:0;overflow-wrap:anywhere}
.bd-hero-id .bd-st{margin-top:6px}
.bd-hero-rate{display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;text-align:right}
.bd-hero-avg{font-size:26px;font-weight:800;line-height:1.1;white-space:nowrap}
.bd-hero-nr{color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap}
.bd-hero-rate.is-none .bd-hero-nr{font-style:italic;font-size:13px}
.bd-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:16px 0 0}
.bd-kpis>div{display:flex;flex-direction:column;justify-content:space-between;background:var(--panel2);border:1px solid var(--line);
  border-radius:10px;padding:8px 9px;min-width:0}
.bd-kpis dt{color:var(--muted);font-size:11px;font-weight:700;line-height:1.25;overflow-wrap:anywhere;hyphens:auto}
.bd-kpis dd{margin:4px 0 0;font-size:22px;font-weight:800;line-height:1.1}
.bd-kpis .ok dd{color:var(--green)}
.bd-kpis .bad dd{color:var(--danger-ink)}
.bd-conv{margin:10px 0 0;color:var(--ink2);font-size:13px;font-weight:600}
.bd-vo{margin-top:4px;display:flex;flex-wrap:wrap;gap:2px 12px}
.bd-vo b{color:var(--ink)}
.bd-hero-act{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.bd-hero-act .btn{min-height:44px;flex:1 1 140px;justify-content:center}
.bd-muted{color:var(--muted);margin:0 0 10px}
.bd-inline-link{color:var(--red-ink);font-weight:700;text-decoration:underline;text-underline-offset:2px}
.bd-pre{white-space:pre-wrap;overflow-wrap:anywhere}
.bd-sel{-webkit-user-select:text;user-select:text}
.bd-foot{margin:14px 0 0;color:var(--muted);font-size:12px}

/* contacts: each a full-width tap row (tel:, mailto:, wa.me, t.me, the profile) or a value + «Копировать» */
.bd-ct-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.bd-ct{display:flex;align-items:stretch;gap:8px;min-width:0}
.bd-ct-main{flex:1;display:flex;align-items:center;gap:12px;min-width:0;min-height:52px;padding:8px 12px;border:1px solid var(--line);
  border-radius:12px;background:var(--panel2);color:var(--ink)}
a.bd-ct-main:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
a.bd-ct-main:active{background:var(--hover)}
@media(hover:hover){ a.bd-ct-main:hover{border-color:var(--line2);background:var(--hover)} }
.bd-ct-ico{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--panel);color:var(--red-ink);flex-shrink:0}
.bd-ct-txt{display:flex;flex-direction:column;min-width:0;flex:1}
.bd-ct-l{color:var(--muted);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.bd-ct-v{font-weight:600;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bd-ct-main.is-static .bd-ct-v{white-space:normal;overflow-wrap:anywhere}
.bd-ct-go{color:var(--muted);flex-shrink:0}
.bd-copy{flex-shrink:0;min-height:52px;min-width:52px;justify-content:center;border-radius:12px}
.bd-copy.is-done{border-color:var(--ok-line);background:var(--ok-bg);color:var(--ok-ink)}
.bd-details{margin:14px 0 0;display:flex;flex-direction:column;gap:10px}
.bd-details>div{display:flex;flex-wrap:wrap;align-items:flex-start;gap:2px 10px;padding-top:10px;border-top:1px solid var(--line)}
.bd-details dt{width:100%;color:var(--muted);font-size:12px;font-weight:700}
.bd-details dd{margin:0;flex:1;min-width:0}
.bd-details dd.bd-dd-act{flex:0 0 auto}
.bd-details .bd-copy{min-height:44px;min-width:44px}

/* «История сэмплов» */
.bd-h-n{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);
  color:var(--muted);font-size:12px;font-weight:700;vertical-align:2px}
.bd-h-list,.bd-r-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.bd-h{display:flex;align-items:stretch;gap:8px;min-width:0}
.bd-h-main{flex:1;display:flex;flex-direction:column;gap:3px;min-width:0;padding:10px 12px;border:1px solid var(--line);
  border-left:3px solid var(--s-prog);border-radius:12px;background:var(--panel2);color:var(--ink)}
.bd-h.k-done .bd-h-main{border-left-color:var(--green)}
.bd-h.k-fail .bd-h-main{border-left-color:var(--red2)}
.bd-h.k-cancelled .bd-h-main{border-left-color:var(--line2);opacity:.75}
a.bd-h-main:focus-visible{outline:2px solid var(--red2);outline-offset:2px}
a.bd-h-main:active{background:var(--hover)}
@media(hover:hover){ a.bd-h-main:hover{border-color:var(--line2);background:var(--hover)} }
.bd-h-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bd-h-date{color:var(--muted);font-size:12px;font-weight:700}
.bd-h-pill{padding:1px 8px;border-radius:999px;font-size:11px;font-weight:700;background:var(--s-prog-bg);color:var(--s-prog)}
.bd-h-pill.k-done{background:var(--s-done-bg);color:var(--s-done)}
.bd-h-pill.k-fail{background:var(--red-soft);color:var(--danger-ink)}
.bd-h-pill.k-cancelled{background:var(--s-todo-bg);color:var(--s-todo)}
.bd-h-rt{margin-left:auto;font-weight:800;font-size:13px}
.bd-h-title{font-weight:700;overflow-wrap:anywhere}
.bd-h-sub{color:var(--ink2);font-size:13px;overflow-wrap:anywhere}
.bd-h-meta{color:var(--muted);font-size:12px;overflow-wrap:anywhere}
.bd-h .bd-h-rev{flex-shrink:0;align-self:stretch;min-height:44px;justify-content:center;border-radius:12px}

/* «Оценки» */
.bd-r{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);min-width:0}
.bd-r-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.bd-stars-ro{display:inline-flex;gap:1px}
.bd-stars-ro .on{color:var(--gold)}
.bd-stars-ro .off{color:var(--line2)}
.bd-r-score{font-weight:700;font-size:14px}
.bd-r-edit{margin-left:auto;display:inline-flex;align-items:center;min-height:44px;padding:0 6px;color:var(--red-ink);font-weight:700;font-size:13px}
.bd-r-nums{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:4px;color:var(--ink2);font-size:13px}
.bd-r-c{margin:8px 0 0}
.bd-r-meta{display:flex;flex-wrap:wrap;gap:2px 10px;margin-top:8px;color:var(--muted);font-size:12px}
.bd-r-meta .bd-inline-link{font-size:12px;display:inline-flex;align-items:center;min-height:32px}

/* «Оценить»: five big stars (radio buttons — keyboard and VoiceOver work), the words under them follow */
.bd-rate.is-open{border-color:var(--red-line);box-shadow:0 0 0 3px var(--red-soft)}
.bd-rate h2:focus{outline:none}
.bd-score{border:0;padding:0;margin:0 0 14px;min-width:0}
.bd-score legend{padding:0;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:6px}
.bd-stars{display:flex;gap:4px;flex-wrap:nowrap}
/* (.bd-stars .bd-star-btn: beats .field label's display:block — the fieldset is a .field) */
.bd-stars .bd-star-btn{position:relative;display:grid;place-items:center;width:52px;height:52px;margin:0;border-radius:12px;cursor:pointer;
  color:var(--line2);-webkit-tap-highlight-color:transparent}
.bd-star-btn input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}
.bd-stars .bd-star-btn.on{color:var(--gold)}
.bd-star-btn:has(input:focus-visible){outline:2px solid var(--red2);outline-offset:1px}
.bd-star-btn:active{transform:scale(.94)}
.bd-score.has-err .bd-stars{border-radius:12px;box-shadow:0 0 0 2px var(--red2)}
.bd-score-txt{margin-top:4px;font-weight:700;font-size:14px;min-height:20px;color:var(--ink2)}
.bd-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* the blogger form */
.bd-form-panel{max-width:760px}
.bd-fs{border:0;padding:0;margin:0 0 6px;min-width:0}
.bd-fs legend{padding:0;margin:0 0 10px;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.bd-fs+.bd-fs{border-top:1px solid var(--line);padding-top:14px}
.field textarea.bd-ta-sm{min-height:64px}
.bd-dup{display:flex;flex-direction:column;align-items:flex-start;gap:8px;margin-top:8px}
.bd-dup .btn{min-height:40px}
.bd-check{display:inline-flex!important;align-items:center;gap:10px;min-height:44px;margin:0!important;color:var(--ink)!important;font-size:14px!important;cursor:pointer}
.bd-check input{width:22px!important;height:22px;min-height:0!important;margin:0}
.bd-actions{display:flex;gap:10px;flex-wrap:wrap}
.bd-actions .btn{min-height:44px;justify-content:center}
.field.has-err textarea{border-color:var(--red2);box-shadow:0 0 0 3px var(--red-soft)}

@media(max-width:900px){
  .bd-head-act .btn,.bd-toolbar .filter-toggle,.bd-toolbar .fchip,.bd-pfchips .od-chip{min-height:44px}
  .bd-actions .btn{flex:1 1 140px}
  .bd-pfchips{margin-left:-14px;margin-right:-14px;padding-left:14px;padding-right:14px;scroll-padding-left:14px}
}
@media(max-width:380px){
  .bd-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .bd-row{gap:10px;padding:10px 10px 10px 12px}
  .bd-pf{width:36px;height:36px;font-size:11px}
  .bd-pf.lg{width:48px;height:48px;font-size:13px}
  .bd-stars .bd-star-btn{width:48px;height:48px}
  .bd-stars{gap:2px}
  .bd-hero-avg{font-size:20px}
  .bd-hero-top{flex-wrap:wrap;gap:12px}
  .bd-hero-rate{order:3;width:100%;flex-direction:row;align-items:baseline;gap:8px;padding-left:60px;text-align:left}
  .bd-h{flex-wrap:wrap}
  .bd-h .bd-h-rev{flex:1 1 100%}
}

/* v1.9.0 integration: a <select> whose chosen option is long («BLG… Иван Петров · @ivan · Instagram», a card title)
   reports its whole text as scrollable overflow in WebKit — the iPhone page then scrolled sideways. Clip it. */
.field select{overflow:hidden;text-overflow:ellipsis}

/* v1.9.0 fixes — the profile's KPI tiles keep whole words on a 390px iPhone (2 columns up to 420px, wrap at spaces);
   the card's blogger block on an SE: the ★ chip goes under the name instead of squeezing it into fragments; anchors
   (#bd-rate, #bd-ratings, #bd-history) land below the sticky top bar; a colleague's sample in «История сэмплов» is
   plainly not a link (no stripe, no press state, a lock + the reason as text); rating «Удалить»; the general-rating
   edit note; the picker's «Новый блогер» stands out when the search found nobody. */
.bd-kpis dt{overflow-wrap:normal;word-break:normal;hyphens:manual}
@media(max-width:420px){ .bd-kpis{grid-template-columns:repeat(2,minmax(0,1fr))} }
.tk-bl-name,.tk-bl-sub{overflow-wrap:break-word}
@media(max-width:360px){
  .tk-bl-head{flex-wrap:wrap;row-gap:8px}
  .tk-bl-main{flex:1 1 calc(100% - 52px)}
  .tk-bl-avg{margin-left:52px}
}
#bd-rate,#bd-ratings,#bd-history{scroll-margin-top:calc(84px + env(safe-area-inset-top))}
.bd-h-main.is-static{border-left:1px dashed var(--line2);border-style:dashed;background:transparent;color:var(--ink2)}
.bd-h.is-locked .bd-h-main,.bd-h.k-done.is-locked .bd-h-main,.bd-h.k-fail.is-locked .bd-h-main{border-left-color:var(--line2)}
.bd-h-main.is-static:active{background:transparent}
.bd-h-title.is-muted{color:var(--muted);font-weight:600}
.bd-h-lock,.bd-h-note{display:flex;align-items:center;gap:6px}
.bd-h-lock .i,.bd-h-note .i{flex-shrink:0;color:var(--muted)}
.bd-h-note{margin:10px 0 0;font-size:12px;align-items:flex-start}
.bd-h-note .i{margin-top:2px}
.bd-r-del{margin:6px 0 0;display:flex;justify-content:flex-end}
.bd-r-del .btn.bd-r-del-btn{min-height:44px;color:var(--muted);gap:6px}
.bd-r-del .btn.bd-r-del-btn:active{color:var(--danger-ink)}
@media(hover:hover){ .bd-r-del .btn.bd-r-del-btn:hover{color:var(--danger-ink)} }
.bd-gen-edit .bd-gen-lbl{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:4px}
.bd-gen-txt{margin:0;font-weight:600;overflow-wrap:break-word}
.bl-new-btn.is-hint{border-color:var(--red2);color:var(--red-ink);box-shadow:0 0 0 3px var(--red-soft)}

/* v1.10.0 recurring 2.0 */

/* ===== v1.10.0 · recurring tasks (recurring.php) + the ↻ mark on cards, rows, the calendar, the task page ===== */
/* ↻ before a recurring task's title (board card, list row, calendar item); its title attribute = the schedule */
.rec-mark{display:inline-grid;place-items:center;width:18px;height:18px;margin-right:6px;border-radius:50%;vertical-align:1px;
  background:var(--s-prog-bg);color:var(--s-prog);font-size:12px;font-weight:800;line-height:1;flex-shrink:0;cursor:help}
/* task page: «↻ Пн, Ср, Пт · с 09:00 · Срочно · В работе» → the template */
.rec-link{display:inline-flex;align-items:center;gap:5px;min-width:0;max-width:100%;padding:3px 10px;border-radius:20px;
  background:var(--s-prog-bg);color:var(--s-prog);font-size:12px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
a.rec-link{cursor:pointer;transition:filter .15s}
a.rec-link:hover{text-decoration:underline;text-underline-offset:3px}
a.rec-link:focus-visible{outline:2px solid var(--red2);outline-offset:2px}

/* ---- the list ---- */
.rc-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.rc-count{margin:0;color:var(--muted);font-size:14px;font-weight:600}
.rc-add{margin-left:auto}
.rc-notice a{text-decoration:underline;text-underline-offset:3px;font-weight:700;white-space:nowrap}
.rc-stchips{display:flex;gap:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;margin:0 0 14px;padding:2px 1px 4px}
.rc-stchips::-webkit-scrollbar{display:none}
.rc-stchips .od-chip{flex-shrink:0}
.rc-stchips .od-chip b{font-weight:800;opacity:.75}
.rc-list{display:flex;flex-direction:column;gap:10px}
.rc-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);min-width:0;scroll-margin-top:80px;overflow:hidden}
.rc-card.is-urgent{border-left:3px solid var(--red2)}
.rc-card.is-paused{background:var(--panel2)}
.rc-card.is-paused .rc-main{opacity:.72}
.rc-card:target{box-shadow:0 0 0 3px var(--red-soft);border-color:var(--red-line)}
.rc-main{display:flex;flex-direction:column;gap:6px;padding:14px 14px 10px;color:var(--ink);min-width:0}
.rc-main:focus-visible{outline:2px solid var(--red2);outline-offset:-2px;border-radius:var(--radius)}
@media(hover:hover){ .rc-main:hover .rc-title{text-decoration:underline;text-underline-offset:3px} }
.rc-main:active{background:var(--hover)}
.rc-l1{display:flex;align-items:flex-start;gap:8px;min-width:0}
.rc-title{flex:1;min-width:0;font-weight:700;font-size:16px;line-height:1.3;overflow-wrap:anywhere}
.rc-paused-tag{flex-shrink:0;padding:2px 9px;border-radius:999px;background:var(--p-dept-bg);color:var(--muted);font-size:11px;font-weight:800;
  text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.rc-sched{display:flex;align-items:flex-start;gap:6px;color:var(--ink2);font-size:14px;font-weight:600;line-height:1.35;min-width:0}
.rc-sched .i{color:var(--s-prog);margin-top:1px}
.rc-sched span{min-width:0;overflow-wrap:anywhere}
.rc-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;min-width:0}
.rc-who{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;font-size:13px;font-weight:600;color:var(--ink2)}
.rc-who-n{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rc-who-n small{color:var(--muted);font-weight:500}
.rc-who.is-none{color:var(--muted);font-style:italic}
.rc-next-line{font-size:13px;color:var(--muted)}
.rc-next-line b{font-weight:600}
.rc-next-line.is-today{color:var(--ink)}
.rc-next-line.is-today b{color:var(--muted)}
.rc-dotline{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}
.rc-dots{display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}
.rc-dot{display:inline-block;width:12px;height:12px;border-radius:50%;flex-shrink:0;background:var(--line2);border:2px solid transparent;box-sizing:border-box}
.rc-dot.is-ok{background:var(--green)}
.rc-dot.is-late{background:var(--amber)}
.rc-dot.is-miss{background:var(--red2)}
.rc-dot.is-cancel{background:var(--line2)}
.rc-dot.is-open{background:transparent;border-color:var(--blue)}
.rc-dot.is-next{background:transparent;border-color:var(--line2)}
.rc-pct{font-size:12px;font-weight:700;color:var(--ink2);white-space:nowrap}
.rc-pct.is-high{color:var(--s-done)}
.rc-pct.is-low{color:var(--due-overdue)}
.rc-act{display:flex;flex-wrap:wrap;gap:8px;padding:10px 14px 14px;border-top:1px dashed var(--line)}
.rc-act form{display:flex;margin:0}
.rc-act .btn{gap:6px}
.rc-tgl.is-off{color:var(--s-done);border-color:var(--ok-line)}
.rc-histbtn{margin-left:auto}
.rc-none{text-align:center;color:var(--muted);padding:28px 10px}
.rc-none p{margin:0 0 12px}
.rc-empty{text-align:center;padding:30px 20px}
.rc-empty-ico{display:inline-grid;place-items:center;width:64px;height:64px;border-radius:50%;background:var(--panel2);color:var(--s-prog);margin-bottom:10px}
.rc-empty h2{margin:0 0 8px}
.rc-empty p{color:var(--muted);max-width:480px;margin:0 auto 18px}
.rc-empty .btn{min-height:44px;justify-content:center}

/* ---- the form ---- */
.rc-form-panel{max-width:760px}
.rc-fs{border:0;padding:0;margin:0 0 6px;min-width:0}
.rc-fs legend{padding:0;margin:0 0 10px;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.rc-fs+.rc-fs{border-top:1px solid var(--line);padding-top:14px}
.rc-lbl{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:8px}
.rc-opt-lbl{font-weight:500;color:var(--muted)}
.field textarea.rc-ta-sm{min-height:76px}
/* chips: a hidden radio / checkbox + its face (keyboard and VoiceOver keep the real control) */
.rc-chips{display:flex;flex-wrap:wrap;gap:8px}
.rc-chips .rc-chip,.rc-days .rc-day{position:relative;display:flex;margin:0;color:var(--ink);font-size:14px;font-weight:600;cursor:pointer;min-width:0}
.rc-chips .rc-chip input,.rc-days .rc-day input{position:absolute;opacity:0;width:1px;height:1px;min-height:0;margin:0;padding:0;border:0;pointer-events:none}
.rc-chip span,.rc-day span{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;min-height:44px;padding:8px 14px;
  border:1px solid var(--line);border-radius:12px;background:var(--panel2);text-align:center;line-height:1.2;
  -webkit-user-select:none;user-select:none;transition:border-color .15s,background .15s,color .15s}
@media(hover:hover){ .rc-chip:hover span,.rc-day:hover span{border-color:var(--line2)} }
.rc-chip input:checked+span,.rc-day input:checked+span{border-color:var(--red2);background:var(--red-soft);color:var(--ink)}
.rc-chip input:focus-visible+span,.rc-day input:focus-visible+span{outline:2px solid var(--red2);outline-offset:2px}
.rc-chip .dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex-shrink:0}
.rc-pdot{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0;background:var(--line2)}
.rc-prio .p-low .rc-pdot{background:var(--p-low)}
.rc-prio .p-medium .rc-pdot{background:var(--p-med)}
.rc-prio .p-high .rc-pdot{background:var(--p-high)}
.rc-prio .p-urgent .rc-pdot{background:var(--p-urg)}
.rc-prio .p-low input:checked+span{background:var(--p-low-bg);border-color:var(--p-low);color:var(--p-low)}
.rc-prio .p-medium input:checked+span{background:var(--p-med-bg);border-color:var(--p-med);color:var(--p-med)}
.rc-prio .p-high input:checked+span{background:var(--p-high-bg);border-color:var(--p-high);color:var(--p-high)}
/* «Срочно» chosen: red, unmistakably */
.rc-prio .p-urgent input:checked+span{background:var(--red);border-color:var(--red);color:#fff}
.rc-prio .p-urgent input:checked+span .rc-pdot{background:#fff}
.rc-prio{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
.rc-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
.rc-kinds{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
/* weekday / month-day chips: a grid of big squares */
.rc-days{display:grid;gap:6px}
.rc-wd{grid-template-columns:repeat(7,minmax(0,1fr))}
.rc-md{grid-template-columns:repeat(7,minmax(0,1fr))}
.rc-day span{padding:6px 2px;font-variant-numeric:tabular-nums}
.rc-wd .rc-day span{min-height:48px;font-size:15px}
.rc-wd .rc-day.is-wkend span{color:var(--muted)}
.rc-wd .rc-day.is-wkend input:checked+span{color:var(--ink)}
.rc-md .rc-last{grid-column:span 3}
.rc-md .rc-last span{font-size:13px}
.field.has-err .rc-days,.field.has-err .rc-chips{border-radius:12px;box-shadow:0 0 0 2px var(--red2);padding:4px}
.rc-every{display:flex;align-items:center;gap:10px;margin-top:10px}
.field .rc-every label{margin:0;white-space:nowrap}
.field .rc-every select{width:auto;flex:1;min-width:0;max-width:280px}
.rc-every-d select{max-width:280px}
.field input[type=time]{max-width:180px}
/* «Будет появляться: пн 12.10, ср 14.10 …» */
.rc-preview{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:12px 14px;margin:2px 0 14px;border-radius:12px;
  background:var(--s-prog-bg);color:var(--s-prog)}
.rc-pv-lbl{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700}
.rc-pv-list{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.rc-pv-d{display:inline-flex;align-items:center;padding:3px 9px;border-radius:999px;background:var(--panel);color:var(--ink);font-size:13px;
  font-weight:600;white-space:nowrap;font-variant-numeric:tabular-nums}
.rc-pv-d.is-today{background:var(--red);color:#fff}
.rc-pv-more{color:var(--s-prog);font-weight:700}
.rc-pv-none{font-size:13px;font-weight:600;color:var(--ink2)}
/* on / off switches with a line of explanation */
.rc-toggle{display:flex;align-items:flex-start;gap:12px;min-height:52px;padding:10px 12px;margin:0 0 8px;border:1px solid var(--line);
  border-radius:12px;background:var(--panel2);cursor:pointer;position:relative}
.rc-toggle input[type=checkbox]{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}
.rc-tg-sw{position:relative;flex-shrink:0;width:46px;height:28px;margin-top:2px;border-radius:999px;background:var(--line2);transition:background .15s}
.rc-tg-sw::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;
  box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .15s}
.rc-toggle input:checked~.rc-tg-sw{background:var(--green)}
.rc-toggle input:checked~.rc-tg-sw::after{transform:translateX(18px)}
.rc-toggle input:focus-visible~.rc-tg-sw{outline:2px solid var(--red2);outline-offset:2px}
.rc-tg-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.rc-tg-txt b{font-size:15px;font-weight:600;color:var(--ink)}
.rc-tg-txt small{font-size:12px;color:var(--muted);line-height:1.35}
.rc-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}
.rc-actions .btn{min-height:44px;justify-content:center}
.rc-danger{max-width:760px;display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}
.rc-danger p{flex:1 1 260px;margin:0;color:var(--muted);font-size:14px}
.rc-danger form{margin:0}
.rc-danger .btn{min-height:44px;gap:6px}

/* ---- one template: its page and history ---- */
.rc-head{display:flex;flex-direction:column;gap:8px}
.rc-head.is-paused{background:var(--panel2)}
.rc-h-top{display:flex;align-items:flex-start;gap:10px}
.rc-h-title{flex:1;min-width:0;margin:0!important;font-size:20px!important;overflow-wrap:anywhere}
.rc-head .rc-sched{font-size:15px}
.rc-due{font-size:12px;font-weight:600;color:var(--muted)}
.rc-then{color:var(--muted)}
.rc-today-line a{font-weight:700;color:var(--s-prog);text-decoration:underline;text-underline-offset:3px}
.rc-flags{display:flex;flex-wrap:wrap;gap:6px}
.rc-flags span{padding:2px 9px;border-radius:999px;background:var(--p-dept-bg);color:var(--muted);font-size:12px;font-weight:600}
.rc-what summary{cursor:pointer;font-weight:600;color:var(--ink2);min-height:32px;display:flex;align-items:center}
.rc-what .desc{margin:6px 0}
.rc-checklist{margin:6px 0 0;padding-left:20px;color:var(--ink2)}
.rc-checklist li{margin:3px 0}
.rc-head .rc-act{padding:10px 0 0;border-top:1px dashed var(--line);margin-top:4px}
.rc-stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin:0 0 12px}
.rc-stat{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px;min-width:0}
.rc-stat b{display:block;font-size:22px;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.rc-stat span{display:block;margin-top:4px;color:var(--muted);font-size:12px;font-weight:600;line-height:1.25}
.rc-stat.is-ok b{color:var(--s-done)}
.rc-stat.is-late b{color:var(--amber)}
.rc-stat.is-miss b{color:var(--due-overdue)}
.rc-stat.is-cancel b{color:var(--muted)}
.rc-dotline .rc-legend{display:flex;flex-wrap:wrap;gap:4px 12px;color:var(--muted);font-size:12px}
.rc-legend>span{display:inline-flex;align-items:center;gap:5px}
.rc-legend .rc-dot{width:10px;height:10px}
.panel+.rc-stats,.rc-stats+.rc-dotline{margin-bottom:14px}
.rc-hist{scroll-margin-top:80px}
.rc-cnt{color:var(--muted);font-weight:700;font-size:14px;margin-left:4px}
.rc-hist-empty{color:var(--muted);padding:12px 0}
.rc-hist-t td{vertical-align:middle}
.rc-c-date{white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:600}
.rc-c-date .rc-dot{margin-right:8px;vertical-align:-1px}
.rc-hist-t .t-title a{font-weight:600}
@media(hover:hover){ .rc-hist-t .t-title a:hover{text-decoration:underline;text-underline-offset:3px} }
.rc-late{font-size:12px;font-weight:700;white-space:nowrap}
.rc-late.is-ok{color:var(--s-done)}
.rc-late.is-late{color:var(--amber)}
.rc-late.is-miss{color:var(--due-overdue)}
.rc-mute{color:var(--muted)}
.rc-all{margin-top:12px;min-height:40px}

@media(max-width:900px){
  .rc-top .btn,.rc-toolbar .filter-toggle,.rc-toolbar .fchip,.rc-stchips .od-chip,.rc-act .btn,.rc-all{min-height:44px}
  .rc-stchips{margin-left:-14px;margin-right:-14px;padding-left:14px;padding-right:14px}
  .rc-act{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .rc-act>*{min-width:0}
  .rc-act .btn{width:100%;justify-content:center;font-size:14px}
  .rc-act>:last-child:nth-child(odd){grid-column:1/-1}
  .rc-histbtn{margin-left:0}
  .rc-list{margin-bottom:48px} /* the last card's buttons clear the floating «+» */
  .rc-kinds{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rc-prio{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rc-chip span{font-size:15px}
  .rc-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .rc-stat{padding:10px}
  .rc-stat b{font-size:20px}
  .rc-actions .btn{flex:1 1 140px}
  .rc-hist-t td.rc-c-date{padding-bottom:4px}
  .field input[type=time]{max-width:none}
  .field .rc-every select,.rc-every-d select{max-width:none}
}
@media(max-width:400px){
  .rc-wd{gap:4px}
  .rc-md{gap:4px}
  .rc-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* iPhone SE / mini: the working days on one row, the weekend under them; month days five to a row — every tap ≥ 44 px */
@media(max-width:389px){
  .rc-wd{grid-template-columns:repeat(5,minmax(0,1fr))}
  .rc-md{grid-template-columns:repeat(5,minmax(0,1fr))}
  .rc-md .rc-last{grid-column:1/-1}
  .rc-chip span{padding:8px 8px;font-size:14px}
}

/* ===== v1.10.0 · review fixes ===== */
/* task page «↻ Пн, Ср, Пт · с 09:00»: a 44 px tap area around the small chip (the chip itself keeps its look; the
   text ellipsis moved to .rec-txt so the chip no longer clips its own hit area) */
.rec-link{position:relative;overflow:visible}
.rec-link .rec-txt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
a.rec-link::after{content:"";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}
/* card buttons: one centred line each («Сегодня →» never breaks under its arrow on an iPhone SE) */
.rc-act .btn{white-space:nowrap;text-align:center;min-width:0;overflow:hidden}
/* the edit form: what an edit changes («следующие задачи») + «Применить к сегодняшней задаче» */
.rc-future{display:flex;align-items:flex-start;gap:6px;margin:-4px 0 12px;font-size:13px;line-height:1.4;color:var(--ink2)}
.rc-future .i{flex-shrink:0;margin-top:1px;color:var(--s-prog)}
.rc-apply{margin-bottom:14px;border-color:var(--s-prog)}
/* the assignee was switched off: its days are created unassigned */
.rc-warn{display:block;padding:7px 10px;border-radius:10px;background:var(--red-soft);color:var(--red-ink);font-size:13px;font-weight:600;line-height:1.35}
.rc-warn a{color:inherit;text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
