/* Sassi - design system (docs/design_handoff_sassi_ui/README.md). Dark mode only. RTL. */

:root {
  --bg: #0f1311;
  --card: #181e1b;
  --sunk: #0f1311;
  --hover: #232b26;
  --line: #1f2723;
  --border: #2a332e;
  --txt: #edf2ee;
  --body: #c3ccc6;
  --dim: #8fa098;
  --ok: #4ade80;
  --warn: #fbbf24;
  --bad: #f87171;
  --far: #c4b5fd;
  --ink: #0f1311;
  /* accent: family palette, chosen by colour circles in settings; default = this app's icon colour */
  --ac: #22a8f0; /* family palette (shared/README): blue = the tasks icon's blue */
  --ac2: #0f7ad8;
  --acText: #7dd3fc;
  --acSoft: rgba(34,168,240,.15);
  --acSoft2: rgba(34,168,240,.25);
  --acGlow: rgba(34,168,240,.35);
  --r-card: 20px; --r-modal: 22px; --r-input: 12px; --r-pill: 999px; --r-thumb: 14px; --r-tile: 12px;
  --nav-h: 76px;
  --fab-top: 132px; /* the floating button's top edge from the viewport bottom: nav (14 + 56) + 8 gap + 54; the body's bottom padding clears it (owner 2026-09-10) */
}
html[data-accent="teal"]   { --ac:#2dd4bf; --ac2:#0d9488; --acText:#5eead4; --acSoft:rgba(45,212,191,.15); --acSoft2:rgba(45,212,191,.25); --acGlow:rgba(45,212,191,.35); }
html[data-accent="rose"]   { --ac:#fb7185; --ac2:#e11d48; --acText:#fda4af; --acSoft:rgba(251,113,133,.15); --acSoft2:rgba(251,113,133,.25); --acGlow:rgba(251,113,133,.35); }
html[data-accent="purple"] { --ac:#a78bfa; --ac2:#7c3aed; --acText:#c4b5fd; --acSoft:rgba(167,139,250,.15); --acSoft2:rgba(167,139,250,.25); --acGlow:rgba(167,139,250,.35); }
html[data-accent="amber"]  { --ac:#f59e0b; --ac2:#c2410c; --acText:#fcd34d; --acSoft:rgba(245,158,11,.15); --acSoft2:rgba(245,158,11,.25); --acGlow:rgba(245,158,11,.35); }
/* high contrast (owner 2026-09-15, in place of the colour picker): the switch in settings, or a system that asks for it */
html[data-contrast="1"]{--line:#3d4944;--border:#56645d;--dim:#b4c1ba;--body:#e2e8e4;--acText:#bfe7fb}
@media (prefers-contrast: more){html:not([data-contrast]){--line:#3d4944;--border:#56645d;--dim:#b4c1ba;--body:#e2e8e4;--acText:#bfe7fb}}
html[data-contrast="1"] button,html[data-contrast="1"] .chip,html[data-contrast="1"] .card,html[data-contrast="1"] input,html[data-contrast="1"] select,html[data-contrast="1"] textarea{box-shadow:inset 0 0 0 1px var(--border)}
html[data-contrast="1"] :focus-visible{outline:3px solid var(--acText);outline-offset:2px}
html[data-accent="green"]  { --ac:#22c55e; --ac2:#15803d; --acText:#86efac; --acSoft:rgba(34,197,94,.15); --acSoft2:rgba(34,197,94,.25); --acGlow:rgba(34,197,94,.35); } /* the food icon's green (owner 2026-09-15); --ok stays the STATUS green */

*{box-sizing:border-box}
[hidden]{display:none !important} /* overrides display:flex of classes (e.g. .wz-wait/.wz-ok/.wz-video in the wizard) */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--txt);font-family:'Heebo',system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5}
a{color:var(--ac);text-decoration:none}@media (hover:hover){a:hover{color:var(--acText)}}
input,select,textarea,button{font-family:inherit;font-size:14px;color:var(--txt)}
input,select,textarea{background:var(--sunk);border:0;border-radius:var(--r-input);padding:.6rem .8rem;width:100%;max-width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid var(--ac);outline-offset:-1px}
/* Chrome paints an autofilled field white (the e-mail on the login page, owner 2026-09-18): the field keeps its own colours */
input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px var(--sunk) inset;-webkit-text-fill-color:var(--txt);caret-color:var(--txt);transition:background-color 9999s ease-out 0s}
input[type=date],input[type=time],input[type=number]{width:auto}
input[type=checkbox]{width:auto}
textarea{min-height:5rem;resize:vertical}
select{appearance:none;-webkit-appearance:none;padding-inline-end:2rem;background:var(--sunk) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' fill='none' stroke='%238fa098' stroke-width='2'/></svg>") no-repeat left .8rem center}
::placeholder{color:var(--dim)}
.num,[dir=ltr]{direction:ltr;unicode-bidi:isolate;font-variant-numeric:tabular-nums}

/* ---------- buttons ---------- */
button{cursor:pointer;border:0;border-radius:var(--r-input);background:var(--hover);color:var(--txt);padding:9px 14px;font-size:14.5px;font-weight:500;transition:background .15s,color .15s} /* family button spec (shared/README): flat, one shape */
@media (hover:hover){button:hover{background:#2a332e}.fab:hover{background:var(--ac);filter:brightness(1.08)}} /* hover only where a pointer can hover: on a touch screen :hover sticks to the last tapped element, and the FAB stayed grey after a tap + Back (owner 2026-09-16) */
button.pri{background:var(--ac);color:var(--ink);font-weight:600}
@media (hover:hover){button.pri:hover{background:var(--acText)}}
button.sm{padding:6px 11px;font-size:13px}
button.ghost{background:transparent;color:var(--dim)}
@media (hover:hover){button.ghost:hover{background:var(--hover);color:var(--txt)}}
.ibtn{width:34px;height:34px;padding:0;border-radius:50%;background:transparent;color:var(--dim);display:inline-flex;align-items:center;justify-content:center;font-size:14px}
@media (hover:hover){.ibtn:hover{background:var(--hover);color:var(--txt)}}
@media (hover:hover){.ibtn.danger:hover{background:rgba(248,113,113,.12);color:var(--bad)}}
.ibtn.on{background:var(--acSoft);color:var(--ac)}
.ibtn.lg{width:38px;height:38px}
.ibtn.outline{border:1px solid var(--border)}
button:disabled{opacity:.6;cursor:default}
form.inline{display:inline}

/* ---------- header ---------- */
.hdr{position:sticky;top:0;z-index:30;background:rgba(15,19,17,.85);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.hdr-in{max-width:860px;margin:0 auto;padding:.55rem 1rem;display:flex;align-items:center;gap:.7rem}
.brand{display:flex;align-items:center;gap:.5rem;font-weight:800;font-size:19px;color:var(--txt)}
.brand img{width:30px;height:30px;border-radius:8px;flex:none}
.brand .who{font-weight:400;font-size:13px;color:var(--dim)}
.hdr-icons{margin-inline-start:auto;display:flex;gap:.15rem}
.tag-quiet{font-size:12px;color:var(--warn);background:rgba(251,191,36,.12);border-radius:var(--r-pill);padding:.1rem .5rem}

/* ---------- floating bottom nav + FAB ---------- */
.bnav{position:fixed;bottom:14px;left:50%;transform:translateX(-50%);width:min(420px,calc(100vw - 28px));height:56px;background:rgba(24,30,27,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:var(--r-pill);border:1px solid var(--acSoft2);box-shadow:0 10px 34px rgba(0,0,0,.5),0 0 0 1px rgba(0,0,0,.4);display:flex;align-items:center;justify-content:space-around;padding:0 .4rem;z-index:40}
.bnav a,.bnav button{width:48px;height:44px;display:flex;align-items:center;justify-content:center;border-radius:var(--r-pill);color:var(--dim);font-size:17px;background:transparent;padding:0}
.bnav a.on,.bnav button.on{background:var(--acSoft);color:var(--ac)}
.fab{position:fixed;bottom:78px;right:max(16px,calc(50% - 414px));width:54px;height:54px;border-radius:50%;background:var(--ac);color:var(--ink);font-size:26px;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 28px var(--acGlow);z-index:40;padding:0}

/* ---------- page layout ---------- */
main{max-width:860px;margin:0 auto;padding:14px 14px calc(var(--fab-top) + 4px)} /* the only bottom room: the last card's margin + this clear the floating + and the nav (owner 2026-09-10: no more than needed) */
.card{background:var(--card);border-radius:var(--r-card);padding:20px;margin-bottom:14px}
.card.tight{padding:16px}
.card h2{margin:0 0 .8rem;font-size:16px;font-weight:600;display:flex;align-items:center;gap:.5rem}
.card h2 .cnt{font-size:12px;font-weight:400;color:var(--dim)}
.card h2 .badge{font-size:11px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:14px;align-items:start}
.row{display:flex;align-items:center;gap:.6rem;padding:10px 0;border-bottom:1px solid var(--line)}
.row:last-child{border-bottom:0}
.row .grow{flex:1;min-width:0}
.row .ttl{font-size:14.5px;font-weight:500;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.row .meta{font-size:12px;color:var(--dim);font-weight:300;display:flex;flex-wrap:wrap;gap:.25rem .7rem;margin-top:.15rem}
.row .meta>span,.row .meta .num{font:inherit;font-size:12px;max-height:999999px;-webkit-text-size-adjust:none;text-size-adjust:none} /* a badge that wraps to its own line got 'boosted' on the phone (a far date, 2026-09-07): pinned to the meta size, boosting off */
.row .meta .bad{color:var(--bad)}.row .meta .far{color:var(--far)}.row .meta .warn{color:var(--warn)}.row .meta .ac{color:var(--acText)}
.row .acts{display:flex;gap:.1rem;flex:none}
.dim{color:var(--dim);font-size:13px;font-weight:300}
.hint{color:var(--dim);font-size:12px;font-weight:300;margin:.5rem 0 0}
.empty{color:var(--dim);font-weight:300;border:1px dashed var(--border);border-radius:var(--r-input);padding:.8rem;text-align:center}
.ttl.done{text-decoration:line-through;color:var(--dim)} /* scoped: the wizard uses .wz.done as a layout class and was struck through (owner 2026-09-02) */
.badge{display:inline-block;font-size:12px;font-weight:400;line-height:1.4;padding:.1rem .55rem;border-radius:var(--r-pill);background:var(--hover);color:var(--dim);white-space:nowrap;font-family:inherit}
.badge.ok{background:rgba(74,222,128,.12);color:var(--ok)}
.badge.warn{background:rgba(251,191,36,.12);color:var(--warn)}
.badge.bad{background:rgba(248,113,113,.12);color:var(--bad)}
.badge.far{background:rgba(196,181,253,.12);color:var(--far)}
.badge.ac{background:var(--acSoft);color:var(--acText)}
.flash{border-radius:14px;padding:.7rem 1rem;margin-bottom:14px;display:flex;gap:.6rem;align-items:flex-start;word-break:break-word}
.flash.err{background:rgba(248,113,113,.12);color:var(--bad)}
.flash.ok{background:var(--acSoft);color:var(--acText)}
.flash.warn{background:rgba(251,191,36,.12);color:var(--warn)}

/* ---------- rounded-square checkbox ---------- */
.chk{width:24px;height:24px;border-radius:8px;border:1.5px solid var(--border);background:transparent;padding:0;display:inline-flex;align-items:center;justify-content:center;color:transparent;flex:none}
@media (hover:hover){.chk:hover{border-color:var(--ac);color:var(--ac);background:transparent}}
.chk.on{background:var(--ac);border-color:var(--ac);color:var(--ink)} /* checks follow the accent, green is a status colour only (owner 2026-09-07) */
.chk.off{border-style:dashed;color:var(--dim);font-size:11px} /* a reminder before its moment: the clock asks before an early done (owner 2026-09-04 / 05) */
@media (hover:hover){.chk.off:hover{border-color:var(--ac);color:var(--ac)}}

/* ---------- forms ---------- */
.frm{display:flex;flex-direction:column;gap:.7rem}
.frow{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center}
.frow>*{flex:1;min-width:120px}
.frow>.fx{flex:none;min-width:0}
label.f{display:flex;flex-direction:column;gap:.3rem;font-size:12px;color:var(--dim)}
label.f>input,label.f>select{font-size:14px;color:var(--txt)}
.pill-form{display:flex;align-items:center;gap:.4rem;background:var(--card);border-radius:var(--r-pill);padding:6px}
.pill-form input{background:transparent;border-radius:var(--r-pill);flex:1}
.pill-form .send{width:42px;height:42px;border-radius:50%;background:var(--ac);color:var(--ink);padding:0;display:flex;align-items:center;justify-content:center;flex:none;font-size:15px}
.pill-form .ibtn{flex:none}

/* ---------- topics (dashboard) ---------- */
.topic{display:flex;align-items:center;gap:.7rem;padding:10px 0;border-bottom:1px solid var(--line)}
.topic:last-child{border-bottom:0}
.topic .tile{width:38px;height:38px;border-radius:var(--r-tile);display:flex;align-items:center;justify-content:center;font-size:15px;flex:none}
.topic.ok .tile{background:rgba(74,222,128,.12);color:var(--ok)}.topic.warn .tile{background:rgba(251,191,36,.12);color:var(--warn)}.topic.bad .tile{background:rgba(248,113,113,.12);color:var(--bad)}
.topic .grow{flex:1;min-width:0}
.topic .name{font-size:14.5px;font-weight:500}
.topic .sub{font-size:12px;font-weight:300}
.topic.ok .sub{color:var(--ok)}.topic.warn .sub{color:var(--warn)}.topic.bad .sub{color:var(--bad)}
.topic .bar{height:4px;border-radius:2px;background:var(--hover);margin-top:.35rem;overflow:hidden}
.topic .bar i{display:block;height:100%;border-radius:2px}
.topic.ok .bar i{background:var(--ok)}.topic.warn .bar i{background:var(--warn)}.topic.bad .bar i{background:var(--bad)}

/* ---------- accordion ---------- */
details.acc{background:var(--card);border-radius:var(--r-card);margin-bottom:14px}
details.acc>summary{list-style:none;cursor:pointer;padding:16px 20px;font-size:16px;font-weight:600;display:flex;align-items:center;gap:.5rem}
details.acc>summary::-webkit-details-marker{display:none}
details.acc>summary::after{content:"\f078";font-family:"Font Awesome 6 Free";font-weight:900;font-size:.8rem;margin-inline-start:auto;color:var(--dim);transition:transform .15s}
details.acc[open]>summary::after{transform:rotate(180deg)}
details.acc>.body{padding:0 20px 16px}
.card.acc>h2{cursor:pointer;user-select:none;margin:0}
.card.acc>h2::after{content:"\f078";font-family:"Font Awesome 6 Free";font-weight:900;font-size:.8rem;margin-inline-start:auto;color:var(--dim);transition:transform .15s}
.card.acc.open>h2{margin-bottom:.8rem}
.card.acc.open>h2::after{transform:rotate(180deg)}
.card.acc:not(.open)>:not(h2){display:none !important}

/* ---------- ideas: collapsible item, images ---------- */
.item{background:var(--card);border-radius:16px;margin-bottom:8px;padding:10px 14px} /* compact rows (owner, 2026-08-30) */
.item summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.5rem}
.item summary::-webkit-details-marker{display:none}
.item .content{white-space:pre-line;line-height:1.75;font-weight:300;color:var(--body);padding:.6rem 0}
.att-grid{display:flex;flex-wrap:wrap;gap:.5rem;padding:.4rem 0}
.att{position:relative;margin:0}
.att img{width:104px;height:104px;object-fit:cover;border-radius:var(--r-thumb);display:block}
.att form{position:absolute;top:6px;inset-inline-end:6px}
.att form button{width:22px;height:22px;padding:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:11px}
.inline.att-form{display:flex;align-items:center;gap:.2rem;flex-wrap:wrap}
.att-form.att-drop{outline:2px dashed var(--ac);outline-offset:4px;border-radius:8px}
form.addbar{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.7rem;align-items:center}
form.addbar input.grow{flex:1;min-width:160px}
.chips{display:flex;flex-wrap:wrap;gap:.35rem}
.chips button{font-size:12px;padding:.3rem .6rem;border-radius:var(--r-pill);background:var(--hover)}
.chips button.on{background:var(--ac);color:var(--ink);font-weight:600}
/* the chat sheet (.say-form, .reply, its chips): shared/say-sheet.css */
@media (hover:hover){.chips button:hover{background:var(--acSoft);color:var(--acText)}.chips button.on:hover{background:var(--ac);color:var(--ink)}}

/* ---------- modals, sheets, toast, busy ---------- */
.ov{display:none;position:fixed;inset:0;background:rgba(6,9,7,.72);z-index:50;align-items:center;justify-content:center;overflow:auto;animation:fadeIn .15s}
.ov.show{display:flex}
.modal{background:var(--card);border-radius:var(--r-modal);padding:24px;width:min(92vw,440px);margin:1rem;display:flex;flex-direction:column;gap:.9rem;box-shadow:0 10px 40px rgba(0,0,0,.4)}
.modal.wide{width:min(94vw,520px)}
.modal h3{margin:0;font-size:16px;font-weight:600;display:flex;align-items:center;gap:.5rem}
.modal .acts{display:flex;gap:.6rem;justify-content:flex-end}
.sheet{position:fixed;bottom:var(--kb,0px);left:50%;width:min(100vw,560px);transform:translate(-50%,100%);z-index:55;background:var(--card);border-radius:24px 24px 0 0;padding:10px 16px calc(16px + env(safe-area-inset-bottom));box-shadow:0 -10px 40px rgba(0,0,0,.5);transition:transform .2s;max-height:85vh;max-height:min(85vh,calc(100dvh - var(--kb,0px) - 8px));overflow:auto} /* with the keyboard up the sheet fits the room above it and scrolls inside (owner 2026-09-09) */
.sheet.show{transform:translate(-50%,0)}
.sheet .grip{width:44px;height:4px;border-radius:2px;background:var(--border);margin:0 auto 12px}
.sheet-bg{display:none;position:fixed;inset:0;background:rgba(6,9,7,.5);z-index:54}
.sheet-bg.show{display:block}
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:.6rem}
.tiles a{display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:.9rem .5rem;border-radius:16px;background:var(--sunk);color:var(--txt);font-size:13px}
.tiles a i{font-size:20px;color:var(--ac)}
.tiles a.on{background:var(--acSoft)}
#toast{position:fixed;bottom:100px;left:50%;transform:translateX(-50%);background:var(--hover);color:var(--txt);border-radius:20px;padding:.6rem 1rem;display:none;align-items:center;gap:.5rem;box-shadow:0 10px 30px rgba(0,0,0,.5);z-index:60;animation:toastIn .2s;width:max-content;max-width:calc(100vw - 32px);line-height:1.4;text-align:start} /* as wide as its text up to the screen's edges, so it stays one line; when it must wrap, radius 20 reads as a rounded box instead of a fat pill (owner 2026-09-11) */
#toast.show{display:flex}
#toast i{color:var(--ac)}
#busy{display:none;position:fixed;inset:0;background:rgba(6,9,7,.5);z-index:100;align-items:center;justify-content:center;backdrop-filter:blur(2px)}
#busy .box{background:var(--card);border-radius:14px;padding:1rem 1.4rem;display:flex;align-items:center;gap:.9rem;font-size:15px;box-shadow:0 10px 40px rgba(0,0,0,.4)}
#busy .box i{color:var(--ac);font-size:1.3rem}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%,0)}}

/* ---------- topic icons (picker) ---------- */
.emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:.25rem;padding:.5rem 0}
.emoji-grid button{font-size:1.1rem;padding:.45rem 0;background:transparent;border-radius:10px}
@media (hover:hover){.emoji-grid button:hover{background:var(--acSoft2)}}

/* ---------- login ---------- */
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem}
.login form{width:min(92vw,360px);display:flex;flex-direction:column;gap:.9rem;align-items:stretch;text-align:center}
.login .logo{width:84px;height:84px;border-radius:22px;margin:0 auto;filter:drop-shadow(0 10px 28px var(--acGlow))}
.login h1{margin:0;font-size:34px;font-weight:800}
.login .tag{display:block;background:none;padding:0;border-radius:0;font-size:15px;line-height:1.7;color:var(--dim);font-weight:300;margin-top:-.5rem} /* NOT the pill badge .tag of the app (owner 2026-09-15: the code screen's text sat in a dark pill, broken into pieces) */
.login .invite-box{border:1px solid var(--line);border-radius:14px;padding:.8rem .9rem;display:flex;flex-direction:column;gap:.6rem;font-size:13px}.login .invite-box input{padding:.6rem;text-align:right}.login .invite-box input:not(:placeholder-shown){direction:ltr;text-align:left} /* the placeholder reads from the right, a typed code runs LTR (owner 2026-09-15) */.login .invite-box a{color:var(--acText)}.login .invite-box a.btn-link{color:var(--ink)}
.login input{background:var(--card);text-align:center;padding:.8rem}
.login button.pri{padding:.8rem}
.login .err{color:var(--bad)}
.login a.act,.login button.act{color:var(--acText);font-weight:500;font-size:14px;background:none;padding:0;border:0;font-family:inherit;line-height:inherit;cursor:pointer}.login .acts{font-size:14px}.login .ok{color:var(--ok);font-size:13px} /* action links (resend, change mail) in the accent, apart from the dim footer (owner 2026-09-15) */

/* ---------- helper fields ---------- */
label.dim{display:flex;flex-direction:column;gap:.3rem;font-size:12px}
.frm.narrow{max-width:440px}
.grow{flex:1;min-width:0}
input.tm{width:6rem;text-align:center}
.btn-link{display:inline-flex;align-items:center;gap:.5rem;padding:9px 14px;font-size:14.5px;border-radius:var(--r-input);background:var(--ac);color:var(--ink);font-weight:600}
@media (hover:hover){.btn-link:hover{background:var(--acText);color:var(--ink)}}
.acts select{width:auto;padding:.35rem 1.8rem .35rem .5rem;font-size:13px;background-position:left .5rem center}

/* ---------- pill-style add row (inside a card) ---------- */
form.addbar.pill{background:var(--sunk);border-radius:var(--r-pill);padding:4px;gap:.3rem;flex-wrap:nowrap}
form.addbar.pill input{background:transparent;border-radius:var(--r-pill)}
form.addbar.pill .send{width:36px;height:36px;border-radius:50%;background:var(--ac);color:var(--ink);padding:0;display:flex;align-items:center;justify-content:center;flex:none;font-size:14px}

/* ---------- ideas/notes: collapsible item ---------- */
.item summary .grow{flex:1;min-width:0}
.item summary .ttl{font-size:14px;font-weight:500;line-height:1.35}
.item summary .meta{font-size:11.5px;color:var(--dim);font-weight:300;display:flex;flex-wrap:wrap;gap:.2rem .6rem;margin-top:.1rem}.item summary .meta:empty{display:none}
.item summary .meta .ac{color:var(--acText)}
.item summary .chev{color:var(--dim);font-size:12px;transition:transform .15s;flex:none}
.item[open]>summary .chev{transform:rotate(180deg)} /* the item's own summary only - a nested details (list 'סומנו') keeps its own state */
.item[open] summary{padding-bottom:.4rem;border-bottom:1px solid var(--line)}
.item .idea-edit{padding:.6rem 0}
.item .idea-edit .acts{display:flex;gap:.6rem;justify-content:flex-end}
.item{position:relative}
.item summary .more-btn{flex:none;font-size:15px;width:32px;height:32px}
/* direction B (owner 2026-09-06): one action bar per item - sticky above the nav while the item is open; as a menu next to the title after "⋮" */
.item .iacts.bar{position:sticky;bottom:calc(var(--nav-h) + 8px);z-index:6;display:flex;align-items:stretch;justify-content:space-between;gap:.1rem;margin:.6rem -4px 0;padding:.3rem .2rem;background:var(--card);border:1px solid var(--border);border-radius:18px;box-shadow:0 10px 28px rgba(0,0,0,.5)}
.item .iacts.bar form.inline,.item .iacts.bar .att-form,.item .iacts.bar .att-add{display:contents}
.show-all{display:flex;align-items:center;justify-content:center;gap:.5rem;margin:.6rem 0 .2rem;padding:.6rem;border-radius:12px;background:var(--hover);color:var(--acText);font-size:13.5px} /* a capped list offers the rest (owner 2026-09-07) */
@media (hover:hover){.show-all:hover{background:var(--border)}}
.devices>summary{display:flex;align-items:center;gap:.6rem;list-style:none;cursor:pointer;padding:.3rem 0}.devices>summary::-webkit-details-marker{display:none}
.devices>summary .grow{flex:1;min-width:0;display:flex;flex-direction:column}.devices>summary .ttl{font-size:14px;font-weight:500}.devices>summary .meta{font-size:11.5px;color:var(--dim);font-weight:300}
.devices>summary .chev{color:var(--dim);font-size:11px;transition:transform .15s}.devices[open]>summary .chev{transform:rotate(180deg)}
.done-items{margin-top:.5rem;border-top:1px solid var(--line);padding-top:.3rem} /* a list's checked items, folded (owner 2026-09-06) */
.done-items summary{display:flex;align-items:center;gap:.5rem;list-style:none;cursor:pointer;padding:.4rem 0;font-size:13.5px;color:var(--dim)}
.done-items summary::-webkit-details-marker{display:none}
.item .done-items>summary .chev{font-size:11px;transition:transform .15s;transform:none}.item .done-items[open]>summary .chev{transform:rotate(180deg)}
.done-items summary form{margin-inline-start:auto}.done-items summary button.danger{background:rgba(248,113,113,.12);color:var(--bad)}
.done-items .row .ttl.done{opacity:.7}
.item .iacts.bar .att-btn,.item .iacts.bar .ibtn{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;width:auto;height:auto;min-width:0;padding:.35rem .1rem;border-radius:12px;background:none;font-size:10.5px;line-height:1.1;color:var(--body);white-space:nowrap;user-select:none}
.item .iacts.bar .att-btn{color:var(--acText)}.item .iacts.bar .att-btn i,.item .iacts.bar .ibtn i{font-size:16px}
.item .iacts.bar .ibtn.danger{color:var(--bad)}.item .iacts.bar .ibtn.on{color:var(--acText)}
@media (hover:hover){.item .iacts.bar .att-btn:hover,.item .iacts.bar .ibtn:hover{background:var(--hover)}}
.item .iacts.bar .att-paste-hint,.item .iacts.bar .att-status,.item .iacts.bar .spacer{display:none}
.item .iacts.bar.menu{position:absolute;top:44px;bottom:auto;inset-inline-start:10px;width:220px;flex-direction:column;align-items:stretch;padding:.3rem;z-index:45} /* above the floating button and the nav (40): the menu of a low item was hidden under them (owner 2026-09-11) */
.item .iacts.bar.menu .att-btn,.item .iacts.bar.menu .ibtn{flex-direction:row;justify-content:flex-start;gap:.7rem;font-size:14px;padding:.5rem .7rem}
.item .iacts.bar.menu .att-btn i,.item .iacts.bar.menu .ibtn i{width:20px;text-align:center}

/* ---------- check-ins ---------- */
.ck-head{display:flex;gap:.5rem;align-items:baseline;flex-wrap:wrap}
.ck-head .ac{color:var(--acText);font-weight:600}
.ck-q,.ck-a,.ck-m{display:flex;gap:.6rem;align-items:flex-start;margin-top:.6rem;line-height:1.65;white-space:pre-line;font-weight:300;color:var(--body)}
.ck-q i,.ck-a i,.ck-m i{margin-top:.3rem;flex:none}
.ck-q i{color:var(--dim)}
.ck-a{background:var(--sunk);border-radius:14px;padding:.6rem .8rem;color:var(--txt);font-weight:400}
.ck-a i{color:var(--ac)}
.ck-m i{color:var(--acText)}

/* ---------- small tile (trash, settings) ---------- */
.tile-sm{width:34px;height:34px;border-radius:var(--r-tile);background:var(--hover);color:var(--dim);display:inline-flex;align-items:center;justify-content:center;flex:none;font-size:14px}
@media (hover:hover){.ibtn.ok:hover{background:rgba(74,222,128,.12);color:var(--ok)}}

/* ---------- appearance: mascot picker ---------- */
.mascots{display:flex;gap:.8rem;flex-wrap:wrap}
.mascot{width:66px;height:66px;padding:2px;border-radius:18px;background:transparent;border:2px solid transparent;transition:.15s}
.mascot img{width:100%;height:100%;display:block;border-radius:13px}
@media (hover:hover){.mascot:hover{border-color:var(--border)}}
.mascot.on{border-color:var(--ac);box-shadow:0 0 0 4px var(--acSoft)}

/* ---------- switch ---------- */
label.switch{display:flex;align-items:center;gap:.6rem;cursor:pointer;font-size:13px}
.switch input{display:none}
.switch input+span{width:46px;height:26px;border-radius:13px;background:var(--hover);position:relative;transition:.2s;flex:none}
.switch input+span::after{content:"";position:absolute;top:3px;inset-inline-start:3px;width:20px;height:20px;border-radius:50%;background:var(--dim);transition:.2s}
.switch input:checked+span{background:var(--ac)}
.switch input:checked+span::after{background:var(--ink);transform:translateX(-20px)}
.card>.row .badge{margin-inline-start:.2rem}

code{background:var(--sunk);padding:.1rem .4rem;border-radius:6px;font-size:13px}
h3{font-size:15px;font-weight:600}

@media (max-width:700px){
  .card{padding:16px}
  .hdr .who{display:none}
}

/* ---------- date picker ---------- */

/* ---------- topic management (one row) + snooze repeater ---------- */
.trow{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.trow input{padding:.4rem .6rem}.trow select{padding:.4rem .6rem .4rem 1.8rem}
.trow .tname{flex:1 1 9rem;min-width:8rem;font-weight:500}
.srow{display:flex;align-items:center;gap:.4rem;margin-bottom:.6rem}
.srow select{width:auto;flex:1;min-width:0;padding:.45rem 1.6rem .45rem .5rem}
.srow .sval{width:4.6rem;flex:none;text-align:center;padding:.45rem .3rem}
.srow .srow-del{flex:none}
.srow .stime{flex:none}.srow .stime[hidden]{display:none}.srow .stime select{flex:none;width:auto}
.trow{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}.trow .tname{flex:1 1 9rem;min-width:7rem}
.srow-add{font-size:13px;background:transparent;color:var(--acText);padding:.3rem .2rem}
@media (hover:hover){.srow-add:hover{background:var(--acSoft)}}

/* ---------- auth screens (password reset) ---------- */
.login form.auth{gap:22px}
.login .auth .logo{border-radius:24px;box-shadow:0 12px 40px var(--acGlow)}
.login .auth .circ{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:22px;margin:0 auto}
.login .auth .circ.ok{background:rgba(74,222,128,.14);color:var(--ok)}
.login .auth .circ.warn{background:rgba(251,191,36,.14);color:var(--warn)}
.login .auth input.bad{box-shadow:0 0 0 2px var(--bad) inset}
.login .ferr{font-size:12.5px;color:var(--bad);display:flex;align-items:center;justify-content:center;gap:6px;margin-top:-12px}
.login .ferr i{font-size:11px}
.login .btn-a{display:inline-block;background:var(--ac);color:var(--ink);border-radius:16px;padding:14px 32px;font-size:15px;font-weight:600;margin:0 auto}
@media (hover:hover){.login .btn-a:hover{background:var(--acText);color:var(--ink)}}

/* ---------- first-login wizard ---------- */
.wz-body{padding-bottom:0}
.wz{min-height:100vh;display:flex;flex-direction:column;gap:24px;width:100%;max-width:480px;margin:0 auto;padding:28px 20px 40px}
.wz.done{align-items:center;justify-content:center;text-align:center;max-width:440px;gap:20px}
.wz-top{display:flex;align-items:center;gap:12px}
.wz-ico{width:38px;height:38px;border-radius:12px}
.wz-big{width:96px;height:96px;border-radius:26px;box-shadow:0 16px 44px var(--acGlow)}
.wz-prog{flex:1;display:flex;gap:6px}
.wz-prog i{flex:1;height:5px;border-radius:3px;background:var(--hover);transition:background .25s}
.wz-prog i.on{background:var(--ac)}
.wz-skip{color:var(--dim);font-size:13px;font-weight:300;padding:4px}@media (hover:hover){.wz-skip:hover{color:var(--txt)}}
/* the shared wizard blocks' rules (.wz-step, .wz-card, .wz-video, .wz-wait, .wz-ok, .wz-qr, .wz-tg, .wz-nav, .wz-back,
   .wz-next) live in shared/wizard.css since 2026-09-20 - shared code carries its own CSS (owner). What stays here is
   what only tasks' own steps draw. */
.wz h1{font-size:24px;font-weight:800;margin:0}
.wz p{font-size:14.5px;color:var(--dim);font-weight:300;line-height:1.7;margin:6px 0 0}
.wz-row{display:flex;gap:10px}
.wz-row .grow{flex:1;min-width:0}
.wz-icon{width:48px;height:48px;border-radius:14px;background:var(--acSoft);color:var(--ac);font-size:18px;flex:none;transition:.15s}
@media (hover:hover){.wz-icon:hover{transform:scale(1.05)}}
.wz-card input{padding:13px 16px;font-size:15px}
.wz-preview{background:var(--sunk);border-radius:14px;padding:14px}
.pv-ico{width:32px;height:32px;border-radius:10px;background:rgba(74,222,128,.14);color:var(--ok);display:flex;align-items:center;justify-content:center;font-size:13px;flex:none}
.pv-name{font-size:13.5px;font-weight:500}.pv-sub{font-size:11px;color:var(--ok)}
.pv-bar{height:4px;border-radius:2px;background:var(--hover);margin:8px 42px 0 0}.pv-bar i{display:block;height:100%;width:6%;border-radius:2px;background:var(--ok)}
.wz-li{display:flex;gap:12px;align-items:flex-start;font-size:14px;line-height:1.65;color:var(--body);font-weight:300}
.wz-li .n{width:24px;height:24px;border-radius:50%;background:var(--acSoft);color:var(--ac);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex:none}
.wz-li.perk i{color:var(--ok);font-size:12px;margin-top:5px}
.wz-tabs{display:flex;gap:6px;background:var(--card);border-radius:999px;padding:5px}
.wz-tabs button{flex:1;border-radius:999px;padding:10px 6px;font-size:13.5px;background:none;color:var(--dim)}
.wz-tabs button i{margin-left:7px}
.wz-tabs button.on{background:var(--acSoft);color:var(--ac);font-weight:600}
/* the wizard's Telegram step on a computer: a QR of the deep link (2026-09-18) */
.wz-google{background:#fff;color:#1f1f1f;border-radius:16px;padding:15px;font-size:15px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:10px;transition:.15s}
@media (hover:hover){.wz-google:hover{transform:translateY(-1px);color:#1f1f1f}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}

/* ---------- dashboard checklist ---------- */
.ckl{background:linear-gradient(135deg,var(--acSoft),var(--card) 65%);border-radius:var(--r-card);padding:18px 20px;margin-bottom:14px}
.ckl .head{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.ckl .head img{width:34px;height:34px;border-radius:11px}
.ckl .head .t{font-size:15px;font-weight:600}.ckl .head .s{font-size:12px;color:var(--dim);font-weight:300}
.ckl .head button{background:none;color:var(--dim);font-size:12.5px;font-weight:300;padding:0}@media (hover:hover){.ckl .head button:hover{color:var(--txt)}}
.ckl .it{display:flex;align-items:center;gap:10px;margin-top:9px;font-size:13.5px}
.ckl .it .lbl{display:flex;flex-direction:column;gap:1px;min-width:0}.ckl .it .why{color:var(--dim);font-size:12px;font-weight:300;line-height:1.45} /* what each step is for (owner 2026-09-18) */
.ckl .dot{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--border);display:flex;align-items:center;justify-content:center;flex:none;font-size:9px}
.ckl .it.ok .dot{border:0;background:var(--acSoft2);color:var(--acText)}
.ckl .it.ok .lbl{color:var(--dim);font-weight:300}
.ckl .it .lbl{flex:1}
.ckl .it a{font-size:12.5px}

/* admin (seats, avatars, KPI tiles, log tables): shared/admin.css, on the admin tab only */
details.sub>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;padding:10px 0;font-size:15px;font-weight:600}
details.sub>summary::-webkit-details-marker{display:none}
details.sub>summary i.chev{color:var(--dim);font-size:11px;transition:transform .15s}
details.sub[open]>summary i.chev{transform:rotate(180deg)}
/* login by code */
.login input.code{font-size:26px;letter-spacing:.35em;font-variant-numeric:tabular-nums;direction:ltr;padding:.7rem}
.login .toggle{background:none;color:var(--dim);font-size:13px;font-weight:300;padding:0}
@media (hover:hover){.login .toggle:hover{color:var(--txt)}}
.login .err{color:var(--bad);font-size:13px}

/* ---------- admin (owner): separate area from the personal one ---------- */
body.adm .bnav,body.adm .fab,body.adm #say-sheet{display:none !important}
body.adm .hdr{border-bottom:2px solid var(--warn)}
body.adm .brand .who{color:var(--warn)}
body.adm main{padding-bottom:40px}
/* task status - one line under the title */
.row .prog{font-size:13px;color:var(--txt);margin:2px 0 2px;line-height:1.45}.row .prog i{color:var(--acText);margin-inline-end:.2rem}

/* "there are updates" bar (live refresh) */
.flash.upd{position:sticky;top:8px;z-index:31;isolation:isolate}.flash.upd::before{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--bg);z-index:-1} /* above the sticky header and opaque: its tint sat transparent over the title (owner 2026-09-13) */.flash.upd a{color:inherit;font-weight:600;text-decoration:underline}

/* tab order (settings) */
.navord{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;max-width:360px}
.navord li{position:relative;display:flex;align-items:center;gap:.5rem;padding:.45rem .6rem;background:var(--sunk);border:1px solid var(--line);border-radius:var(--r-input);user-select:none;-webkit-user-select:none;cursor:grab}
.navord li .grip{color:var(--dim);touch-action:none;padding:.3rem .2rem;margin:-.3rem 0;cursor:grab}
.navord li .num{width:1.2rem;text-align:center;color:var(--dim);font-size:12px}
.navord li .lbl{flex:1;display:flex;align-items:center;gap:.45rem}.navord li .lbl i{width:1.1rem;text-align:center;color:var(--dim)}
.navord li.more .lbl{color:var(--dim)}
.navord li:focus-visible{outline:2px solid var(--ac);outline-offset:1px}
.navord li.first-more{margin-top:1.4rem}.navord li.first-more::before{content:'תחת "עוד"';position:absolute;top:-1.15rem;inset-inline-start:.4rem;font-size:11px;color:var(--dim)}
.navord li.drag{z-index:5;box-shadow:0 8px 24px rgba(0,0,0,.45);border-color:var(--ac);background:var(--hover);cursor:grabbing}
.navord.dragging li:not(.drag){transition:transform .12s}

/* Menu labels (preference btn_labels -> body.lbl): text under the bottom-menu icons only (owner 2026-08-30) - every other button stays icon-only; the label = the item's title */
body.lbl .bnav a,body.lbl .bnav button{flex-direction:column;gap:3px;height:48px;font-size:16px}
body.lbl .bnav a::after,body.lbl .bnav button::after{content:attr(title);font-size:10px;line-height:1;font-weight:400}

/* inline edit (list names, list items) */
.ie{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.row .ie{display:block}
h2 .ie{flex:1;min-width:0}h2 .ie-form{flex:1}
.ie-form{display:flex;align-items:center;gap:.3rem;width:100%}.ie-form input{flex:1;min-width:6rem;width:100%;padding:.35rem .6rem;font-size:14px}
h2 .ie-form input{font-size:15px;font-weight:600}
/* labels mode: the text column keeps a readable width; labeled actions wrap under it when the row is narrow */

/* calendar color: dot on dashboard rows, circle picker in settings */
.cdot{width:12px;height:12px;border-radius:50%;flex:none;margin-inline-end:.2rem}
.cpick{display:flex;gap:.3rem;flex-wrap:wrap;align-items:center}.cpick label{margin:0;display:block}.cpick input{display:none}
.cpick span{width:20px;height:20px;border-radius:50%;display:block;border:2px solid transparent;cursor:pointer;opacity:.75}
.cpick input:checked+span{border-color:var(--txt);opacity:1;box-shadow:0 0 0 2px var(--card)}
.badge.soon{background:rgba(251,191,36,.15);color:var(--warn);margin-inline-start:.4rem}

/* tags (visible search layer): chips with an x, plus a small add field */
.tags{display:flex;flex-wrap:wrap;gap:.3rem;align-items:center;margin:.35rem 0 .1rem}
.tag{display:inline-flex;align-items:center;gap:.2rem;font-size:12px;line-height:1.4;padding:.1rem .1rem .1rem .5rem;border-radius:var(--r-pill);background:var(--hover);color:var(--body)}
.tag.ai{background:var(--acSoft);color:var(--acText)}
.tag .tag-x{background:transparent;color:inherit;padding:0 .35rem;font-size:13px;line-height:1;opacity:.7;border-radius:50%}@media (hover:hover){.tag .tag-x:hover{opacity:1;background:rgba(255,255,255,.1)}}
.tag-add input{width:5.5rem;padding:.15rem .5rem;font-size:12px;border-radius:var(--r-pill);background:transparent;border:1px dashed var(--border)}.tag-add input:focus{width:9rem;border-style:solid}

/* icon-only buttons keep no text label even in labels mode */
/* help tips */
.help{width:18px;height:18px;padding:0;border-radius:50%;font-size:11px;font-weight:700;line-height:18px;text-align:center;background:var(--hover);color:var(--dim);vertical-align:middle;display:inline-block;flex:none}
@media (hover:hover){.help:hover,.help.on{background:var(--acSoft);color:var(--acText)}}
.help-pop{flex-basis:100%;width:100%;margin:.35rem 0 .2rem;padding:.55rem .75rem;border-radius:var(--r-input);background:var(--hover);color:var(--body);font-size:12.5px;font-weight:300;line-height:1.5;white-space:normal;font-family:inherit}
legend .help-pop,label .help-pop{display:block}
.trow .brk{flex-basis:100%;height:0}.trow .icon-pick{flex:none}

/* narrow screens (overflow audit 2026-08-28): action rows wrap, the auth log table scrolls inside its card */
.iacts{flex-wrap:wrap;row-gap:.3rem}

/* feedback form: 1-5 score as tappable tiles */
.score{gap:.45rem}.score-opt input{display:none}
.score-opt span{display:inline-block;width:46px;height:46px;line-height:46px;text-align:center;border-radius:12px;background:var(--hover);cursor:pointer;font-weight:500}
.score-opt input:checked+span{background:var(--acSoft);color:var(--acText);box-shadow:inset 0 0 0 1px var(--ac)}

/* tap-to-call numbers inside titles and note content */
a.tel{color:var(--ac);text-decoration:none;border-bottom:1px dotted var(--ac);white-space:nowrap}a.tel::before{content:'\260E ';font-size:.85em}
/* floating chat button: right by default (settings > appearance), left on request */
body.fab-left .fab{right:auto;left:max(16px,calc(50% - 414px))}

/* add sheet (per-screen "new ..." form) and the floating button's two-option menu */
.add-sheet{max-height:88vh;max-height:min(88vh,calc(100dvh - var(--kb,0px) - 8px));overflow-y:auto} /* keyboard-aware too (owner 2026-09-09) */
.sheet-head{display:flex;align-items:center;justify-content:space-between;margin:0 0 .7rem;font-size:15px}
.sheet-head b{display:flex;align-items:center;gap:.5rem;font-weight:600}
.fab-menu{position:fixed;bottom:calc(var(--fab-top) + 10px);right:max(16px,calc(50% - 414px));z-index:56;display:flex;flex-direction:column;align-items:stretch;gap:.35rem;padding:.5rem;border-radius:20px;background:var(--card);border:1px solid var(--border);box-shadow:0 12px 36px rgba(0,0,0,.45)}
body.fab-left .fab-menu{right:auto;left:max(16px,calc(50% - 414px))}
.fab-menu button{display:flex;align-items:center;gap:.6rem;padding:.65rem 1rem;border-radius:14px;background:transparent;color:var(--body);font-size:14.5px;font-weight:500;text-align:start}@media (hover:hover){.fab-menu button:hover,.fab-menu button:active{background:var(--hover)}}
.fab-menu button i{color:var(--ac)}

/* chat box ("write to Sassi"): textarea, + chooser (camera / gallery), thumbnails with remove */
.att-add{display:inline-flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.att-btn{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .8rem;border-radius:var(--r-pill);background:var(--hover);color:var(--body);font-size:13px;cursor:pointer;white-space:nowrap;user-select:none} /* attach entry as in links: visible chips, native label -> input (owner 2026-09-06) */
@media (hover:hover){.att-btn:hover,.att-btn:active{background:var(--border)}}
.att-btn.on{background:var(--acSoft);color:var(--acText)}
.att-input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;pointer-events:none;inset-inline-start:-9999px} /* never display:none: some phones ignore a picker opened for a hidden input */
.att-thumb.doc .doc-tile{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--bad);font-size:22px;padding:4px}
.att-thumb.doc .doc-tile bdi{font-size:9px;color:var(--dim);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att-thumbs{display:flex;flex-wrap:wrap;gap:.5rem}.att-thumbs:empty{display:none}
.att-thumb{position:relative;width:66px;height:66px;border-radius:10px;overflow:hidden;background:var(--sunk)}
.att-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.pdf-merge{display:inline-flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.mode-chip{position:relative;display:inline-flex;align-items:center;background:var(--hover);border-radius:var(--r-pill);padding:0 .7rem 0 .55rem;font-size:13px;color:var(--acText);cursor:pointer} /* the scan-look chooser as a chip with a chevron (owner 2026-09-05) */
.mode-chip select{appearance:none;-webkit-appearance:none;background:transparent;border:0;color:inherit;font:inherit;padding:.35rem 0 .35rem 1.2rem;cursor:pointer;width:auto}
.mode-chip i{position:absolute;inset-inline-end:.6rem;font-size:10px;pointer-events:none}
.att-group{border-inline-start:2px solid var(--border);padding-inline-start:.6rem;margin:.4rem 0} /* a merged PDF (parent) with its sources (children) under it */
.att-group .att-grid{padding:.2rem 0}.att-group .att-grid.sub{padding-inline-start:1.2rem;position:relative}
.att-group .att-grid.sub::before{content:'';position:absolute;inset-inline-start:.3rem;top:0;bottom:0;border-inline-start:1px dashed var(--border)}
.att-group-info{display:flex;flex-direction:column;justify-content:center;gap:.4rem;font-size:13px}
.att.src img,.att.src.pdf a{opacity:.75}
.src-chip{position:absolute;bottom:6px;inset-inline-start:6px;font-size:10.5px;padding:.05rem .45rem;border-radius:var(--r-pill);background:rgba(0,0,0,.65);color:#fff}
.att.pdf a{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--bad);font-size:26px;background:var(--sunk)}.att.pdf small{font-size:10px;color:var(--dim);font-weight:600} /* a merged PDF among the images (2026-09-05) */
.att-thumb button.retake{inset-inline-end:auto;inset-inline-start:3px;background:rgba(15,19,17,.75);color:var(--txt)} /* retake: drops the shot and opens the camera (family, 2026-09-05) */
.att-thumb button{position:absolute;top:3px;inset-inline-end:3px;width:22px;height:22px;border-radius:50%;background:rgba(0,0,0,.65);color:#fff;padding:0;font-size:11px;display:flex;align-items:center;justify-content:center}

/* crop sheet (Cropper.js) - ltr box: the library positions with left/top and misplaces the image under rtl */
#crop-sheet{z-index:57}
.crop-box{direction:ltr;height:60vh;max-height:60vh;overflow:hidden;border-radius:12px;background:var(--sunk)}
.crop-box img{display:block;max-width:100%;max-height:100%}
.cropper-view-box,.cropper-face{border-radius:4px}
/* no pull-to-refresh while dragging inside a sheet or the crop box */
.sheet{overscroll-behavior:contain}
.crop-box{touch-action:none;overscroll-behavior:contain}
.att-thumb img{cursor:zoom-in}
/* appearance: colour circles */
.cpick.big span{width:30px;height:30px}
.calrow{flex-wrap:wrap;row-gap:.45rem}.calrow .calname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calrow .swatch{width:26px;height:26px;border-radius:50%;border:2px solid var(--txt);box-shadow:0 0 0 2px var(--card);padding:0;flex:none;cursor:pointer}
.calrow .callabel{flex-basis:100%;width:100%}
.calrow .cpick.pop{flex-basis:100%;padding:.2rem 0 .1rem}.calrow .cpick.pop span{width:26px;height:26px}
/* sortable notes / ideas: the grip, the lifted item and the locked state live in shared/sortable.css since 2026-09-21 */
.cpick.big{flex-wrap:nowrap;gap:.45rem}
/* switches: breathing room when stacked */
.switch{display:inline-flex;align-items:center;gap:.55rem;min-height:40px;margin:.15rem 0}
.fab i{transition:transform .15s}.fab.open i{transform:rotate(45deg)} /* + turns into x while the menu is open */
.pin-mark{color:var(--ac);font-size:.8em;margin-inline-end:.15rem}
.fab-menu:not(.show){display:none}
#img-overlay.ov{animation:none}
button.danger{background:rgba(248,113,113,.15);color:var(--bad)} /* destructive: the soft red fill every delete button uses (family spec) */
.meta .rem-snooze-btn{width:28px;height:28px;font-size:15px;color:var(--ac)}
.item.editing > .content{display:none} /* inline edit replaces the reading view (owner 2026-09-03) */
.draft-note{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;background:rgba(251,191,36,.10);color:var(--warn);border-radius:12px;padding:.5rem .8rem;font-size:13px;margin-bottom:.5rem} /* draft.js: a restored unsaved draft */
/* the B / U bar of format.js lives in shared/format.css since 2026-09-21 */
.content u{text-decoration-thickness:1.5px;text-underline-offset:2px} /* format.js: the bold / underline bar */
.item .content b{font-weight:700;color:var(--txt)} /* the body is weight 300: 'bolder' alone was invisible (owner 2026-09-03) */
.item .content a.ulink{color:var(--acText);text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere} /* fmt_autolink: a URL in the body opens in a new tab (family 2026-09-07) */

.dropzone{display:none;flex-direction:column;align-items:center;justify-content:center;gap:.25rem;padding:1.1rem 1rem;margin:.5rem 0;border:1.5px dashed var(--border);border-radius:16px;color:var(--body);cursor:pointer;text-align:center;user-select:none;transition:.15s} /* desktop: drop / click / paste zone (owner 2026-09-06, as in links) */
.dropzone i{font-size:22px;color:var(--warn)}.dropzone b{font-size:14px;font-weight:600;color:var(--txt)}.dropzone span{font-size:12px;color:var(--dim)}
@media (hover:hover){.dropzone:hover,.dropzone.over{border-color:var(--ac);background:var(--acSoft)}}
.dropzone.small{padding:.7rem 1rem;gap:.15rem}.dropzone.small i{font-size:18px}.dropzone.small b{font-size:13px}
@media (hover:hover) and (pointer:fine){.dropzone{display:flex}}
.att-paste-hint{display:none;margin:0;padding:.3rem .6rem;font-size:11.5px}@media (hover:hover) and (pointer:fine){.att-paste-hint{display:block}} /* desktop only: the clipboard paste that already works (owner 2026-09-03) */
/* ---------- settings: two levels + search (owner 2026-09-08, app/settings_groups.php + shared/settings-search.js) ---------- */
.sub-head{display:flex;align-items:center;gap:.5rem;margin:0 0 .6rem}.sub-head .head-tools{margin-inline-start:auto;display:flex;align-items:center;gap:.6rem}.sub-head .head-tools .switch{min-height:auto;margin:0;font-size:12.5px;color:var(--dim)}.sub-head .head-tools .switch span{width:40px;height:22px;border-radius:11px}.sub-head .head-tools .switch span::after{width:16px;height:16px}.sub-head .head-tools .switch input:checked+span::after{transform:translateX(-18px)} /* the base switch moves the knob by transform (46/20 -> -20px); this track is 40/16 */ /* the drag-order switch lives in the heading row (owner 2026-09-11) */.sub-head h1{margin:0;font-size:18px;font-weight:600;display:flex;align-items:center;gap:.5rem}
.sq-wrap{position:relative;margin:0 0 14px}.sq-wrap>i{position:absolute;inset-inline-start:14px;top:50%;transform:translateY(-50%);color:var(--dim);pointer-events:none}
.sq{width:100%;padding:11px 40px 11px 14px;border-radius:var(--r-pill);background:var(--card);border:1px solid var(--border);color:var(--txt)}.sq:focus{border-color:var(--ac);outline:0}
/* the results panel (owner 2026-09-11: it "sank" into the page): raised, accent-edged, two lines per hit, the hit marked */
.sq-results{position:absolute;top:calc(100% + 8px);inset-inline:0;background:var(--hover);border:1.5px solid var(--acSoft2);border-radius:18px;box-shadow:0 18px 44px rgba(0,0,0,.55),0 0 0 1px rgba(0,0,0,.4);z-index:40;max-height:60vh;overflow:auto;padding:4px}
.sq-head{padding:8px 14px 4px;font-size:12px;color:var(--dim)}
.sq-item{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;align-items:center;column-gap:.6rem;padding:10px 14px;border-radius:14px;color:var(--txt);text-decoration:none}
.sq-item .sq-l{font-size:15px;font-weight:600;grid-column:1}.sq-item .sq-g{font-size:12px;color:var(--dim);grid-column:1}.sq-item .sq-c{grid-column:2;grid-row:1 / span 2;color:var(--dim);font-size:12px}
.sq-item mark{background:var(--acSoft);color:var(--acText);border-radius:4px;padding:0 .15em}
@media (hover:hover){.sq-item:hover,.sq-item:focus{background:var(--acSoft)}}@media (hover:hover){.sq-item:hover .sq-g,.sq-item:focus .sq-g{color:var(--acText)}}
.sgroups{padding-top:6px;padding-bottom:6px}a.sgroup{color:inherit;text-decoration:none;align-items:center;gap:.8rem}a.sgroup .ttl{display:block;font-weight:600}a.sgroup .meta{display:block;font-weight:300;font-size:12.5px;color:var(--dim)}@media (hover:hover){a.sgroup:hover .ttl{color:var(--acText)}}
.hl{animation:sassi-hl 1.8s ease-out}@keyframes sassi-hl{0%,60%{box-shadow:0 0 0 3px var(--acSoft2);background:var(--acSoft)}100%{box-shadow:none;background:transparent}}
/* level-2 header (owner 2026-09-08 feedback): the group name in the accent, the back control a pill that nudges once */
.sub-head h1{color:var(--acText)}.sub-head h1 i{color:var(--ac)}
.back-pill{width:40px;height:40px;border-radius:50%;background:var(--acSoft);color:var(--ac);display:inline-flex;align-items:center;justify-content:center;font-size:16px;text-decoration:none;flex:none;border:1px solid var(--acSoft2);animation:sassi-nudge 1.6s ease-in-out .4s 2}
@media (hover:hover){.back-pill:hover,.back-pill:focus-visible{background:var(--ac);color:var(--ink);outline:0}}
@keyframes sassi-nudge{0%,100%{transform:translateX(0)}30%{transform:translateX(5px)}60%{transform:translateX(0)}80%{transform:translateX(3px)}}
@media (prefers-reduced-motion:reduce){.back-pill{animation:none}}
.sg-chev{color:var(--dim);font-size:12px}@media (hover:hover){a.sgroup:hover .sg-chev{color:var(--ac)}}
/* ---------- feedback (owner 2026-09-08, shared/feedback.js): every tap answers at once, the wait escalates by time ---------- */
button,.ibtn,a.row,.bnav a,.sq-item,.sgroup,.btn-link,.chk,.fab{transition:transform .08s,filter .08s,background .15s,color .15s}
button:not(:disabled):active,.ibtn:active,a.row:active,.bnav a:active,.sq-item:active,.sgroup:active,.btn-link:active,.chk:active,.fab:active{transform:scale(.96);filter:brightness(.85)}
#sassi-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:120;background:var(--acSoft2);overflow:hidden}#sassi-progress i{display:block;height:100%;width:30%;background:var(--ac);border-radius:2px;animation:sassi-prog 1s linear infinite}
@keyframes sassi-prog{0%{transform:translateX(-100%)}100%{transform:translateX(400%)}}
#sassi-busy{position:fixed;inset:0;background:rgba(6,9,7,.5);z-index:100;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(2px)}#sassi-busy[hidden]{display:none}
#sassi-busy .box{background:var(--card);border-radius:14px;padding:1rem 1.4rem;display:flex;flex-wrap:wrap;align-items:center;gap:.9rem;font-size:15px;box-shadow:0 10px 40px rgba(0,0,0,.4);max-width:min(92vw,420px)}#sassi-busy .box>i{color:var(--ac);font-size:1.3rem}#sassi-busy .stuck{display:flex;gap:.5rem;width:100%}
#sassi-offline{position:fixed;top:0;inset-inline:0;z-index:121;background:var(--bad);color:var(--ink);text-align:center;font-size:13px;font-weight:600;padding:5px 8px}#sassi-offline[hidden]{display:none}
/* optimistic one-tap actions (shared/optimistic.js): the row folds at once, the server catches up in the background */
.row.opt-done,.item.opt-done{opacity:.35;transition:opacity .25s,max-height .35s .2s,margin .35s .2s,padding .35s .2s;overflow:hidden;max-height:0;padding-top:0;padding-bottom:0;margin:0;border-width:0}
#toast.err{background:rgba(248,113,113,.18);color:var(--bad)}
/* a saved copy served without network (shared/sw.js + feedback.js): an amber bar at the top until the live page replaces it */
#sassi-copy{position:fixed;top:0;inset-inline:0;z-index:121;background:var(--warn);color:var(--ink);text-align:center;font-size:13px;font-weight:600;padding:5px 8px}#sassi-copy[hidden]{display:none}
/* writes waiting for the network (shared/optimistic.js): one card at the top, one row per queued item, amber accent */
.card.pending-sync{border:1px solid rgba(251,191,36,.45)}.card.pending-sync h2 i{color:var(--warn)}.card.pending-sync .meta i{color:var(--warn)}
/* a field focused inside a sheet is scrolled to the TOP of the visible part (shared/sheet-keyboard.js, owner 2026-09-09); the margin keeps the sheet head and the label above it in view */
.sheet input,.sheet textarea,.sheet select{scroll-margin-block:90px}
/* "once more to leave" (shared/back.js, owner 2026-09-09): a toast in the middle of the screen after Back on the home page */
#sassi-exit{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) scale(.96);background:var(--card);color:var(--acText);border:1.5px solid var(--ac);border-radius:16px;padding:.9rem 1.3rem;font-size:15px;font-weight:600;box-shadow:0 12px 40px rgba(0,0,0,.45);z-index:130;opacity:0;pointer-events:none;transition:opacity .15s,transform .15s}
#sassi-exit.show{opacity:1;transform:translate(-50%,-50%) scale(1)}
/* a heading whose count reads like the summaries below it (owner 2026-09-10: the reminders tab's "קרובות N") */
.card h2.cnt-plain .cnt{font-size:inherit;font-weight:inherit;color:inherit}
/* take-back row (optimistic.js undoRow, owner 2026-09-10): the row stays in place, dimmed, the check replaced by a counting-down ↩ */
.row.opt-undo,.item.opt-undo{opacity:.8}
.undo-btn{height:24px;min-width:24px;padding:0 .45rem;border-radius:8px;border:1.5px solid var(--ac);background:var(--acSoft);color:var(--acText);font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:.25rem;flex:none}
.undo-btn .cnt{font-variant-numeric:tabular-nums;min-width:1.2em;text-align:center}
/* the links inside an idea's body as a row of chips (owner 2026-09-10, as in תמצא לי's notes); .ulink = a link out of the app */
.note-links{display:flex;flex-wrap:wrap;gap:.35rem;padding:0 0 .5rem}
.note-links a{display:inline-flex;align-items:center;gap:.3rem;max-width:100%;padding:.2rem .65rem;border-radius:var(--r-pill);background:var(--acSoft);color:var(--acText);font-size:12.5px;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* topic filter chips above the ideas list (owner 2026-09-10): one choice, the accent chip is the active one */
.chips a.chip{display:inline-flex;align-items:center;gap:.3rem;font-size:12.5px;padding:.3rem .7rem;border-radius:var(--r-pill);background:var(--hover);color:var(--txt);text-decoration:none}
.chips a.chip.on{background:var(--ac);color:var(--ink);font-weight:600}
.chips.tfilter{margin:10px 0 4px;gap:6px}.chips.tfilter a.chip{gap:5px;padding:4px 10px;font-size:11.5px;color:var(--body);line-height:1.55}.chips.tfilter a.chip.on{color:var(--ink)}.chips.tfilter a.chip.empty{opacity:.55} /* size and shape of links' folder chips (owner 2026-09-11): 4px 10px, 11.5px, gap 5-6px; no icons, the empty topics dimmed at the end */
.chips.tfilter a.chip .cnt{font-weight:500;opacity:.7;font-size:11px;background:none;padding:0}
/* topics card: the counter sits on the name line, tracking is a switch on the second line (owner 2026-09-10: "the icons are cramped") */
.trow .tcount{margin-inline-start:.2rem;margin-inline-end:.4rem}.trow .tsw{margin:0 .2rem 0 0;min-height:32px}.trow .tcad{margin-inline-end:.4rem}
.topic-row{gap:.4rem}.topic-row .topic-sel{flex:1 1 10rem}.topic-row [name=topic_new]{flex:1 1 10rem}
.chips a.chip .cnt{font-size:11px;font-weight:600;opacity:.8;padding:0 .35rem;border-radius:var(--r-pill);background:rgba(0,0,0,.18)}
/* search field (family markup, links first; owner 2026-09-11): the dashboard's field opens the results tab, a page's .bottom bar filters the page */
.search{display:flex;align-items:center;gap:10px;background:var(--card);border-radius:var(--r-pill);padding:6px 16px;margin:0 0 .8rem}
.search input{flex:1;background:none;border:0;color:var(--txt);font-family:inherit;font-size:15.5px;padding:10px 0}
.search input:focus{outline:none}
.search .search-go{flex:none;width:38px;height:38px;margin-inline-start:-8px;padding:0;border:0;border-radius:50%;background:var(--hover);color:var(--txt);display:inline-flex;align-items:center;justify-content:center;font-size:15px}
.search .search-go i{color:inherit}@media (hover:hover){.search .search-go:hover{background:var(--acSoft);color:var(--acText)}}
.search input::-webkit-search-cancel-button,.search input::-webkit-search-decoration{-webkit-appearance:none;display:none}
.search .search-x{flex:none;width:34px;height:34px;padding:0;border:0;border-radius:50%;background:var(--hover);color:var(--txt);display:inline-flex;align-items:center;justify-content:center;font-size:13px}
.search .search-x i{color:inherit}@media (hover:hover){.search .search-x:hover{background:rgba(248,113,113,.15);color:var(--bad)}}
.search.bottom{margin:.8rem 0 0}
.resline{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin:0 0 .6rem;font-size:14px}
a.row{color:inherit;text-decoration:none}a.row .chev{color:var(--dim);font-size:12px;flex:none}
.search-empty{line-height:1.9}.search-empty a.pri{display:inline-flex;align-items:center;gap:.4rem;margin-top:.5rem;text-decoration:none}
/* storage quota line in settings > חשבון (owner 2026-09-11): used of quota, a thin bar that turns amber at 70% and red at 90% */
.storage{margin:0 0 .9rem}.storage .bar{height:4px;border-radius:2px;background:var(--hover);margin-top:.4rem;overflow:hidden}.storage .bar i{display:block;height:100%;background:var(--ac);border-radius:2px}.storage .bar.warn i{background:var(--warn)}.storage .bar.bad i{background:var(--bad)}
.storage details.heavy{margin-top:.5rem}.storage details.heavy summary{cursor:pointer;font-size:12.5px;list-style:none}.storage details.heavy summary::-webkit-details-marker{display:none}.storage details.heavy summary::before{content:'\25B8';display:inline-block;margin-inline-end:.35rem;transition:transform .15s}.storage details.heavy[open] summary::before{transform:rotate(90deg)}
.storage details.heavy a.row{padding:8px 0;gap:.6rem;font-size:13px}.storage details.heavy a.row .ttl{font-size:13.5px}.storage details.heavy a.row .meta{gap:.5rem}
/* app lock (docs/LOCK.md): the body stays hidden until lock.js decided whether this is a cold open (1.5 s safety net in the page); the lock screen reuses the login layout */
html.lockchk body{visibility:hidden}
body.lock .login input.code{letter-spacing:.4em;font-size:22px;text-align:center}
.codes{display:grid;grid-template-columns:repeat(2,1fr);gap:.4rem .8rem;margin:.6rem 0;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:15px;direction:ltr;unicode-bidi:isolate}
.codes b{display:block;padding:.35rem .5rem;background:var(--card);border-radius:8px;text-align:center;font-weight:500}

/* the vault (docs/LOCK.md 3): locked ideas, the password sheet, the strength meter */
.vault-mark{color:var(--dim);font-size:.85em}
.vault-plate{display:flex;align-items:center;padding:.6rem 0}
.vault-plate button{display:inline-flex;align-items:center;gap:6px}
.vault-plain{white-space:pre-wrap}
.vault-toggle{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px;font-size:13.5px}
.vault-toggle .hint{margin:0}
form.vault-locked .dropzone,form.vault-locked .att-add,form.vault-locked .att-thumbs{display:none}
.vault-skip{margin:.2rem 0 .6rem}
.vault-h{margin:0 0 .4rem;font-size:17px}
.vault-row{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-start}
.vault-link{background:none;border:0;padding:0;color:var(--dim);text-decoration:underline;align-self:flex-start;font-size:13px}
.vault-ack{display:flex;flex-direction:row;align-items:center;gap:6px}
.vault-key{padding:.6rem .7rem;background:var(--card);border-radius:8px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:15px;text-align:center;word-break:break-all;unicode-bidi:isolate}
.vault-meter{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--dim);margin-top:-2px}
.vault-meter i{flex:1;height:5px;border-radius:3px;background:var(--card);position:relative;overflow:hidden}
.vault-meter i::after{content:"";position:absolute;inset-block:0;inset-inline-start:0;width:calc(var(--s,0) * 25%);background:#ef4444}
.vault-meter[data-s="2"] i::after{background:#f59e0b}
.vault-meter[data-s="3"] i::after,.vault-meter[data-s="4"] i::after{background:#10b981}
#vault-phrase-ov input{margin:.6rem 0}
.vault-user{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;border:0;padding:0;margin:0} /* the password manager's username, never seen */
