/* Portal styles. RULES (enforced by tools/lint-ui.js):
   - every colour lives in the :root block below, nowhere else
   - every class starts with pp-
   - no ad / ads / banner / sponsor / promo in class names (ad blockers hide them)
   The final brand colours drop in by editing :root only. */

:root {
  color-scheme: dark;

  /* C - NIGHT GLASS. Apple's two-layer model: the bar floats on glass,
     the content sits underneath on opaque material. Gold is the app's colour and
     means you can act, green means done, violet means personal, orange means late,
     and red is kept for over the line and delete. (Nov 6 2026: the Sworn Record
     portal was red; Shadi, "Gold should be the main color".) */
  --bg: #0A0B0D;
  --panel: #0F1114;
  --surface: #0F1114;
  --surface-2: #1B1E23;
  --surface-2-hi: #23272D;
  --surface-3: #2B3037;
  --line: #22262B;
  --line-2: #343A41;
  --card-line: #2B3037;

  --glass: rgba(21, 24, 29, 0.82);
  --glass-thin: rgba(21, 24, 29, 0.7);
  --glass-line: rgba(255, 255, 255, 0.09);
  --glass-edge: rgba(255, 255, 255, 0.14);
  /* the selection pill is tinted glass: a lens that brightens and saturates what is
     behind it, with a lit rim where the lens curves */
  --g-lift: rgba(255, 255, 255, 0.20);
  --g-tint: rgba(212, 175, 55, 0.24);
  --g-tint-rim: rgba(230, 199, 102, 0.55);
  --g-spec: rgba(255, 255, 255, 0.50);
  --g-under: rgba(255, 255, 255, 0.11);
  --g-inner: rgba(255, 255, 255, 0.06);
  --g-cast: rgba(0, 0, 0, 0.45);
  /* liquid glass section bars, the Sworn Record site's recipe (Sep 28): mostly clear,
     a light blur, almost no tint, light caught on the edge nearest the sky */
  --lg-tint: rgba(18, 18, 18, 0.2);
  --lg-hi: rgba(255, 255, 255, 0.16);
  --lg-mid: rgba(255, 255, 255, 0.03);
  --lg-clear: rgba(255, 255, 255, 0);
  --lg-low: rgba(255, 255, 255, 0.05);
  --lg-rim: rgba(255, 255, 255, 0.22);
  --lg-line: rgba(244, 242, 238, 0.16);
  --lg-cast: rgba(0, 0, 0, 0.6);
  --lg-ink: rgba(0, 0, 0, 0.55);
  --mask-on: rgba(0, 0, 0, 1);
  --mask-off: rgba(0, 0, 0, 0);
  --fade-top: rgba(10, 11, 13, 0.92);
  --fade-none: rgba(10, 11, 13, 0);

  --edge-hi: rgba(255, 255, 255, 0.06);
  --edge-hi-strong: rgba(255, 255, 255, 0.13);
  --inset-dark: rgba(0, 0, 0, 0.45);
  --shadow-ctl: 0 1px 2px rgba(0, 0, 0, 0.4);
  --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.45), 0 5px 14px rgba(0, 0, 0, 0.32);
  --shadow-card-hi: 0 2px 5px rgba(0, 0, 0, 0.5), 0 14px 30px rgba(0, 0, 0, 0.45);
  --shadow-key: 0 1px 2px rgba(0, 0, 0, 0.4), 0 6px 18px rgba(212, 175, 55, 0.26);
  --shadow-lg: 0 2px 8px rgba(0, 0, 0, 0.55), 0 34px 74px rgba(0, 0, 0, 0.66);
  --shadow-sm: 0 2px 10px rgba(0, 0, 0, 0.45);

  --text: #E9EBEF;
  --text-dim: #A3A8B0;
  --text-faint: #888D95;

  /* gold = interactive. The Agents Lens colour (#D4AF37, the logo's): fills, the selection
     pill, focus, in progress. Gold is light, so what sits ON a gold fill is dark ink
     (--on-accent, 8.8:1), never white. --accent-hi is the lighter gold for text and icons. */
  --accent: #D4AF37;
  --accent-hi: #E6C766;
  --accent-soft: rgba(212, 175, 55, 0.16);
  --accent-soft-2: rgba(212, 175, 55, 0.07);
  --accent-line: rgba(212, 175, 55, 0.5);
  --on-accent: #17130A;

  /* green = done, and only done */
  --done: #46C494;
  --done-soft: rgba(70, 196, 148, 0.16);
  --done-ink: #07120D;

  /* blue = your move, so far only in Leads > Pipeline (Shadi accepted it, Oct 18 2026): a pick or a cut waiting on you, and the links to
     them. Red there means stopped and nothing else. 7.1:1 on --dk-card. Its soft tints are color-mix of this one, so it is one token. */
  --act: #7EAEFF;
  /* the Pipeline's re-edit panel (Oct 19): the video's width over height (set per video once its first frame loads; 9:16 until then)
     and the tallest it may be, which the phone's full-height sheet sets again from the screen */
  --pl-ar: .5625;
  --pl-h: 760px;
  /* Leads > Picks too since Oct 19 (direction A): Approve is the one blue FILL. --act-hi is its hover, --act-ink the text on it
     (8.2:1 on --act), --act-cast its shadow (the blue version of --shadow-key). */
  --act-hi: #9CC1FF;
  --act-ink: #0B1424;
  --act-cast: 0 1px 2px rgba(0, 0, 0, 0.4), 0 6px 18px rgba(126, 174, 255, 0.26);
  /* Picks' players (Oct 19): the three columns share one width so the table's rows line up under them. It follows the screen's
     height (a 9:16 player whose buttons stay above the fold: 1440x900 gives 272px) and the room beside the list (100cqi is the
     Picks view, a size container), never under 220px or over 330px. --pk-n is how many videos a lawyer has (set on the row). */
  --pk-gap: 20px;
  --pk-n: 3;
  --pk-listw: 300px;
  --pk-colw: clamp(220px, min((100vh - 452px) * .5625 + 20px, (100cqi - var(--pk-listw) - 28px - 2 * var(--pk-gap)) / 3), 330px);
  --pk-cardw: 236px;

  /* over the line and delete (an edge and a chip on a card, never a fill you press) */
  --red: #FF7468;
  --red-soft: rgba(255, 116, 104, 0.15);
  --red-line: rgba(255, 116, 104, 0.45);

  /* violet = personal: his own life, not the business. It was yellow, which sat too close to
     the gold accent once gold became the app's colour (Nov 6 2026). */
  --personal: #C4A3FF;
  --personal-soft: rgba(196, 163, 255, 0.16);
  --personal-line: rgba(196, 163, 255, 0.5);
  /* a task on both lists (Sep 28): its own hue, clear of red (act, late), green (done) and yellow (personal) */
  --both: #9DB8FF;
  --both-soft: rgba(157, 184, 255, 0.15);

  /* People are told in words, not hue, so these stay neutral. They exist only
     because the base rules reference them. Do not put green here: green is done. */
  --person-0: #C9CDD4;
  --person-0-soft: rgba(201, 205, 212, 0.13);
  --person-1: #C9CDD4;
  --person-1-soft: rgba(201, 205, 212, 0.13);
  --from: #E0A277;
  --from-soft: rgba(224, 162, 119, 0.13);
  --dot: #E6C766;

  --scrim: rgba(3, 4, 6, 0.6);

  /* REDESIGN LAB (Oct 7): sidebar, Home widgets, late in orange. Late moves off red so red
     only ever means "you can act on this"; orange carries late everywhere in the lab. */
  --late: #FF9450;
  --late-soft: rgba(255, 148, 80, 0.15);
  --late-line: rgba(255, 148, 80, 0.55);
  --side-bg: #0E1013;
  /* the phone bar (Nov 6 2026): solid, no glass; More is a light round button */
  --pb-bg: #0B0C0F;
  --pb-more-shadow: 0 6px 18px rgba(0, 0, 0, 0.55), 0 1px 0 rgba(255, 255, 255, 0.25) inset;
  --w-bg: #131519;
  --w-card: #1D2026;
  --w-card-hi: #252930;
  --w-line: rgba(255, 255, 255, 0.07);
  --w-line-2: rgba(255, 255, 255, 0.14);
  --w-glow: rgba(212, 175, 55, 0.12);
  --w-glow-none: rgba(212, 175, 55, 0);
  --w-glow-done: rgba(70, 196, 148, 0.09);
  --w-glow-done-none: rgba(70, 196, 148, 0);
  --w-card-line: rgba(255, 255, 255, 0.05);
  /* projects (lab, Oct 8): neutral. Shadi: "stop making projects purple". A project is told by its icon and tag, not a hue. */
  --proj: #C9CDD4;
  --proj-soft: rgba(255, 255, 255, 0.08);
  --proj-line: rgba(255, 255, 255, 0.2);
  --proj-card: #1D2026;
  --proj-card-hi: #252930;
  --proj-sheet-1: #1D2026;
  --proj-sheet-2: #1D2026;
  --proj-ink: #0A0B0D;
  --proj-gap: rgba(255, 255, 255, 0.05);
  --proj-gap-2: rgba(255, 255, 255, 0.015);
  --proj-wash: rgba(255, 255, 255, 0);
  --proj-wash-0: rgba(255, 255, 255, 0);
  --proj-line-soft: rgba(255, 255, 255, 0.12);
  --proj-seg: rgba(255, 255, 255, 0.12);
  --proj-next: rgba(0, 0, 0, 0.24);
  --proj-tile: #1D2026;
  --w-hatch: rgba(255, 255, 255, 0.025);
  --w-lift: 0 18px 40px rgba(0, 0, 0, 0.6);
  --w-ghost: rgba(28, 30, 35, 0.96);
  --pop-bg: #17191D;
  --both-ink: #0A0B0D;

  /* PROMPTER ONLY. The reading stage is true black, not the app's near-black: it is a
     light source held at arm's length behind a sheet of rig glass, and any lift in the
     background washes the text out and bounces off the glass. */
  --pr-stage: #000000;
  --pr-hud: rgba(18, 19, 22, 0.72);
  --pr-hud-line: rgba(255, 255, 255, 0.16);
  --pr-track: rgba(255, 255, 255, 0.14);
  --pr-rail: rgba(255, 255, 255, 0.08);
  --pr-thumb-cast: rgba(0, 0, 0, 0.55);
  /* prompter remote (Oct 12): the glass the computer's header and controls sit on over the words */
  --prr-shade: rgba(0, 0, 0, 0.9);
  --prr-shade-none: rgba(0, 0, 0, 0);
  --prr-live-glow: rgba(255, 116, 104, 0.35);

  /* FINANCES ONLY (Shadi, Sep 17: "add some colour", look B "Bold chips").
     Money is the one section where colour tells blocks and expense types apart.
     Every light tone clears 4.5:1 as text on a card; icons sit on the deep-to-light gradient. */
  --fin-green: #34D399;  --fin-green-deep: #059669;
  --fin-rose: #FB7185;   --fin-rose-deep: #E11D48;
  --fin-sky: #38BDF8;    --fin-sky-deep: #0284C7;
  --fin-violet: #A78BFA; --fin-violet-deep: #7C3AED;
  --fin-amber: #FBBF24;  --fin-amber-deep: #D97706;
  --fin-pink: #F472B6;   --fin-pink-deep: #DB2777;
  --fin-teal: #2DD4BF;   --fin-teal-deep: #0D9488;
  --fin-orange: #FB923C; --fin-orange-deep: #EA580C;
  --fin-chip-ink: #FFFFFF;
  --fin-chip-rim: rgba(255, 255, 255, 0.35);
  /* expense types, in the colours of the old finance sheet's type chips */
  --fin-k1: #94A3B8;  /* Business */
  --fin-k2: #FB7185;  /* Recurring */
  --fin-k3: #C084FC;  /* Fees */
  --fin-k4: #FACC15;  /* Employees */
  --fin-k5: #FB923C;  /* Job Expense */
  --fin-k6: #4ADE80;  /* Transportation */
  --fin-k7: #38BDF8;  /* Events */
  --fin-k8: #60A5FA;  /* Equipment */
  --fin-k9: #10B981;  /* Paid Ads */

  /* TIME BOX ONLY (Shadi, Sep 28). The now line is white, not red: red means "you can act",
     and the line is a fact, not a button. The overrun is the one red FILL in the app, and it
     is striped so it reads as time that was not planned rather than a thing to press. */
  --tb-now: #F2F4F7;
  --tb-now-ink: #0A0B0D;
  --tb-hour: rgba(255, 255, 255, 0.075);
  --tb-half: rgba(255, 255, 255, 0.032);
  --tb-past: rgba(0, 0, 0, 0.26);
  --tb-hatch-a: #1B1E23;
  --tb-hatch-b: #121418;
  --tb-over-a: rgba(255, 116, 104, 0.34);
  --tb-over-b: rgba(255, 116, 104, 0.12);
  --tb-over-ink: #FF8F85;
  --tb-early-a: rgba(255, 255, 255, 0.05);
  --tb-early-b: rgba(255, 255, 255, 0.015);
  --tb-lift: rgba(0, 0, 0, 0.55);
  --tb-handle: #FFFFFF;

  /* EDIT ROOM ONLY (Oct 1). A video sits on true black like any player, so letterboxing
     reads as the frame rather than as a grey box. */
  --er-screen: #000000;
  /* Which business a video is for (Shadi, Oct 1: "brand colours"). The manager chat tags each
     editor and review; the portal only paints it, as an edge and a label, never a fill you press.
     Agents Lens keeps its own gold HERE ONLY (the one exception to the no-gold lint rule, which
     allows nothing but these --er-al tokens); Sworn Record is the portal's own red. */
  --er-al: #D4AF37;
  --er-al-ink: #E6C766;
  --er-al-soft: rgba(212, 175, 55, 0.16);
  --er-al-line: rgba(212, 175, 55, 0.5);   /* the client review page's Agents Lens look (Oct 14) */
  --er-al-g1: #F6E39B;   /* the metallic text gradient, sampled from the logo's own lettering (Oct 14) */
  --er-al-g2: #E0C469;
  --er-al-g3: #C5A647;
  --er-al-g4: #DCBE60;
  --er-sr: #D62B22;
  --er-sr-ink: #FF6F63;
  --er-sr-soft: rgba(214, 43, 34, 0.18);

  --radius: 16px;
  --radius-card: 13px;
  --radius-sm: 11px;
  --tap: 44px;
  --ease: cubic-bezier(.22, .61, .36, 1);
  --spring: cubic-bezier(.34, 1.56, .64, 1);
  --font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "Segoe UI", system-ui, sans-serif;
  --font-display: ui-serif, "New York", "Iowan Old Style", Georgia, serif;
  --safe-top: env(safe-area-inset-top, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  /* The Docket (Leads > Docket, Oct 12): the lanes keep the local viewer's colours so a card reads
     the same in both places, except Tier 3, which is violet because the portal has no gold.
     Dots, edges and text only, never a filled control. */
  --dk-t1: #E0352B;
  --dk-t2: #EE8A62;
  --dk-t3: #A98BDB;
  --dk-t4: #8A93A6;
  --dk-check: #7FA7D9;
  --dk-out: #5D5D64;
  /* Build 2 (Oct 15), the Dossier redesign (direction A). Tier 2 moved off amber to a soft coral: the
     amber read too close to gold. A lane's soft tint is its chip; --dk-t1-ink and --dk-out-ink are the
     chip text where the lane colour itself is too dark to read (4.5:1 at least on its own tint; fix round 1
     raised Tier 3, Tier 4 and Out). --dk-faint-hi is the quiet text of a selected row (5.1:1 on --dk-card-hi). A card must stand off the page
     (#0A0B0D): --dk-card is 1.24:1 against it, --dk-card-hi 1.35:1 (the selected row), --dk-well sits
     sunk inside a card. --fa is a video frame's width over height, set per strip once it loads. */
  --dk-t1-ink: #FF6F63;
  --dk-t3-ink: #B39BE0;
  --dk-t4-ink: #9CA3B4;
  --dk-faint-hi: #959AA2;
  --dk-t1-soft: rgba(224, 53, 43, 0.16);
  --dk-t2-soft: rgba(238, 138, 98, 0.15);
  --dk-t3-soft: rgba(169, 139, 219, 0.15);
  --dk-t4-soft: rgba(138, 147, 166, 0.15);
  --dk-check-soft: rgba(127, 167, 217, 0.15);
  --dk-out-ink: #9DA1A9;
  --dk-out-soft: rgba(138, 143, 151, 0.12);
  --dk-card: #1F2228;
  --dk-card-hi: #262A31;
  --dk-well: #15171B;
  --dk-rim: rgba(255, 255, 255, 0.075);
  --dk-rim-2: rgba(255, 255, 255, 0.13);
  --dk-shimmer: rgba(255, 255, 255, 0.06);
  --font-mono: ui-monospace, "SF Mono", "Menlo", monospace;
  --fa: .5625;
  /* Quran (Nov 6 2026, from the tracker). Its own green, the way Finances has its own colours. */
  --q: #22B07D;
  --q-hi: #4FD39B;
  --q-deep: #0B4F34;
  --q-ink: #03150D;
  --q-line: rgba(79, 211, 155, 0.38);
  --q-late: #FFB86B;
  /* The reader's three themes. --qr-* is what the reader paints with; dark is the default and
     css/quran.css points it at the grey or light set. */
  --qr-bg: transparent;
  --qr-bar: #0A0B0D;
  --qr-ink: #EAF3EE;
  --qr-dim: rgba(234, 243, 238, 0.6);
  --qr-line: rgba(255, 255, 255, 0.07);
  --qr-chip: rgba(255, 255, 255, 0.05);
  --qr-accent: #4FD39B;
  --qr-hl: rgba(34, 176, 125, 0.12);
  --qr-hl-ring: rgba(34, 176, 125, 0.32);
  --qr-mask: rgba(255, 255, 255, 0.09);
  --qr-scale: 1;
  --qr-grey-bg: #1B1F1D;
  --qr-grey-ink: #E6ECE8;
  --qr-grey-dim: rgba(230, 236, 232, 0.6);
  --qr-grey-line: rgba(255, 255, 255, 0.09);
  --qr-grey-chip: rgba(255, 255, 255, 0.06);
  --qr-light-bg: #F7F4EC;
  --qr-light-ink: #1B2420;
  --qr-light-dim: #5A6B62;
  --qr-light-line: rgba(20, 40, 30, 0.14);
  --qr-light-chip: rgba(20, 40, 30, 0.06);
  --qr-light-accent: #0B6E45;
  --qr-light-hl: rgba(14, 145, 89, 0.1);
  --qr-light-ring: rgba(14, 145, 89, 0.26);
  --qr-light-mask: rgba(20, 40, 30, 0.12);
}

* { box-sizing: border-box; }
html, body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--font); font-size: 15px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: 100%; }
body { min-height: 100dvh; overscroll-behavior-y: none; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; -webkit-tap-highlight-color: transparent; }
.pp-ic { flex: none; display: block; }
.pp-boot { min-height: 100dvh; background: var(--bg); }

/* ---------- buttons + inputs ---------- */
.pp-btn {
  min-height: var(--tap); display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 0 14px; border-radius: var(--radius-sm); border: 1px solid var(--line-2); background: var(--surface-2);
  font-size: 14px; font-weight: 600; white-space: nowrap; transition: background .15s, border-color .15s, opacity .15s;
}
.pp-btn:disabled { opacity: .6; cursor: default; }
.pp-btn-primary { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }
.pp-btn-ghost { background: transparent; }
.pp-btn-danger { background: transparent; color: var(--red); border-color: var(--red-line); }
.pp-iconbtn { width: var(--tap); height: var(--tap); display: inline-flex; align-items: center; justify-content: center; border: 0; background: transparent; border-radius: var(--radius-sm); color: var(--text-dim); }
.pp-chipbtn { min-height: var(--tap); padding: 0 13px; border-radius: 999px; border: 1px solid var(--line-2); background: var(--surface-2); font-size: 13.5px; color: var(--text-dim); }
/* Edit / Done: a quiet text button that sits on a heading line. Boxes and delete buttons only
   show while it says Done, so a panel reads as a plain list the rest of the time. The negative
   margin keeps the 44px tap area without making the heading any taller. */
.pp-editbtn {
  flex: none; min-width: var(--tap); min-height: var(--tap); margin: -8px -10px -8px 0; padding: 0 10px;
  border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--accent-hi); font-size: 13.5px; font-weight: 600;
}
.pp-editbtn.is-on { font-weight: 700; }
@media (hover: hover) { .pp-editbtn:hover { background: var(--accent-soft); } }

.pp-input, .pp-select {
  width: 100%; min-height: var(--tap); padding: 10px 12px; border-radius: var(--radius-sm);
  border: 1px solid var(--line-2); background: var(--surface-2); font-size: 16px; outline: none;
}
/* Safari ignores min-height on native selects and date inputs unless appearance is reset. */
.pp-select {
  -webkit-appearance: none; appearance: none; padding-right: 34px; line-height: 1.3;
  background-image: linear-gradient(45deg, transparent 50%, var(--text-dim) 50%), linear-gradient(135deg, var(--text-dim) 50%, transparent 50%);
  background-position: calc(100% - 19px) 52%, calc(100% - 14px) 52%; background-size: 5px 5px; background-repeat: no-repeat;
}
.pp-input::placeholder { color: var(--text-faint); }
.pp-input:focus, .pp-select:focus { border-color: var(--accent-hi); box-shadow: 0 0 0 3px var(--accent-soft); }
textarea.pp-input { resize: vertical; line-height: 1.45; }
.pp-lbl { display: block; font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--text-faint); margin: 0 0 6px; }

.pp-seg { display: flex; gap: 3px; padding: 3px; border-radius: 11px; background: var(--surface-2); border: 1px solid var(--line); }
.pp-seg-btn { flex: 1; min-height: var(--tap); padding: 0 10px; border: 0; border-radius: 8px; background: transparent; color: var(--text-dim); font-size: 14px; font-weight: 600; }
.pp-seg-btn.is-on { background: var(--accent); color: var(--on-accent); }

.pp-newdot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--dot); box-shadow: 0 0 0 3px var(--accent-soft); margin-right: 7px; vertical-align: middle; flex: none; }

/* ---------- top bar ---------- */
.pp-top {
  position: sticky; top: 0; z-index: 30; display: flex; align-items: center; gap: 18px;
  padding: calc(var(--safe-top) + 8px) 24px 8px; min-height: 60px; background: var(--bg); border-bottom: 1px solid var(--line);
}
.pp-top-brand { display: flex; align-items: center; gap: 10px; }
.pp-top-name { font-family: var(--font-display); font-size: 19px; font-weight: 600; letter-spacing: -.01em; }
/* The locked Sworn Record mark, shipped as its own file so the brand's colours never
   have to live in the token system. Resize it, never redraw it. It has no tile behind
   it (Shadi, Sep 21), so it runs a little larger than the old chip did to carry the
   same weight, and it is the reverse cut: on this near-black background the plain cut
   inverts into a wireframe, while the reverse keeps the solid card faces. */
.pp-brandmark { width: 52px; height: 52px; display: block; object-fit: contain; }
.pp-brandmark-sm { width: 32px; height: 32px; }
.pp-tabs { display: flex; gap: 4px; }
.pp-tab { min-height: 40px; padding: 0 14px; border: 0; border-radius: 8px; background: transparent; color: var(--text-dim); font-weight: 600; }
.pp-tab.is-on { background: var(--surface-2); color: var(--text); }
.pp-top-right { margin-left: auto; display: flex; align-items: center; gap: 10px; }
.pp-syncnote { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--from); }
.pp-update { min-height: 36px; font-size: 13px; }
.pp-userchip { min-height: var(--tap); display: inline-flex; align-items: center; gap: 8px; padding: 0 12px 0 5px; border-radius: 999px; border: 1px solid var(--line-2); background: var(--surface); font-weight: 600; font-size: 14px; }
.pp-avatar { width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--accent-soft); color: var(--accent-hi); font-weight: 700; }


/* ---------- focus timer (Shadi, Sep 21 2026) ----------
   Two chips that must never be mistaken for one another. Yours is the filled red pill
   with the time in the open and the ring filling as it runs. Theirs is a quiet circle
   with their initial and a live dot, and no time at all until you ask: hovering shows
   it, clicking pins it open until you click again, which is also the only way in on a
   phone. Everything here is the app's existing red, grey and white; the difference is
   carried by fill against outline and by what is on show, not by a new colour. */
.pp-focus { display: flex; align-items: center; gap: 8px; }

.pp-focus-start {
  min-height: var(--tap); min-width: var(--tap); display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  padding: 0 13px; border-radius: 999px; border: 1px solid var(--line-2); background: var(--surface);
  color: var(--text-dim); font-size: 14px; font-weight: 600;
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl);
  transition: color .15s var(--ease), border-color .15s var(--ease), background .15s var(--ease);
}
.pp-focus-word { white-space: nowrap; }

/* yours: filled, loud, and the whole pill is the stop button */
.pp-focus-mine {
  min-height: var(--tap); display: inline-flex; align-items: center; gap: 8px; padding: 0 9px 0 10px;
  border-radius: 999px; border: 1px solid var(--accent); background: var(--accent); color: var(--on-accent);
  font-size: 14.5px; font-weight: 700; box-shadow: var(--shadow-key);
}
.pp-focus-time { font-variant-numeric: tabular-nums; letter-spacing: .01em; }
.pp-focus-ring {
  width: 20px; height: 20px; flex: none; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  background: conic-gradient(var(--on-accent) var(--pp-focus-pct, 0%), var(--accent-hi) 0);
}
.pp-focus-ring-in { width: 13px; height: 13px; border-radius: 50%; background: var(--accent); }
.pp-focus-stop { display: inline-flex; opacity: .85; }

.pp-focus-done {
  min-height: var(--tap); display: inline-flex; align-items: center; gap: 7px; padding: 0 13px;
  border-radius: 999px; border: 1px solid var(--done); background: var(--done-soft); color: var(--done);
  font-size: 14px; font-weight: 700;
}

/* theirs: quiet until asked. The time is a box that opens, so nothing jumps around it. */
.pp-focus-mate {
  min-height: var(--tap); min-width: var(--tap); display: inline-flex; align-items: center; justify-content: center;
  padding: 0 7px; border-radius: 999px; border: 1px solid var(--line-2); background: var(--surface); color: var(--text-dim);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl);
  transition: border-color .18s var(--ease), background .18s var(--ease);
}
.pp-focus-mate.is-pinned { border-color: var(--accent-line); background: var(--surface-2); color: var(--text); }
.pp-focus-mate-face {
  position: relative; width: 28px; height: 28px; flex: none; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--surface-3); color: var(--text); font-size: 13px; font-weight: 700;
}
/* the dot is the whole signal that a session is running, so it sits proud of the circle */
.pp-focus-mate-live {
  position: absolute; right: -2px; bottom: -1px; width: 9px; height: 9px; border-radius: 50%;
  background: var(--accent-hi); box-shadow: 0 0 0 2px var(--surface);
}
.pp-focus-mate.is-pinned .pp-focus-mate-live { box-shadow: 0 0 0 2px var(--surface-2); }
.pp-focus-mate-time {
  max-width: 0; margin-left: 0; opacity: 0; overflow: hidden; white-space: nowrap;
  font-size: 13.5px; font-weight: 700; font-variant-numeric: tabular-nums;
  transition: max-width .24s var(--ease), margin-left .24s var(--ease), opacity .18s var(--ease);
}
.pp-focus-mate.is-pinned .pp-focus-mate-time { max-width: 64px; margin-left: 7px; opacity: 1; }

@media (hover: hover) and (pointer: fine) {
  .pp-focus-start:hover { color: var(--text); border-color: var(--accent-line); }
  .pp-focus-mate:hover { border-color: var(--accent-line); }
  .pp-focus-mate:hover .pp-focus-mate-time { max-width: 64px; margin-left: 7px; opacity: 1; }
}
@media (prefers-reduced-motion: no-preference) {
  .pp-focus-mate-live { animation: pp-focus-live 2s var(--ease) infinite; }
  .pp-focus-mine, .pp-focus-done { animation: pp-fade .3s var(--ease) both; }
}
@keyframes pp-focus-live { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(.72); opacity: .55; } }

/* The length picker: the dial (Shadi picked it Sep 22 out of three directions, and asked
   for the custom button on it). One number at headline size in the brand serif, quiet ticks
   to set it, one Start. The boldness is spent in exactly one place and everything else gets
   out of its way. Custom swaps the numeral itself for a field, so there is still only ever
   ONE number on screen: no second input competing with the one that matters.
   The old 4x2 grid of preset boxes is gone, along with the dead space inside each box and
   the disabled Start that read as broken rather than as not-yet. */
.pp-menu.pp-focus-pop { width: 316px; max-width: calc(100vw - 24px); min-width: 0; padding: 0 0 12px; }
.pp-focus-head { display: flex; align-items: center; gap: 8px; padding: 10px 6px 0 16px; }
.pp-focus-eyebrow {
  flex: 1; font-size: 11.5px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase;
  color: var(--text-faint);
}
/* the quiet text button that sits on a heading line, same as Edit / Done elsewhere */
.pp-focus-swap {
  flex: none; min-width: var(--tap); min-height: var(--tap); margin: -10px 0; padding: 0 10px;
  border: 0; border-radius: var(--radius-sm); background: transparent;
  color: var(--accent-hi); font-size: 13.5px; font-weight: 600;
}
.pp-focus-swap[aria-pressed="true"] { font-weight: 700; }

.pp-focus-dial { display: flex; align-items: baseline; gap: 9px; padding: 2px 16px 12px; }
.pp-focus-dial-n, .pp-focus-dial-in {
  font-family: var(--font-display); font-size: 62px; font-weight: 600; line-height: .92;
  letter-spacing: -.03em; color: var(--text); font-variant-numeric: tabular-nums;
}
/* the field has to BE the numeral, not sit next to it, so every bit of input chrome goes */
.pp-focus-dial-in {
  min-width: 0; padding: 0; border: 0; background: transparent; outline: none;
  -webkit-appearance: none; appearance: none;
  border-bottom: 2px solid var(--accent-line); border-radius: 0;
}
.pp-focus-dial-in::-webkit-outer-spin-button, .pp-focus-dial-in::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.pp-focus-dial-in::placeholder { color: var(--text-faint); }
.pp-focus-dial-in:focus { border-bottom-color: var(--accent-hi); }
.pp-focus-dial-u {
  font-size: 12.5px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint);
}

.pp-focus-ticks { display: flex; gap: 4px; padding: 0 12px 12px; }
.pp-focus-tick {
  flex: 1; min-width: 0; min-height: var(--tap); padding: 0; border: 0; border-radius: 10px;
  background: transparent; color: var(--text-dim); font-size: 14.5px; font-weight: 700;
  font-variant-numeric: tabular-nums;
  transition: background .14s var(--ease), color .14s var(--ease);
}
.pp-focus-tick.is-on { background: var(--surface-3); color: var(--text); box-shadow: inset 0 1px 0 var(--edge-hi); }

.pp-focus-go {
  display: block; width: calc(100% - 24px); margin: 0 12px; min-height: var(--tap);
  border-radius: var(--radius-sm); border: 1px solid var(--accent); background: var(--accent);
  color: var(--on-accent); font-size: 15px; font-weight: 700; box-shadow: var(--shadow-key);
  transition: background .15s var(--ease), border-color .15s var(--ease), color .15s var(--ease), box-shadow .15s var(--ease);
}
/* Nothing typed yet is not an error: the button goes quiet rather than staying a dimmed
   red slab, which is what read as broken in the first version. */
.pp-focus-go:disabled {
  background: var(--surface-2); border-color: var(--line-2); color: var(--text-faint);
  box-shadow: inset 0 1px 0 var(--edge-hi); cursor: default; opacity: 1;
}
@media (hover: hover) and (pointer: fine) {
  .pp-focus-tick:hover { background: var(--surface-2); color: var(--text); }
  .pp-focus-swap:hover { background: var(--accent-soft); }
}
@media (prefers-reduced-motion: no-preference) {
  .pp-focus-tick:active, .pp-focus-go:not(:disabled):active { transform: scale(.97); }
}

@media (max-width: 760px) {
  /* 375px. One chip fits beside the name; two do not, by about 22px. So the title is
     what gives way, and only while BOTH sessions are on screen at once: at that moment
     the bar has two live things to carry and the word "Sworn Record" is the least
     load-bearing thing in it. It is back the second either timer stops. The ellipsis is
     the fallback for anything without :has(), and for the sync note turning up too. */
  .pp-top:has(.pp-focus-mine):has(.pp-focus-mate) .pp-top-name { display: none; }
  .pp-top-brand { min-width: 0; }
  .pp-top-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .pp-focus { gap: 6px; }
  .pp-focus-mine { padding: 0 10px; gap: 7px; }
  .pp-focus-stop { display: none; }
  .pp-menu.pp-focus-pop { width: min(316px, calc(100vw - 24px)); }
}

.pp-menu-scrim { position: fixed; inset: 0; z-index: 60; }
.pp-menu { position: fixed; z-index: 61; min-width: 220px; padding: 6px; border-radius: 12px; background: var(--surface-2); border: 1px solid var(--line-2); box-shadow: var(--shadow-lg); }
.pp-menu-who { padding: 10px 12px; font-size: 13px; color: var(--text-dim); border-bottom: 1px solid var(--line); margin-bottom: 4px; }
.pp-menu-item { width: 100%; min-height: var(--tap); display: flex; align-items: center; gap: 10px; padding: 0 12px; border: 0; border-radius: 8px; background: transparent; font-size: 15px; text-align: left; }

/* ---------- preview toolbar (demo builds only) ---------- */
.pp-demo { display: flex; align-items: center; gap: 10px; padding: 8px 24px; background: var(--surface); border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; }
.pp-demo::-webkit-scrollbar { display: none; }
.pp-demo-tag { flex: none; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--from); padding: 4px 8px; border-radius: 6px; background: var(--from-soft); }
.pp-seg-sm { flex: none; align-items: center; }
.pp-seg-sm .pp-seg-btn { flex: none; font-size: 13px; min-height: var(--tap); }
.pp-demo-lbl { font-size: 12px; color: var(--text-faint); padding: 0 6px 0 8px; white-space: nowrap; }
.pp-demo-btn { flex: none; font-size: 13px; }

/* ---------- page ---------- */
.pp-main { max-width: 1440px; margin: 0 auto; padding: 22px 24px calc(48px + var(--safe-bottom)); }
.pp-page { animation: pp-fade .25s ease both; }
@keyframes pp-fade { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
.pp-page-head { margin-bottom: 16px; }
.pp-h1 { margin: 0; font-family: var(--font-display); font-size: 32px; font-weight: 600; letter-spacing: -.02em; }
.pp-sub { margin: 4px 0 0; color: var(--text-dim); font-size: 14.5px; }
.pp-sub b { color: var(--text); font-weight: 600; }

.pp-views { display: flex; gap: 8px; margin-bottom: 14px; overflow-x: auto; scrollbar-width: none; padding-bottom: 2px; }
.pp-views::-webkit-scrollbar { display: none; }
.pp-view {
  flex: none; min-height: var(--tap); display: inline-flex; align-items: center; gap: 8px; padding: 0 16px;
  border-radius: 999px; border: 1px solid var(--line-2); background: var(--surface); color: var(--text-dim); font-weight: 600; font-size: 14.5px;
}
.pp-view.is-on { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }
.pp-view .pp-newdot { margin: 0; }
.pp-view-ct { min-width: 22px; height: 22px; padding: 0 6px; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; background: var(--surface-3); color: var(--text-dim); }
.pp-view.is-on .pp-view-ct { background: var(--accent-hi); color: var(--on-accent); }

.pp-qadd { display: grid; grid-template-columns: 1fr 150px 140px 150px auto auto; gap: 8px; margin-bottom: 18px; }
.pp-select.is-empty { color: var(--text-faint); }
.pp-select option { color: var(--text); }
.pp-flash { position: fixed; left: 50%; bottom: calc(20px + var(--safe-bottom)); z-index: 70; transform: translate(-50%, 16px); opacity: 0; pointer-events: none;
  padding: 11px 16px; border-radius: 999px; background: var(--surface-3); border: 1px solid var(--accent-line); box-shadow: var(--shadow-sm); font-size: 14px; font-weight: 600; transition: opacity .2s, transform .2s; white-space: nowrap; }
.pp-flash.is-on { opacity: 1; transform: translate(-50%, 0); }

.pp-viewbody { animation: pp-fade .2s ease both; }

/* ---------- sections ---------- */
.pp-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; align-items: start; }
.pp-sec { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 10px; transition: border-color .15s, background .15s; min-width: 0; }
.pp-sec.is-drop { border-color: var(--accent-hi); background: var(--accent-soft-2); }
.pp-sec-head { display: flex; align-items: center; gap: 8px; min-height: 32px; padding: 0 4px 8px; }
.pp-sec-toggle { width: 100%; min-height: var(--tap); border: 0; background: transparent; text-align: left; padding: 0 4px; }
.pp-sec-mark { width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--text-faint); flex: none; }
.pp-sec-in_progress .pp-sec-mark { border-color: var(--accent-hi); background: linear-gradient(90deg, var(--accent-hi) 50%, transparent 50%); }
.pp-sec-done .pp-sec-mark { border-color: var(--accent); background: var(--accent); }
.pp-sec-label { font-size: 13px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--text-dim); }
.pp-sec-ct { font-size: 12.5px; color: var(--text-faint); }
.pp-sec-chev { margin-left: auto; color: var(--text-faint); transition: transform .2s; }
.pp-sec-chev.is-open { transform: rotate(180deg); }
.pp-sec-list { display: flex; flex-direction: column; gap: 7px; }
.pp-cols .pp-sec-list, .pp-side .pp-sec-list { min-height: 72px; }
.pp-empty { padding: 16px 10px; text-align: center; font-size: 13px; color: var(--text-faint); border: 1px dashed var(--line-2); border-radius: var(--radius-sm); }
.pp-older { width: 100%; font-size: 13px; color: var(--text-dim); }

/* ---------- cards ---------- */
.pp-card {
  position: relative; display: flex; align-items: flex-start; gap: 2px; padding: 4px 10px 8px 2px;
  background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--radius-sm); cursor: pointer;
  transition: border-color .15s, background .15s, opacity .15s; outline: none;
}
.pp-card:focus-visible { border-color: var(--accent-hi); box-shadow: 0 0 0 3px var(--accent-soft); }
.pp-card.is-late { border-left: 3px solid var(--red); }
.pp-card.is-dim { opacity: .55; }
.pp-card.is-dragging { opacity: .4; }
.pp-card[draggable="true"] { cursor: grab; }

.pp-status { width: var(--tap); height: var(--tap); flex: none; display: inline-flex; align-items: center; justify-content: center; border: 0; background: transparent; padding: 0; }
.pp-status-ring { width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--text-faint); display: inline-flex; align-items: center; justify-content: center; color: var(--on-accent); transition: border-color .15s, background .15s; }
.pp-st-in_progress .pp-status-ring { border-color: var(--accent-hi); background: linear-gradient(90deg, var(--accent-hi) 50%, transparent 50%); }
.pp-st-done .pp-status-ring { border-color: var(--accent); background: var(--accent); }

.pp-card-main { flex: 1; min-width: 0; padding-top: 10px; }
.pp-card-title { font-size: 15px; line-height: 1.35; overflow-wrap: anywhere; }
.pp-st-done .pp-card-title { color: var(--text-dim); text-decoration: line-through; text-decoration-color: var(--text-faint); }
.pp-card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; margin-top: 6px; font-size: 12px; }
.pp-card-meta:empty { display: none; }

.pp-due { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px 2px 6px; border-radius: 999px; font-weight: 600; white-space: nowrap; }
.pp-due-late { color: var(--red); background: var(--red-soft); }
.pp-due-now { color: var(--accent-hi); background: var(--accent-soft); }
.pp-due-soon { color: var(--text); background: var(--surface-3); }
.pp-due-far { color: var(--text-dim); background: var(--surface-3); }
.pp-tag { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 999px; background: var(--surface-3); color: var(--text-dim); white-space: nowrap; }
.pp-tag-client { color: var(--text); }
.pp-owner { padding: 2px 8px; border-radius: 999px; font-weight: 700; white-space: nowrap; }
.pp-owner-u0 { color: var(--person-0); background: var(--person-0-soft); }
.pp-owner-u1 { color: var(--person-1); background: var(--person-1-soft); }
.pp-owner-pool { color: var(--text-dim); border: 1px dashed var(--line-2); }
.pp-owner-both { color: var(--text); background: var(--surface-3); }
.pp-from { padding: 2px 8px; border-radius: 999px; color: var(--from); background: var(--from-soft); font-weight: 600; white-space: nowrap; }
.pp-taken { color: var(--text-dim); font-style: italic; }
.pp-take { align-self: center; margin-left: 6px; min-height: 40px; padding: 0 12px; background: var(--accent-soft); border-color: var(--accent-line); color: var(--accent-hi); font-size: 13.5px; }

/* ---------- subtasks: a checklist on the card ----------
   The opener is meant to disappear until you look for it: no fill, no border, just the
   count and a chevron in the faint ink. It is a full tap target all the same, which is
   why the box is bigger than the mark inside it. */
.pp-subsbtn {
  flex: none; align-self: flex-start; display: inline-flex; align-items: center; justify-content: flex-end; gap: 2px;
  min-width: var(--tap); height: var(--tap); padding: 0 4px 0 6px; margin-right: -6px;
  border: 0; background: transparent; border-radius: var(--radius-sm); color: var(--text-faint);
  font-size: 11.5px; font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: .01em;
}
.pp-subsbtn.is-open { color: var(--text-dim); }
.pp-subsbtn-chev { transition: transform .24s var(--ease); }
.pp-subsbtn.is-open .pp-subsbtn-chev { transform: rotate(180deg); }
.pp-subs-tag { font-variant-numeric: tabular-nums; font-weight: 700; }

/* height is driven by PP_MOTION.expand, so it is 0 or auto and never anything in between
   once the animation has finished */
.pp-subs { overflow: hidden; height: 0; }
.pp-subs-list {
  list-style: none; margin: 9px 0 1px; padding: 0 0 0 3px;
  border-left: 1px solid var(--line-2); display: flex; flex-direction: column; gap: 1px;
}
.pp-substep {
  width: 100%; min-height: 34px; display: flex; align-items: center; gap: 9px; text-align: left;
  padding: 5px 8px; border: 0; background: transparent; border-radius: var(--radius-sm);
  color: var(--text-dim); font-size: 13px; line-height: 1.32;
}
.pp-substep-box {
  flex: none; width: 16px; height: 16px; border-radius: 5px; border: 1.5px solid var(--text-faint);
  display: inline-flex; align-items: center; justify-content: center; color: var(--done-ink);
  transition: background .16s var(--ease), border-color .16s var(--ease), transform .3s var(--spring);
}
.pp-substep-box.is-done { border-color: var(--done); background: var(--done); }
.pp-substep-title { min-width: 0; overflow-wrap: anywhere; }
.pp-substep.is-done .pp-substep-title { color: var(--text-faint); text-decoration: line-through; text-decoration-color: var(--text-faint); }

/* compact cards (phone side by side) */
.pp-card.is-compact { display: block; min-height: 52px; padding: 9px 10px; }
.pp-card.is-compact .pp-card-title { font-size: 13.5px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.pp-card.is-compact .pp-card-meta { margin-top: 5px; font-size: 11.5px; }

/* ---------- side by side ---------- */
.pp-side-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-bottom: 14px; align-items: stretch; }
.pp-side-person { display: flex; align-items: center; gap: 10px; padding: 4px 4px 0; }
.pp-side-name { font-family: var(--font-display); font-size: 22px; font-weight: 600; }
.pp-side-open { font-size: 13px; color: var(--text-faint); }
.pp-addfor { margin-left: auto; font-size: 13.5px; }
.pp-poolnote { color: var(--text-faint); font-size: 13px; margin: 4px 2px 0; }

/* ---------- clients ---------- */
.pp-clients { display: grid; grid-template-columns: minmax(300px, 380px) minmax(0, 1fr); gap: 18px; align-items: start; }
.pp-clients.is-stacked { display: block; }
.pp-clist { min-width: 0; }
.pp-ctools { display: flex; gap: 8px; margin-bottom: 10px; }
.pp-csearch { -webkit-appearance: none; appearance: none; }
.pp-cadd { flex: none; }
.pp-cnew { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.pp-cnew .pp-input { flex: 1 1 100%; }
.pp-cnew .pp-btn { flex: 1; }
.pp-crows { display: flex; flex-direction: column; gap: 7px; }
.pp-crow {
  width: 100%; min-height: 64px; display: flex; flex-direction: column; gap: 6px; padding: 11px 13px; text-align: left;
  border-radius: var(--radius-sm); border: 1px solid var(--line); background: var(--surface); transition: border-color .15s, background .15s;
}
.pp-crow.is-on { border-color: var(--accent-line); background: var(--accent-soft-2); }
.pp-crow-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pp-crow-name { font-size: 15.5px; font-weight: 600; overflow-wrap: anywhere; }
.pp-crow-biz { font-size: 13px; color: var(--text-dim); overflow-wrap: anywhere; }
.pp-crow-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 5px 8px; font-size: 12px; color: var(--text-faint); }
.pp-crow-price { color: var(--text); font-weight: 600; }
.pp-cstate { padding: 2px 8px; border-radius: 999px; font-weight: 600; background: var(--surface-3); color: var(--text-dim); }
.pp-cstate-cancelled { color: var(--red); background: var(--red-soft); }
.pp-cempty { padding: 70px 20px; text-align: center; color: var(--text-faint); border: 1px dashed var(--line-2); border-radius: var(--radius); }

.pp-cprofile { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px 20px; display: flex; flex-direction: column; gap: 22px; min-width: 0; }
.pp-cback { align-self: flex-start; margin-left: -10px; padding: 0 12px 0 4px; border-color: transparent; color: var(--accent-hi); }
.pp-chead { display: flex; flex-direction: column; gap: 8px; }
.pp-chead .pp-seg { max-width: 430px; }
.pp-cname { font-family: var(--font-display); font-size: 22px; font-weight: 600; }
.pp-h2 { margin: 0 0 10px; display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--text-dim); }
.pp-cgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; }
.pp-cdate { width: 100%; }
.pp-money { position: relative; }
.pp-money-sign { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--text-faint); pointer-events: none; }
.pp-money .pp-input { padding-left: 26px; }
.pp-contacts { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; }
.pp-contact-row { display: flex; gap: 6px; }
.pp-contact-go { flex: none; min-width: 70px; text-decoration: none; color: var(--accent-hi); border-color: var(--accent-line); background: var(--accent-soft); }
.pp-cnotes { min-height: 140px; }
.pp-ctask-add { display: flex; gap: 8px; margin-bottom: 12px; }
.pp-ctasks { margin-bottom: 10px; }
.pp-ctasks .pp-sec-head { position: static; padding: 0 2px 6px; background: none; }
.pp-cfoot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; padding-top: 14px; border-top: 1px solid var(--line); }

/* ---------- due date button + pop-up calendar ---------- */
.pp-duebtn {
  min-height: var(--tap); display: inline-flex; align-items: center; gap: 8px; padding: 0 12px; min-width: 0;
  border-radius: var(--radius-sm); border: 1px solid var(--line-2); background: var(--surface-2); color: var(--text-faint);
  font-size: 15px; text-align: left; white-space: nowrap;
}
.pp-duebtn.is-set { color: var(--text); }
.pp-duebtn .pp-ic { color: var(--accent-hi); }
.pp-duebtn-text { overflow: hidden; text-overflow: ellipsis; }
.pp-duebtn[aria-expanded="true"] { border-color: var(--accent-hi); box-shadow: 0 0 0 3px var(--accent-soft); }
.pp-duebtn-lg { flex: 1; font-size: 16px; }

.pp-cal-scrim { position: fixed; inset: 0; z-index: 94; }
.pp-cal-scrim.is-sheet { background: var(--scrim); animation: pp-fadein .18s ease both; }
.pp-cal {
  position: fixed; z-index: 95; width: 320px; padding: 10px 12px 12px; border-radius: 16px;
  background: var(--surface-2); border: 1px solid var(--line-2); box-shadow: var(--shadow-lg);
  animation: pp-pop .16s ease both; transform-origin: top left;
}
.pp-cal.is-sheet {
  left: 0; right: 0; bottom: 0; width: auto; padding: 12px 16px calc(14px + var(--safe-bottom));
  border-radius: 20px 20px 0 0; border-bottom: 0; animation: pp-sheet .24s cubic-bezier(.2, .8, .2, 1) both;
}
@keyframes pp-pop { from { opacity: 0; transform: scale(.96) translateY(-4px); } to { opacity: 1; transform: none; } }
@keyframes pp-sheet { from { transform: translateY(100%); } to { transform: none; } }
@keyframes pp-fadein { from { opacity: 0; } to { opacity: 1; } }
.pp-cal-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; }
.pp-cal-month { font-size: 16px; font-weight: 700; }
.pp-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); row-gap: 2px; }
.pp-cal-wd { text-align: center; font-size: 12px; font-weight: 600; color: var(--text-faint); padding: 4px 0 6px; }
.pp-cal-day {
  justify-self: center; width: 40px; height: 40px; border: 0; border-radius: 50%; background: transparent;
  font-size: 16px; font-variant-numeric: tabular-nums; color: var(--text);
}
.pp-cal-day.is-past { color: var(--text-faint); }
.pp-cal-day.is-today { color: var(--accent-hi); font-weight: 700; }
.pp-cal-day.is-sel { background: var(--accent); color: var(--on-accent); font-weight: 700; }
.pp-cal.is-sheet .pp-cal-day { width: 44px; height: 44px; font-size: 17px; }
.pp-cal-foot { display: flex; gap: 6px; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line); }
.pp-cal-close { margin-left: auto; }

/* ---------- drawer ---------- */
.pp-scrim { position: fixed; inset: 0; z-index: 80; background: var(--scrim); opacity: 0; pointer-events: none; transition: opacity .2s; }
.pp-scrim.is-open { opacity: 1; pointer-events: auto; }
/* Closed = off screen, fully transparent (after the slide finishes) and inert (set in
   JSX). Deliberately NOT visibility:hidden: WebKit kept the children hidden after opening. */
.pp-drawer {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: 81; width: 440px; max-width: 100%;
  display: flex; flex-direction: column; background: var(--surface); border-left: 1px solid var(--line-2);
  transform: translateX(110%); opacity: 0; pointer-events: none;
  transition: transform .26s cubic-bezier(.2, .8, .2, 1), opacity 0s linear .26s;
}
.pp-drawer.is-open { transform: none; opacity: 1; pointer-events: auto; box-shadow: var(--shadow-lg); transition: transform .26s cubic-bezier(.2, .8, .2, 1), opacity 0s; }
.pp-drawer-head { display: flex; align-items: center; justify-content: space-between; padding: calc(var(--safe-top) + 8px) 12px 8px 20px; border-bottom: 1px solid var(--line); }
.pp-drawer-kicker { font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); }
.pp-drawer-body { flex: 1; overflow-y: auto; padding: 18px 20px; display: flex; flex-direction: column; gap: 18px; -webkit-overflow-scrolling: touch; }
.pp-drawer-title { font-size: 18px; font-weight: 600; min-height: 64px; }
.pp-notes { min-height: 120px; }
.pp-fld-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.pp-due-row { display: flex; align-items: center; gap: 10px; }
.pp-quick { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
/* the checklist in the drawer: tick, rename, delete, then one box to add the next */
.pp-lbl-ct { margin-left: 8px; text-transform: none; letter-spacing: 0; font-weight: 600; font-variant-numeric: tabular-nums; }
.pp-drsubs { display: flex; flex-direction: column; gap: 6px; }
.pp-drsub { display: flex; align-items: center; gap: 4px; }
.pp-subtick { flex: none; width: var(--tap); height: var(--tap); display: inline-flex; align-items: center; justify-content: center;
  border: 0; background: transparent; padding: 0; border-radius: var(--radius-sm); }
.pp-subtick .pp-substep-box { width: 19px; height: 19px; border-radius: 6px; }
.pp-drsub-title { flex: 1; min-width: 0; }
.pp-drsub-title.is-done { color: var(--text-faint); text-decoration: line-through; }
.pp-drsub-x { flex: none; color: var(--text-faint); }
.pp-subadd { display: flex; align-items: center; gap: 4px; }
.pp-subadd-ic { flex: none; width: var(--tap); display: inline-flex; justify-content: center; color: var(--text-faint); }
.pp-subadd-in { flex: 1; min-width: 0; }
.pp-subadd-go { flex: none; padding: 0 12px; font-size: 13.5px; }

.pp-newclient { display: flex; flex-wrap: wrap; gap: 6px; }
.pp-newclient .pp-input { flex: 1 1 100%; }
.pp-newclient .pp-btn { flex: 1; }
.pp-drawer-meta { margin: 0; font-size: 13px; line-height: 1.6; color: var(--text-faint); }
.pp-drawer-foot { display: flex; gap: 10px; padding: 12px 20px calc(12px + var(--safe-bottom)); border-top: 1px solid var(--line); }
.pp-drawer-foot .pp-btn-primary { margin-left: auto; min-width: 120px; }
.pp-seg-in_progress.is-on { background: var(--accent-hi); }

/* ---------- login ---------- */
.pp-login { min-height: 100dvh; display: flex; align-items: center; justify-content: center; padding: calc(var(--safe-top) + 24px) 18px calc(var(--safe-bottom) + 24px); }
.pp-login-card { width: 100%; max-width: 410px; padding: 30px 26px; border-radius: 18px; background: var(--surface); border: 1px solid var(--line); box-shadow: var(--shadow-lg); }
.pp-login-title { margin: 16px 0 6px; font-family: var(--font-display); font-size: 30px; font-weight: 600; letter-spacing: -.02em; }
.pp-login-sub { margin: 0 0 20px; color: var(--text-dim); line-height: 1.45; }
.pp-login-form { display: flex; flex-direction: column; }
.pp-login-form .pp-lbl { margin-top: 12px; }
.pp-passrow { display: flex; gap: 6px; }
.pp-showpass { flex: none; min-width: 64px; }
.pp-login-error { margin: 14px 0 0; padding: 10px 12px; border-radius: var(--radius-sm); background: var(--red-soft); color: var(--text); font-size: 14px; }
.pp-login-go { margin-top: 18px; width: 100%; font-size: 15.5px; }
.pp-login-go + .pp-login-go { margin-top: 8px; }

/* ---------- pull to refresh (phone) ---------- */
.pp-ptr { position: fixed; left: 50%; top: calc(var(--safe-top) + 6px); z-index: 90; width: 38px; height: 38px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center; background: var(--surface-2); border: 1px solid var(--accent-line);
  color: var(--accent-hi); box-shadow: var(--shadow-sm); opacity: 0; transform: translate(-50%, -150%); pointer-events: none; }
.pp-ptr.is-ready { border-color: var(--accent-hi); }
.pp-ptr.is-spin svg { animation: pp-spin .7s linear infinite; }
@keyframes pp-spin { to { transform: rotate(360deg); } }

/* ---------- hover (mouse only, never sticky on touch) ---------- */
@media (hover: hover) and (pointer: fine) {
  .pp-btn:hover:not(:disabled) { border-color: var(--accent-line); }
  .pp-btn-primary:hover:not(:disabled) { background: var(--accent-hi); border-color: var(--accent-hi); }
  .pp-view:hover:not(.is-on), .pp-chipbtn:hover { border-color: var(--accent-line); color: var(--text); }
  .pp-card:hover { border-color: var(--line-2); background: var(--surface-3); }
  .pp-card.is-late:hover { border-left-color: var(--red); }
  .pp-status:hover .pp-status-ring { border-color: var(--accent-hi); }
  .pp-menu-item:hover, .pp-iconbtn:hover { background: var(--surface-3); }
  .pp-seg-btn:hover:not(.is-on) { color: var(--text); }
  .pp-subsbtn:hover { color: var(--text); }
  .pp-substep:hover { background: var(--surface-3); color: var(--text); }
  .pp-substep:hover .pp-substep-box:not(.is-done) { border-color: var(--text-dim); }
  .pp-subtick:hover .pp-substep-box:not(.is-done) { border-color: var(--text-dim); }
}

/* ---------- phone ---------- */
@media (max-width: 760px) {
  .pp-top { padding: calc(var(--safe-top) + 6px) 12px 6px; gap: 8px; min-height: 56px; }
  .pp-tab { min-height: var(--tap); padding: 0 11px; font-size: 14.5px; }
  .pp-syncnote { font-size: 12px; }
  .pp-userchip-name { display: none; }
  .pp-userchip { padding: 0 5px; }
  .pp-demo { padding: 8px 14px; }
  .pp-main { padding: 16px 14px calc(40px + var(--safe-bottom)); }
  .pp-h1 { font-size: 27px; }
  .pp-sub { font-size: 14px; }
  .pp-views { margin: 0 -14px 12px; padding: 0 14px 2px; }
  /* A step reads as smaller through its type and the rail it hangs off, never through a
     tap target you have to aim at. The row stays a full 44 on a phone. */
  .pp-substep { min-height: var(--tap); font-size: 13.5px; }
  /* Whose list, category and due date share one line (Shadi, Sep 21). Three controls
     across 375px is tight, so the arrow zone and the side padding come in and the
     labels are shortened rather than dropping the font under 16px, which is what stops
     iOS zooming the page the moment you tap a select. */
  .pp-qadd { grid-template-columns: 1.09fr 1.09fr 0.82fr; gap: 7px; }
  .pp-qadd-title, .pp-qadd-go { grid-column: 1 / -1; }
  .pp-qadd .pp-select { padding-left: 9px; padding-right: 22px; background-position: calc(100% - 13px) 52%, calc(100% - 9px) 52%; }
  .pp-qadd .pp-select.pp-qadd-cat { padding-left: 6px; padding-right: 18px; background-position: calc(100% - 11px) 52%, calc(100% - 7px) 52%; }
  .pp-qadd-due { padding: 0 8px; gap: 4px; min-width: 0; }
  .pp-cols { grid-template-columns: 1fr; gap: 10px; }
  .pp-sec { padding: 8px; }
  .pp-sec-head { position: sticky; top: calc(var(--safe-top) + 56px); z-index: 5; background: var(--surface); border-radius: 8px; }
  .pp-cols .pp-sec-list, .pp-side .pp-sec-list { min-height: 0; }
  .pp-take { min-height: var(--tap); }

  .pp-side.is-compact .pp-side-row { gap: 8px; margin-bottom: 8px; }
  .pp-side.is-compact .pp-sec { padding: 6px; }
  .pp-side.is-compact .pp-sec-head { position: static; padding: 2px 2px 6px; min-height: 26px; flex-wrap: wrap; row-gap: 0; }
  .pp-side.is-compact .pp-sec-toggle { min-height: var(--tap); }
  .pp-side.is-compact .pp-sec-label { font-size: 11.5px; letter-spacing: .03em; }
  .pp-side.is-compact .pp-sec-ct { font-size: 11.5px; }
  .pp-side.is-compact .pp-sec-list { gap: 6px; }
  .pp-side.is-compact .pp-empty { padding: 10px 4px; font-size: 12px; }
  .pp-side.is-compact .pp-side-person { flex-wrap: wrap; gap: 2px 8px; }
  .pp-side.is-compact .pp-side-name { font-size: 19px; }
  .pp-side.is-compact .pp-addfor { margin-left: 0; width: 100%; }

  .pp-drawer { width: 100%; top: auto; height: 100dvh; border-left: 0; transform: translateY(104%); }
  .pp-drawer-body { padding: 16px; }
  .pp-drawer-foot { padding: 10px 16px calc(10px + var(--safe-bottom)); }
  .pp-fld-2 { grid-template-columns: 1fr; }
  .pp-flash { bottom: calc(16px + var(--safe-bottom)); }

  .pp-clients { display: block; }
  .pp-cprofile { padding: 0; border: 0; background: transparent; gap: 20px; }
  .pp-cgrid, .pp-contacts { grid-template-columns: 1fr; }
  .pp-cname { font-size: 21px; }
  .pp-ctools { flex-wrap: wrap; }
  .pp-csearch { flex: 1 1 100%; }
  .pp-cadd { flex: 1; }
  .pp-ctask-add { flex-wrap: wrap; }
  .pp-ctask-title { flex: 1 1 100%; }
  .pp-ctask-go { flex: 1; }
}

/* =====================================================================
   DEPTH + MOTION (direction preview layer)
   One elevated surface, lit from above. Panels recede, cards advance.
   ===================================================================== */

html, body { background: var(--bg); }

/* page + panels recede */
.pp-main { padding-top: 26px; overflow-x: clip; }
.pp-h1 { font-size: 34px; letter-spacing: -.025em; }
.pp-sub { font-size: 14px; color: var(--text-dim); }

.pp-sec {
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 8px 8px 10px;
}
.pp-sec-head { min-height: 38px; padding: 2px 6px 10px; }
.pp-sec-head.pp-sec-toggle { min-height: var(--tap); }
.pp-sec-label { font-size: 11.5px; letter-spacing: .07em; color: var(--text-dim); }
.pp-sec-ct { margin-left: auto; font-size: 12px; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-sec-chev { margin-left: 0; }
.pp-sec-list { gap: 8px; }

/* the one elevated surface */
.pp-card {
  background: var(--surface-2);
  border: 1px solid var(--card-line);
  border-radius: var(--radius-card);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
  transition: transform .2s var(--ease), box-shadow .2s var(--ease), background .16s var(--ease), border-color .16s var(--ease), opacity .2s var(--ease);
}
.pp-card-title { font-size: 15.5px; font-weight: 550; line-height: 1.34; letter-spacing: -.005em; }
.pp-card-meta { margin-top: 7px; font-size: 12px; }
.pp-card.is-late { border-left: 3px solid var(--red); }
.pp-st-done { box-shadow: none; background: var(--panel); border-color: var(--line); opacity: .72; }

/* chips sit on the card, so they step up again */
.pp-tag, .pp-due-soon, .pp-due-far, .pp-view-ct { background: var(--surface-3); }
.pp-due { padding: 3px 9px 3px 7px; }
.pp-tag { padding: 3px 9px; }

/* controls: a lit top edge reads as a real key */
.pp-btn, .pp-input, .pp-select, .pp-duebtn, .pp-chipbtn, .pp-view, .pp-userchip, .pp-crow {
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl);
  transition: transform .16s var(--ease), box-shadow .16s var(--ease), background .16s var(--ease), border-color .16s var(--ease), color .16s var(--ease);
}
.pp-btn-ghost { box-shadow: none; }
.pp-btn-primary { box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-key); }
.pp-view.is-on { box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-key); }
.pp-seg { box-shadow: inset 0 1px 2px var(--inset-dark); }
.pp-seg-btn.is-on { box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-ctl); }

/* floating layers get real depth, not a flat rectangle */
.pp-drawer, .pp-menu, .pp-cal { box-shadow: var(--shadow-lg); }
.pp-drawer { border-left: 1px solid var(--line-2); }
.pp-drawer-head, .pp-drawer-foot { background: var(--panel); }

/* ---------- motion ---------- */
@media (prefers-reduced-motion: no-preference) {
  .pp-card:active { transform: scale(.988); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl); }
  .pp-btn:active:not(:disabled), .pp-view:active, .pp-chipbtn:active, .pp-seg-btn:active, .pp-userchip:active, .pp-crow:active { transform: scale(.97); }
  .pp-status:active .pp-status-ring { transform: scale(.88); }
  .pp-substep:active .pp-substep-box, .pp-subtick:active .pp-substep-box { transform: scale(.86); }
  .pp-status-ring { transition: border-color .2s var(--ease), background .2s var(--ease), transform .3s var(--spring); }
  .pp-page { animation: pp-fadein .28s var(--ease) both; }

  /* Switching view moves sideways, the same way the row of chips runs.
     The columns carry the motion, not fifteen separate cards. */
  .pp-viewbody .pp-sec, .pp-viewbody .pp-side-row > * { animation: pp-in-fwd .42s var(--ease) both; }
  .pp-viewbody.is-back .pp-sec, .pp-viewbody.is-back .pp-side-row > * { animation-name: pp-in-back; }
  .pp-viewbody .pp-cols .pp-sec:nth-child(2) { animation-delay: .05s; }
  .pp-viewbody .pp-cols .pp-sec:nth-child(3) { animation-delay: .1s; }
  .pp-viewbody .pp-side-row:nth-child(2) > * { animation-delay: .05s; }
  .pp-viewbody .pp-side-row:nth-child(3) > * { animation-delay: .09s; }
  .pp-viewbody .pp-side-row:nth-child(4) > * { animation-delay: .13s; }
  .pp-viewbody .pp-side-row > *:nth-child(2) { animation-delay: .04s; }
}
@keyframes pp-in-fwd { from { opacity: 0; transform: translate3d(26px, 0, 0); } to { opacity: 1; transform: none; } }
@keyframes pp-in-back { from { opacity: 0; transform: translate3d(-26px, 0, 0); } to { opacity: 1; transform: none; } }

@media (hover: hover) and (pointer: fine) {
  .pp-card:hover { background: var(--surface-2-hi); border-color: var(--line-2); box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-card-hi); transform: translateY(-1px); }
  .pp-btn:hover:not(:disabled), .pp-view:hover:not(.is-on) { box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-card); }
}

@media (max-width: 760px) {
  .pp-h1 { font-size: 29px; }
  .pp-sec { padding: 6px 6px 8px; }
  .pp-sec-head { background: var(--panel); }
}

/* ---------- ticking a task off ---------- */
.pp-status-ring .pp-ic path, .pp-substep-box .pp-ic path { stroke-dasharray: 24; stroke-dashoffset: 0; }
@media (prefers-reduced-motion: no-preference) {
  .pp-card.is-justdone .pp-status-ring { animation: pp-ring-pop .5s var(--spring) both; }
  .pp-substep-box.is-done .pp-ic path { animation: pp-draw .26s var(--ease) both; }
  .pp-card.is-justdone .pp-status-ring .pp-ic path { animation: pp-draw .32s var(--ease) .06s both; }
  .pp-card.is-justdone { animation: pp-settle .5s var(--ease) both; }
}
@keyframes pp-ring-pop { 0% { transform: scale(.55); } 58% { transform: scale(1.18); } 100% { transform: scale(1); } }
@keyframes pp-draw { from { stroke-dashoffset: 24; } to { stroke-dashoffset: 0; } }
@keyframes pp-settle { 0% { opacity: .35; } 100% { opacity: 1; } }

/* C - NIGHT GLASS ------------------------------------------------------ */

/* functional layer: the only glass in the app */
.pp-top {
  background: var(--glass);
  -webkit-backdrop-filter: blur(26px) saturate(1.7);
  backdrop-filter: blur(26px) saturate(1.7);
  border-bottom: 1px solid var(--glass-line);
  box-shadow: inset 0 1px 0 var(--glass-edge);
}
.pp-demo {
  background: var(--glass);
  -webkit-backdrop-filter: blur(20px) saturate(1.5);
  backdrop-filter: blur(20px) saturate(1.5);
  border-bottom: 1px solid var(--glass-line);
}
/* scroll edge effect: content fades where it meets the bar */
.pp-main::before {
  content: ""; position: fixed; left: 0; right: 0; height: 22px; z-index: 20; pointer-events: none;
  top: calc(var(--safe-top) + 60px);
  background: linear-gradient(var(--fade-top), var(--fade-none));
}
.pp-drawer, .pp-menu, .pp-cal {
  background: var(--glass);
  -webkit-backdrop-filter: blur(34px) saturate(1.6);
  backdrop-filter: blur(34px) saturate(1.6);
  border-color: var(--glass-line);
  box-shadow: inset 0 1px 0 var(--glass-edge), var(--shadow-lg);
}
.pp-drawer-head, .pp-drawer-foot { background: transparent; }

/* content layer stays opaque: glass never touches a card */
.pp-card { -webkit-backdrop-filter: none; backdrop-filter: none; }

/* green is reserved for done */
.pp-st-done .pp-status-ring { border-color: var(--done); background: var(--done); color: var(--done-ink); }
.pp-sec-done .pp-sec-mark { border-color: var(--done); background: var(--done); }
.pp-due-now { color: var(--accent-hi); background: var(--accent-soft); }

/* reduce transparency and reduce motion both get an opaque fallback */
@media (prefers-reduced-transparency: reduce) {
  .pp-top, .pp-demo, .pp-drawer, .pp-menu, .pp-cal { background: var(--surface-2); -webkit-backdrop-filter: none; backdrop-filter: none; }
  .pp-main::before { display: none; }
}

/* C reserves colour for four meanings only: act (gold), done (green), late (orange or red on an
   edge), personal (violet). People and due dates are told in words and weight, not hue. */
.pp-owner-u0, .pp-owner-u1 { color: var(--text); background: var(--surface-3); font-weight: 650; }
.pp-owner-pool { color: var(--text-faint); background: transparent; }
.pp-owner-both { color: var(--text); background: var(--surface-3); font-weight: 750; box-shadow: inset 0 0 0 1px var(--line-2); }
.pp-due-now { color: var(--text); background: var(--surface-3); font-weight: 700; }
.pp-due-soon, .pp-due-far { color: var(--text-dim); background: var(--surface-3); font-weight: 600; }
.pp-newdot { background: var(--accent-hi); }

/* ---------- personal tasks: violet (yellow until Nov 6 2026, too close to the gold) ---------- */
/* A personal task carries a violet edge and a violet chip. Late still wins the edge,
   because a deadline is the more urgent of the two, and the chip still says the rest.
   It only means this is his own life rather than the business. */
.pp-card.is-personal { border-left: 3px solid var(--personal); }
.pp-card.is-personal.is-late { border-left-color: var(--red); }
.pp-personal-tag { color: var(--personal); background: var(--personal-soft); font-weight: 650; }
.pp-both-tag { color: var(--both); background: var(--both-soft); font-weight: 650; display: inline-flex; align-items: center; gap: 4px; }
/* Personal work in progress rings yellow, not red: the ring tells you whose work it
   is at the same moment it tells you the task is running (Shadi, Sep 21). Done still
   rings green, because done is done whoever it belongs to. */
.pp-card.is-personal.pp-st-in_progress .pp-status-ring {
  border-color: var(--personal);
  background: linear-gradient(90deg, var(--personal) 50%, transparent 50%);
}

/* Personal reads yellow wherever it is picked, including inside a <select>. */
.pp-select.is-own { color: var(--personal); }
.pp-cat-hint { margin: 6px 2px 0; font-size: 12.5px; color: var(--personal); }

/* ---------- filters ---------- */
/* The view switcher is one line, the chips are the next: seven chips plus the rail do
   not share a line on any screen worth designing for. */
.pp-viewrow { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; margin-bottom: 18px; }
.pp-viewrow .pp-views { margin-bottom: 0; max-width: 100%; }

/* position: relative because railWarp measures each chip with offsetLeft, which is only
   rail-relative when the rail is the offset parent. The view bar gets this from the pill;
   without it here the curl is right only while the rail happens to start at x = 0. */
.pp-filters { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 7px; }
.pp-fchip {
  flex: none; min-height: 38px; padding: 0 14px; border-radius: 999px;
  display: inline-flex; align-items: center;
  border: 1px solid var(--line-2); background: var(--surface-2); color: var(--text-dim);
  font-size: 13.5px; font-weight: 600; white-space: nowrap;
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl);
  transition: background .16s var(--ease), border-color .16s var(--ease), color .16s var(--ease), transform .16s var(--ease);
}
/* The label is what bends at the ends of the rail; transform does nothing to an inline
   box, so it has to be inline-flex, and it must never be what defines the tap target. */
.pp-fchip-in { display: inline-flex; align-items: center; will-change: transform; }
.pp-fchip.is-on { color: var(--accent-hi); border-color: var(--accent-line); background: var(--accent-soft); }
.pp-fchip-own.is-on { color: var(--personal); border-color: var(--personal-line); background: var(--personal-soft); }
.pp-fclear {
  flex: none; min-height: 38px; padding: 0 10px; border: 0; background: transparent;
  color: var(--accent-hi); font-size: 13.5px; font-weight: 600;
}
.pp-fclear:disabled { opacity: 0; pointer-events: none; }
@media (prefers-reduced-motion: no-preference) { .pp-fchip:active { transform: scale(.96); } }

@media (max-width: 760px) {
  .pp-viewrow { gap: 10px; margin-bottom: 14px; }
  .pp-viewrow .pp-views { align-self: stretch; }
  /* One rail that scrolls, bleeding to the screen edges like the view bar above it. */
  .pp-filters {
    align-self: stretch; flex-wrap: nowrap; gap: 8px;
    margin: 0 -14px; padding: 0 14px 2px;
    overflow-x: auto; overflow-y: hidden; scrollbar-width: none; -webkit-overflow-scrolling: touch;
  }
  .pp-filters::-webkit-scrollbar { display: none; }
  .pp-fchip { min-height: var(--tap); padding: 0 15px; font-size: 14.5px; }
  /* Nothing to clear means no dead space at the end of the scroll. */
  .pp-fclear { min-height: var(--tap); }
  .pp-fclear:disabled { display: none; }
}

/* ---------- the view switcher: one piece of glass, one pill that slides ---------- */
.pp-views {
  position: relative; display: inline-flex; gap: 0; padding: 4px; margin-bottom: 18px;
  max-width: 100%; overflow-x: auto; overflow-y: hidden; scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  border-radius: 999px; border: 1px solid var(--glass-line);
  background: var(--glass);
  -webkit-backdrop-filter: blur(24px) saturate(1.7);
  backdrop-filter: blur(24px) saturate(1.7);
  box-shadow: inset 0 1px 0 var(--glass-edge), var(--shadow-card);
}
.pp-views::-webkit-scrollbar { display: none; }
/* The label carries the bend. transform does nothing on an inline box, so it has
   to be inline-flex, and it must never be the element that defines the tap target. */
.pp-view-in { display: inline-flex; align-items: center; gap: 8px; will-change: transform; }
.pp-view {
  position: relative; z-index: 1; flex: none; padding: 0 15px;
  background: transparent; border: 0; box-shadow: none; color: var(--text-dim);
  transition: color .22s var(--ease);
}
.pp-view.is-on { background: transparent; border-color: transparent; color: var(--text); box-shadow: none; }
.pp-view-pill {
  position: absolute; left: 0; top: 4px; height: calc(100% - 8px); border-radius: 999px;
  pointer-events: none;
  background: linear-gradient(180deg, var(--g-lift), var(--g-tint));
  -webkit-backdrop-filter: blur(9px) saturate(2) brightness(1.5);
  backdrop-filter: blur(9px) saturate(2) brightness(1.5);
  border: 1px solid var(--g-tint-rim);
  box-shadow:
    inset 0 1px 0 var(--g-spec),
    inset 0 -1px 0 var(--g-under),
    inset 0 0 16px var(--g-inner),
    0 2px 10px var(--g-cast);
}
@media (prefers-reduced-motion: no-preference) {
  .pp-view-pill { transition: transform .44s var(--spring), width .44s var(--spring); }
}
.pp-view-ct { background: var(--surface-3); color: var(--text-dim); }
.pp-view.is-on .pp-view-ct { background: var(--accent); color: var(--on-accent); }
.pp-view .pp-newdot { box-shadow: none; }

@media (hover: hover) and (pointer: fine) {
  .pp-view:hover:not(.is-on) { color: var(--text); box-shadow: none; background: transparent; }
}
@media (max-width: 760px) {
  .pp-views { margin: 0 0 14px; padding: 4px; }
  .pp-view { padding: 0 13px; font-size: 14px; }
}

/* ---------- dragging a card ----------
   While a drag is in flight nothing else may move: no hover lift on the cards the
   cursor passes over, no easing on positions. The only things that change are the
   card you picked up and the section you are over. */
body.pp-dragging .pp-card,
body.pp-dragging .pp-btn,
body.pp-dragging .pp-view { transition: none; }
body.pp-dragging .pp-card:hover {
  transform: none;
  background: var(--surface-2);
  border-color: var(--card-line);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
}
body.pp-dragging .pp-card.is-late:hover { border-left-color: var(--red); }
/* The one frame the browser photographs to make what you carry. A Completed card
   sits dimmed and panel-coloured in the list, so without this you carry something
   that looks like the section, not the task. */
.pp-card.is-dragimage {
  /* No transition: the photograph is taken in this same frame, so an easing
     background or opacity would be caught halfway and the card would still look dimmed. */
  transition: none;
  opacity: 1;
  background: var(--surface-2);
  border-style: solid;
  border-color: var(--line-2);
  box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-card-hi);
}
.pp-card.is-dragging,
body.pp-dragging .pp-card.is-dragging:hover {
  opacity: .34;
  box-shadow: none;
  background: var(--panel);
  border-style: dashed;
}
.pp-sec { transition: border-color .18s var(--ease), background .18s var(--ease), box-shadow .18s var(--ease); }
.pp-sec.is-drop {
  border-color: var(--accent-line);
  background: var(--accent-soft-2);
  box-shadow: inset 0 0 0 1px var(--accent-line), var(--shadow-card);
}

/* ---------- phone section bar (four sections do not fit across a 375px top bar) ---------- */
.pp-nav {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; display: flex; gap: 2px;
  padding: 5px 8px calc(5px + var(--safe-bottom));
  background: var(--glass);
  -webkit-backdrop-filter: blur(26px) saturate(1.7);
  backdrop-filter: blur(26px) saturate(1.7);
  border-top: 1px solid var(--glass-line);
  box-shadow: inset 0 1px 0 var(--glass-edge);
}
.pp-nav .pp-tab {
  flex: 1; min-height: 50px; padding: 4px 2px; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 3px; font-size: 11px; font-weight: 650; letter-spacing: .01em; border-radius: 10px; color: var(--text-faint);
}
.pp-nav .pp-tab.is-on { background: transparent; color: var(--accent-hi); }
.pp-nav .pp-tab .pp-ic { opacity: .9; }

/* ---------- liquid glass section bars (Sep 28, copied from the Sworn Record site) ----------
   The computer's top bar and the phone's bottom bar stop being a near-solid block: the page
   now shows through, softened, with the lit rim doing the work. The scroll-edge fade under
   the top bar goes, because it hid the very content the glass is meant to show. A faint
   shadow on the bar's type keeps it readable over whatever passes behind. */
.pp-top,
.pp-nav {
  background:
    linear-gradient(180deg, var(--lg-hi) 0%, var(--lg-mid) 40%, var(--lg-clear) 62%, var(--lg-low) 100%),
    var(--lg-tint);
  -webkit-backdrop-filter: blur(5px) saturate(1.4) brightness(0.95);
  backdrop-filter: blur(5px) saturate(1.4) brightness(0.95);
}
.pp-top {
  border-bottom: 1px solid var(--lg-line);
  box-shadow: inset 0 1px 0 var(--lg-rim), 0 6px 18px -12px var(--lg-cast);
}
.pp-nav {
  border-top: 1px solid var(--lg-line);
  box-shadow: inset 0 1px 0 var(--lg-rim), 0 -6px 18px -12px var(--lg-cast);
}
.pp-main::before { display: none; }
.pp-top .pp-tab, .pp-top-name, .pp-nav .pp-tab { text-shadow: 0 1px 3px var(--lg-ink); }
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .pp-top, .pp-nav { background: var(--glass); }
}

/* The lens under the picked section: the view switcher's tinted glass (blur, brightness,
   saturate, lit rim), one per bar, sliding between sections instead of jumping. js/app.jsx
   places it; js/motion.js stretches it in flight and lets a phone drag it. */
.pp-tabs { position: relative; }
.pp-tabs .pp-tab, .pp-nav .pp-tab { position: relative; z-index: 1; }
.pp-tabs .pp-tab.is-on { background: transparent; }
.pp-lens { position: absolute; left: 0; top: 0; z-index: 0; pointer-events: none; }
.pp-lens-in {
  position: absolute; inset: 0; border-radius: 999px;
  background: linear-gradient(180deg, var(--g-lift), var(--g-tint));
  -webkit-backdrop-filter: blur(9px) saturate(2) brightness(1.5);
  backdrop-filter: blur(9px) saturate(2) brightness(1.5);
  border: 1px solid var(--g-tint-rim);
  box-shadow:
    inset 0 1px 0 var(--g-spec),
    inset 0 -1px 0 var(--g-under),
    inset 0 0 16px var(--g-inner),
    0 2px 10px var(--g-cast);
}
.pp-nav .pp-lens-in { inset: 0 1px; border-radius: 18px; }
.pp-tab { transition: color .25s var(--ease); }
.pp-tabs .pp-tab.is-on, .pp-nav .pp-tab.is-on { color: var(--text); }
.pp-nav .pp-tab.is-on .pp-ic { color: var(--text); opacity: 1; }
.pp-nav.is-lensdrag .pp-tab.is-on { color: var(--text-faint); }
.pp-nav.is-lensdrag .pp-tab.is-on .pp-ic { color: inherit; opacity: .9; }
.pp-nav.is-lensdrag .pp-tab.is-lenshot, .pp-nav.is-lensdrag .pp-tab.is-lenshot .pp-ic { color: var(--text); }
.pp-nav { touch-action: none; }
@media (prefers-reduced-motion: no-preference) {
  /* a softer spring than --spring: that one overshoots by about a tenth of the trip, which
     on a jump across the whole bar lands the lens half on the next section */
  .is-lensready > .pp-lens { transition: transform .52s cubic-bezier(.3, 1.22, .5, 1), width .52s cubic-bezier(.3, 1.22, .5, 1), height .3s var(--ease); }
  .pp-lens-in { transition: transform .22s var(--spring); }
}
/* held under a finger it lifts, and follows with no lag */
.pp-nav.is-lensdrag > .pp-lens { transition: none; }
.pp-nav.is-lensdrag .pp-lens-in { transform: scale(1.16, 1.1); }
@media (prefers-reduced-transparency: reduce) {
  .pp-lens-in { background: var(--accent-soft); -webkit-backdrop-filter: none; backdrop-filter: none; }
}
@media (prefers-reduced-transparency: reduce) {
  .pp-top, .pp-nav { background: var(--surface-2); -webkit-backdrop-filter: none; backdrop-filter: none; }
}


/* ---------- prompter (a view inside Content, ported from the Agents Lens tracker Sep 22 2026) ----------
   .pp-pr-sec is a view of the Content page, not a page of its own: six top level tabs was
   one too many on a phone. It is a composer and a list of hairline rows, no boxes. The
   reading overlay is a separate world: full-bleed true black, portalled to <body>. Scripts
   are shared; how you READ (speed, mirror, text size) is this device's own localStorage,
   because mirroring depends on the rig a device is sitting in. */
/* It fills the app's own 1440 column like every other section. It used to cap at 860px
   with no auto margins, which pinned the whole thing to the left of a wide screen and left
   the right half empty (Shadi, Sep 22: "it doesn't even cover the whole screen, it's just
   stuck to the left"). Centring alone would only have fixed half of that, so the two jobs
   this view does now sit side by side. */
.pp-pr-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 30px; align-items: start; }
.pp-pr-lib, .pp-pr-make { min-width: 0; }
.pp-pr-make .pp-pr-composer { margin-top: 12px; }
.pp-pr-make textarea.pp-pr-paste { min-height: 260px; }
/* The empty state is one centred column: there is no library to sit beside yet. */
.pp-pr-composer.is-hero { max-width: 640px; margin: 0 auto; }
.pp-pr-composer.is-hero .pp-pr-composer-foot { justify-content: center; }
@media (max-width: 1040px) {
  .pp-pr-cols { grid-template-columns: minmax(0, 1fr); gap: 22px; }
  .pp-pr-make textarea.pp-pr-paste { min-height: 150px; }
}

.pp-pr-composer { display: flex; flex-direction: column; gap: 10px; }
.pp-pr-composer.is-hero { padding: 18px 0 10px; }
.pp-pr-hero { text-align: center; margin-bottom: 16px; }
.pp-pr-hero-h { margin: 0; font-family: var(--font-display); font-size: 30px; font-weight: 600; letter-spacing: -.02em; }
.pp-pr-hero-s { max-width: 460px; margin: 8px auto 0; font-size: 14px; line-height: 1.6; color: var(--text-dim); }
textarea.pp-pr-paste { width: 100%; min-height: 110px; resize: vertical; line-height: 1.65; }
.pp-pr-composer.is-hero textarea.pp-pr-paste { min-height: 210px; }
.pp-pr-composer-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: var(--tap); }
.pp-pr-saved {
  display: inline-flex; align-items: center; gap: 6px; min-width: 0;
  font-size: 12.5px; font-weight: 600; color: var(--text-faint);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pp-pr-saved.is-on { color: var(--done); }
.pp-pr-new { flex: none; gap: 6px; display: inline-flex; align-items: center; }

/* the saved list: hairline rows, the way the tracker had it, no cards */
.pp-pr-list-head { display: flex; align-items: baseline; gap: 8px; min-height: 30px; padding: 6px 4px 8px; border-bottom: 1px solid var(--line-2); }
.pp-pr-row { display: flex; align-items: center; gap: 8px; border-bottom: 1px solid var(--line); }
.pp-pr-row-main {
  flex: 1; min-width: 0; min-height: var(--tap); display: flex; flex-direction: column; justify-content: center; gap: 3px;
  padding: 8px 8px; border: 0; background: transparent; text-align: left; border-radius: var(--radius-sm);
  transition: background .14s var(--ease);
}
/* Wide enough for one line: the name leads and the numbers sit at the end of the row,
   which is what the extra width is FOR. Under 760 they stack, because truncating the
   name of a script to make room for a word count is the wrong trade. */
@media (min-width: 761px) {
  .pp-pr-row-main { flex-direction: row; align-items: baseline; gap: 14px; }
  .pp-pr-row-title { flex: 1; min-width: 0; }
  .pp-pr-row-meta { flex: none; text-align: right; }
}
.pp-pr-row-title { font-size: 15px; font-weight: 600; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-pr-row-meta { font-size: 12.5px; color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-pr-edit { flex: none; }
@media (hover: hover) and (pointer: fine) {
  .pp-pr-row-main:hover { background: var(--surface-2); }
  .pp-pr-row-main:hover .pp-pr-row-title { color: var(--accent-hi); }
  .pp-pr-edit:hover { color: var(--text); background: var(--surface-2); }
}
textarea.pp-pr-edit-text { min-height: 220px; line-height: 1.6; }

/* ---------- the reading overlay ---------- */
body.pp-pr-open { overflow: hidden; }
.pp-pr-stage { position: fixed; inset: 0; z-index: 9000; background: var(--pr-stage); overflow: hidden; touch-action: none; }
/* the ONLY mirrored layer: the engine writes scaleX/scaleY inline, and the text, the
   countdown and the eye line flip together while the sibling HUD never transforms */
.pp-pr-flip { position: absolute; inset: 0; }
.pp-pr-scroller { position: absolute; left: 0; right: 0; top: 0; will-change: transform; transition: opacity .3s ease; }
/* lead in and lead out, so line one starts at the eye line and the last line can clear it */
.pp-pr-lead { height: 33vh; }
.pp-pr-tail { height: 67vh; }
.pp-pr-text {
  margin: 0 7vw;
  font-size: calc(clamp(34px, 8.5vw, 60px) * var(--pp-pr-scale, 1));
  line-height: 1.45; font-weight: 600; letter-spacing: -.01em; color: var(--text);
  white-space: pre-wrap; overflow-wrap: break-word;
}
.pp-pr-eyeline {
  position: absolute; left: 1.6vw; top: 33vh; width: 3.4vw; min-width: 22px; height: 3px;
  border-radius: 2px; background: var(--accent-hi); opacity: .4; pointer-events: none;
}
.pp-pr-ph-countdown .pp-pr-scroller { opacity: .18; }
/* Waiting for Start: the words stay readable but step back, so Start reads as the one thing to press */
.pp-pr-ph-ready .pp-pr-scroller { opacity: .32; }
.pp-pr-count {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display); font-size: clamp(120px, 34vw, 260px); font-weight: 600;
  color: var(--accent-hi); pointer-events: none;
  animation: pp-pr-pop .8s ease-out both;
}
@keyframes pp-pr-pop {
  0% { opacity: 0; transform: scale(1.26); }
  22% { opacity: 1; transform: scale(1); }
  78% { opacity: 1; transform: scale(1); }
  100% { opacity: .12; transform: scale(.92); }
}

/* HUD: never transformed, never mirrored, and padded for the phone's safe areas */
.pp-pr-hud {
  position: absolute; inset: 0; pointer-events: none;
  display: flex; flex-direction: column; justify-content: space-between;
  padding: calc(var(--safe-top) + 14px) calc(env(safe-area-inset-right, 0px) + 16px)
           calc(var(--safe-bottom) + 14px) calc(env(safe-area-inset-left, 0px) + 16px);
  transition: opacity .35s ease;
}
.pp-pr-hud > * { pointer-events: auto; }
.pp-pr-hud.is-hidden { opacity: 0; }
.pp-pr-hud.is-hidden > * { pointer-events: none; }
.pp-pr-progress { position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--pr-rail); pointer-events: none; }
.pp-pr-progress-fill { width: 0%; height: 100%; background: var(--accent-hi); opacity: .9; }
.pp-pr-top { display: flex; align-items: center; gap: 12px; }
.pp-pr-name {
  min-width: 0; flex: 1; font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pp-pr-time { flex: none; font-size: 12.5px; font-weight: 700; color: var(--text-dim); font-variant-numeric: tabular-nums; }
.pp-pr-exit {
  flex: none; min-height: var(--tap); display: inline-flex; align-items: center; gap: 7px; padding: 0 16px;
  border-radius: 999px; background: var(--pr-hud); border: 1px solid var(--pr-hud-line); color: var(--text);
  font-size: 14px; font-weight: 600;
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
}
.pp-pr-bottom { display: flex; flex-direction: column; align-items: center; gap: 10px; }
/* Waiting at the top: a Start button in the middle of the HUD (Oct 14). The row itself lets taps
   through to the stage; only the button takes them. */
.pp-pr-hud > .pp-pr-mid { flex: 1; display: flex; align-items: center; justify-content: center; pointer-events: none; }
.pp-pr-go {
  pointer-events: auto; display: inline-flex; align-items: center; gap: 10px; min-height: 64px; padding: 0 30px 0 24px;
  border-radius: 999px; border: 1px solid var(--accent-line); background: var(--accent); color: var(--on-accent);
  font-size: 20px; font-weight: 700; box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-key);
}
.pp-pr-hud.is-hidden .pp-pr-go { pointer-events: none; }
@media (prefers-reduced-motion: no-preference) {
  .pp-pr-go { animation: pp-pr-go-in .32s var(--spring) both; }
  @keyframes pp-pr-go-in { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: none; } }
}
.pp-pr-group {
  display: flex; align-items: center; gap: 8px; max-width: 100%;
  padding: 7px 11px; border-radius: 999px;
  background: var(--pr-hud); border: 1px solid var(--pr-hud-line);
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
}
.pp-pr-ctl {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-width: var(--tap); min-height: var(--tap); padding: 0 13px; border-radius: 999px;
  background: transparent; border: 1px solid var(--line-2); color: var(--text-dim);
  font-size: 13.5px; font-weight: 700; white-space: nowrap;
  transition: color .15s var(--ease), border-color .15s var(--ease), background .15s var(--ease);
}
.pp-pr-ctl:disabled { opacity: .35; pointer-events: none; }
.pp-pr-font { font-variant-numeric: tabular-nums; }
.pp-pr-wide { padding: 0 14px; }
/* the mirror toggles fill solid when on: they have to be unmissable at arm's length */
.pp-pr-ctl.pp-pr-toggle.is-on { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }
.pp-pr-speed { min-width: 30px; text-align: center; font-size: 13px; font-weight: 700; color: var(--accent-hi); font-variant-numeric: tabular-nums; }
.pp-pr-slider {
  -webkit-appearance: none; appearance: none; width: min(44vw, 300px); height: 4px; border-radius: 2px;
  background: var(--pr-track); outline: none; touch-action: none;
}
.pp-pr-slider::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none; width: 26px; height: 26px; border-radius: 50%;
  background: var(--accent-hi); border: 0; box-shadow: 0 1px 6px var(--pr-thumb-cast);
}
.pp-pr-slider::-moz-range-thumb {
  width: 26px; height: 26px; border-radius: 50%; background: var(--accent-hi); border: 0;
}
@media (hover: hover) and (pointer: fine) {
  .pp-pr-ctl:hover { color: var(--text); border-color: var(--accent-line); background: var(--accent-soft); }
  .pp-pr-ctl.pp-pr-toggle.is-on:hover { background: var(--accent-hi); border-color: var(--accent-hi); color: var(--on-accent); }
  .pp-pr-exit:hover { border-color: var(--accent-line); }
}
@media (prefers-reduced-motion: reduce) {
  .pp-pr-count { animation: none; }
}
@media (max-width: 760px) {
  .pp-pr-hero-h { font-size: 25px; }
  /* The name is how you pick a script, so on a phone it gets a second line rather than
     an ellipsis. */
  .pp-pr-row-title { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .pp-pr-composer.is-hero { padding-top: 6px; }
  /* both control pills have to stay inside 375px */
  .pp-pr-group { gap: 6px; padding: 6px 8px; }
  .pp-pr-ctl { padding: 0 10px; gap: 5px; }
  .pp-pr-wide { padding: 0 11px; }
  .pp-pr-slider { width: 34vw; }
}


/* ---------- prompter remote (Oct 12): Go live on the phone, drive it from a computer ---------- */
/* phone: Go live sits in the HUD's top row (never in the mirrored layer) and hides with it */
.pp-pr-head { display: flex; flex-direction: column; gap: 8px; }
.pp-pr-livedot, .pp-prr-dot {
  flex: none; width: 9px; height: 9px; border-radius: 50%; background: var(--text-faint);
}
.pp-pr-golive.is-on { border-color: var(--red-line); }
.pp-pr-golive.is-on .pp-pr-livedot, .pp-prr-dot { background: var(--red); box-shadow: 0 0 0 4px var(--prr-live-glow); }
.pp-pr-livenote {
  align-self: flex-end; max-width: 100%; padding: 6px 12px; border-radius: 999px;
  background: var(--pr-hud); border: 1px solid var(--pr-hud-line); color: var(--text-dim);
  font-size: 13px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* computer: one row per live phone, above the library */
.pp-prr-offers { display: flex; flex-direction: column; gap: 10px; margin: 0 0 18px; }
.pp-prr-offer {
  display: flex; align-items: center; gap: 14px; padding: 12px 14px 12px 18px;
  border-radius: var(--radius); background: var(--w-card); border: 1px solid var(--red-line);
  box-shadow: var(--shadow-card);
}
.pp-prr-offer-text { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }
.pp-prr-offer-who { font-size: 15.5px; font-weight: 700; color: var(--text); }
.pp-prr-offer-what { font-size: 13.5px; color: var(--text-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-prr-offer-acts { flex: none; display: flex; align-items: center; gap: 8px; }
.pp-prr-sync { padding: 0 18px; }

/* the remote: a full-window overlay, the words behind, glass bars over them */
.pp-prr { position: fixed; inset: 0; z-index: 9000; background: var(--pr-stage); overflow: hidden; color: var(--text); }
.pp-prr-progress { position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--pr-rail); z-index: 3; }
.pp-prr-progress-fill { width: 0%; height: 100%; background: var(--accent-hi); }
.pp-prr-stage { position: absolute; inset: 0; overflow: hidden; }
.pp-prr-scroller { position: absolute; left: 0; right: 0; top: 0; will-change: transform; transition: opacity .3s ease; }
.pp-prr-lead { height: 38vh; }
.pp-prr-tail { height: 62vh; }
.pp-prr-text {
  max-width: 980px; margin: 0 auto; padding: 0 6vw;
  font-size: clamp(26px, 3.1vw, 44px); line-height: 1.45; font-weight: 600; letter-spacing: -.01em;
  white-space: pre-wrap; overflow-wrap: break-word;
}
.pp-prr-eyeline {
  position: absolute; left: 2vw; top: 38vh; width: 36px; height: 3px; border-radius: 2px;
  background: var(--accent-hi); opacity: .45; pointer-events: none;
}
.pp-prr-ph-countdown .pp-prr-scroller { opacity: .18; }
.pp-prr-count {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none;
  font-family: var(--font-display); font-size: clamp(110px, 18vw, 220px); font-weight: 600; color: var(--accent-hi);
  animation: pp-pr-pop .8s ease-out both;
}
.pp-prr-big {
  position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
}
.pp-prr-word {
  font-family: var(--font-display); font-size: clamp(64px, 11vw, 150px); font-weight: 600; line-height: 1;
  color: var(--text); animation: pp-pr-pop .8s ease-out both;
}
.pp-prr-ph-countdown .pp-prr-word { color: var(--accent-hi); }
.pp-prr-ph-scrolling .pp-prr-word, .pp-prr-ph-paused .pp-prr-word, .pp-prr-ph-ready .pp-prr-word, .pp-prr-ph-done .pp-prr-word { animation: none; }
.pp-prr-bigtime { font-size: 17px; font-weight: 600; color: var(--text-dim); font-variant-numeric: tabular-nums; }

.pp-prr-head {
  position: absolute; top: 0; left: 0; right: 0; z-index: 2; display: flex; align-items: center; gap: 14px;
  padding: calc(var(--safe-top) + 16px) 22px 34px;
  background: linear-gradient(to bottom, var(--prr-shade) 55%, var(--prr-shade-none));
}
.pp-prr-head-text { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 1px; }
.pp-prr-who { font-size: 15px; font-weight: 700; }
.pp-prr-title {
  font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pp-prr-time { flex: none; font-size: 14px; font-weight: 700; color: var(--text-dim); font-variant-numeric: tabular-nums; }
.pp-prr-showseg { flex: none; }
.pp-prr-showseg .pp-seg-btn { padding: 0 14px; white-space: nowrap; }
.pp-prr-unsync { flex: none; }
.pp-prr.is-lost .pp-prr-dot, .pp-prr.is-ended .pp-prr-dot { background: var(--text-faint); box-shadow: none; }

.pp-prr-notice {
  position: absolute; left: 50%; top: 44%; transform: translate(-50%, -50%); z-index: 2;
  display: flex; flex-direction: column; align-items: center; gap: 12px; max-width: min(440px, 88vw);
  padding: 22px 26px; border-radius: var(--radius); text-align: center;
  background: var(--pr-hud); border: 1px solid var(--pr-hud-line);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
}
.pp-prr-notice b { font-size: 18px; }
.pp-prr-notice span { font-size: 14.5px; color: var(--text-dim); }
.pp-prr.is-lost .pp-prr-stage, .pp-prr.is-ended .pp-prr-stage { opacity: .35; }

.pp-prr-foot {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 12px;
  padding: 40px 18px calc(var(--safe-bottom) + 16px);
  background: linear-gradient(to top, var(--prr-shade) 60%, var(--prr-shade-none));
}
.pp-prr-ctls { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px; max-width: 100%; }
.pp-prr-group { flex-wrap: wrap; justify-content: center; }
.pp-pr-ctl.pp-prr-play { background: var(--accent); border-color: var(--accent); color: var(--on-accent); min-width: 104px; }
.pp-prr-pick { width: auto; max-width: 280px; }
.pp-prr-keys {
  display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 16px; font-size: 12.5px; color: var(--text-faint);
}
.pp-prr-keys kbd {
  display: inline-block; min-width: 20px; margin-right: 4px; padding: 1px 5px; border-radius: 5px; text-align: center;
  border: 1px solid var(--line-2); background: var(--surface-2); color: var(--text-dim); font: inherit; font-weight: 700;
}
@media (hover: hover) and (pointer: fine) {
  .pp-pr-ctl.pp-prr-play:hover { background: var(--accent-hi); border-color: var(--accent-hi); color: var(--on-accent); }
}
@media (prefers-reduced-motion: reduce) {
  .pp-prr-count, .pp-prr-word { animation: none; }
}
/* a touch screen has no keys to show, and a phone needs the bars to wrap */
@media (hover: none), (max-width: 760px) {
  .pp-prr-keys { display: none; }
}
@media (max-width: 760px) {
  .pp-prr-offer { flex-wrap: wrap; padding: 12px 14px; }
  .pp-prr-offer-acts { width: 100%; justify-content: flex-end; }
  .pp-prr-head { flex-wrap: wrap; gap: 10px; padding: calc(var(--safe-top) + 12px) 14px 26px; }
  .pp-prr-head-text { flex-basis: calc(100% - 90px); }
  .pp-prr-showseg { order: 3; flex: 1; }
  .pp-prr-unsync { order: 2; }
  .pp-prr-time { display: none; }
  .pp-prr-pick { max-width: 100%; width: 100%; }
}

/* ---------- notes (same layout as Notes in the tracker) ---------- */
.pp-notes-wrap { display: flex; gap: 16px; align-items: stretch; min-height: calc(100vh - 260px); }
.pp-notes-list {
  width: 280px; flex-shrink: 0; display: flex; flex-direction: column; gap: 10px; padding: 12px;
  border-radius: var(--radius); border: 1px solid var(--line); background: var(--panel);
}
.pp-notes-new { width: 100%; }
.pp-notes-items { display: flex; flex-direction: column; gap: 4px; min-height: 0; overflow-y: auto; }
.pp-notes-item {
  width: 100%; min-height: var(--tap); display: flex; flex-direction: column; align-items: flex-start; gap: 3px;
  padding: 9px 11px; text-align: left; border-radius: 10px; border: 1px solid transparent; background: transparent; color: var(--text);
  transition: background .14s var(--ease), border-color .14s var(--ease);
}
.pp-notes-item.is-on { border-color: var(--accent-line); background: var(--accent-soft-2); }
.pp-notes-it-title {
  display: flex; align-items: center; gap: 7px; max-width: 100%; font-family: var(--font-display); font-size: 15px; font-weight: 600;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pp-notes-it-title .pp-ic { flex: none; color: var(--accent-hi); }
.pp-notes-it-prev { max-width: 100%; font-size: 12px; color: var(--text-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-notes-empty { padding: 16px 8px; text-align: center; font-size: 13px; color: var(--text-faint); }

.pp-notes-editor {
  flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden;
  border-radius: var(--radius); border: 1px solid var(--line); background: var(--panel);
}
.pp-notes-blank { align-items: center; justify-content: center; color: var(--text-faint); font-size: 14px; }
.pp-notes-ehead { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var(--line); flex-shrink: 0; }
.pp-notes-title {
  flex: 1; min-width: 0; min-height: var(--tap); padding: 0; border: 0; background: transparent; color: var(--text);
  font-family: var(--font-display); font-size: 21px; font-weight: 600; letter-spacing: -.01em;
}
.pp-notes-title::placeholder { color: var(--text-faint); }
.pp-notes-title:focus-visible { outline: none; }
.pp-notes-eacts { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
.pp-notes-act {
  min-width: var(--tap); min-height: var(--tap); display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 0 11px;
  border-radius: 10px; border: 1px solid var(--line-2); background: var(--surface-2); color: var(--text-dim); font-size: 13px; font-weight: 600;
  box-shadow: inset 0 1px 0 var(--edge-hi); transition: background .14s var(--ease), color .14s var(--ease), border-color .14s var(--ease);
}
.pp-notes-act.is-on { color: var(--accent-hi); border-color: var(--accent-line); background: var(--accent-soft); }
.pp-note-bn { flex: 1; min-height: 420px; display: flex; flex-direction: column; position: relative; }
.pp-note-host { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
.pp-note-loading { position: absolute; inset: 0; z-index: 2; display: grid; place-items: center; padding: 20px; text-align: center;
  color: var(--text-faint); font-size: 14px; pointer-events: none; }

@media (hover: hover) and (pointer: fine) {
  .pp-notes-item:not(.is-on):hover { background: var(--surface-2); }
  .pp-notes-act:hover { color: var(--text); background: var(--surface-2-hi); }
  .pp-notes-act.is-danger:hover { color: var(--red); border-color: var(--red-line); }
}

@media (max-width: 760px) {
  .pp-main { padding-bottom: calc(84px + var(--safe-bottom)); }
  .pp-flash { bottom: calc(82px + var(--safe-bottom)); }
  .pp-notes-wrap { flex-direction: column; gap: 12px; min-height: 0; }
  .pp-notes-list { width: 100%; }
  .pp-notes.is-mobile .pp-notes-editor { min-height: calc(100dvh - 200px - var(--safe-bottom)); }
  .pp-notes-ehead { padding: 6px 8px; gap: 4px; }
  .pp-notes-title { font-size: 19px; }
  .pp-notes-act { padding: 0; }
  .pp-notes-act-lbl { display: none; }
}
@media (prefers-reduced-transparency: reduce) {
  .pp-nav { background: var(--surface-2); -webkit-backdrop-filter: none; backdrop-filter: none; }
}

/* ---------- content: pipeline ---------- */
.pp-vadd { display: grid; grid-template-columns: minmax(0, 1fr) 190px auto; gap: 8px; margin-bottom: 14px; }
.pp-vadd-title { min-width: 0; }
.pp-vadd-go { white-space: nowrap; }
.pp-plats { display: inline-flex; gap: 3px; }
.pp-plat {
  display: inline-flex; align-items: center; justify-content: center; min-width: 24px; padding: 2px 5px;
  border-radius: 5px; background: var(--surface-3); color: var(--text-dim); font-size: 11px; font-weight: 700; letter-spacing: .02em;
}

/* ---------- content: calendar ---------- */
.pp-mcal { display: flex; flex-direction: column; gap: 14px; }
.pp-mcal-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pp-mcal-title { margin: 0; font-family: var(--font-display); font-size: 21px; font-weight: 600; letter-spacing: -.015em; min-width: 170px; text-align: center; }
.pp-mcal-ct { font-size: 12.5px; color: var(--text-faint); }
.pp-mcal-today { margin-left: auto; }
.pp-mcal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
.pp-mcal-wd { padding-bottom: 2px; text-align: center; font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-dim); }
.pp-mcal-pad { min-height: 10px; }
.pp-mcal-day {
  min-height: 94px; display: flex; flex-direction: column; gap: 5px; padding: 6px 7px; text-align: left; overflow: hidden;
  border-radius: var(--radius-sm); border: 1px solid var(--card-line); background: var(--surface-2); color: var(--text);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
  transition: border-color .16s var(--ease), background .16s var(--ease), box-shadow .16s var(--ease);
}
.pp-mcal-day.is-quiet { background: var(--panel); border-color: var(--line); box-shadow: none; }
.pp-mcal-day.is-on { border-color: var(--accent-line); box-shadow: inset 0 1px 0 var(--edge-hi-strong), 0 0 0 2px var(--accent-soft); }
.pp-mcal-num { font-size: 12.5px; font-weight: 600; color: var(--text-dim); }
.pp-mcal-day.is-today .pp-mcal-num { color: var(--accent-hi); font-weight: 700; }
.pp-mcal-items { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.pp-mcal-item {
  padding: 2px 5px; border-radius: 5px; background: var(--surface-3); color: var(--text);
  font-size: 11.5px; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pp-mcal-item.is-done { background: var(--done-soft); color: var(--done); }
.pp-mcal-item.is-late { background: var(--red-soft); color: var(--red); }
.pp-mcal-more { font-size: 11px; color: var(--text-faint); padding-left: 2px; }
.pp-mcal-dots { display: flex; gap: 3px; }
.pp-mcal-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--text-dim); }
.pp-mcal-dot.is-done { background: var(--done); }
.pp-mcal-dot.is-late { background: var(--red); }
.pp-mcal-day-list { display: flex; flex-direction: column; gap: 7px; }
.pp-mcal-note { margin: 4px 0 0; font-size: 12.5px; }
.pp-vrow {
  width: 100%; min-height: var(--tap); display: flex; align-items: center; gap: 10px; padding: 10px 12px; text-align: left;
  border-radius: var(--radius-sm); border: 1px solid var(--card-line); background: var(--surface-2); color: var(--text);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
}
.pp-vrow .pp-ic { color: var(--text-faint); flex: none; }
.pp-vrow-main { display: flex; flex-direction: column; gap: 5px; min-width: 0; flex: 1; }
.pp-vrow-title { font-size: 15px; font-weight: 600; overflow-wrap: anywhere; }
.pp-vrow-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 5px 7px; font-size: 12px; color: var(--text-faint); }
.pp-vrow-pillar { color: var(--text-dim); }

/* ---------- content: pillars ---------- */
.pp-pillars { display: flex; flex-direction: column; gap: 14px; }
.pp-pillars-note { margin: 0; max-width: 640px; }
.pp-pillar-add { align-self: flex-start; }
.pp-pillar { display: flex; flex-direction: column; gap: 8px; padding: 16px 18px; border-radius: var(--radius); border: 1px solid var(--line); background: var(--surface); }
.pp-pillar-head { display: flex; align-items: center; gap: 12px; }
.pp-pillar-name {
  flex: 1; min-width: 0; min-height: var(--tap); padding: 0; border: 0; background: transparent; color: var(--text);
  font-family: var(--font-display); font-size: 20px; font-weight: 600; letter-spacing: -.015em;
}
.pp-pillar-name:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.pp-pillar-ct { flex: none; font-size: 12px; font-weight: 600; color: var(--text-dim); padding: 3px 9px; border-radius: 999px; background: var(--surface-3); }
.pp-pillar-what, .pp-pillar-ideas { min-height: 56px; overflow: hidden; resize: none; line-height: 1.5; }
.pp-pillar-read { display: flex; flex-direction: column; gap: 3px; }
.pp-pillar-text { margin: 0; font-size: 14.5px; line-height: 1.55; white-space: pre-line; overflow-wrap: anywhere; }
.pp-pillar-title { margin: 0; font-size: 17px; font-weight: 650; letter-spacing: -.01em; flex: 1; min-width: 0; overflow-wrap: anywhere; }
.pp-pillar-blank { margin: 0; font-size: 13.5px; color: var(--text-faint); }
.pp-pillar-foot { display: flex; gap: 10px; flex-wrap: wrap; padding-top: 8px; border-top: 1px solid var(--line); }
.pp-plat-picks { display: flex; flex-wrap: wrap; gap: 8px; }
.pp-plat-pick { min-height: var(--tap); }
.pp-plat-pick.is-on { border-color: var(--accent-line); background: var(--accent-soft); color: var(--accent-hi); }

@media (max-width: 760px) {
  .pp-vadd { grid-template-columns: 1fr 1fr; }
  .pp-vadd-title { grid-column: 1 / -1; }
  .pp-mcal-title { font-size: 18px; flex: 1 0 160px; text-align: center; white-space: nowrap; }
  .pp-mcal-ct { order: 4; }
  .pp-mcal-today { order: 5; margin-left: auto; }
  .pp-mcal-grid { gap: 3px; }
  .pp-mcal-day { min-height: 52px; padding: 5px 4px 6px; align-items: center; gap: 4px; border-radius: 9px; }
  .pp-mcal-num { font-size: 13px; }
  .pp-pillar { padding: 14px; }
  .pp-pillar-foot .pp-btn { flex: 1; }
}

/* ---------- finances ---------- */
.pp-fin-num { font-variant-numeric: tabular-nums; }
.pp-fin-panel { display: flex; flex-direction: column; gap: 10px; padding: 16px 18px; border-radius: var(--radius); border: 1px solid var(--line); background: var(--panel); min-width: 0; }
.pp-fin-panel .pp-h2 { margin: 0; }
.pp-fin-panel .pp-empty { margin: 0; }
.pp-fin-note { margin: 0; font-size: 12.5px; color: var(--text-faint); }
.pp-fin-total { margin: 0; font-size: 13.5px; color: var(--text-dim); }
.pp-fin-total b { color: var(--text); font-weight: 650; }

/* headline figures: the one place numbers get big, so they sit on the elevated surface */
.pp-fin-tiles { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; margin-bottom: 14px; }
.pp-fin-tile {
  display: flex; flex-direction: column; gap: 8px; padding: 14px 16px; min-width: 0; position: relative; overflow: hidden;
  border-radius: var(--radius-card); border: 1px solid var(--card-line);
  background: radial-gradient(120% 90% at 0% 0%, color-mix(in srgb, var(--tone) 18%, transparent), transparent 60%), var(--surface-2);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
}
.pp-fin-tile-head { display: flex; align-items: center; gap: 8px; min-width: 0; }
/* look B: every block has its own colour, shown as a gradient icon chip and a faint glow */
.pp-fin-ico {
  flex: none; width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px;
  color: var(--fin-chip-ink); background: linear-gradient(145deg, var(--tone), var(--deep));
  box-shadow: inset 0 1px 0 var(--fin-chip-rim);
}
.pp-fin-tile .pp-fin-ico { width: 34px; height: 34px; border-radius: 10px; box-shadow: inset 0 1px 0 var(--fin-chip-rim), 0 4px 14px color-mix(in srgb, var(--tone) 35%, transparent); }
.pp-fin-head { letter-spacing: .06em; color: var(--text); }
.pp-fin-tile, .pp-fin-panel { --tone: var(--fin-sky); --deep: var(--fin-sky-deep); }
.pp-fin-tile[data-k="revenue"], .pp-fin-panel[data-panel="chart"] { --tone: var(--fin-green); --deep: var(--fin-green-deep); }
.pp-fin-tile[data-k="expenses"], .pp-fin-panel[data-panel="recurring"] { --tone: var(--fin-rose); --deep: var(--fin-rose-deep); }
.pp-fin-tile[data-k="balance"], .pp-fin-panel[data-panel="invest"] { --tone: var(--fin-violet); --deep: var(--fin-violet-deep); }
.pp-fin-tile[data-k="savings"], .pp-fin-panel[data-panel="funds"] { --tone: var(--fin-amber); --deep: var(--fin-amber-deep); }
.pp-fin-panel[data-panel="kinds"] { --tone: var(--fin-pink); --deep: var(--fin-pink-deep); }
.pp-fin-panel[data-panel="rincome"] { --tone: var(--fin-teal); --deep: var(--fin-teal-deep); }
.pp-fin-panel[data-panel="owed"] { --tone: var(--fin-orange); --deep: var(--fin-orange-deep); }
/* Add income / Add expense sit at the right of the page title, not on a row of their own */
.pp-fin-titlerow { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 12px; min-height: 48px; }
.pp-fin-actions { display: flex; gap: 10px; margin-left: auto; }
.pp-fin-action { min-height: 44px; padding: 0 14px 0 7px; gap: 9px; font-size: 14px; --tone: var(--fin-green); --deep: var(--fin-green-deep); }
.pp-fin-action[data-k="expenses"] { --tone: var(--fin-rose); --deep: var(--fin-rose-deep); }
.pp-fin-roll { font-variant-numeric: tabular-nums; }
.pp-fin-formerror { margin: 0; padding: 10px 12px; border-radius: var(--radius-sm); background: var(--red-soft); color: var(--text); font-size: 14px; }
.pp-fin-tile-lbl { font-size: 11.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-dim); }
.pp-fin-tile-val { font-size: 24px; font-weight: 650; letter-spacing: -.015em; overflow-wrap: anywhere; }
.pp-fin-tile-sub { font-size: 12.5px; color: var(--text-faint); overflow-wrap: anywhere; }

.pp-fin-grid { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); gap: 14px; align-items: start; }
.pp-fin-col { display: flex; flex-direction: column; gap: 14px; min-width: 0; }

.pp-fin-avgs { display: grid; grid-template-columns: repeat(auto-fit, minmax(118px, 1fr)); gap: 12px 16px; }
.pp-fin-avg { display: flex; flex-direction: column; gap: 3px; }
.pp-fin-avg-lbl { font-size: 12.5px; color: var(--text-faint); }
.pp-fin-avg-val { font-size: 17px; font-weight: 650; }

/* chart: told apart by weight and dash, never by hue */
.pp-fin-chart { display: block; width: 100%; height: auto; overflow: visible; }
.pp-fin-gridline { stroke: var(--line-2); stroke-width: 1; }
.pp-fin-gridline.is-zero { stroke: var(--text-faint); }
.pp-fin-axis { fill: var(--text-faint); font-size: 11px; font-family: var(--font); }
.pp-fin-line { fill: none; stroke-linecap: round; stroke-linejoin: round; }
path.pp-fin-line-profit { stroke: var(--fin-sky); stroke-width: 3; }
path.pp-fin-line-revenue { stroke: var(--fin-green); stroke-width: 2.5; }
path.pp-fin-line-expenses { stroke: var(--fin-rose); stroke-width: 2.5; }
.pp-fin-legend { display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: 12.5px; color: var(--text-dim); }
.pp-fin-legend-item { display: inline-flex; align-items: center; gap: 7px; }
.pp-fin-swatch { display: inline-block; width: 22px; height: 0; border-top: 3px solid var(--fin-green); border-radius: 2px; }
.pp-fin-swatch.pp-fin-line-profit { border-top-color: var(--fin-sky); }
.pp-fin-swatch.pp-fin-line-expenses { border-top-color: var(--fin-rose); }

.pp-fin-kinds { display: flex; flex-direction: column; gap: 10px; }
.pp-fin-kind { display: flex; flex-direction: column; gap: 5px; }
.pp-fin-kind-top { display: flex; align-items: baseline; gap: 10px; font-size: 14px; }
.pp-fin-kind-name { flex: 1; min-width: 0; }
.pp-fin-kind-name::before { content: ""; display: inline-block; width: 9px; height: 9px; border-radius: 3px; margin-right: 8px; background: var(--k); }
.pp-fin-kind, .pp-fin-kindtag { --k: var(--text-dim); }
[data-tone="1"] { --k: var(--fin-k1); } [data-tone="2"] { --k: var(--fin-k2); } [data-tone="3"] { --k: var(--fin-k3); }
[data-tone="4"] { --k: var(--fin-k4); } [data-tone="5"] { --k: var(--fin-k5); } [data-tone="6"] { --k: var(--fin-k6); }
[data-tone="7"] { --k: var(--fin-k7); } [data-tone="8"] { --k: var(--fin-k8); } [data-tone="9"] { --k: var(--fin-k9); }
.pp-tag.pp-fin-kindtag:not([data-tone="0"]) { color: var(--k); background: color-mix(in srgb, var(--k) 16%, transparent); }
.pp-fin-kind-amt { font-weight: 600; }
.pp-fin-kind-share { width: 40px; text-align: right; font-size: 12.5px; color: var(--text-faint); }
.pp-fin-bar { height: 6px; border-radius: 999px; background: var(--surface-2); overflow: hidden; }
.pp-fin-bar > span { display: block; height: 100%; border-radius: 999px; background: linear-gradient(90deg, color-mix(in srgb, var(--k) 70%, transparent), var(--k)); }
.pp-fin-num[data-sign="up"] { color: var(--fin-green); }
.pp-fin-num[data-sign="down"] { color: var(--fin-rose); }

/* editable named amounts */
.pp-fin-items { display: flex; flex-direction: column; gap: 8px; }
.pp-fin-item { display: flex; align-items: center; gap: 8px; }
.pp-fin-item-name { flex: 1 1 auto; min-width: 0; }
.pp-fin-item-amt { flex: 0 0 132px; }
.pp-fin-item-per { flex: none; font-size: 13px; color: var(--text-faint); margin-left: -2px; }
.pp-fin-item-del { flex: none; }
.pp-fin-item-add { align-self: flex-start; }
.pp-fin-panel-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-width: 0; }
.pp-fin-panel-top .pp-h2 { min-width: 0; }

.pp-fin-read { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; font-size: 14px; }
.pp-fin-read-name { min-width: 0; overflow-wrap: anywhere; }
.pp-fin-read-amt { flex: none; }
.pp-fin-read-amt.is-blank { font-size: 13px; color: var(--text-faint); }
.pp-fin-monthly { flex: none; display: inline-flex; align-items: center; justify-content: center; }
.pp-fin-monthly.is-on { border-color: var(--accent-line); background: var(--accent-soft); color: var(--accent-hi); }
.pp-fin-runway { margin: 0; font-size: 14px; color: var(--text); }

/* recurring costs: cadence chip + next/stopped date on the read row, schedule controls on
   the edit row, and the backfill preview on the add form */
.pp-fin-rec-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.pp-fin-rec-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12.5px; color: var(--text-faint); }
.pp-fin-rec-chip {
  flex: none; padding: 2px 8px; border-radius: 999px; font-size: 11px; font-weight: 700;
  letter-spacing: .03em; text-transform: uppercase; background: var(--surface-2); color: var(--text-dim); border: 1px solid var(--line-2);
}
.pp-fin-rec-next { overflow-wrap: anywhere; }
.pp-fin-rec-read.is-stopped { opacity: .55; }
.pp-fin-rec-item { flex-wrap: wrap; row-gap: 8px; }
.pp-fin-rec-item .pp-fin-item-name { flex: 1 1 160px; }
.pp-fin-rec-item .pp-fin-item-amt { flex: 0 0 120px; }
.pp-fin-rec-cadence { flex: 1 1 130px; }
.pp-fin-rec-start { flex: 1 1 140px; }
.pp-fin-rec-stop { flex: none; }
.pp-fin-rec-new { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.pp-fin-rec-new-name { flex: 1 1 160px; }
.pp-fin-rec-new-amt { flex: 0 0 120px; }
.pp-fin-rec-new-cadence { flex: 1 1 130px; }
.pp-fin-rec-new-start { flex: 1 1 140px; }
.pp-fin-rec-new-actions { flex: none; display: flex; gap: 8px; }
.pp-fin-rec-backfill { flex: 1 1 100%; margin: 0; font-size: 12.5px; color: var(--text-dim); }
.pp-fin-rec-confirm { flex: 1 1 100%; display: flex; flex-wrap: wrap; gap: 8px; }
.pp-fin-rec-mark { display: inline-flex; vertical-align: middle; margin-left: 6px; color: var(--text-faint); }
.pp-fin-payer { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; font-size: 14px; }
.pp-fin-payer-name { min-width: 0; overflow-wrap: anywhere; }

.pp-fin-owe { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: var(--radius-sm); border: 1px solid var(--card-line); background: var(--surface-2); box-shadow: inset 0 1px 0 var(--edge-hi); }
.pp-fin-owe-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pp-fin-owe-title { font-size: 14.5px; font-weight: 600; overflow-wrap: anywhere; }
.pp-fin-owe-meta { font-size: 12.5px; color: var(--text-faint); }
.pp-fin-owe-amt { font-weight: 600; }

/* income and expense lists */
.pp-fin-entries { display: flex; flex-direction: column; gap: 14px; }
.pp-fin-add { display: grid; grid-template-columns: minmax(0, 1fr) 150px auto; gap: 8px; }
.pp-fin-add.pp-fin-add-exp { grid-template-columns: minmax(0, 1fr) 150px 180px auto; }
.pp-fin-month { display: flex; flex-direction: column; gap: 8px; }
.pp-fin-month-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 0 4px; }
.pp-fin-month-name { font-size: 11.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-dim); }
.pp-fin-month-total { font-size: 13px; font-weight: 600; color: var(--text-dim); }
.pp-fin-rows { display: flex; flex-direction: column; gap: 7px; }
.pp-fin-row {
  width: 100%; min-height: var(--tap); display: flex; align-items: center; gap: 12px; padding: 11px 14px; text-align: left;
  border-radius: var(--radius-sm); border: 1px solid var(--card-line); background: var(--surface-2); color: var(--text);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
  transition: transform .16s var(--ease), background .16s var(--ease), border-color .16s var(--ease);
}
.pp-fin-row-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.pp-fin-row-title { font-size: 15px; font-weight: 600; overflow-wrap: anywhere; }
.pp-fin-row-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 12px; color: var(--text-faint); }
.pp-fin-row-amt { flex: none; font-size: 15.5px; font-weight: 650; }
.pp-fin-owedtag { color: var(--text); font-weight: 650; }

/* panels */
.pp-fin-cutrow { display: flex; gap: 8px; align-items: stretch; }
.pp-fin-cutmode { flex: none; width: 112px; }
.pp-fin-cutfield { flex: 1; min-width: 0; }
.pp-fin-pct { position: relative; }
.pp-fin-pct .pp-input { padding-right: 30px; }
.pp-fin-pct-sign { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: var(--text-faint); pointer-events: none; }
.pp-fin-calc { margin: 8px 0 0; font-size: 13.5px; color: var(--text-dim); }
.pp-fin-calc b { color: var(--text); font-weight: 650; }
.pp-fin-shares { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.pp-fin-share { display: grid; grid-template-columns: 90px minmax(0, 1fr); align-items: center; gap: 10px; }
.pp-fin-share-name { font-size: 14px; color: var(--text-dim); }
.pp-fin-unassigned { margin: 0; font-size: 13.5px; font-weight: 650; color: var(--text); }
.pp-fin-hint { margin: 6px 0 0; font-size: 12px; color: var(--text-faint); }
.pp-fin-date { width: 100%; }
.pp-fin-payback { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 10px; }
.pp-fin-payback-note { flex: 1 1 180px; font-size: 13.5px; color: var(--text-dim); }

/* monthly */
.pp-fin-monthview { display: flex; flex-direction: column; gap: 14px; }
.pp-fin-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.pp-fin-table th, .pp-fin-table td { padding: 9px 10px; text-align: right; border-bottom: 1px solid var(--line); white-space: nowrap; }
.pp-fin-table th:first-child { text-align: left; font-weight: 500; }
.pp-fin-table thead th { font-size: 11.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--text-dim); }
.pp-fin-table .pp-fin-yeartotal th, .pp-fin-table .pp-fin-yeartotal td { font-weight: 650; background: var(--surface-2); }
.pp-fin-mcards { display: flex; flex-direction: column; gap: 8px; }
.pp-fin-mcard { display: flex; flex-direction: column; gap: 8px; padding: 12px 14px; border-radius: var(--radius-sm); border: 1px solid var(--line); background: var(--panel); }
.pp-fin-mcard.pp-fin-yeartotal { background: var(--surface-2); border-color: var(--card-line); box-shadow: inset 0 1px 0 var(--edge-hi); }
.pp-fin-mcard-name { font-size: 14.5px; font-weight: 650; }
.pp-fin-dl { margin: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 6px 14px; }
.pp-fin-dl > div { display: flex; flex-direction: column; gap: 1px; }
.pp-fin-dl dt { font-size: 12px; color: var(--text-faint); }
.pp-fin-dl dd { margin: 0; font-size: 14.5px; font-weight: 600; }

@media (hover: hover) and (pointer: fine) {
  .pp-fin-row:hover { background: var(--surface-2-hi); border-color: var(--line-2); }
}
@media (prefers-reduced-motion: no-preference) {
  .pp-fin-row:active { transform: scale(.99); }
}
@media (max-width: 1100px) {
  .pp-fin-tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .pp-fin-grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 760px) {
  .pp-fin-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .pp-fin-tile { padding: 12px; }
  .pp-fin-tile[data-k="savings"] { grid-column: 1 / -1; }
  .pp-fin-tile-val { font-size: 20px; }
  .pp-fin-panel { padding: 14px; }
  .pp-fin-add, .pp-fin-add.pp-fin-add-exp { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .pp-fin-add-title { grid-column: 1 / -1; }
  .pp-fin-add-exp .pp-fin-add-kind { order: 3; }
  .pp-fin-add-exp .pp-fin-add-go { order: 4; grid-column: 1 / -1; }
  .pp-fin-item { flex-wrap: wrap; }
  .pp-fin-item-name { flex: 1 1 100%; }
  .pp-fin-item-amt { flex: 1 1 110px; }
  .pp-fin-rec-cadence, .pp-fin-rec-new-cadence { flex: 1 1 110px; }
  .pp-fin-rec-start, .pp-fin-rec-new-start { flex: 1 1 130px; }
  .pp-fin-rec-new-name { flex: 1 1 100%; }
  .pp-fin-rec-new-amt { flex: 1 1 110px; }
  .pp-fin-rec-new-actions { flex: 1 1 100%; }
  .pp-fin-owe { flex-wrap: wrap; }
  .pp-fin-owe-main { flex: 1 1 60%; }
  .pp-fin-paidback { flex: 1 1 100%; }
  .pp-fin-share { grid-template-columns: 70px minmax(0, 1fr); }
  .pp-fin-titlerow { gap: 8px; min-height: 44px; }
  .pp-fin-actions { gap: 6px; }
  .pp-fin-action { padding: 0 10px 0 6px; gap: 6px; }
  .pp-fin-action .pp-fin-ico { width: 26px; height: 26px; border-radius: 7px; }
}

/* ---------- weekly report (a view inside Tasks) ----------
   Read, not worked: no card, no ring, no drag. What you can press: the numbers (they filter
   what is under them), a week in the strip, the layout, a section heading (it folds that
   section), and a task with a checklist (it opens to show its steps). Green means done here exactly as it does everywhere else; red on a step means a
   task was finished with that step left unticked. Redesigned Sep 24: see js/reports.jsx. */
.pp-reports { display: flex; flex-direction: column; gap: 20px; }

/* ---- the week you are reading, and the strip of every other one ---- */
.pp-rep-top { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px 32px; flex-wrap: wrap; }
.pp-rep-titles { min-width: 0; }
.pp-rep-kicker { margin: 0 0 6px; font-size: 13px; color: var(--text-faint); }
.pp-rep-when-h { margin: 0; font-size: 32px; font-weight: 700; letter-spacing: -.02em; line-height: 1.05; color: var(--text); }
.pp-rep-sum { margin: 10px 0 0; font-size: 15px; color: var(--text-dim); }
.pp-rep-sum-n { font-weight: 700; color: var(--done); font-variant-numeric: tabular-nums; }
.pp-rep-up { color: var(--done); }

.pp-rep-nav { display: flex; align-items: center; gap: 2px; min-width: 0; max-width: 100%; }
.pp-rep-stepbtn { flex: none; }
.pp-rep-stepbtn:disabled { opacity: .28; cursor: default; }
.pp-rep-strip {
  position: relative; display: flex; align-items: flex-end; gap: 2px; min-width: 0; max-width: 540px;
  overflow-x: auto; overflow-y: hidden; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.pp-rep-strip::-webkit-scrollbar { display: none; }
.pp-rep-bar {
  flex: none; width: 44px; min-height: 80px; padding: 6px 0 4px;
  display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 5px;
  border: 0; border-radius: 10px; background: none; color: var(--text-faint); font: inherit; cursor: pointer;
  transition: background .18s var(--ease), color .18s var(--ease);
}
.pp-rep-bar-n { font-size: 11px; line-height: 1; font-variant-numeric: tabular-nums; }
.pp-rep-bar-track { width: 14px; height: 40px; display: flex; align-items: flex-end; }
.pp-rep-bar:first-child { margin-left: auto; }   /* few weeks: they sit by the newest end, not the far one */
.pp-rep-bar-fill {
  width: 100%; height: calc(var(--h, 0) * 100%); min-height: 4px; border-radius: 4px;
  background: var(--text-faint); opacity: .5; transform-origin: 50% 100%;
  transition: background .2s var(--ease), opacity .2s var(--ease);
}
.pp-rep-bar.is-late .pp-rep-bar-fill { opacity: .32; }
.pp-rep-bar-d { font-size: 10.5px; line-height: 1; white-space: nowrap; }
.pp-rep-bar.is-on { background: var(--accent-soft-2); color: var(--text); }
.pp-rep-bar.is-on .pp-rep-bar-n { font-weight: 700; color: var(--accent-hi); }
.pp-rep-bar.is-on .pp-rep-bar-fill { background: var(--accent-hi); opacity: 1; }

/* ---- filters ---- */
/* one toolbar for both layouts: how to lay it out, then what to narrow it to */
.pp-rep-tools { display: flex; align-items: center; gap: 8px 14px; flex-wrap: wrap; }
.pp-rep-layout { flex: none; }
.pp-rep-layout .pp-seg-btn { padding: 0 16px; }
.pp-rep-tools .pp-rep-cats { flex: 1 1 auto; }
.pp-rep-cats { position: relative; display: flex; flex-wrap: wrap; gap: 7px; min-width: 0; }
.pp-rep-cat {
  flex: none; min-height: var(--tap); padding: 0 15px; border-radius: 999px;
  border: 1px solid var(--line-2); background: var(--surface-2); color: var(--text-dim);
  font: inherit; font-size: 13.5px; cursor: pointer;
  transition: background .16s var(--ease), border-color .16s var(--ease), color .16s var(--ease), transform .16s var(--ease);
}
.pp-rep-cat-in { display: inline-flex; align-items: center; gap: 8px; }
.pp-rep-cat-n { font-size: 12px; font-weight: 700; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-rep-cat.is-on { background: var(--accent-soft); border-color: var(--accent-line); color: var(--text); }
.pp-rep-cat.is-on .pp-rep-cat-n { color: var(--accent-hi); }
.pp-rep-showing { margin: 0; min-height: var(--tap); display: flex; align-items: center; gap: 2px; font-size: 13.5px; color: var(--text-dim); }
.pp-rep-showing b { color: var(--text); font-variant-numeric: tabular-nums; }
.pp-rep-clear {
  min-height: var(--tap); padding: 0 12px; border: 0; border-radius: var(--radius-sm); background: none;
  font: inherit; font-size: 13.5px; font-weight: 650; color: var(--accent-hi); cursor: pointer;
}

/* ---- who: a face, the viewer in red and the partner in grey, as in the top bar ---- */
.pp-rep-face {
  flex: none; width: 38px; height: 38px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--surface-3); color: var(--text); font-size: 15px; font-weight: 700;
}
.pp-rep-face.is-me { background: var(--accent-soft); color: var(--accent-hi); }
.pp-rep-face.is-small { width: 24px; height: 24px; font-size: 11px; }
.pp-rep-face.is-none { background: none; border: 1.5px dashed var(--line-2); }
.pp-rep-face.is-both { width: auto; background: none; }
.pp-rep-face-in {
  width: 38px; height: 38px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  background: var(--surface-3); color: var(--text); box-shadow: 0 0 0 2px var(--panel);
}
.pp-rep-face-in.is-me { background: var(--accent-soft); color: var(--accent-hi); }
.pp-rep-face-in + .pp-rep-face-in { margin-left: -12px; }
/* shared work in a row: one face split down the middle, the viewer's half in red */
.pp-rep-face.is-pair { background: linear-gradient(90deg, var(--accent-soft) 50%, var(--surface-3) 50%); font-size: 10px; letter-spacing: -.02em; }
.pp-rep-face.is-pair .is-me { color: var(--accent-hi); }

/* ---- a row: tick or face, the title, one quiet line under it ---- */
.pp-rep-rows { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.pp-rep-row + .pp-rep-row { border-top: 1px solid var(--line); }
.pp-rep-row-in {
  width: 100%; min-height: var(--tap); display: flex; align-items: flex-start; gap: 12px; padding: 11px 6px;
  border: 0; border-radius: 10px; background: none; color: inherit; font: inherit; text-align: left;
}
button.pp-rep-row-in { cursor: pointer; transition: background .15s var(--ease); }
.pp-rep-row-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.pp-rep-title { font-size: 14.5px; line-height: 1.35; color: var(--text); overflow-wrap: anywhere; }
.pp-rep-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0 7px; font-size: 12.5px; color: var(--text-faint); }
.pp-rep-sep { color: var(--line-2); }
.pp-rep-age.is-old { color: var(--red); }
.pp-rep-tick {
  flex: none; width: 24px; height: 24px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--done-soft); color: var(--done);
}
.pp-rep-tick .pp-ic path { stroke-dasharray: 24; stroke-dashoffset: 0; }
.pp-rep-row-chev { flex: none; margin-top: 2px; color: var(--text-faint); transition: transform .28s var(--ease), color .15s var(--ease); }
.pp-rep-row.is-open .pp-rep-row-chev { transform: rotate(180deg); color: var(--text-dim); }
.pp-rep-none { margin: 0; padding: 16px 6px; font-size: 13.5px; color: var(--text-faint); }
.pp-rep-vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* ---- a checklist on a row: the meter always, the steps on a tap ---- */
.pp-rep-meter { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 10px; font-size: 12.5px; color: var(--text-dim); }
.pp-rep-segs { flex: none; display: inline-flex; gap: 3px; }
.pp-rep-seg { width: 14px; height: 6px; border-radius: 3px; background: var(--line-2); }
.pp-rep-seg.is-done { background: var(--done); }
.pp-rep-meter.is-short .pp-rep-seg:not(.is-done) { background: none; box-shadow: inset 0 0 0 1.5px var(--red); }
.pp-rep-segs.is-bar { width: 96px; height: 6px; border-radius: 3px; background: var(--line-2); overflow: hidden; }
.pp-rep-segs-fill { display: block; height: 100%; width: calc(var(--f, 0) * 100%); background: var(--done); border-radius: 3px; transform-origin: 0 50%; }
.pp-rep-meter-t { display: inline-flex; flex-wrap: wrap; gap: 0 8px; }
.pp-rep-meter.is-full .pp-rep-meter-t { color: var(--done); }
.pp-rep-miss { font-weight: 650; color: var(--red); }
.pp-rep-gain { font-weight: 650; color: var(--done); }

.pp-rep-fold { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .32s var(--ease); }
.pp-rep-fold-in { min-height: 0; overflow: hidden; }
.is-open > .pp-rep-fold { grid-template-rows: 1fr; }
.pp-rep-steps { list-style: none; margin: 0; padding: 0 6px 12px 42px; display: flex; flex-direction: column; gap: 7px; }
.pp-rep-step { display: flex; align-items: flex-start; gap: 10px; font-size: 13.5px; line-height: 1.35; color: var(--text-dim); }
.pp-rep-step-box {
  flex: none; width: 17px; height: 17px; margin-top: 1px; border-radius: 5px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1.5px solid var(--line-2); color: var(--done-ink);
}
.pp-rep-step.is-done .pp-rep-step-box { background: var(--done); border-color: var(--done); }
.pp-rep-step.is-miss .pp-rep-step-box { border-color: var(--red); background: var(--red-soft); }
.pp-rep-step.is-miss .pp-rep-step-t { color: var(--text); }
.pp-rep-row.is-short { box-shadow: inset 3px 0 0 var(--red-line); border-radius: 2px; }
/* personal tasks in a report (Sep 28): the same yellow as on the list, edge and label */
.pp-rep-row.is-personal { box-shadow: inset 3px 0 0 var(--personal); border-radius: 2px; background: linear-gradient(90deg, var(--personal-soft), transparent 70%); }
.pp-rep-personal { color: var(--personal); font-weight: 650; }
.pp-rep-ptoggle {
  min-height: var(--tap); display: inline-flex; align-items: center; gap: 7px; padding: 0 14px; border-radius: 999px;
  border: 1px solid var(--line-2); background: transparent; color: var(--text-dim); font-size: 13px; font-weight: 600;
  transition: color .18s var(--ease), border-color .18s var(--ease), background .18s var(--ease);
}
.pp-rep-ptoggle:disabled { opacity: .55; cursor: default; }
.pp-rep-ptoggle.is-on { color: var(--personal); border-color: var(--personal-line); background: var(--personal-soft); }
.pp-rep-ptoggle-n { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; background: var(--surface-3); color: var(--text-dim); font-size: 11.5px; }

/* ---- layout A: a card per person ---- */
.pp-rep-l-people { display: flex; flex-direction: column; gap: 14px; }
.pp-rep-people { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.pp-rep-people.is-one { grid-template-columns: minmax(0, 1fr); }
.pp-rep-person {
  min-width: 0; padding: 4px 12px 12px;
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
  transition: border-color .2s var(--ease);
}
.pp-rep-person.is-wide { grid-column: 1 / -1; }
.pp-rep-person.is-picked { border-color: var(--accent-line); }
.pp-rep-person-head {
  width: 100%; min-height: 72px; display: flex; align-items: center; gap: 12px; padding: 12px 6px 8px;
  border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer;
  transition: transform .16s var(--ease);
}
.pp-rep-person-who { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.pp-rep-person-name { font-size: 16px; font-weight: 650; color: var(--text); }
.pp-rep-person-sub { font-size: 12.5px; color: var(--text-faint); }
.pp-rep-person-n { font-size: 38px; font-weight: 700; letter-spacing: -.03em; line-height: 1; color: var(--text); font-variant-numeric: tabular-nums; }
.pp-rep-person-head.is-on .pp-rep-person-n { color: var(--accent-hi); }

/* ---- layout B: the split on the left, the week day by day on the right ---- */
.pp-rep-l-days { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 16px; align-items: start; }
.pp-rep-side, .pp-rep-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.pp-rep-split {
  display: flex; flex-direction: column; gap: 16px; padding: 18px 14px 10px;
  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);
}
.pp-rep-split-hero { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px; padding: 0 4px; }
.pp-rep-split-n { font-size: 56px; font-weight: 700; letter-spacing: -.04em; line-height: .9; color: var(--done); font-variant-numeric: tabular-nums; }
.pp-rep-split-l { font-size: 17px; font-weight: 600; color: var(--text); }
.pp-rep-split-d { flex-basis: 100%; font-size: 13px; color: var(--text-faint); }
.pp-rep-split-d.pp-rep-up { color: var(--done); }
.pp-rep-split-bar { display: flex; gap: 3px; height: 10px; margin: 0 4px; }
.pp-rep-split-seg { min-width: 8px; border-radius: 5px; transform-origin: 0 50%; transition: opacity .22s var(--ease); }
.pp-rep-split-seg.is-dim { opacity: .2; }
.pp-rep-split-seg.is-me, .pp-rep-key-sw.is-me { background: var(--accent-hi); }
.pp-rep-split-seg.is-them, .pp-rep-key-sw.is-them { background: var(--text-dim); }
.pp-rep-split-seg.is-both, .pp-rep-key-sw.is-both { background: repeating-linear-gradient(135deg, var(--accent-hi) 0 3px, var(--text-dim) 3px 6px); }
.pp-rep-split-seg.is-none, .pp-rep-key-sw.is-none { background: var(--line-2); }
.pp-rep-legend { display: flex; flex-direction: column; gap: 2px; }
.pp-rep-key {
  min-height: var(--tap); display: flex; align-items: center; gap: 10px; padding: 0 10px;
  border: 1px solid transparent; border-radius: var(--radius-sm); background: none;
  font: inherit; font-size: 14px; color: var(--text-dim); text-align: left; cursor: pointer;
  transition: background .16s var(--ease), border-color .16s var(--ease), color .16s var(--ease), transform .16s var(--ease);
}
.pp-rep-key-sw { flex: none; width: 10px; height: 10px; border-radius: 3px; }
.pp-rep-key-name { flex: 1; min-width: 0; }
.pp-rep-key-n { font-size: 16px; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }
.pp-rep-key.is-on { background: var(--accent-soft-2); border-color: var(--accent-line); color: var(--text); }
.pp-rep-key.is-on .pp-rep-key-n { color: var(--accent-hi); }
.pp-rep-panel { padding: 4px 12px 12px; background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); }
.pp-rep-day + .pp-rep-day { border-top: 1px solid var(--line); }
.pp-rep-day-h { display: flex; align-items: baseline; gap: 8px; margin: 0; padding: 12px 6px 2px; font-size: 13px; font-weight: 650; color: var(--text-dim); }
.pp-rep-day-n { margin-left: auto; font-size: 12px; font-weight: 500; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-rep-days .pp-rep-row + .pp-rep-row { border-top: 0; }
.pp-rep-days .pp-rep-row-in { padding: 8px 6px; }
.pp-rep-days .pp-rep-steps { padding-left: 42px; }

/* ---- the three sections: Completed, In progress, To do, each on a tinted heading that folds ---- */
.pp-rep-group { margin-top: 8px; }
.pp-rep-group-h {
  width: 100%; min-height: var(--tap); display: flex; align-items: center; gap: 10px; padding: 0 12px;
  border: 0; border-radius: 10px; background: var(--surface-2); color: var(--text-dim);
  font: inherit; text-align: left;
}
button.pp-rep-group-h { cursor: pointer; transition: background .15s var(--ease); }
.pp-rep-group-t { font-size: 13.5px; font-weight: 650; color: var(--text); }
.pp-rep-group-n { font-size: 12.5px; font-weight: 600; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-rep-group-chev { flex: none; margin-left: auto; color: var(--text-faint); transition: transform .3s var(--ease), color .15s var(--ease); }
.pp-rep-group.is-open > .pp-rep-group-h .pp-rep-group-chev { transform: rotate(180deg); }
.pp-rep-group.is-empty .pp-rep-group-h { background: none; box-shadow: inset 0 0 0 1px var(--line); }
.pp-rep-group.is-empty .pp-rep-group-t { color: var(--text-faint); font-weight: 600; }
.pp-rep-group-body { padding: 2px 0 2px; }
.pp-rep-mark { flex: none; width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--text-faint); }
.pp-rep-mark.is-done { border-color: var(--done); background: var(--done); }
.pp-rep-mark.is-prog { border-color: var(--accent-hi); background: linear-gradient(90deg, var(--accent-hi) 50%, transparent 50%); }
.pp-rep-state { flex: none; width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; }
.pp-rep-pill {
  display: inline-flex; align-items: baseline; gap: 4px; padding: 3px 9px; border-radius: 999px;
  font-size: 12px; white-space: nowrap;
}
.pp-rep-pill { background: var(--surface-3); color: var(--text-dim); }
.pp-rep-pill b { color: var(--text); font-variant-numeric: tabular-nums; }
.pp-rep-openlist .pp-rep-row-in { padding: 8px 6px; }
.pp-rep-openlist .pp-rep-title { font-size: 13.5px; color: var(--text-dim); }
.pp-rep-more { margin: 2px 0 4px 36px; font-size: 13px; color: var(--text-dim); }
.pp-rep-note {
  margin: 0; display: flex; align-items: flex-start; gap: 10px; padding: 14px 18px;
  border: 1px dashed var(--line-2); border-radius: var(--radius); font-size: 13px; line-height: 1.45; color: var(--text-faint);
}
.pp-rep-note .pp-ic { flex: none; margin-top: 1px; }

.pp-rep-empty { max-width: 560px; padding: 26px 20px; border: 1px dashed var(--line-2); border-radius: var(--radius); }
.pp-rep-empty-ic {
  width: 44px; height: 44px; margin-bottom: 12px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center; background: var(--accent-soft); color: var(--accent-hi);
}
.pp-rep-empty p { margin: 0 0 8px; font-size: 14px; color: var(--text-dim); line-height: 1.5; }
.pp-rep-hint { margin: 0; font-size: 12.5px; color: var(--text-faint); }

@media (hover: hover) and (pointer: fine) {
  .pp-rep-bar:not(.is-on):hover { background: var(--surface-2); color: var(--text-dim); }
  .pp-rep-bar:not(.is-on):hover .pp-rep-bar-fill { background: var(--text-faint); }
  button.pp-rep-row-in:hover, .pp-rep-key:not(.is-on):hover { background: var(--surface-2); }
  .pp-rep-bar:not(.is-on):hover .pp-rep-bar-fill { opacity: .85; }
  .pp-rep-cat:not(.is-on):hover { border-color: var(--text-faint); color: var(--text); }
  .pp-rep-person-head:hover .pp-rep-person-name { color: var(--accent-hi); }
  button.pp-rep-group-h:hover { background: var(--surface-2-hi); }
  button.pp-rep-group-h:hover .pp-rep-group-chev { color: var(--text); }
}

/* ---- motion: a week slides in from the side it lives on, numbers count up, bars grow,
   rows rise in turn, ticks draw themselves. Nothing moves with reduced motion on. ---- */
@media (prefers-reduced-motion: no-preference) {
  .pp-rep-titles.is-fwd, .pp-rep-body.is-fwd { animation: pp-in-fwd .42s var(--ease) both; }
  .pp-rep-titles.is-back, .pp-rep-body.is-back { animation: pp-in-back .42s var(--ease) both; }
  .pp-rep-titles.is-first, .pp-rep-body.is-first { animation: pp-fade .4s var(--ease) both; }
  .pp-rep-bar-fill { animation: pp-rep-grow-y .7s var(--ease) both; animation-delay: calc(var(--i, 0) * 35ms + 60ms); }
  .pp-rep-person { animation: pp-rep-rise .5s var(--ease) both; animation-delay: calc(var(--i, 0) * 70ms); }
  .pp-rep-split-seg { animation: pp-rep-grow-x .8s var(--ease) both .12s; }
  .pp-rep-row { animation: pp-rep-rise .4s var(--ease) both; animation-delay: calc(var(--i, 0) * 32ms + 110ms); }
  .pp-rep-tick .pp-ic path { animation: pp-draw .42s var(--ease) both; animation-delay: calc(var(--i, 0) * 32ms + 300ms); }
  .pp-rep-seg { animation: pp-rep-pop .36s var(--spring) both; animation-delay: calc(var(--i, 0) * 45ms + 320ms); }
  .pp-rep-segs-fill { animation: pp-rep-grow-x .8s var(--ease) both .3s; }
  .is-open > .pp-rep-fold .pp-rep-step { animation: pp-rep-rise .32s var(--ease) both; animation-delay: calc(var(--i, 0) * 30ms + 60ms); }
  .pp-rep-cat:active, .pp-rep-key:active, .pp-rep-bar:active { transform: scale(.95); }
  button.pp-rep-group-h:active { transform: scale(.99); }
  .pp-rep-person-head:active { transform: scale(.985); }
}
@keyframes pp-rep-rise { from { opacity: 0; transform: translate3d(0, 10px, 0); } to { opacity: 1; transform: none; } }
@keyframes pp-rep-grow-y { from { transform: scaleY(0); } to { transform: none; } }
@keyframes pp-rep-grow-x { from { transform: scaleX(0); } to { transform: none; } }
@keyframes pp-rep-pop { from { opacity: 0; transform: scale(.2); } to { opacity: 1; transform: none; } }

@media (max-width: 760px) {
  .pp-reports { gap: 16px; }
  .pp-rep-top { flex-direction: column; align-items: stretch; gap: 14px; }
  .pp-rep-when-h { font-size: 26px; }
  .pp-rep-layout { align-self: stretch; }
  .pp-rep-layout .pp-seg-btn { flex: 1; }
  .pp-rep-nav { margin: 0 -6px; }
  .pp-rep-strip { flex: 1; max-width: none; }

  .pp-rep-cats {
    flex-wrap: nowrap; margin: 0 -14px; padding: 0 14px 2px;
    overflow-x: auto; overflow-y: hidden; scrollbar-width: none; -webkit-overflow-scrolling: touch;
  }
  .pp-rep-cats::-webkit-scrollbar { display: none; }
  /* nowrap matters: a wrapping column sizes itself to its widest child, which here is the
     scrolling chip rail, and the switch then ran past the screen edge (clipped, never scrolled) */
  .pp-rep-tools { flex-direction: column; flex-wrap: nowrap; align-items: stretch; }
  .pp-rep-people { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .pp-rep-person { padding: 2px 10px 4px; }
  .pp-rep-person-n { font-size: 34px; }
  .pp-rep-l-days { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .pp-rep-split { padding: 16px 12px 8px; }
  .pp-rep-split-n { font-size: 48px; }
  .pp-rep-legend { flex-direction: row; flex-wrap: wrap; }
  .pp-rep-key { flex: 1 1 auto; }
  .pp-rep-panel { padding: 2px 8px 10px; }
  .pp-rep-steps, .pp-rep-days .pp-rep-steps { padding-left: 42px; }
}


/* ---------- time box (module 9, Shadi Sep 28 2026) ----------
   The page scrolls, not the grid: on a phone the whole screen is the day and the header
   scrolls away, with the date bar sticking under the top bar. Blocks are absolutely placed
   at start * --tb-px / 60. During a drag only transform and height change, straight on the
   element, so nothing here may animate top/height or re-layout the grid. */
.pp-tb-bar {
  position: sticky; top: calc(var(--safe-top) + 61px); z-index: 12; display: flex; align-items: center; gap: 8px;
  margin: 0 -24px 12px; padding: 10px 24px; background: var(--glass);
  -webkit-backdrop-filter: blur(22px) saturate(1.6); backdrop-filter: blur(22px) saturate(1.6);
  border-bottom: 1px solid var(--glass-line);
}
.pp-tb-ib {
  width: var(--tap); height: var(--tap); flex: none; display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm); border: 1px solid var(--card-line); background: var(--surface-2); color: var(--text);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl);
}
.pp-tb-ib:disabled { opacity: .4; }
.pp-tb-date {
  min-height: var(--tap); display: inline-flex; align-items: center; gap: 8px; padding: 0 14px; border-radius: var(--radius-sm);
  border: 1px solid var(--card-line); background: var(--surface-2); color: var(--text); font-size: 15px; font-weight: 600;
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl); white-space: nowrap;
}
.pp-tb-date .pp-ic:last-child { color: var(--text-faint); }
.pp-tb-today { min-height: var(--tap); padding: 0 16px; border-radius: var(--radius-sm); border: 1px solid var(--line-2); background: transparent; color: var(--text-dim); font-size: 14px; font-weight: 600; }
.pp-tb-sp { flex: 1; }
.pp-tb-add { padding: 0 18px; }
.pp-tb-gcbtn { width: auto; padding: 0 12px; gap: 7px; font-size: 14px; font-weight: 600; color: var(--text-dim); }
.pp-tb-gcbtn.is-on { color: var(--text); }
.pp-tb-gc { width: 340px; max-width: calc(100vw - 24px); padding: 16px; display: flex; flex-direction: column; gap: 10px; }
.pp-tb-gc-p { margin: 0; font-size: 14px; line-height: 1.5; color: var(--text-dim); }
.pp-tb-gc-p b { color: var(--text); font-weight: 600; }
.pp-tb-gc-acts { display: flex; gap: 8px; flex-wrap: wrap; }

/* the strip: did you finish / now / up next */
.pp-tb-strip {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; padding: 10px 12px 10px 16px;
  border-radius: var(--radius); background: var(--surface-2); border: 1px solid var(--card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
}
.pp-tb-strip.is-now { border-color: var(--accent-line); background: linear-gradient(var(--accent-soft-2), var(--accent-soft-2)), var(--surface-2); }
.pp-tb-strip.is-ask { border-color: var(--line-2); }
.pp-tb-strip-txt { flex: 1 1 260px; min-width: 0; display: flex; align-items: baseline; gap: 4px 10px; flex-wrap: wrap; }
.pp-tb-strip-k { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); }
.pp-tb-strip-name { border: 0; background: none; padding: 0; min-height: 32px; font-size: 15.5px; font-weight: 600; color: var(--text); text-align: left; }
.pp-tb-strip-sub { font-size: 13.5px; color: var(--text-dim); }
.pp-tb-strip-acts { display: flex; gap: 8px; flex-wrap: wrap; }
.pp-tb-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--tb-now); display: inline-block; }
.pp-tb-dot.is-now { background: var(--accent-hi); }
.pp-tb-btn-over { color: var(--tb-over-ink); border-color: var(--red-line); background: repeating-linear-gradient(135deg, var(--tb-over-b) 0 7px, transparent 7px 14px), var(--surface-2); }

/* layout: timeline + rail on a computer */
.pp-tb-layout { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 20px; align-items: start; }
.pp-tb-rail { position: sticky; top: calc(var(--safe-top) + 61px + 76px); display: grid; gap: 14px; }
.pp-tb-panel { position: relative; background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); }
.pp-tb-people {
  position: sticky; top: calc(var(--safe-top) + 61px + 65px); z-index: 11; display: grid; grid-template-columns: var(--tb-gut) 1fr 1fr;
  background: var(--panel); border-bottom: 1px solid var(--line); border-radius: var(--radius) var(--radius) 0 0;
}
.pp-tb-people::before { content: ""; }
.pp-tb-person { display: flex; flex-direction: column; gap: 1px; padding: 10px 14px; min-width: 0; }
.pp-tb-person + .pp-tb-person { border-left: 1px solid var(--line); }
.pp-tb-person-s { font-size: 12.5px; color: var(--text-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* the grid */
.pp-tb-grid { position: relative; touch-action: pan-y; -webkit-user-select: none; user-select: none; contain: layout; }
.pp-tb-lines {
  position: absolute; top: 0; bottom: 0; left: calc(var(--tb-gut) - 8px); right: 0; pointer-events: none;
  background-image: linear-gradient(var(--tb-hour) 1px, transparent 1px), linear-gradient(var(--tb-half) 1px, transparent 1px);
  background-size: 100% var(--tb-px), 100% calc(var(--tb-px) / 2);
}
.pp-tb-hl {
  position: absolute; left: 0; transform: translateY(-50%); text-align: right; font-size: 12px; font-weight: 500;
  color: var(--text-faint); font-variant-numeric: tabular-nums; white-space: nowrap; pointer-events: none;
}
.pp-tb-vdiv { position: absolute; top: 0; bottom: 0; border-left: 1px solid var(--line); pointer-events: none; }
.pp-tb-past { position: absolute; top: 0; right: 0; background: var(--tb-past); pointer-events: none; z-index: 4; border-radius: 0 var(--radius) 0 0; }
.pp-tb-col { position: absolute; top: 0; bottom: 0; }
.pp-tb-earlier {
  display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; min-height: var(--tap);
  border: 0; border-bottom: 1px solid var(--line); background: transparent; color: var(--text-dim); font-size: 13.5px; font-weight: 600;
  border-radius: var(--radius) var(--radius) 0 0;
}
.pp-tb-panel.is-side .pp-tb-earlier { border-radius: 0; }
.pp-tb-trow .pp-due, .pp-tb-trow .pp-tag { font-size: 12px; }
.pp-tb-col.is-mine { cursor: cell; }

.pp-tb-b {
  position: absolute; overflow: hidden; z-index: 3; border-radius: 12px; background: var(--surface-2);
  border: 1px solid var(--card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card); color: var(--text);
  padding: 7px 10px 7px 14px; cursor: grab; -webkit-touch-callout: none; touch-action: pan-y; outline: none;
}
.pp-tb-b::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--line-2); }
.pp-tb-b.is-theirs { cursor: pointer; }
.pp-tb-b:focus-visible { box-shadow: 0 0 0 2px var(--accent-hi), var(--shadow-card); }
.pp-tb-b.is-now { border-color: var(--accent-line); background: linear-gradient(var(--accent-soft-2), var(--accent-soft-2)), var(--surface-2); }
.pp-tb-b.is-now::before { background: var(--accent-hi); }
.pp-tb-b.is-done::before { background: var(--done); }
.pp-tb-b.is-done .pp-tb-title { color: var(--text-dim); }
.pp-tb-b.is-hidden::before { background: var(--personal); }
.pp-tb-b.is-gcal::before { background: var(--text-faint); }
.pp-tb-b.is-skipped, .pp-tb-b.is-moved { opacity: .55; box-shadow: none; }
.pp-tb-b.is-skipped .pp-tb-title, .pp-tb-b.is-moved .pp-tb-title { text-decoration: line-through; text-decoration-color: var(--text-faint); }
.pp-tb-b.is-over { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.pp-tb-b.is-busy {
  background: repeating-linear-gradient(135deg, var(--tb-hatch-a) 0 7px, var(--tb-hatch-b) 7px 14px);
  border: 1px dashed var(--line-2); box-shadow: none; cursor: pointer;
}
.pp-tb-b.is-busy::before { display: none; }
.pp-tb-b.is-busy .pp-tb-title { color: var(--text-dim); }
.pp-tb-b.is-lifted, .pp-tb-b.is-dragging {
  z-index: 9; background: var(--surface-2-hi); border-color: var(--accent-line);
  box-shadow: inset 0 1px 0 var(--edge-hi-strong), 0 10px 26px var(--tb-lift);
}
.pp-tb-b.is-dragging { cursor: grabbing; will-change: transform, height; }
.pp-tb-b.is-picked { border-color: var(--accent-line); box-shadow: 0 0 0 1px var(--accent-line), var(--shadow-card-hi); z-index: 6; }
body.pp-tb-dragging, body.pp-tb-dragging * { cursor: grabbing !important; }

.pp-tb-bin { position: relative; z-index: 1; display: flex; flex-direction: column; min-width: 0; height: 100%; }
.pp-tb-bin.is-row { flex-direction: row; align-items: center; gap: 8px; }
.pp-tb-bin.is-tiny { gap: 6px; margin-top: -4px; }
.pp-tb-bin.is-tiny .pp-tb-title { font-size: 12.5px; }
.pp-tb-row { display: flex; align-items: center; gap: 8px; min-height: 20px; }
.pp-tb-time { font-size: 12px; font-weight: 500; color: var(--text-faint); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pp-tb-bin.is-row .pp-tb-time { margin-left: auto; }
.pp-tb-title { font-size: 15px; font-weight: 600; line-height: 1.3; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-tb-bin:not(.is-row) .pp-tb-title { margin-top: 2px; }
.pp-tb-bin.is-row .pp-tb-title { flex: 1 1 auto; }
.pp-tb-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; align-items: center; }
.pp-tb-meta .pp-tag, .pp-tb-b .pp-tag { font-size: 12px; }
.pp-tb-minis { display: inline-flex; gap: 6px; align-items: center; flex: none; }
.pp-tb-ok { color: var(--done); display: inline-flex; flex: none; }
.pp-tb-gic { color: var(--text-faint); display: inline-flex; flex: none; }
.pp-tb-c-done { color: var(--done); background: var(--done-soft); }
.pp-tb-c-now { color: var(--accent-hi); background: var(--accent-soft); }
.pp-tb-c-hid { color: var(--personal); background: var(--personal-soft); }
.pp-tb-c-over { color: var(--tb-over-ink); background: var(--red-soft); }
.pp-tb-acts { margin-left: auto; display: inline-flex; gap: 6px; }
.pp-tb-act {
  height: 28px; padding: 0 10px; display: inline-flex; align-items: center; gap: 5px; border-radius: 9px; font-size: 12.5px; font-weight: 600;
  border: 1px solid var(--line-2); background: var(--surface-3); color: var(--text);
}
.pp-tb-act.is-done { background: var(--accent); border-color: var(--accent); color: var(--on-accent); box-shadow: var(--shadow-key); }
.pp-tb-act.is-push { color: var(--tb-over-ink); border-color: var(--red-line); background: var(--red-soft); }

/* the time a finished block did not need */
.pp-tb-early {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 0; display: flex; align-items: flex-end; justify-content: flex-end;
  padding: 0 10px 4px; border-top: 1px dashed var(--line-2);
  background: repeating-linear-gradient(135deg, var(--tb-early-a) 0 6px, var(--tb-early-b) 6px 12px);
  font-size: 11.5px; font-weight: 600; color: var(--text-faint);
}
/* the overrun: planned end to real end, red stripes. It lies OVER whatever block it ran
   into (z-index above blocks, no pointer events), because that is the time the next block
   lost; the stripes are see-through so the block underneath still reads. */
.pp-tb-over {
  position: absolute; z-index: 5; display: flex; align-items: center; justify-content: flex-end; padding: 0 10px;
  border: 1px solid var(--red-line); border-top: 0; border-radius: 0 0 12px 12px;
  background: repeating-linear-gradient(135deg, var(--tb-over-a) 0 7px, var(--tb-over-b) 7px 14px);
  color: var(--tb-over-ink); font-size: 12px; font-weight: 700; pointer-events: none; overflow: hidden;
}

/* drag aids */
.pp-tb-land { position: absolute; z-index: 2; border: 2px dashed var(--accent-line); border-radius: 12px; background: var(--accent-soft-2); opacity: 0; pointer-events: none; }
.pp-tb-ghost {
  position: absolute; z-index: 8; border-radius: 12px; border: 1px solid var(--accent-line); background: var(--accent-soft);
  padding: 7px 12px; opacity: 0; pointer-events: none; font-size: 12.5px; font-weight: 600; color: var(--text);
}
.pp-tb-pill {
  position: absolute; left: 2px; z-index: 10; transform: translateY(-50%); padding: 3px 6px; border-radius: 8px;
  background: var(--accent); color: var(--on-accent); font-size: 11.5px; font-weight: 700; font-variant-numeric: tabular-nums;
  opacity: 0; pointer-events: none;
}
.pp-tb-land.is-on, .pp-tb-ghost.is-on, .pp-tb-pill.is-on { opacity: 1; }
.pp-tb-handle { position: absolute; z-index: 10; width: var(--tap); height: var(--tap); display: grid; place-items: center; touch-action: none; cursor: ns-resize; }
.pp-tb-handle span { width: 14px; height: 14px; border-radius: 50%; background: var(--tb-handle); box-shadow: 0 0 0 3px var(--accent), var(--shadow-ctl); }

/* now */
.pp-tb-now { position: absolute; right: 0; height: 2px; margin-top: -1px; background: var(--tb-now); z-index: 7; pointer-events: none; box-shadow: 0 0 0 1px var(--bg); }
.pp-tb-now::before { content: ""; position: absolute; left: 0; top: -4px; width: 10px; height: 10px; border-radius: 50%; background: var(--tb-now); }
.pp-tb-nowpill {
  position: absolute; left: 4px; z-index: 8; transform: translateY(-50%); padding: 3px 6px; border-radius: 8px;
  background: var(--tb-now); color: var(--tb-now-ink); font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; pointer-events: none;
}

/* rail + cards */
.pp-tb-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; }
.pp-tb-h3 { display: flex; justify-content: space-between; font-size: 12px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: var(--text-dim); }
.pp-tb-h3 span { color: var(--text-faint); }
.pp-tb-hint { margin: 6px 0 0; font-size: 13px; line-height: 1.5; color: var(--text-faint); }
.pp-tb-hint b { color: var(--text); font-weight: 600; }
.pp-tb-big { margin-top: 10px; font-family: var(--font-display); font-size: 42px; font-weight: 600; line-height: 1; color: var(--text); font-variant-numeric: tabular-nums; }
.pp-tb-big.is-over { color: var(--tb-over-ink); }
.pp-tb-big.is-none { font-size: 24px; color: var(--text-faint); }
.pp-tb-trow {
  display: flex; align-items: center; gap: 12px; margin-top: 8px; padding: 9px 8px 9px 12px; border-radius: 12px;
  background: var(--surface-2); border: 1px solid var(--card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card);
}
.pp-tb-trow-main { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 5px; }
.pp-tb-trow-t { font-size: 14px; font-weight: 500; line-height: 1.3; }
.pp-tb-ring { width: 18px; height: 18px; flex: none; border-radius: 50%; border: 2px solid var(--text-faint); }
.pp-tb-ring.is-prog { border-color: var(--accent-hi); background: linear-gradient(90deg, var(--accent-hi) 50%, transparent 50%); }
.pp-tb-plus { width: 36px; height: 36px; flex: none; display: grid; place-items: center; border-radius: 50%; border: 1px solid var(--line-2); background: var(--surface-3); color: var(--text); }
.pp-tb-rollbtn { width: 100%; margin-top: 12px; color: var(--accent-hi); background: var(--accent-soft); border-color: var(--accent-line); }
.pp-tb-histbtn { margin-top: 10px; padding: 0; min-height: 32px; border: 0; color: var(--accent-hi); }
.pp-tb-roll { margin-bottom: 14px; }
.pp-tb-rollrow { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; padding: 8px 8px 8px 14px; border-radius: var(--radius); border: 1px solid var(--line-2); background: var(--surface-2); }
.pp-tb-rollrow-t { flex: 1; min-width: 0; font-size: 13.5px; color: var(--text-dim); }
.pp-tb-rollrow-t b { color: var(--text); font-weight: 600; }
.pp-tb-rollrow .pp-btn { flex: none; color: var(--accent-hi); background: var(--accent-soft); border-color: var(--accent-line); }
.pp-tb-rail .pp-tb-roll { margin-bottom: 0; }

/* sheet */
.pp-tb-picks { display: flex; flex-direction: column; gap: 6px; }
.pp-tb-pick {
  display: flex; align-items: center; gap: 12px; min-height: 52px; padding: 6px 12px; border-radius: 12px; text-align: left;
  border: 1px solid transparent; background: var(--surface-3); color: var(--text);
}
.pp-tb-pick.is-on { background: var(--accent-soft); border-color: var(--accent-line); }
.pp-tb-pick-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pp-tb-pick-t { font-size: 14.5px; font-weight: 500; line-height: 1.3; }
.pp-tb-pick-m { font-size: 12px; color: var(--text-faint); }
.pp-tb-pick-ok { color: var(--accent-hi); display: inline-flex; }
.pp-tb-more { align-self: flex-start; }
.pp-tb-when { display: flex; align-items: center; gap: 10px; }
.pp-tb-when .pp-select { flex: 1; min-width: 0; }
.pp-tb-to { color: var(--text-faint); font-size: 14px; }
.pp-tb-lens { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; margin-top: 8px; }
.pp-tb-len {
  min-height: var(--tap); padding: 0; border-radius: 10px; border: 1px solid var(--line-2); background: var(--surface-2);
  color: var(--text-dim); font-size: 13px; font-weight: 600;
}
.pp-tb-len.is-on { background: var(--accent-soft); border-color: var(--g-tint-rim); color: var(--text); }
.pp-tb-len:disabled { opacity: .35; }
.pp-tb-switchrow {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 56px; padding: 8px 12px;
  border-radius: 12px; border: 1px solid var(--line-2); background: var(--surface-2); color: var(--text); text-align: left; width: 100%;
}
.pp-tb-switchrow.is-on { border-color: var(--personal-line); }
.pp-tb-switch-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pp-tb-switch-t { font-size: 15px; font-weight: 600; }
.pp-tb-switch-s { font-size: 12.5px; color: var(--text-faint); }
.pp-tb-switch { width: 51px; height: 31px; flex: none; border-radius: 16px; background: var(--surface-3); position: relative; box-shadow: inset 0 1px 2px var(--inset-dark); }
.pp-tb-switch span { position: absolute; top: 2px; left: 2px; width: 27px; height: 27px; border-radius: 50%; background: var(--tb-handle); box-shadow: var(--shadow-ctl); }
.pp-tb-switchrow.is-on .pp-tb-switch { background: var(--personal); }
.pp-tb-switchrow.is-on .pp-tb-switch span { left: 22px; }
.pp-seg-btn.pp-tb-seg-done.is-on { background: var(--done); color: var(--done-ink); }
.pp-tb-finish { margin-top: 12px; padding: 12px; border-radius: 12px; background: var(--surface-2); border: 1px solid var(--line); }
.pp-tb-finish-l { font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--text-faint); }
.pp-tb-step { display: flex; align-items: center; justify-content: space-between; margin-top: 6px; }
.pp-tb-step-v { font-size: 22px; font-weight: 600; font-variant-numeric: tabular-nums; }
.pp-tb-step .pp-iconbtn { border: 1px solid var(--line-2); background: var(--surface-3); color: var(--text); }
.pp-tb-quick { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.pp-tb-finish-note { margin: 10px 0 0; font-size: 13.5px; color: var(--text-dim); }
.pp-tb-finish-note.is-over { color: var(--tb-over-ink); font-weight: 600; }
.pp-tb-pushbtn { width: 100%; margin-top: 10px; white-space: normal; text-align: center; }
.pp-tb-focusbtn { width: 100%; }
.pp-tb-notes { min-height: 72px; resize: vertical; }
.pp-tb-ro { display: flex; flex-direction: column; gap: 10px; }
.pp-tb-ro-title { font-size: 20px; font-weight: 600; }
.pp-tb-ro-time { font-size: 14px; color: var(--text-dim); }
.pp-tb-ro-notes { margin: 0; font-size: 14px; line-height: 1.5; color: var(--text-dim); white-space: pre-wrap; }

/* toast */
.pp-tb-toast {
  position: fixed; left: 50%; bottom: calc(22px + var(--safe-bottom)); z-index: 90; display: flex; align-items: center; gap: 8px;
  max-width: calc(100vw - 24px); padding: 8px 8px 8px 16px; border-radius: 14px; background: var(--surface-3);
  border: 1px solid var(--line-2); box-shadow: var(--shadow-lg); font-size: 14px; color: var(--text);
  transform: translate(-50%, 20px); opacity: 0; pointer-events: none;
}
.pp-tb-toast.is-on { transform: translate(-50%, 0); opacity: 1; pointer-events: auto; }
.pp-tb-toast-msg { flex: 1 1 auto; min-width: 0; }
.pp-tb-toast-btn {
  min-height: var(--tap); padding: 0 14px; border-radius: 10px; border: 1px solid var(--line-2); background: var(--surface-2);
  color: var(--text); font-size: 14px; font-weight: 600; white-space: nowrap;
}
.pp-tb-toast-btn.is-primary { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }

/* history */
.pp-tb-hist { display: flex; flex-direction: column; gap: 14px; }
.pp-tb-hist-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.pp-tb-weeknav { display: flex; align-items: center; gap: 8px; }
.pp-tb-weeklbl { min-width: 130px; text-align: center; font-weight: 600; }
.pp-tb-hgrid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.pp-tb-hgrid.is-two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.pp-tb-days { display: flex; gap: 10px; height: 150px; margin-top: 14px; align-items: stretch; }
.pp-tb-day { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.pp-tb-day-bar { flex: 1; width: 100%; max-width: 64px; display: flex; flex-direction: column-reverse; justify-content: flex-start; border-radius: 8px; background: var(--surface-2); overflow: hidden; }
.pp-tb-seg-hit { background: var(--done); }
.pp-tb-seg-over { background: repeating-linear-gradient(135deg, var(--tb-over-a) 0 6px, var(--tb-over-b) 6px 12px); }
.pp-tb-seg-rest { background: var(--surface-3); }
.pp-tb-day-l { font-size: 12px; color: var(--text-faint); font-weight: 600; }
.pp-tb-day.is-today .pp-tb-day-l { color: var(--text); }
.pp-tb-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 12px; font-size: 12.5px; color: var(--text-faint); }
.pp-tb-legend span { display: inline-flex; align-items: center; gap: 6px; }
.pp-tb-legend i { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }
.pp-tb-key-hit { background: var(--done); }
.pp-tb-key-over { background: var(--tb-over-a); }
.pp-tb-key-rest { background: var(--surface-3); }
.pp-tb-hrow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px 0; border-bottom: 1px solid var(--line); }
.pp-tb-hrow:last-child { border-bottom: 0; }
.pp-tb-hrow-t { flex: 1 1 200px; min-width: 0; font-size: 14px; font-weight: 500; }
.pp-tb-hrow-m { font-size: 12.5px; color: var(--text-faint); }

@media (hover: hover) and (pointer: fine) {
  .pp-tb-b.is-mine:hover { border-color: var(--line-2); }
  .pp-tb-plus:hover, .pp-tb-ib:hover, .pp-tb-date:hover { background: var(--surface-2-hi); }
}
@media (prefers-reduced-motion: no-preference) {
  .pp-tb-b.is-lifted { transform: scale(1.02); transition: transform .14s var(--ease), box-shadow .14s var(--ease); }
  .pp-tb-land, .pp-tb-pill { transition: opacity .12s; }
  .pp-tb-toast { transition: transform .22s var(--ease), opacity .18s; }
  .pp-tb-switch span { transition: left .2s var(--spring); }
  .pp-tb-switch { transition: background .2s; }
  .pp-viewbody .pp-tb-panel, .pp-viewbody .pp-tb-rail, .pp-viewbody .pp-tb-hist > * { animation: pp-in-fwd .42s var(--ease) both; }
  .pp-viewbody.is-back .pp-tb-panel, .pp-viewbody.is-back .pp-tb-rail, .pp-viewbody.is-back .pp-tb-hist > * { animation-name: pp-in-back; }
  .pp-viewbody .pp-tb-rail { animation-delay: .05s; }
}

@media (max-width: 760px) {
  .pp-tb-bar { top: calc(var(--safe-top) + 56px); margin: 0 -14px 10px; padding: 8px 14px; gap: 6px; }
  .pp-tb-date { flex: 1; justify-content: center; padding: 0 10px; }
  .pp-tb-today { padding: 0 12px; }
  .pp-tb-add { width: var(--tap); padding: 0; flex: none; }
  .pp-tb-gcbtn { width: var(--tap); padding: 0; }
  .pp-tb-gc { width: auto; }
  .pp-tb-strip { padding: 10px 12px; gap: 10px; }
  .pp-tb-strip-txt { flex-basis: 100%; }
  .pp-tb-strip-acts { width: 100%; }
  .pp-tb-strip-acts .pp-btn { flex: 1 1 auto; }
  .pp-tb-strip-name { min-height: var(--tap); }
  .pp-tb-panel { margin: 0 -6px; }
  .pp-tb-people { top: calc(var(--safe-top) + 56px + 60px); }
  .pp-tb-person { padding: 8px 8px; }
  .pp-tb-people .pp-side-name { font-size: 18px; }
  .pp-tb-hl { font-size: 11px; }
  .pp-tb-grid.is-two .pp-tb-hl { font-size: 10.5px; }
  .pp-tb-b { padding: 6px 8px 6px 11px; }
  .pp-tb-title { font-size: 14px; }
  .pp-tb-grid.is-two .pp-tb-title { font-size: 13px; }
  .pp-tb-grid.is-two .pp-tb-time { display: none; }
  .pp-tb-grid.is-two .pp-tb-meta { display: none; }
  .pp-tb-lens { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .pp-tb-toast { bottom: calc(80px + var(--safe-bottom)); }
  .pp-tb-hgrid, .pp-tb-hgrid.is-two { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .pp-tb-big { font-size: 36px; }
  .pp-tb-days { gap: 6px; height: 120px; }
}

/* Six sections in the top bar (Time Box joined Sep 28). Between the phone layout and about
   1000px the bar ran 95px past the screen at 800, so here the tabs tighten and the Focus
   button and your name chip go to icons, the way the phone already shows them. */
@media (min-width: 761px) and (max-width: 1000px) {
  .pp-top { gap: 10px; padding-left: 16px; padding-right: 16px; }
  .pp-tabs .pp-tab { padding: 0 9px; }
  .pp-focus-start .pp-focus-word { display: none; }
  .pp-userchip-name { display: none; }
  .pp-userchip { padding: 0 5px; }
}


/* ==========================================================================
   EDIT ROOM (a view inside Content, Oct 1 2026). The editor chats' board, read live.
   Reviews are the work, so they take the wide column; who is editing, Resolve and
   the answered list sit beside them on a computer and below them on a phone.
   Red stays "you can act" (Approve, the picks, Send), green is only an answer that
   said yes, and the manager-down strip is the one red surface that is not a button.
   ========================================================================== */
.pp-er { display: flex; flex-direction: column; gap: 14px; }
.pp-er-demo, .pp-er-loading { padding: 28px 16px; font-size: 14px; }

.pp-er-down {
  display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; border-radius: var(--radius-sm);
  background: var(--red-soft); border: 1px solid var(--red-line); color: var(--text); font-size: 14.5px; line-height: 1.45;
}
.pp-er-down .pp-ic { color: var(--red); margin-top: 1px; }
.pp-er-down b { font-weight: 650; }
.pp-er-offline { padding: 10px 14px; border-radius: var(--radius-sm); background: var(--surface-2); border: 1px solid var(--line-2); color: var(--text-dim); font-size: 14px; }
.pp-er-flash { padding: 10px 14px; border-radius: var(--radius-sm); background: var(--done-soft); color: var(--done); font-size: 14px; font-weight: 600; }

/* a review */
.pp-er-card {
  padding: 16px; border-radius: var(--radius); background: var(--surface-2); border: 1px solid var(--card-line);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card); display: flex; flex-direction: column; gap: 12px;
}
.pp-er-card.is-unchecked { border-style: dashed; }
.pp-er-ctitle { font-size: 17px; font-weight: 650; line-height: 1.3; letter-spacing: -.01em; overflow-wrap: anywhere; }
.pp-er-cmeta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin-top: 6px; font-size: 13px; color: var(--text-dim); }
.pp-er-who { color: var(--text); font-weight: 600; }
.pp-er-when { color: var(--text-faint); }
.pp-er-flag { margin: 0; padding: 9px 12px; border-radius: var(--radius-sm); background: var(--red-soft); color: var(--red); font-size: 13.5px; font-weight: 600; }
.pp-er-flagrow { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-right: 14px; }
.pp-er-flagrow .pp-editbtn { margin: -8px -4px; }
.pp-er-note { margin: 0; font-size: 13.5px; color: var(--text-dim); }
.pp-er-note b { color: var(--text); }

.pp-er-vids { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; }
.pp-er-vids.is-single { grid-template-columns: minmax(0, 720px); }
.pp-er-vcell { min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 6px; margin: -6px; border-radius: var(--radius); border: 2px solid transparent; transition: border-color .15s var(--ease); }
.pp-er-vcell.is-picked { border-color: var(--accent-line); background: var(--accent-soft-2); }
.pp-er-vid { margin: 0; min-width: 0; }
.pp-er-player, .pp-er-gone { display: block; width: 100%; max-height: 70vh; border-radius: var(--radius-sm); background: var(--er-screen); }
.pp-er-gone { display: flex; align-items: center; justify-content: center; padding: 16px; text-align: center; font-size: 13px; color: var(--text-faint); border: 1px dashed var(--line-2); background: var(--panel); }
.pp-er-vcap { display: flex; align-items: baseline; gap: 8px; margin-top: 7px; }
.pp-er-vlabel { font-size: 14px; font-weight: 700; }
.pp-er-vmeta { font-size: 12.5px; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-er-pick { width: 100%; }
.pp-er-pick.is-on { background: var(--accent); border-color: var(--accent); color: var(--on-accent); box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-key); }

.pp-er-answer { display: flex; flex-direction: column; gap: 10px; }
.pp-er-acts { display: flex; flex-wrap: wrap; gap: 8px; }
.pp-er-approve { background: var(--accent); border-color: var(--accent); color: var(--on-accent); box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-key); }
.pp-er-approve.is-armed { background: var(--accent-hi); border-color: var(--accent-hi); color: var(--done-ink); }
.pp-er-form { display: flex; flex-direction: column; gap: 8px; }
.pp-er-form .pp-lbl { margin: 0; }
.pp-er-text { min-height: 104px; }
.pp-er-count { align-self: flex-end; font-size: 12.5px; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-er-count.is-over { color: var(--red); font-weight: 700; }
.pp-er-err { margin: 0; font-size: 13.5px; color: var(--red); }

.pp-er-state { flex: none; padding: 3px 9px; border-radius: 999px; font-size: 12px; font-weight: 700; white-space: nowrap; background: var(--surface-3); color: var(--text-dim); }
.pp-er-tone-act { background: var(--accent-soft); color: var(--accent-hi); }
.pp-er-tone-stop { background: var(--red-soft); color: var(--red); }
.pp-er-tone-work { background: var(--surface-3); color: var(--text); }
.pp-er-tone-done { background: var(--done-soft); color: var(--done); }


.pp-er-done { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.pp-er-drow { padding: 11px 13px; }
.pp-er-drow-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.pp-er-dtitle { font-size: 14.5px; font-weight: 600; line-height: 1.3; overflow-wrap: anywhere; }
.pp-er-verdict { flex: none; padding: 3px 9px; border-radius: 999px; font-size: 12px; font-weight: 700; white-space: nowrap; }
.pp-er-v-yes { background: var(--done-soft); color: var(--done); }
.pp-er-v-no { background: var(--surface-3); color: var(--text); }
.pp-er-dmeta { margin-top: 4px; font-size: 12.5px; color: var(--text-faint); }
.pp-er-dmeta b { color: var(--text-dim); font-weight: 600; }
.pp-er-dfb { margin: 7px 0 0; font-size: 13px; color: var(--text-dim); line-height: 1.4; white-space: pre-wrap; overflow-wrap: anywhere;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.pp-er-dfoot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 8px; min-height: 28px; font-size: 12.5px; }
.pp-er-sent { display: inline-flex; align-items: center; gap: 5px; color: var(--done); font-weight: 600; }
.pp-er-waiting { color: var(--text-dim); }
.pp-er-dfoot .pp-er-redo { margin: -8px -6px -8px 0; }

@media (hover: hover) and (pointer: fine) {
  .pp-er-pick:not(.is-on):hover { border-color: var(--accent-line); background: var(--accent-soft); }
}
@media (prefers-reduced-motion: no-preference) {
  .pp-er-card, .pp-er-drow, .pp-ers-tile, .pp-ers-ed { animation: pp-fade .25s ease both; }
  .pp-er-approve.is-armed { animation: pp-er-arm .28s var(--spring); }
  @keyframes pp-er-arm { from { transform: scale(.94); } to { transform: none; } }
}
@media (max-width: 760px) {
  .pp-er-card { padding: 14px 12px; }
  .pp-er-acts .pp-btn { flex: 1 1 auto; }
  .pp-er-vids { grid-template-columns: minmax(0, 1fr); }
}


/* =====================================================================
   REDESIGN LAB (Shadi, Oct 7 2026): sidebar, phone bar with More, Home widgets,
   the keyboard quick add, the late band and sort-out, By date, the docked task panel.
   ===================================================================== */

/* ---------- sidebar ---------- */
.pp-app.is-sided { --side-w: 236px; padding-left: var(--side-w); }
.pp-app.is-sided.is-mini { --side-w: 76px; }
.pp-side {
  position: fixed; left: 0; top: 0; bottom: 0; z-index: 35; width: var(--side-w);
  display: flex; flex-direction: column; gap: 2px; padding: calc(var(--safe-top) + 18px) 12px 14px;
  background: var(--side-bg); border-right: 1px solid var(--w-line);
}
.pp-side-brand { display: flex; align-items: center; gap: 10px; padding: 0 6px 18px; min-height: 58px; }
.pp-side-mark { width: 38px; height: 38px; flex: none; }
.pp-side-brandtext { display: flex; flex-direction: column; min-width: 0; }
.pp-side-app { font-family: var(--font-display); font-size: 18px; font-weight: 600; letter-spacing: -.01em; white-space: nowrap; }
.pp-side-sub { font-size: 12px; color: var(--text-faint); }
.pp-side-nav { display: flex; flex-direction: column; gap: 2px; flex: 1; min-height: 0; overflow-y: auto; }
.pp-side-group { display: flex; flex-direction: column; gap: 2px; }
.pp-side-label { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); padding: 16px 12px 6px; }
.pp-side-rule { display: block; height: 1px; background: var(--w-line); margin: 10px 10px; }
.pp-side-item {
  position: relative; display: flex; align-items: center; gap: 11px; min-height: 42px; padding: 0 12px; border: 0; border-radius: 11px;
  background: transparent; color: var(--text-dim); font-size: 14.5px; font-weight: 550; text-align: left; width: 100%;
}
.pp-side-item.is-on { background: var(--w-card); color: var(--text); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl); }
.pp-side-item.is-on .pp-ic { color: var(--accent-hi); }
.pp-side-text { flex: 1; white-space: nowrap; }
.pp-side-ct { font-size: 12px; font-weight: 600; color: var(--text-faint); }
.pp-side-pip { position: absolute; top: 9px; right: 12px; width: 6px; height: 6px; border-radius: 50%; background: var(--text-faint); }
.pp-side.is-mini .pp-side-item { justify-content: center; padding: 0; }
.pp-side.is-mini .pp-side-brand { justify-content: center; padding: 0 0 18px; }
.pp-side-foot { display: flex; flex-direction: column; gap: 6px; padding-top: 10px; border-top: 1px solid var(--w-line); }
.pp-side-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 2px 2px 4px; }
.pp-side-tools .pp-userchip { flex: 1; justify-content: flex-start; min-width: 0; }
.pp-side-tools.is-mini { flex-direction: column; }
.pp-side-tools.is-mini .pp-userchip { padding: 0 5px; flex: none; }
.pp-side-tools .pp-syncnote { width: 100%; }
.pp-side-fold { color: var(--text-faint); }
@media (hover: hover) and (pointer: fine) {
  .pp-side-item:not(.is-on):hover { background: var(--surface-2); color: var(--text); }
}
.pp-app.is-sided .pp-main::before { display: none; }
.pp-app.is-sided .pp-demo { top: 0; }

/* ---------- phone bar: four sections and More ---------- */
.pp-tab-dot { position: absolute; top: 6px; right: calc(50% - 16px); width: 7px; height: 7px; border-radius: 50%; background: var(--dot); }
.pp-more-scrim { z-index: 60; }
.pp-more {
  position: fixed; left: 8px; right: 8px; bottom: calc(8px + var(--safe-bottom)); z-index: 61; padding: 8px 8px 10px;
  border-radius: 22px; background: var(--glass); -webkit-backdrop-filter: blur(30px) saturate(1.6); backdrop-filter: blur(30px) saturate(1.6);
  border: 1px solid var(--glass-line); box-shadow: inset 0 1px 0 var(--glass-edge), var(--shadow-lg);
}
.pp-more-grab { width: 38px; height: 5px; border-radius: 3px; background: var(--line-2); margin: 2px auto 8px; }
.pp-more-item { width: 100%; display: flex; align-items: center; gap: 12px; min-height: 56px; padding: 0 12px; border: 0; border-radius: 14px; background: transparent; color: var(--text); font-size: 16px; font-weight: 600; text-align: left; }
.pp-more-item.is-on { background: var(--w-card); }
.pp-more-ic { width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; background: var(--surface-2); color: var(--text-dim); }
.pp-more-text { flex: 1; }
.pp-more-chev { color: var(--text-faint); }

/* ---------- Home ---------- */
.pp-home { display: flex; gap: 20px; align-items: flex-start; }
.pp-home-main { flex: 1; min-width: 0; }
.pp-home-head { display: flex; align-items: flex-end; gap: 14px; margin-bottom: 18px; }
.pp-home-date { font-size: 13.5px; color: var(--text-dim); margin-bottom: 4px; }
.pp-home-hello { font-size: 34px; }
.pp-home-actions { margin-left: auto; display: flex; gap: 10px; }
.pp-home-editbtn { min-height: 40px; }
.pp-home-editbar {
  display: flex; align-items: center; gap: 12px; padding: 10px 12px 10px 14px; margin: -4px 0 16px; border-radius: 14px;
  background: var(--accent-soft-2); border: 1px solid var(--accent-line); font-size: 13.5px; color: var(--text-dim);
}
.pp-home-editbar > .pp-ic { color: var(--accent-hi); flex: none; }
.pp-home-editbar b { color: var(--text); }
.pp-home-editsp { flex: 1; }
.pp-home-empty { padding: 40px; text-align: center; }
.pp-linkbtn { border: 0; background: none; color: var(--accent-hi); font-weight: 600; padding: 0; cursor: pointer; font-size: inherit; }

.pp-wgrid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); grid-auto-rows: 186px; grid-auto-flow: row dense; gap: 14px; }
.pp-wgrid.is-phone { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: minmax(150px, auto); gap: 10px; }
.pp-w {
  position: relative; min-width: 0; overflow: hidden; border-radius: 18px; background: var(--w-bg); border: 1px solid var(--w-line);
  padding: 16px; display: flex; flex-direction: column; transition: box-shadow .15s, border-color .15s, opacity .15s;
}
.pp-wgrid.is-phone .pp-w { padding: 14px; }
.pp-wbody { flex: 1; min-height: 0; display: flex; flex-direction: column; }
.pp-w-upnext { background: linear-gradient(120deg, var(--w-glow), var(--w-glow-none) 60%), var(--w-bg); }
.pp-home.is-editing .pp-w { border: 1.5px dashed var(--w-line-2); }
.pp-home.is-editing .pp-wbody { opacity: .55; }
.pp-w.is-lifted { opacity: .35; }
.pp-w.is-target { border: 1.5px solid var(--accent-hi); box-shadow: 0 0 0 4px var(--accent-soft); }
.pp-w-add { border: 1.5px dashed var(--w-line-2); background: transparent; color: var(--text-dim); font-weight: 600; flex-direction: row; align-items: center; justify-content: center; gap: 8px; min-height: 60px; }
.pp-wgrip {
  position: absolute; top: 8px; left: 8px; z-index: 3; width: 44px; height: 28px; border: 0; border-radius: 9px;
  background: var(--surface-3); color: var(--text); display: grid; place-items: center; cursor: grab; touch-action: none;
}
.pp-wx {
  position: absolute; top: 8px; right: 8px; z-index: 3; width: 28px; height: 28px; border-radius: 50%; border: 0;
  background: var(--surface-3); color: var(--text); display: grid; place-items: center;
}
.pp-wsize { position: absolute; top: 7px; left: 50%; transform: translateX(-50%); z-index: 3; display: flex; gap: 2px; padding: 2px; border-radius: 10px; background: var(--bg); border: 1px solid var(--w-line-2); }
.pp-wsize-btn { min-width: 30px; height: 26px; border: 0; border-radius: 8px; background: transparent; color: var(--text-dim); font-size: 12px; font-weight: 700; }
.pp-wsize-btn.is-on { background: var(--text); color: var(--bg); }
.pp-wsize-btn:disabled { opacity: .25; }
body.pp-wdragging, body.pp-wdragging * { cursor: grabbing !important; user-select: none; }
.pp-wghost {
  position: fixed; z-index: 90; pointer-events: none; transform: translate(-50%, -130%); display: flex; align-items: center; gap: 7px;
  padding: 8px 12px; border-radius: 12px; background: var(--w-ghost); border: 1px solid var(--accent-line); box-shadow: var(--w-lift);
  font-size: 13px; font-weight: 600; white-space: nowrap;
}

/* the shelf */
.pp-wshelf {
  width: 300px; flex: none; position: sticky; top: 16px; align-self: flex-start; max-height: calc(100vh - 32px); overflow-y: auto;
  border-radius: 18px; background: var(--w-bg); border: 1px solid var(--w-line-2); padding: 16px; display: flex; flex-direction: column; gap: 8px;
}
.pp-wshelf.is-target { border-color: var(--accent-hi); box-shadow: 0 0 0 4px var(--accent-soft); }
.pp-wshelf-head { font-size: 16px; font-weight: 700; margin-bottom: 4px; }
.pp-wshelf-empty, .pp-wshelf-tip { font-size: 12.5px; color: var(--text-faint); line-height: 1.5; }
.pp-wshelf-tip { margin-top: 6px; }
.pp-wshelf-item { display: flex; align-items: center; gap: 8px; border-radius: 13px; background: var(--w-card); padding: 6px 8px 6px 6px; }
.pp-wshelf-drag { flex: 1; min-width: 0; display: flex; align-items: center; gap: 10px; border: 0; background: transparent; color: var(--text); text-align: left; padding: 4px; cursor: grab; touch-action: none; }
.pp-wshelf-ic { width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center; background: var(--surface-3); color: var(--text-dim); flex: none; }
.pp-wic-focus, .pp-wic-quickadd { background: var(--accent-soft); color: var(--accent-hi); }
.pp-wic-pool { background: var(--both-soft); color: var(--both); }
.pp-wic-money { background: var(--done-soft); color: var(--done); }
.pp-wic-note { background: var(--personal-soft); color: var(--personal); }
.pp-wshelf-text { display: flex; flex-direction: column; min-width: 0; }
.pp-wshelf-text b { font-size: 14px; }
.pp-wshelf-text small { font-size: 12px; color: var(--text-faint); }
.pp-wshelf-add { width: 32px; height: 32px; border-radius: 50%; border: 0; background: var(--surface-3); color: var(--text); display: grid; place-items: center; flex: none; }

/* widget parts */
.pp-whead { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; min-height: 22px; }
.pp-wtitle { font-size: 14px; font-weight: 700; }
.pp-wtitle.is-late { color: var(--late); }
.pp-wcount { font-size: 13px; color: var(--text-dim); }
.pp-wmore { margin-left: auto; border: 0; background: none; color: var(--text-dim); font-size: 12.5px; font-weight: 600; display: inline-flex; align-items: center; gap: 2px; padding: 4px 0 4px 6px; }
.pp-wempty { flex: 1; display: flex; align-items: center; justify-content: center; gap: 8px; color: var(--text-dim); font-size: 14px; text-align: center; }
.pp-wnone { font-size: 12.5px; color: var(--text-faint); border: 1.5px dashed var(--w-line-2); border-radius: 11px; padding: 10px; text-align: center; }
.pp-wmuted { font-size: 12.5px; color: var(--text-faint); }
.pp-wlabel { font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint); margin-right: 8px; }
.pp-wsec { margin: 14px 0 8px; display: block; }
.pp-wfoot { margin-top: auto; padding-top: 10px; border-top: 1px solid var(--w-line); font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-wsplit { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; color: var(--text-dim); padding: 3px 0; }
.pp-wsplit b { color: var(--text); }
.pp-wsplit .is-in { color: var(--done); }
.pp-wsplit .is-out { color: var(--late); }
.pp-wtotal { border-top: 1px solid var(--w-line); margin-top: 4px; padding-top: 8px; }
.pp-wline { display: flex; align-items: center; gap: 8px; font-size: 13px; padding: 5px 0; min-width: 0; }
.pp-wline-t { flex: 1; min-width: 0; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-wline-d { font-size: 12px; color: var(--text-faint); white-space: nowrap; }
.pp-wline-late { color: var(--late); font-weight: 700; font-size: 12.5px; }
.pp-wline-fix { color: var(--accent-hi); font-weight: 700; font-size: 12.5px; }  /* Content rework: a client sent this post back */
.pp-wlink { border: 0; background: none; color: inherit; text-align: left; padding: 0; cursor: pointer; }

.pp-weyebrow { display: flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.pp-weyebrow.is-red { color: var(--accent-hi); }
.pp-weyebrow.is-late { color: var(--late); }
.pp-wup { display: flex; flex-direction: column; height: 100%; }
.pp-wup > * { flex-shrink: 0; }
.pp-home.is-editing .pp-wbody { padding-top: 30px; }
.pp-wup-title { font-size: 17px; font-weight: 650; line-height: 1.28; margin-top: 7px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.pp-wup-meta { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; }
.pp-wup-acts { display: flex; gap: 8px; margin-top: auto; padding-top: 10px; flex-wrap: wrap; }
.pp-wup-acts .pp-btn { min-height: 38px; }
.pp-wquiet { color: var(--text-dim); }

.pp-wdone { display: flex; align-items: center; justify-content: center; height: 100%; gap: 16px; }
.pp-wdone.is-wide { justify-content: flex-start; }
.pp-wring { --pp-w-pct: 0%; width: 104px; height: 104px; border-radius: 50%; flex: none; display: grid; place-items: center; background: conic-gradient(var(--done) 0 var(--pp-w-pct), var(--surface-3) var(--pp-w-pct) 100%); }
.pp-wring.is-sm { width: 76px; height: 76px; }
.pp-wring-in { width: calc(100% - 20px); height: calc(100% - 20px); border-radius: 50%; background: var(--w-bg); display: flex; flex-direction: column; align-items: center; justify-content: center; }
.pp-wring-in b { font-family: var(--font-display); font-size: 30px; line-height: 1; }
.pp-wring.is-sm .pp-wring-in b { font-family: inherit; font-size: 15px; }
.pp-wring-in small { font-size: 11px; color: var(--text-dim); margin-top: 3px; }
.pp-wdone-list { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.pp-wdone-item { display: flex; gap: 6px; align-items: center; font-size: 13px; color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-wdone-item .pp-ic { color: var(--done); flex: none; }

.pp-wpartner { display: flex; flex-direction: column; height: 100%; }
.pp-wperson { display: flex; align-items: center; gap: 10px; }
.pp-wperson b { display: block; font-size: 15px; }
.pp-wperson small { font-size: 12px; color: var(--text-dim); }
.pp-wface { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: var(--both-soft); color: var(--both); font-weight: 700; flex: none; }
.pp-wface.is-live { box-shadow: 0 0 0 2px var(--w-bg), 0 0 0 4px var(--done); }
.pp-wstats { display: flex; gap: 12px; flex-wrap: wrap; font-size: 12.5px; color: var(--text-dim); margin-top: auto; padding-top: 10px; }
.pp-wstats b { color: var(--text); }
.pp-wstats .is-late b { color: var(--late); }

.pp-wday { display: flex; flex-direction: column; height: 100%; }
.pp-wday-track { position: relative; flex: 1; min-height: 52px; border-radius: 12px; background: var(--bg); border: 1px solid var(--w-line); overflow: hidden; }
.pp-wday-track.is-empty { border: 1.5px dashed var(--w-line-2); }
.pp-wday-past { position: absolute; left: 0; top: 0; bottom: 0; background: repeating-linear-gradient(135deg, transparent 0 7px, var(--w-hatch) 7px 14px); }
.pp-wday-blk {
  position: absolute; top: 6px; bottom: 6px; border-radius: 9px; background: var(--w-card); box-shadow: inset 0 1px 0 var(--edge-hi);
  padding: 0 9px; display: flex; align-items: center; font-size: 12.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pp-wday-blk.is-now { background: var(--accent-soft); box-shadow: inset 0 0 0 1.5px var(--accent-hi); }
.pp-wday-blk.is-done { background: var(--done-soft); color: var(--done); text-decoration: line-through; }
.pp-wday-blk.is-skip { opacity: .45; text-decoration: line-through; }
.pp-wday-blk.is-cal { background: var(--both-soft); color: var(--both); }
.pp-wday-empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; gap: 12px; font-size: 13.5px; color: var(--text-dim); padding: 0 12px; text-align: center; flex-wrap: wrap; }
.pp-wday-empty .pp-btn { min-height: 34px; }
.pp-wday-now { position: absolute; top: 0; bottom: 0; width: 2px; background: var(--accent-hi); }
.pp-wday-now span { position: absolute; top: 3px; left: 6px; font-size: 10.5px; font-weight: 700; color: var(--accent-hi); white-space: nowrap; }
.pp-wday-hours { position: relative; height: 16px; margin-top: 6px; font-size: 11px; font-weight: 600; color: var(--text-faint); }
.pp-wday-hours span { position: absolute; transform: translateX(-2px); white-space: nowrap; }

.pp-wlist { display: flex; flex-direction: column; height: 100%; }
.pp-wlist-rows { display: flex; flex-direction: column; gap: 6px; min-height: 0; overflow: hidden; }
.pp-wrow { display: flex; align-items: center; gap: 4px; border-radius: 12px; background: var(--w-card); box-shadow: inset 0 1px 0 var(--edge-hi); padding: 4px 8px 4px 4px; }
.pp-wrow.is-late { box-shadow: inset 3px 0 0 var(--late), inset 0 1px 0 var(--edge-hi); }
.pp-wrow.is-personal { box-shadow: inset 3px 0 0 var(--personal), inset 0 1px 0 var(--edge-hi); }
.pp-wtick { width: 40px; height: 40px; border: 0; background: none; display: grid; place-items: center; flex: none; }
.pp-wtick-ring { width: 20px; height: 20px; border-radius: 50%; border: 2px solid var(--line-2); }
.pp-wtick.pp-st-in_progress .pp-wtick-ring { border-color: var(--accent-hi); background: conic-gradient(var(--accent-hi) 0 50%, transparent 50%); }
.pp-wrow-main { flex: 1; min-width: 0; border: 0; background: none; color: inherit; text-align: left; padding: 6px 0; display: flex; flex-direction: column; gap: 5px; }
.pp-wrow-title { font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-wrow-meta { display: flex; gap: 5px; flex-wrap: wrap; }
.pp-wlist-foot { display: flex; align-items: center; gap: 12px; margin-top: auto; padding-top: 10px; font-size: 12.5px; color: var(--text-dim); }
.pp-wok { display: inline-flex; align-items: center; gap: 5px; }
.pp-wok .pp-ic { color: var(--done); }

.pp-wbars { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; height: 84px; }
.pp-wbar { display: flex; flex-direction: column; align-items: center; gap: 5px; font-size: 10.5px; font-weight: 700; color: var(--text-faint); min-width: 0; }
.pp-wbar.is-today { color: var(--accent-hi); }
.pp-wbar-stack { flex: 1; width: 100%; display: flex; flex-direction: column; justify-content: flex-end; gap: 2px; }
.pp-wbar-stack i { display: block; border-radius: 5px; min-height: 6px; }
.pp-wbar-me { background: var(--accent-hi); }
.pp-wbar-them { background: var(--both); }
.pp-wbar-none { background: var(--surface-3); height: 5px; min-height: 5px !important; }
.pp-wlegend { display: flex; gap: 12px; font-size: 11.5px; color: var(--text-faint); margin-top: 8px; }
.pp-wlegend span { display: flex; align-items: center; gap: 5px; }
.pp-wlegend i { width: 8px; height: 8px; border-radius: 2px; display: block; }
.pp-wfocus-go { display: flex; gap: 6px; margin-bottom: auto; }
.pp-wfocus-go .pp-btn { flex: 1; min-height: 40px; padding: 0 6px; }
.pp-wfocus-run { display: flex; align-items: center; gap: 12px; margin-bottom: auto; }
.pp-wtake { min-height: 30px; padding: 0 9px; font-size: 12px; }
.pp-wnote-text { font-size: 13px; color: var(--text-dim); line-height: 1.5; white-space: pre-line; overflow: hidden; flex: 1; }
.pp-wquick .pp-chain { margin: 0; }

/* ---------- keyboard quick add ---------- */
.pp-chain { position: relative; margin: 6px 0 4px; }
.pp-tasks-chain { margin: 14px 0 6px; }
.pp-chain-row {
  display: flex; align-items: center; gap: 8px; padding: 6px 6px 6px 14px; border-radius: 14px;
  background: var(--surface); border: 1.5px solid var(--line-2); box-shadow: inset 0 1px 2px var(--inset-dark);
}
.pp-chain.is-open .pp-chain-row, .pp-chain-row:focus-within { border-color: var(--accent-line); }
.pp-chain-plus { color: var(--accent-hi); display: flex; flex: none; }
.pp-chain-title { flex: 1; min-width: 80px; border: 0; outline: 0; background: transparent; color: var(--text); font-size: 15px; height: 38px; padding: 0; }
.pp-chain-chips { display: flex; align-items: center; gap: 6px; flex: none; }
.pp-chain-chip {
  min-height: 34px; display: inline-flex; align-items: center; gap: 6px; padding: 0 11px; border-radius: 10px; border: 1.5px solid transparent;
  background: var(--surface-2); color: var(--text-dim); font-size: 13px; font-weight: 600; white-space: nowrap;
}
.pp-chain-chip.is-set { color: var(--text); }
.pp-chain-chip.is-own { color: var(--personal); background: var(--personal-soft); }
.pp-chain-chip.is-now { border-color: var(--accent-hi); background: var(--accent-soft); color: var(--text); }
.pp-chain-go { min-height: 36px; }
.pp-chain-err { font-size: 13px; color: var(--late); margin: 6px 4px 0; }
.pp-chain-pop {
  position: absolute; z-index: 50; top: calc(100% + 6px); right: 0; width: 330px; padding: 12px; border-radius: 16px; outline: 0;
  background: var(--pop-bg); border: 1px solid var(--accent-line); box-shadow: inset 0 1px 0 var(--glass-edge), var(--shadow-lg);
}
.pp-chain-steps { display: flex; gap: 6px; margin-bottom: 10px; }
.pp-chain-dot { font-size: 11px; font-weight: 700; padding: 3px 8px; border-radius: 7px; background: var(--surface-2); color: var(--text-faint); }
.pp-chain-dot.is-on { background: var(--accent); color: var(--on-accent); }
.pp-chain-dot.is-done { color: var(--done); }
.pp-chain-calhead { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.pp-chain-month { font-weight: 700; font-size: 14px; }
.pp-chain-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; text-align: center; }
.pp-chain-wd { font-size: 11px; font-weight: 700; color: var(--text-faint); padding: 4px 0; }
.pp-chain-day { height: 36px; border: 0; border-radius: 9px; background: transparent; color: var(--text); font-size: 13.5px; font-weight: 600; }
.pp-chain-day.is-past { color: var(--text-faint); }
.pp-chain-day.is-today { color: var(--accent-hi); }
.pp-chain-day.is-sel { box-shadow: inset 0 0 0 1.5px var(--line-2); }
.pp-chain-day.is-cur { background: var(--accent); color: var(--on-accent); }
.pp-chain-calfoot { display: flex; gap: 6px; margin-top: 8px; }
.pp-chain-calfoot .pp-btn { flex: 1; min-height: 34px; padding: 0 6px; font-size: 13px; }
.pp-chain-list { display: flex; flex-direction: column; gap: 2px; }
.pp-chain-opt { min-height: 40px; display: flex; align-items: center; gap: 8px; padding: 0 12px; border: 0; border-radius: 10px; background: transparent; color: var(--text-dim); font-size: 14px; font-weight: 600; text-align: left; }
.pp-chain-opt.is-hi { background: var(--surface-3); color: var(--text); }
.pp-chain-opt.is-own { color: var(--personal); }
.pp-chain-opt:disabled { opacity: .4; }
.pp-chain-why { margin-left: auto; font-size: 11.5px; font-weight: 500; }
.pp-chain-tick { margin-left: auto; color: var(--accent-hi); }
.pp-chain-hint { margin-top: 10px; font-size: 11.5px; color: var(--text-faint); line-height: 1.7; }
.pp-chain-hint kbd { font-family: inherit; font-size: 11px; font-weight: 700; background: var(--surface-3); color: var(--text); border-radius: 5px; padding: 1px 5px; margin-right: 2px; }

/* ---------- late in orange ---------- */
.pp-card.is-late { box-shadow: inset 3px 0 0 var(--late), var(--shadow-card); }
.pp-due-late { color: var(--late); background: var(--late-soft); }

/* ---------- By date view ---------- */
.pp-bydate { display: flex; flex-direction: column; gap: 6px; max-width: 860px; }
.pp-bd-group { display: flex; flex-direction: column; gap: 6px; }
.pp-bd-head { display: flex; align-items: center; gap: 8px; padding: 12px 4px 4px; font-size: 12px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint); }
.pp-bd-group.is-late .pp-bd-head { color: var(--late); }
.pp-bd-group.is-done .pp-bd-head { color: var(--done); }
.pp-bd-ct { letter-spacing: 0; color: var(--text-dim); }
.pp-bd-hint { margin-left: auto; letter-spacing: 0; text-transform: none; font-weight: 500; }
.pp-bd-group.is-empty .pp-bd-head { opacity: .55; }
.pp-bd-list { display: flex; flex-direction: column; gap: 6px; }

/* ---------- the task panel sits beside the list on a computer ---------- */
body.pp-docked .pp-scrim { opacity: 0; pointer-events: none; }
body.pp-docked .pp-app.is-wide .pp-main { margin-right: 440px; transition: margin-right .26s cubic-bezier(.2, .8, .2, 1); }
body.pp-docked .pp-drawer { box-shadow: none; border-left: 1px solid var(--w-line-2); }

@media (max-width: 760px) {
  .pp-home-hello { font-size: 27px; }
  .pp-home-head { margin-bottom: 14px; }
  .pp-home-editbar { flex-wrap: wrap; }
  .pp-home { display: block; }
  .pp-wshelf { position: static; width: auto; max-height: none; margin-top: 14px; }
  .pp-chain-row { flex-wrap: wrap; padding: 6px; }
  .pp-chain-title { flex-basis: 100%; padding-left: 8px; }
  .pp-chain-chips { width: 100%; }
  .pp-chain-chips .pp-chain-chip { flex: 1; justify-content: center; padding: 0 6px; min-width: 0; overflow: hidden; }
  .pp-chain-pop { left: 0; right: 0; width: auto; }
  .pp-chain-plus { display: none; }
  .pp-wup-acts .pp-btn { flex: 1; padding: 0 8px; }
}

/* ---------- TASKS LOOK (Oct 8, Shadi: "just make it look much nicer") ----------
   Same board, same three columns. It takes the Home widgets' material: each column is a
   widget panel, cards are the lifted rows from Your list, and the chrome above the board
   shrinks to one quiet line so the work is what you see first. */
/* the add bar is a panel of its own */
[data-page="tasks"] .pp-tasks-chain { margin: 0 0 16px; }
[data-page="tasks"] .pp-chain-row { padding: 8px 8px 8px 16px; border-radius: 16px; background: var(--w-bg); border: 1px solid var(--w-line-2); box-shadow: none; }
[data-page="tasks"] .pp-chain-title { font-size: 15.5px; height: 40px; }
[data-page="tasks"] .pp-chain-chip { background: var(--w-card); }

/* columns are widget panels */
[data-page="tasks"] .pp-cols { gap: 16px; align-items: stretch; }
[data-page="tasks"] .pp-sec {
  background: var(--w-bg); border: 1px solid var(--w-line); border-radius: 20px; padding: 14px 12px 12px;
  display: flex; flex-direction: column; min-height: 420px;
}
[data-page="tasks"] .pp-sec-done { background: linear-gradient(180deg, var(--w-glow-done), var(--w-glow-done-none) 180px), var(--w-bg); }
[data-page="tasks"] .pp-sec.is-drop { border-color: var(--accent-line); box-shadow: 0 0 0 4px var(--accent-soft-2); }
[data-page="tasks"] .pp-sec-head { min-height: 30px; padding: 0 6px 12px; gap: 10px; }
[data-page="tasks"] .pp-sec-label { font-size: 15px; font-weight: 700; letter-spacing: -.005em; text-transform: none; color: var(--text); }
[data-page="tasks"] .pp-sec-ct { margin-left: auto; min-width: 26px; height: 24px; padding: 0 8px; border-radius: 8px; display: inline-flex; align-items: center; justify-content: center; background: var(--w-card); color: var(--text-dim); font-size: 12px; font-weight: 700; }
[data-page="tasks"] .pp-sec-in_progress .pp-sec-ct { color: var(--accent-hi); background: var(--accent-soft); }
[data-page="tasks"] .pp-sec-done .pp-sec-ct { color: var(--done); background: var(--done-soft); }
[data-page="tasks"] .pp-sec-mark { width: 12px; height: 12px; }
[data-page="tasks"] .pp-sec-list { flex: 1; gap: 8px; }
[data-page="tasks"] .pp-empty {
  flex: 1; display: flex; align-items: center; justify-content: center; min-height: 96px; padding: 18px;
  border: 1.5px dashed var(--w-line-2); border-radius: 14px; color: var(--text-faint); font-size: 13px;
}

/* cards: the lifted rows from Home's Your list */
[data-page="tasks"] .pp-card {
  background: var(--w-card); border: 1px solid var(--w-card-line); border-radius: 14px;
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); padding: 4px 12px 10px 4px;
}
[data-page="tasks"] .pp-card.is-late { border-left: 1px solid var(--w-card-line); box-shadow: inset 3px 0 0 var(--late), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
[data-page="tasks"] .pp-card.is-personal { border-left: 1px solid var(--w-card-line); box-shadow: inset 3px 0 0 var(--personal), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
[data-page="tasks"] .pp-card.is-personal.is-late { box-shadow: inset 3px 0 0 var(--late), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
[data-page="tasks"] .pp-card-main { padding-top: 11px; }
[data-page="tasks"] .pp-card-title { font-size: 14.5px; font-weight: 600; line-height: 1.38; }
[data-page="tasks"] .pp-card-meta { margin-top: 8px; gap: 5px; font-size: 11.5px; }
[data-page="tasks"] .pp-status-ring { width: 20px; height: 20px; }
[data-page="tasks"] .pp-tag, [data-page="tasks"] .pp-due, [data-page="tasks"] .pp-from, [data-page="tasks"] .pp-owner { border-radius: 7px; padding: 3px 8px; }
[data-page="tasks"] .pp-tag, [data-page="tasks"] .pp-due-soon, [data-page="tasks"] .pp-due-far, [data-page="tasks"] .pp-due-now { background: var(--surface-3); }
[data-page="tasks"] .pp-due-late { color: var(--late); background: var(--late-soft); }
.pp-card-prog { height: 4px; border-radius: 2px; background: var(--surface-3); margin: 10px 0 2px; overflow: hidden; }
.pp-card-prog i { display: block; height: 100%; border-radius: 2px; background: var(--done); }
[data-page="tasks"] .pp-sec-in_progress .pp-card { border-color: var(--w-line-2); }
@media (hover: hover) and (pointer: fine) {
  [data-page="tasks"] .pp-card:not(.pp-st-done):hover { background: var(--w-card-hi); transform: translateY(-1px); }
}

/* finished work steps back: no box, no strike, a green tick and the title in grey */
[data-page="tasks"] .pp-card.pp-st-done { background: transparent; border-color: transparent; box-shadow: none; opacity: 1; padding-bottom: 6px; }
[data-page="tasks"] .pp-card.pp-st-done .pp-card-title { color: var(--text-dim); font-weight: 500; text-decoration: none; }
[data-page="tasks"] .pp-card.pp-st-done .pp-card-meta { margin-top: 5px; }
@media (hover: hover) and (pointer: fine) { [data-page="tasks"] .pp-card.pp-st-done:hover { background: var(--w-card); } }
[data-page="tasks"] .pp-sec-done .pp-sec-list { gap: 2px; }
[data-page="tasks"] .pp-older { margin-top: 8px; background: transparent; border: 1px solid var(--w-line); box-shadow: none; }

@media (max-width: 760px) {
  [data-page="tasks"] .pp-sec { min-height: 0; border-radius: 18px; padding: 12px 10px 10px; }
  [data-page="tasks"] .pp-empty { min-height: 64px; }
}
/* done work keeps its chips but in grey, so yellow and orange only ever point at open work */
[data-page="tasks"] .pp-st-done .pp-tag, [data-page="tasks"] .pp-st-done .pp-due, [data-page="tasks"] .pp-st-done .pp-from { color: var(--text-faint); background: var(--w-card); }
/* the in-progress column always shows where to drop the next one */
@media (min-width: 761px) {
  [data-page="tasks"] .pp-cols .pp-sec-in_progress .pp-sec-list:not(:has(.pp-empty))::after {
    content: "Drag a task here to start it"; display: flex; align-items: center; justify-content: center; min-height: 64px;
    border: 1.5px dashed var(--w-line-2); border-radius: 14px; color: var(--text-faint); font-size: 13px;
  }
}
/* phone: the section titles stick while you scroll, so the panel stays one flat colour behind them */
@media (max-width: 760px) {
  [data-page="tasks"] .pp-sec, [data-page="tasks"] .pp-sec-in_progress, [data-page="tasks"] .pp-sec-done { background: var(--w-bg); }
  [data-page="tasks"] .pp-sec-head { background: var(--w-bg); padding-top: 4px; }
}

/* ---------- Tasks header (Oct 8): title and numbers on one line, a tab line, one Filter button ---------- */
.pp-tkh { margin-bottom: 18px; }
.pp-tk-eyebrow { font-size: 13px; color: var(--text-faint); margin-bottom: 4px; }
.pp-tkh-top { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; }
.pp-tkh .pp-h1 { font-size: 40px; line-height: 1.05; }
.pp-tkh-stats { display: flex; align-items: stretch; flex: none; }
.pp-tkh-stat { display: flex; flex-direction: column; justify-content: flex-end; gap: 4px; padding: 0 22px; border-left: 1px solid var(--w-line-2); }
.pp-tkh-stat:first-child { border-left: 0; }
.pp-tkh-stat:last-child { padding-right: 4px; }
.pp-tkh-stat b { font-size: 30px; font-weight: 650; line-height: 1; letter-spacing: -.02em; font-variant-numeric: tabular-nums; color: var(--text); }
.pp-tkh-stat span { font-size: 12px; font-weight: 600; color: var(--text-faint); white-space: nowrap; }
.pp-tkh-stat.is-late b { color: var(--late); }
.pp-tkh-stat.is-done b { color: var(--done); }

.pp-tkh-bar { display: flex; align-items: flex-end; gap: 12px; margin-top: 22px; border-bottom: 1px solid var(--w-line-2); }
.pp-tkh-tabs { display: flex; align-items: flex-end; gap: 4px; flex: 1; min-width: 0; overflow-x: auto; scrollbar-width: none; }
.pp-tkh-tabs::-webkit-scrollbar { display: none; }
.pp-tkh-tab {
  position: relative; flex: none; display: inline-flex; align-items: center; gap: 7px; height: 44px; padding: 0 12px;
  border: 0; background: transparent; color: var(--text-faint); font-size: 14.5px; font-weight: 600; white-space: nowrap;
  transition: color .16s var(--ease);
}
.pp-tkh-tab::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2px; border-radius: 2px; background: transparent; transition: background .16s var(--ease); }
.pp-tkh-tab.is-on { color: var(--text); }
.pp-tkh-tab.is-on::after { background: var(--accent-hi); }
.pp-tkh-ct { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; font-size: 11.5px; font-weight: 700; background: var(--w-card); color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-tkh-tab.is-on .pp-tkh-ct { background: var(--accent-soft); color: var(--accent-hi); }
.pp-tkh-tab .pp-newdot, .pp-tkh-tool .pp-newdot { margin: 0; box-shadow: none; }
@media (hover: hover) and (pointer: fine) { .pp-tkh-tab:not(.is-on):hover { color: var(--text-dim); } .pp-tkh-tool:not(.is-on):hover { color: var(--text); background: var(--w-card); } }

.pp-tkh-tools { display: flex; align-items: center; gap: 6px; flex: none; padding-bottom: 7px; }
.pp-tkh-tool {
  display: inline-flex; align-items: center; gap: 7px; height: 34px; padding: 0 12px; border-radius: 10px;
  border: 1px solid var(--w-line-2); background: transparent; color: var(--text-dim); font-size: 13.5px; font-weight: 600; white-space: nowrap;
}
.pp-tkh-tool.is-on { color: var(--accent-hi); border-color: var(--accent-line); background: var(--accent-soft); }
.pp-tkh-fct { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 6px; background: var(--accent); color: var(--on-accent); font-size: 11px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; }
.pp-tkh-fwrap { position: relative; }
.pp-tkh-pop {
  position: absolute; z-index: 60; top: calc(100% + 8px); right: 0; width: 320px; padding: 14px; border-radius: 16px;
  background: var(--pop-bg); border: 1px solid var(--w-line-2); box-shadow: inset 0 1px 0 var(--glass-edge), var(--shadow-lg);
}
.pp-tkh-pgroup + .pp-tkh-pgroup { margin-top: 14px; }
.pp-tkh-plabel { font-size: 11.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 8px; }
.pp-tkh-pchips { display: flex; flex-wrap: wrap; gap: 6px; }
.pp-tkh-pchip { display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 12px; border-radius: 10px; border: 1px solid transparent; background: var(--w-card); color: var(--text-dim); font-size: 13px; font-weight: 600; }
.pp-tkh-pchip.is-on { color: var(--accent-hi); background: var(--accent-soft); border-color: var(--accent-line); }
.pp-tkh-pchip.is-own.is-on { color: var(--personal); background: var(--personal-soft); border-color: var(--personal-line); }
.pp-tkh-pfoot { display: flex; align-items: center; justify-content: space-between; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--w-line); }
.pp-tkh-pfoot .pp-linkbtn:disabled { color: var(--text-faint); cursor: default; }
.pp-tkh-pfoot .pp-btn { min-height: 34px; }

.pp-tkh-active { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 12px; }
.pp-tkh-alabel { font-size: 12.5px; color: var(--text-faint); margin-right: 2px; }
.pp-tkh-achip { display: inline-flex; align-items: center; gap: 5px; height: 28px; padding: 0 8px 0 10px; border-radius: 8px; border: 0; background: var(--accent-soft); color: var(--accent-hi); font-size: 12.5px; font-weight: 600; }

@media (max-width: 760px) {
  .pp-tkh-top { flex-direction: column; align-items: stretch; gap: 16px; }
  .pp-tkh .pp-h1 { font-size: 34px; }
  .pp-tkh-stats { padding: 12px 0; border-radius: 14px; background: var(--w-bg); border: 1px solid var(--w-line); }
  .pp-tkh-stat { flex: 1; padding: 0 14px; }
  .pp-tkh-stat b { font-size: 24px; }
  .pp-tkh-bar { margin-top: 14px; gap: 6px; }
  .pp-tkh-tab { padding: 0 10px; font-size: 14px; }
  .pp-tkh-tool { width: 38px; padding: 0; justify-content: center; position: relative; }
  .pp-tkh-tool .pp-tkh-fct, .pp-tkh-tool .pp-newdot { position: absolute; top: -5px; right: -5px; }
  .pp-tkh-pop { position: fixed; top: auto; bottom: calc(76px + var(--safe-bottom)); left: 12px; right: 12px; width: auto; }
}
@media (max-width: 760px) {
  /* the tab line scrolls sideways; its right end fades so a cut-off word reads as "more this way" */
  .pp-tkh-tabs { -webkit-mask-image: linear-gradient(90deg, var(--mask-on) 82%, var(--mask-off)); mask-image: linear-gradient(90deg, var(--mask-on) 82%, var(--mask-off)); padding-right: 24px; }
}

/* ---------- projects (lab, Oct 8, v2) ---------- */
/* the card: the same size and material as a task card. The layers icon where the ring
   would be, a Project tag, and the bar with one segment per task (Shadi: "make them the
   same size, remove the special colour gradient, but I like the progress bar"). */
.pp-pjcard {
  position: relative; display: flex; align-items: flex-start; gap: 2px; padding: 4px 10px 12px 4px; border-radius: 14px; cursor: pointer; outline: none;
  background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm);
  transition: transform .2s var(--ease), background .16s var(--ease);
}
.pp-pjcard.is-late { box-shadow: inset 3px 0 0 var(--late), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-pjcard:focus-visible { box-shadow: 0 0 0 3px var(--proj-soft); }
.pp-pjcard.is-done { opacity: .7; }
@media (hover: hover) and (pointer: fine) { .pp-pjcard:hover { background: var(--w-card-hi); transform: translateY(-1px); } }
.pp-pjcard-ic { width: var(--tap); height: var(--tap); flex: none; display: inline-flex; align-items: center; justify-content: center; color: var(--proj); }
.pp-pjcard-main { flex: 1; min-width: 0; padding-top: 11px; }
.pp-pjcard-title { font-size: 14.5px; font-weight: 600; line-height: 1.38; overflow-wrap: anywhere; }
.pp-pjcard .pp-card-meta { margin-top: 8px; font-size: 11.5px; }
.pp-pjcard .pp-tag { border-radius: 7px; padding: 3px 8px; background: var(--surface-3); }
.pp-pjcard .pp-tag.pp-pj-tag { background: var(--proj-soft); color: var(--proj); font-weight: 700; }
.pp-pjcard .pp-due-late { color: var(--late); background: var(--late-soft); }
.pp-pjcard .pp-pjsegs { height: 4px; gap: 2px; margin: 10px 0 2px; }
.pp-pjcard-ct { flex: none; display: inline-flex; align-items: center; gap: 2px; height: var(--tap); padding-left: 6px; color: var(--text-faint); font-size: 11.5px; font-weight: 700; font-variant-numeric: tabular-nums; }
.pp-pjsegs { display: flex; gap: 3px; height: 6px; margin-top: 12px; }
.pp-pjsegs i { flex: 1 1 0; border-radius: 2px; background: var(--proj-seg); }
.pp-pjsegs.is-solid { gap: 2px; }
.pp-pjsegs i.is-done { background: var(--done); }
.pp-pjsegs i.is-late { background: var(--late); }
.pp-pjsegs.is-empty i { background: var(--surface-3); }

.pp-pj-avs { display: inline-flex; }
.pp-pj-av { width: 22px; height: 22px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 10.5px; font-weight: 700; flex: none; background: var(--surface-3); color: var(--text); }
.pp-pj-avs .pp-pj-av + .pp-pj-av { margin-left: -6px; }
.pp-pj-av.is-card { box-shadow: 0 0 0 2px var(--w-card); }
.pp-pj-av-u0 { background: var(--accent); color: var(--on-accent); }
.pp-pj-av-u1 { background: var(--both-soft); color: var(--both); }

/* the add bar's Project switch */
.pp-chain-proj.is-on { color: var(--proj); background: var(--proj-soft); border-color: var(--proj-line); }
.pp-chain.is-proj .pp-chain-row { border-color: var(--proj-line); }
.pp-chain.is-proj .pp-chain-plus { color: var(--proj); }

/* the panel: a doc */
.pp-pj-scrim { position: fixed; inset: 0; z-index: 74; background: var(--scrim); }
.pp-pj {
  position: fixed; z-index: 75; top: 0; right: 0; bottom: 0; width: min(780px, 100vw); display: flex; flex-direction: column;
  background: var(--w-bg); border-left: 1px solid var(--w-line-2); box-shadow: var(--shadow-lg);
}
.pp-pj.is-sheet { top: calc(var(--safe-top) + 18px); width: 100%; border-left: 0; border-radius: 22px 22px 0 0; overflow: hidden; }
.pp-pj-bar { flex: none; display: flex; align-items: center; min-height: 52px; padding: 0 10px 0 22px; }
.pp-pj-crumb { display: inline-flex; align-items: center; gap: 7px; color: var(--proj); font-size: 13px; font-weight: 700; }
.pp-pj-close { margin-left: auto; }
.pp-pj-body { flex: 1; overflow-y: auto; overscroll-behavior: contain; }
.pp-pj-doc { position: relative; padding: 18px 48px calc(48px + var(--safe-bottom)); }
.pp-pj-icon {
  position: relative; width: 56px; height: 56px; border-radius: 18px; display: flex; align-items: center; justify-content: center;
  background: var(--proj-tile); color: var(--proj); border: 1px solid var(--proj-line); box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-card-hi);
}
.pp-pj-title {
  display: block; width: 100%; margin: 0; padding: 0; border: 0; outline: 0; resize: none; overflow: hidden; background: transparent; color: var(--text);
  font-family: var(--font-display); font-size: 38px; font-weight: 600; letter-spacing: -.02em; line-height: 1.12; border-radius: 6px;
}
.pp-pj-title:focus { box-shadow: 0 0 0 2px var(--proj-line); }
.pp-pj-props { margin-top: 20px; display: flex; flex-direction: column; }
.pp-pj-prop { display: grid; grid-template-columns: 128px minmax(0, 1fr); align-items: center; min-height: 40px; }
.pp-pj-pk { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-faint); }
.pp-pj-pv { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 14px; color: var(--text); min-width: 0; }
.pp-pj-seg { display: inline-flex; padding: 3px; border-radius: 10px; background: var(--w-card); gap: 2px; }
.pp-pj-segbtn { height: 28px; padding: 0 11px; border: 0; border-radius: 7px; background: transparent; color: var(--text-faint); font-size: 12.5px; font-weight: 600; }
.pp-pj-segbtn.is-on { background: var(--surface-3); color: var(--text); box-shadow: inset 0 1px 0 var(--edge-hi); }
.pp-pj-segbtn.is-in_progress.is-on { color: var(--accent-hi); }
.pp-pj-segbtn.is-done.is-on { color: var(--done); }
.pp-pj-people { gap: 14px; }
.pp-pj-person { display: inline-flex; align-items: center; gap: 7px; }
.pp-pj-arrow { color: var(--text-faint); margin: 0 4px; }
.pp-pj-left { margin-left: 8px; padding: 2px 8px; border-radius: 7px; background: var(--w-card); color: var(--text-dim); font-size: 12px; font-weight: 600; }
.pp-pj-left.is-late { color: var(--late); background: var(--late-soft); }
.pp-pj-prog { gap: 12px; flex-wrap: nowrap; }
.pp-pj-prog .pp-pjsegs { flex: 1; max-width: 280px; margin: 0; }
.pp-pj-progtext { font-size: 13px; color: var(--text-dim); white-space: nowrap; }
.pp-pj-progtext b { color: var(--text); }
.pp-pj-proglate { color: var(--late); font-weight: 600; }
.pp-pj-sec { display: flex; align-items: baseline; gap: 10px; margin: 32px 0 10px; font-size: 16px; font-weight: 700; letter-spacing: -.01em; padding-top: 22px; border-top: 1px solid var(--w-line); }
.pp-pj-sechint { font-size: 12.5px; font-weight: 500; color: var(--text-faint); }
.pp-pj-brief {
  display: block; width: calc(100% + 24px); margin: 0 -12px; min-height: 64px; resize: vertical; padding: 10px 12px; border-radius: 10px;
  border: 1px solid transparent; background: transparent; color: var(--text-dim); font: inherit; font-size: 14.5px; line-height: 1.6; outline: 0;
}
@media (hover: hover) and (pointer: fine) { .pp-pj-brief:hover { border-color: var(--w-line); } }
.pp-pj-brief:focus { border-color: var(--proj-line); background: var(--w-card); color: var(--text); }

/* the timeline: date | rail | the task */
.pp-tl { margin-top: 6px; }
.pp-tl-main { position: relative; }
.pp-tl-main::before { content: ""; position: absolute; left: 77px; top: 22px; bottom: 22px; width: 2px; border-radius: 1px; background: var(--w-line-2); }
.pp-tl-item, .pp-tl-mark, .pp-tl-today, .pp-tl-fold, .pp-tl-addrow, .pp-tl-gap { display: grid; grid-template-columns: 64px 28px minmax(0, 1fr); align-items: center; min-height: 44px; }
.pp-tl-date { font-size: 12px; color: var(--text-faint); text-align: right; padding-right: 10px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.pp-tl-rail { position: relative; display: flex; align-items: center; justify-content: center; align-self: stretch; }
.pp-tl-node {
  position: relative; z-index: 1; width: 18px; height: 18px; padding: 0; border-radius: 50%; border: 2px solid var(--proj); background: var(--w-bg);
  display: inline-flex; align-items: center; justify-content: center; color: var(--done-ink); cursor: pointer;
  transition: transform .16s var(--ease);
}
@media (hover: hover) and (pointer: fine) { .pp-tl-node:hover { transform: scale(1.15); } }
.pp-tl-item.is-done .pp-tl-node { background: var(--done); border-color: var(--done); }
.pp-tl-item.is-late .pp-tl-node { border-color: var(--late); }
.pp-tl-item.is-now .pp-tl-node { border-color: var(--accent-hi); background: linear-gradient(90deg, var(--accent-hi) 50%, var(--w-bg) 50%); }
.pp-tl-card {
  display: flex; align-items: center; gap: 8px; min-width: 0; margin: 3px 0 3px 10px; padding: 9px 10px 9px 13px; border-radius: 11px;
  background: var(--w-card); box-shadow: inset 0 1px 0 var(--edge-hi); cursor: pointer; outline: none; transition: background .16s var(--ease);
}
.pp-tl-card:focus-visible { box-shadow: 0 0 0 2px var(--proj-line); }
@media (hover: hover) and (pointer: fine) { .pp-tl-card:hover { background: var(--w-card-hi); } }
.pp-tl-title { flex: 1; min-width: 0; font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-tl-subs { font-size: 11.5px; font-weight: 700; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.pp-tl-late { font-size: 11.5px; font-weight: 700; color: var(--late); white-space: nowrap; }
.pp-tl-now { font-size: 11.5px; font-weight: 700; color: var(--accent-hi); white-space: nowrap; }
.pp-tl-item.is-late .pp-tl-card { box-shadow: inset 3px 0 0 var(--late), inset 0 1px 0 var(--edge-hi); }
.pp-tl-item.is-late .pp-tl-date { color: var(--late); }
.pp-tl-item.is-done .pp-tl-card { background: transparent; box-shadow: none; }
.pp-tl-item.is-done .pp-tl-title { color: var(--text-dim); font-weight: 500; }
@media (hover: hover) and (pointer: fine) { .pp-tl-item.is-done .pp-tl-card:hover { background: var(--w-card); } }
.pp-tl-week { padding: 14px 0 2px 102px; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); }
.pp-tl-week.is-loose { padding-left: 0; }
.pp-tl-mark .pp-tl-marktext { margin-left: 10px; font-size: 13px; font-weight: 600; color: var(--text-dim); }
.pp-tl-cap { position: relative; z-index: 1; width: 12px; height: 12px; border-radius: 4px; background: var(--proj); box-shadow: 0 0 0 4px var(--w-bg); }
.pp-tl-flag { position: relative; z-index: 1; width: 26px; height: 26px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--proj-tile); color: var(--proj); border: 1px solid var(--proj-line); box-shadow: 0 0 0 4px var(--w-bg); }
.pp-tl-mark.is-end .pp-tl-marktext { color: var(--proj); }
.pp-tl-mark.is-end .pp-tl-date { color: var(--proj); font-weight: 700; }
.pp-tl-mark.is-over .pp-tl-marktext, .pp-tl-mark.is-over .pp-tl-date { color: var(--late); }
.pp-tl-today { min-height: 40px; }
.pp-tl-today .pp-tl-date { color: var(--accent-hi); font-weight: 700; }
.pp-tl-todaydot { position: relative; z-index: 1; width: 12px; height: 12px; border-radius: 50%; background: var(--accent-hi); box-shadow: 0 0 0 4px var(--accent-soft), 0 0 0 7px var(--w-bg); }
.pp-tl-todayline { display: flex; align-items: center; gap: 10px; margin-left: 10px; font-size: 12.5px; font-weight: 700; color: var(--accent-hi); white-space: nowrap; }
.pp-tl-todayline::after { content: ""; flex: 1; height: 2px; border-radius: 1px; background: var(--accent-line); }
.pp-tl-fold { width: 100%; border: 0; background: transparent; padding: 0; text-align: left; cursor: pointer; color: var(--text-dim); }
.pp-tl-dots { position: relative; z-index: 1; width: 18px; height: 18px; border-radius: 50%; border: 2px dashed var(--done); background: var(--w-bg); }
.pp-tl-foldtext { display: inline-flex; align-items: center; gap: 6px; margin-left: 10px; padding: 7px 12px; border-radius: 10px; background: var(--w-card); font-size: 13px; font-weight: 600; justify-self: start; }
.pp-tl-foldtext .pp-ic { transition: transform .2s var(--ease); }
.pp-tl-foldtext .pp-ic.is-open { transform: rotate(180deg); }
@media (hover: hover) and (pointer: fine) { .pp-tl-fold:hover .pp-tl-foldtext { color: var(--text); background: var(--w-card-hi); } }
.pp-tl-addrow .pp-chain { margin: 4px 0 4px 10px; }
.pp-pj-add .pp-chain-row { padding: 4px 4px 4px 12px; border-radius: 12px; background: transparent; border: 1.5px dashed var(--proj-line); box-shadow: none; }
.pp-pj-add .pp-chain-row:focus-within, .pp-pj-add.is-open .pp-chain-row { border-style: solid; background: var(--w-card); }
.pp-pj-add .pp-chain-plus { color: var(--proj); }
.pp-pj-add .pp-chain-title { font-size: 14px; height: 34px; }
.pp-pj-add .pp-chain-chip { min-height: 30px; padding: 0 9px; font-size: 12.5px; background: var(--w-card); }
.pp-pj-add .pp-chain-go { min-height: 32px; }
.pp-pj-add .pp-chain-pop { border-color: var(--proj-line); }
.pp-tl-gaptext {
  margin: 2px 0 2px 10px; padding: 9px 12px; border-radius: 10px; font-size: 12.5px; font-weight: 600; color: var(--text-faint);
  border: 1px dashed var(--proj-line-soft); background: repeating-linear-gradient(135deg, var(--proj-gap) 0 6px, var(--proj-gap-2) 6px 12px);
}
.pp-tl-undated { margin-top: 18px; padding-top: 6px; border-top: 1px solid var(--w-line); }

@media (max-width: 760px) {
  .pp-pj-doc { padding: 6px 16px calc(32px + var(--safe-bottom)); }
  .pp-pj-icon { width: 48px; height: 48px; border-radius: 14px; }
  .pp-pj-title { font-size: 29px; }
  .pp-pj-prop { grid-template-columns: 96px minmax(0, 1fr); }
  .pp-pj-left { margin-left: 0; }
  .pp-tl-main::before { left: 57px; }
  .pp-tl-item, .pp-tl-mark, .pp-tl-today, .pp-tl-fold, .pp-tl-addrow, .pp-tl-gap { grid-template-columns: 44px 28px minmax(0, 1fr); }
  .pp-tl-date { font-size: 11px; padding-right: 6px; }
  .pp-tl-week { padding-left: 82px; }
  .pp-tl-card { margin-left: 6px; }
  .pp-pj-add .pp-chain-chips { gap: 4px; }
  .pp-pj-add .pp-chain-chips .pp-chain-chip { flex: 0 1 auto; padding: 0 9px; }
  .pp-pj-add .pp-chain-chip .pp-ic { display: none; }
  .pp-pj-add .pp-chain-go { margin-left: auto; padding: 0 12px; }
}

/* editable properties: People and Dates open a menu or the calendar */
.pp-pj-anchor { position: relative; }
.pp-pj-edit {
  display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 10px; margin-left: -10px; border-radius: 10px;
  border: 1px solid transparent; background: transparent; color: var(--text); font-size: 14px; cursor: pointer;
  transition: background .14s var(--ease), border-color .14s var(--ease);
}
.pp-pj-dates .pp-pj-edit + .pp-pj-arrow + .pp-pj-edit { margin-left: 0; }
.pp-pj-edit .pp-pj-editic { color: var(--text-faint); opacity: 0; transition: opacity .14s var(--ease), transform .2s var(--ease); }
.pp-pj-edit.is-open { background: var(--w-card); border-color: var(--w-line-2); }
.pp-pj-edit.is-open .pp-pj-editic { opacity: 1; transform: rotate(180deg); }
.pp-pj-edit:focus-visible { border-color: var(--accent-line); outline: none; }
@media (hover: hover) and (pointer: fine) {
  .pp-pj-edit:hover { background: var(--w-card); border-color: var(--w-line); }
  .pp-pj-edit:hover .pp-pj-editic { opacity: 1; }
}
.pp-pj-editk { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--text-faint); }
.pp-pj-edit.is-empty { color: var(--text-faint); }
.pp-pj-edit.is-bad { color: var(--late); }
.pp-pj-dates { gap: 4px; }
.pp-pj-dates .pp-pj-arrow { margin: 0 2px; }
.pp-pj-menu {
  position: absolute; z-index: 20; top: calc(100% + 6px); left: -10px; width: 260px; padding: 6px; border-radius: 14px;
  background: var(--pop-bg); border: 1px solid var(--w-line-2); box-shadow: inset 0 1px 0 var(--glass-edge), var(--shadow-lg);
  animation: pp-pop .16s ease both; transform-origin: top left;
}
.pp-pj-menuitem { width: 100%; display: flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 10px; border: 0; border-radius: 10px; background: transparent; color: var(--text); font-size: 14px; font-weight: 600; text-align: left; }
.pp-pj-menuname { flex: 1; }
.pp-pj-check { width: 22px; height: 22px; border-radius: 7px; display: inline-flex; align-items: center; justify-content: center; border: 1.5px solid var(--w-line-2); color: var(--done-ink); transition: background .14s var(--ease), border-color .14s var(--ease); }
.pp-pj-menuitem.is-on .pp-pj-check { background: var(--done); border-color: var(--done); }
.pp-pj-menuitem.is-locked { cursor: default; }
@media (hover: hover) and (pointer: fine) { .pp-pj-menuitem:not(.is-locked):hover { background: var(--w-card); } }
.pp-pj-menunote { padding: 8px 10px 4px; font-size: 12px; color: var(--text-faint); border-top: 1px solid var(--w-line); margin-top: 4px; }
@media (max-width: 760px) {
  .pp-pj-dates { flex-wrap: wrap; }
  .pp-pj-editk { display: none; }
  .pp-pj-menu { width: min(260px, calc(100vw - 140px)); }
}
.pp-pj-edit .pp-pj-people { display: inline-flex; align-items: center; gap: 14px; }
/* the calendar is solid, like the add bar's pop-up: text behind a see-through calendar was hard to read */
.pp-cal { background: var(--pop-bg); -webkit-backdrop-filter: none; backdrop-filter: none; }

/* ---------- TIME BOX LOOK (lab, Oct 8): Tasks' header, a week strip, Home's widget material ---------- */
.pp-tbh-date {
  display: inline-flex; align-items: center; gap: 6px; padding: 0; min-height: 28px; border: 0; background: none;
  font: inherit; letter-spacing: inherit; text-transform: inherit; color: inherit; cursor: pointer;
}
.pp-tbh-date .pp-ic { color: var(--text-faint); }
@media (hover: hover) and (pointer: fine) { .pp-tbh-date:hover { color: var(--text); } }
.pp-tbh .pp-sub { margin-top: 8px; }

/* the sticky row: arrows, seven days, then the day's actions */
/* the week row sits in the page and scrolls away with it (Shadi: didn't like it sticking to the top) */
.pp-tb-bar.pp-tbw-bar {
  position: static; margin: 0 0 16px; padding: 0; background: none; border-bottom: 0;
  -webkit-backdrop-filter: none; backdrop-filter: none;
}
[data-page="timebox"] .pp-tb-rail { top: calc(var(--safe-top) + 76px); }
[data-page="timebox"] .pp-tb-people { top: calc(var(--safe-top) + 61px); }
.pp-tbw { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }
.pp-tbw-days { display: grid; grid-template-columns: repeat(7, 64px); gap: 4px; }
.pp-tbw-day {
  height: 58px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; padding: 0;
  border-radius: 12px; border: 1px solid transparent; background: transparent; color: var(--text); cursor: pointer;
  transition: background .16s var(--ease), border-color .16s var(--ease);
}
.pp-tbw-wd { font-size: 11.5px; font-weight: 600; color: var(--text-faint); line-height: 1; }
.pp-tbw-n { font-size: 17px; font-weight: 650; line-height: 1.1; font-variant-numeric: tabular-nums; }
.pp-tbw-fill { width: 30px; height: 3px; border-radius: 2px; background: var(--w-line-2); overflow: hidden; }
.pp-tbw-fill i { display: block; height: 100%; border-radius: 2px; background: var(--text-dim); }
.pp-tbw-fill i.is-done { background: var(--done); }
.pp-tbw-day.is-past .pp-tbw-n { color: var(--text-dim); }
.pp-tbw-day.is-today .pp-tbw-wd { color: var(--accent-hi); }
.pp-tbw-day.is-on { background: var(--w-card); border-color: var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-tbw-day.is-on .pp-tbw-n { color: var(--text); }
@media (hover: hover) and (pointer: fine) { .pp-tbw-day:not(.is-on):hover { background: var(--w-bg); border-color: var(--w-line); } }
.pp-tbw-arrow {
  width: 36px; height: 36px; flex: none; display: inline-flex; align-items: center; justify-content: center;
  border-radius: 10px; border: 1px solid var(--w-line-2); background: transparent; color: var(--text-dim);
}
@media (hover: hover) and (pointer: fine) { .pp-tbw-arrow:hover { color: var(--text); background: var(--w-card); } }
.pp-tbw-today { height: 36px; padding: 0 12px; border-radius: 10px; border: 0; background: none; color: var(--accent-hi); font-size: 13.5px; font-weight: 600; white-space: nowrap; }
.pp-tbw .pp-tkh-tool { height: 38px; }
.pp-tbh-plan { color: var(--text); background: var(--w-card); border-color: var(--w-card-line); }
.pp-tbh-add { min-height: 38px; height: 38px; padding: 0 14px; border-radius: 10px; font-size: 13.5px; gap: 7px; }
.pp-tbh-addm, .pp-tbh-addm:hover { color: var(--on-accent); background: var(--accent); border-color: transparent; }
.pp-tkh-tool.is-gc { color: var(--text); }

/* the day and the rail take the Home widgets' material */
[data-page="timebox"] .pp-tb-main { min-width: 0; }
[data-page="timebox"] .pp-tb-panel, [data-page="timebox"] .pp-tb-card { background: var(--w-bg); border-color: var(--w-line); border-radius: 20px; }
[data-page="timebox"] .pp-tb-earlier { border-radius: 20px 20px 0 0; border-color: var(--w-line); }
[data-page="timebox"] .pp-tb-past { border-radius: 0; }
[data-page="timebox"] .pp-tb-people { background: var(--w-bg); border-color: var(--w-line); border-radius: 20px 20px 0 0; }
[data-page="timebox"] .pp-tb-h3 { font-size: 15px; font-weight: 700; letter-spacing: -.005em; text-transform: none; color: var(--text); align-items: center; }
[data-page="timebox"] .pp-tb-h3 span { min-width: 26px; height: 24px; padding: 0 8px; border-radius: 8px; display: inline-flex; align-items: center; justify-content: center; background: var(--w-card); color: var(--text-dim); font-size: 12px; font-weight: 700; letter-spacing: 0; }
[data-page="timebox"] .pp-tb-trow {
  background: var(--w-card); border-color: var(--w-card-line); border-radius: 14px; box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm);
  cursor: grab; transition: background .16s var(--ease), transform .16s var(--ease), opacity .16s var(--ease);
}
[data-page="timebox"] .pp-tb-trow.is-dragging { opacity: .45; }
@media (hover: hover) and (pointer: fine) { [data-page="timebox"] .pp-tb-trow:hover { background: var(--w-card-hi); transform: translateY(-1px); } }
[data-page="timebox"] .pp-tb-plus { background: transparent; border-color: var(--w-line-2); }
.pp-tb-trow-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; max-width: 100%; }
.pp-tb-proj {
  display: inline-flex; align-items: center; gap: 5px; max-width: 100%; padding: 3px 8px; border-radius: 7px;
  background: var(--surface-3); color: var(--text-dim); font-size: 12px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pp-tb-proj .pp-ic { flex: none; }
.pp-tb-more { display: block; margin-top: 10px; font-size: 13.5px; }

/* an empty day says what to do about it */
.pp-tbe {
  display: flex; align-items: center; gap: 16px; margin-bottom: 14px; padding: 16px 16px 16px 18px;
  border-radius: 20px; border: 1.5px dashed var(--w-line-2); background: var(--w-bg);
}
.pp-tbe-ic { width: 44px; height: 44px; flex: none; display: grid; place-items: center; border-radius: 12px; background: var(--w-card); color: var(--text-dim); }
.pp-tbe-txt { flex: 1; min-width: 0; }
.pp-tbe-h { font-size: 15.5px; font-weight: 650; color: var(--text); }
.pp-tbe-p { margin: 3px 0 0; font-size: 13.5px; line-height: 1.45; color: var(--text-faint); }
.pp-tbe-btn { flex: none; min-height: 40px; gap: 8px; }

@media (max-width: 760px) {
  .pp-tb-bar.pp-tbw-bar { margin: 0 0 12px; }
  [data-page="timebox"] .pp-tb-people { top: calc(var(--safe-top) + 56px); }
  .pp-tbw { gap: 4px; }
  .pp-tbw-days { flex: 1; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 2px; }
  .pp-tbw-day { height: 54px; }
  .pp-tbw-wd { font-size: 10.5px; }
  .pp-tbw-n { font-size: 16px; }
  .pp-tbw-fill { width: 22px; }
  .pp-tbw-arrow { width: 30px; height: 40px; border: 0; }
  .pp-tbe { flex-wrap: wrap; padding: 14px; gap: 12px; border-radius: 18px; }
  .pp-tbe-btn { width: 100%; justify-content: center; min-height: var(--tap); }
  [data-page="timebox"] .pp-tb-panel { border-radius: 18px; }
}
.pp-tb-boxed { display: inline-flex; align-items: center; gap: 5px; padding: 3px 8px; border-radius: 7px; background: var(--done-soft); color: var(--done); font-size: 12px; font-weight: 600; white-space: nowrap; }
[data-page="timebox"] .pp-tb-trow.is-boxed { background: transparent; box-shadow: none; border-color: var(--w-line); }
[data-page="timebox"] .pp-tb-trow.is-boxed .pp-tb-trow-t { color: var(--text-dim); }

/* ---------- CLIENTS LOOK (lab, Oct 8): Tasks' header, a profile that reads like a page ---------- */
[data-page="clients"] .pp-ctools { margin-bottom: 12px; }
.pp-csearch-wrap { position: relative; flex: 1; display: flex; }
.pp-csearch-wrap .pp-ic { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); color: var(--text-faint); pointer-events: none; }
[data-page="clients"] .pp-csearch { flex: 1; padding-left: 38px; background: var(--w-bg); border-color: var(--w-line-2); border-radius: 12px; }
[data-page="clients"] .pp-crows { gap: 8px; }
[data-page="clients"] .pp-crow {
  background: var(--w-card); border-color: var(--w-card-line); border-radius: 14px; padding: 13px 15px;
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm);
}
[data-page="clients"] .pp-crow.is-on { border-color: var(--accent-line); background: var(--w-card-hi); box-shadow: inset 3px 0 0 var(--accent-hi), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
@media (hover: hover) and (pointer: fine) { [data-page="clients"] .pp-crow:not(.is-on):hover { background: var(--w-card-hi); } }
[data-page="clients"] .pp-crow .pp-tag { border-radius: 7px; padding: 3px 8px; background: var(--surface-3); }
[data-page="clients"] .pp-cempty {
  display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 80px 20px;
  border: 1.5px dashed var(--w-line-2); border-radius: 20px; background: var(--w-bg); font-size: 14px;
}

/* the profile panel */
[data-page="clients"] .pp-cprofile { background: var(--w-bg); border-color: var(--w-line); border-radius: 20px; padding: 24px 26px; gap: 24px; }
.pp-cp-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.pp-cp-who { min-width: 0; }
.pp-cp-name { margin: 0; font-family: var(--font-display); font-size: 32px; font-weight: 600; line-height: 1.08; color: var(--text); overflow-wrap: anywhere; }
.pp-cp-sub { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 9px; font-size: 14.5px; color: var(--text-dim); }
.pp-cp-status { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 9px; border-radius: 7px; font-size: 12px; font-weight: 650; background: var(--w-card); color: var(--text-dim); }
.pp-cp-status i { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.pp-cp-status.is-active { color: var(--done); background: var(--done-soft); }
.pp-cp-status.is-cancelled { color: var(--red); background: var(--red-soft); }
.pp-cp-edit { margin-top: 2px; }

/* one tap to reach them */
.pp-cp-acts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.pp-cp-act {
  display: flex; align-items: center; gap: 12px; min-width: 0; padding: 12px 14px; border-radius: 14px; text-decoration: none; color: var(--text);
  background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm);
  transition: background .16s var(--ease), transform .16s var(--ease);
}
@media (hover: hover) and (pointer: fine) { .pp-cp-act:hover { background: var(--w-card-hi); transform: translateY(-1px); } }
.pp-cp-act-ic { width: 38px; height: 38px; flex: none; display: grid; place-items: center; border-radius: 50%; background: var(--accent-soft); color: var(--accent-hi); }
.pp-cp-act-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pp-cp-act-l { font-size: 14.5px; font-weight: 650; }
.pp-cp-act-v { font-size: 12.5px; color: var(--text-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* the money in one row */
.pp-cp-facts { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); padding: 16px 0; border-top: 1px solid var(--w-line); border-bottom: 1px solid var(--w-line); }
.pp-cp-fact { display: flex; flex-direction: column; gap: 5px; min-width: 0; padding: 0 16px; border-left: 1px solid var(--w-line-2); }
.pp-cp-fact:first-child { padding-left: 0; border-left: 0; }
.pp-cp-flabel { font-size: 11.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint); white-space: nowrap; }
.pp-cp-fval { font-size: 17px; font-weight: 650; color: var(--text); font-variant-numeric: tabular-nums; }
.pp-cp-fval.is-empty { font-size: 15px; font-weight: 500; color: var(--text-faint); }
.pp-cp-fsub { font-size: 12.5px; color: var(--text-dim); }

.pp-cp-h, [data-page="clients"] .pp-h2.pp-cp-h { margin: 0 0 10px; font-size: 15px; font-weight: 700; letter-spacing: -.005em; text-transform: none; color: var(--text); }
[data-page="clients"] .pp-h2.pp-cp-h .pp-sec-ct { margin-left: auto; font-size: 12.5px; font-weight: 600; color: var(--text-faint); letter-spacing: 0; text-transform: none; }
.pp-cp-ntext { margin: 0; white-space: pre-wrap; font-size: 14.5px; line-height: 1.6; color: var(--text-dim); }
.pp-cp-none { margin: 0; font-size: 14px; color: var(--text-faint); }
.pp-cp-none .pp-linkbtn { font-size: 14px; }
.pp-cp-editbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-bottom: 14px; border-bottom: 1px solid var(--w-line); }
.pp-cp-editing { font-size: 12px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint); }
[data-page="clients"] .pp-cfoot { border-color: var(--w-line); }

/* the client's tasks wear the same cards as the Tasks page */
[data-page="clients"] .pp-ctask-add .pp-input { background: var(--w-card); border-color: var(--w-card-line); border-radius: 12px; }
[data-page="clients"] .pp-ctasks .pp-sec-label { font-size: 13.5px; font-weight: 700; text-transform: none; letter-spacing: 0; color: var(--text-dim); }
[data-page="clients"] .pp-ctasks .pp-sec-list { gap: 8px; }
[data-page="clients"] .pp-card {
  background: var(--w-card); border: 1px solid var(--w-card-line); border-radius: 14px;
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); padding: 4px 12px 10px 4px;
}
[data-page="clients"] .pp-card.is-late { border-left: 1px solid var(--w-card-line); box-shadow: inset 3px 0 0 var(--late), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
[data-page="clients"] .pp-card-main { padding-top: 11px; }
[data-page="clients"] .pp-card-title { font-size: 14.5px; font-weight: 600; line-height: 1.38; }
[data-page="clients"] .pp-tag, [data-page="clients"] .pp-due { border-radius: 7px; padding: 3px 8px; }
[data-page="clients"] .pp-due-late { color: var(--late); background: var(--late-soft); }
[data-page="clients"] .pp-card.pp-st-done { background: transparent; border-color: transparent; box-shadow: none; padding-bottom: 6px; }
[data-page="clients"] .pp-card.pp-st-done .pp-card-title { color: var(--text-dim); font-weight: 500; text-decoration: none; }
[data-page="clients"] .pp-st-done .pp-tag, [data-page="clients"] .pp-st-done .pp-due { color: var(--text-faint); background: var(--w-card); }
[data-page="clients"] .pp-ctasks .pp-empty { min-height: 56px; display: flex; align-items: center; justify-content: center; border: 1.5px dashed var(--w-line-2); border-radius: 14px; color: var(--text-faint); font-size: 13px; }
[data-page="clients"] .pp-older { background: transparent; border: 1px solid var(--w-line); box-shadow: none; }

@media (max-width: 1100px) and (min-width: 761px) {
  .pp-cp-facts { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 16px; }
  .pp-cp-fact:nth-child(4) { padding-left: 0; border-left: 0; }
}
@media (max-width: 760px) {
  [data-page="clients"] .pp-cprofile { padding: 0; border: 0; background: transparent; gap: 22px; }
  .pp-cp-name { font-size: 28px; }
  .pp-cp-acts { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .pp-cp-act { padding: 11px 12px; gap: 10px; }
  .pp-cp-act-ic { width: 34px; height: 34px; }
  .pp-cp-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 16px; }
  .pp-cp-fact:nth-child(odd) { padding-left: 0; border-left: 0; }
}

/* ---------- NOTES LOOK (lab, Oct 8): Tasks' header, widget panels, pages linked to a client or project ---------- */
[data-page="notes"] .pp-notes-wrap { min-height: calc(100vh - 300px); }
[data-page="notes"] .pp-notes-list, [data-page="notes"] .pp-notes-editor { background: var(--w-bg); border-color: var(--w-line); border-radius: 20px; }
[data-page="notes"] .pp-notes-list { padding: 10px; }
[data-page="notes"] .pp-notes-item { gap: 4px; padding: 10px 12px; border-radius: 12px; }
[data-page="notes"] .pp-notes-item.is-on { background: var(--w-card); border-color: var(--w-card-line); box-shadow: inset 3px 0 0 var(--accent-hi), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
@media (hover: hover) and (pointer: fine) { [data-page="notes"] .pp-notes-item:not(.is-on):hover { background: var(--w-card); } }
[data-page="notes"] .pp-notes-empty { padding: 28px 14px; line-height: 1.5; }
[data-page="notes"] .pp-notes-ehead { border-color: var(--w-line); padding: 10px 14px 10px 20px; }
[data-page="notes"] .pp-notes-act { background: transparent; border-color: var(--w-line-2); box-shadow: none; }
[data-page="notes"] .pp-notes-blank { display: flex; flex-direction: column; gap: 12px; border-style: dashed; border-width: 1.5px; border-color: var(--w-line-2); }

/* the link: a chip on list rows, a button + menu in the page header */
.pp-nlink { display: inline-flex; align-items: center; gap: 5px; max-width: 100%; padding: 3px 8px; border-radius: 7px; background: var(--surface-3); color: var(--text-dim); font-size: 12px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-nlink.is-small { margin-top: 3px; padding: 2px 7px; font-size: 11.5px; }
.pp-nlink .pp-ic { flex: none; }
.pp-nlm { position: relative; display: inline-flex; }
.pp-nlm-btn { max-width: 220px; }
.pp-nlm-btn .pp-notes-act-lbl { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-page="notes"] .pp-nlm-btn.is-linked { color: var(--text); background: var(--w-card); border-color: var(--w-card-line); }
.pp-nlm-menu {
  position: absolute; z-index: 60; top: calc(100% + 8px); right: 0; width: 280px; max-height: 360px; overflow-y: auto; padding: 8px; border-radius: 16px;
  background: var(--pop-bg); border: 1px solid var(--w-line-2); box-shadow: inset 0 1px 0 var(--glass-edge), var(--shadow-lg);
}
.pp-nlm-h { padding: 8px 10px 4px; font-size: 11.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint); }
.pp-nlm-item { width: 100%; min-height: 40px; display: flex; align-items: center; gap: 10px; padding: 0 10px; border: 0; border-radius: 10px; background: transparent; color: var(--text); font-size: 14px; text-align: left; }
.pp-nlm-item span { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-nlm-item .pp-ic { flex: none; color: var(--text-dim); }
.pp-nlm-item.is-on .pp-ic:last-child { color: var(--done); }
.pp-nlm-item.is-clear { margin-top: 6px; border-top: 1px solid var(--w-line); border-radius: 0 0 10px 10px; color: var(--text-dim); }
@media (hover: hover) and (pointer: fine) { .pp-nlm-item:hover { background: var(--w-card); } }
.pp-nlm-none { padding: 14px 10px; font-size: 13px; color: var(--text-faint); }

/* pages listed on a client's page and in a project's panel */
.pp-lnotes { display: flex; flex-direction: column; gap: 10px; }
.pp-lnotes-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.pp-lnotes-t { display: inline-flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 700; color: var(--text); }
.pp-lnotes-ct { min-width: 22px; height: 20px; padding: 0 6px; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; background: var(--w-card); color: var(--text-dim); font-size: 11.5px; font-weight: 700; }
.pp-lnotes-new { display: inline-flex; align-items: center; gap: 5px; }
.pp-lnotes-list { display: flex; flex-direction: column; gap: 8px; }
.pp-lnotes-item {
  width: 100%; display: flex; align-items: center; gap: 12px; padding: 11px 12px 11px 14px; border-radius: 14px; text-align: left; color: var(--text);
  background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm);
  transition: background .16s var(--ease), transform .16s var(--ease);
}
.pp-lnotes-item > .pp-ic { flex: none; color: var(--text-dim); }
.pp-lnotes-item > .pp-ic:last-child { color: var(--text-faint); }
@media (hover: hover) and (pointer: fine) { .pp-lnotes-item:hover { background: var(--w-card-hi); transform: translateY(-1px); } }
.pp-lnotes-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pp-lnotes-title { font-size: 14.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-lnotes-prev { font-size: 12.5px; color: var(--text-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-lnotes-none { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text-faint); }
.pp-pj-doc .pp-lnotes { margin: 4px 0 22px; }

@media (max-width: 760px) {
  [data-page="notes"] .pp-notes-list { padding: 8px; border-radius: 18px; }
  [data-page="notes"] .pp-notes-ehead { padding: 6px 8px; }
  .pp-nlm-btn { max-width: none; }
  .pp-nlm-menu { position: fixed; top: auto; bottom: calc(76px + var(--safe-bottom)); left: 12px; right: 12px; width: auto; }
}
@media (max-width: 760px) {
  /* phone: the title gets its own row; the link (with its name), copy, pin and delete sit under it */
  [data-page="notes"] .pp-notes-ehead { flex-wrap: wrap; row-gap: 6px; padding: 8px 10px 10px; }
  [data-page="notes"] .pp-notes-title { flex: 1 1 calc(100% - 56px); }
  [data-page="notes"] .pp-notes-eacts { width: 100%; }
  [data-page="notes"] .pp-nlm { flex: 1; min-width: 0; }
  [data-page="notes"] .pp-nlm-btn { flex: 1; min-width: 0; justify-content: flex-start; padding: 0 12px; }
  [data-page="notes"] .pp-nlm-btn .pp-notes-act-lbl { display: inline; }
}
/* =====================================================================
   CONTENT REWORK (Shadi, Oct 8 2026): Calendar (month grid on a computer, weeks on a phone),
   Plan, Ideas, the client picker and Share, the next shoot. Built in the redesign's material.
   ===================================================================== */
/* header tools: the client picker and the share button */
.pp-ct-pick { gap: 8px; padding: 0 10px 0 6px; color: var(--text); }
.pp-ct-face { width: 22px; height: 22px; border-radius: 7px; display: grid; place-items: center; font-size: 11px; font-weight: 800; background: var(--both-soft); color: var(--both); }
.pp-ct-pick .pp-ic { color: var(--text-faint); }
.pp-ct-share { color: var(--text); }
.pp-ct-pop { width: 280px; }
.pp-ct-opt { width: 100%; min-height: 44px; display: flex; align-items: center; gap: 10px; padding: 0 10px; border: 0; border-radius: 10px; background: transparent; color: var(--text-dim); font-size: 14px; font-weight: 600; text-align: left; }
.pp-ct-opt small { display: block; font-size: 11.5px; font-weight: 500; color: var(--text-faint); }
.pp-ct-opt.is-on { background: var(--w-card); color: var(--text); }
.pp-ct-opt .pp-ct-tick { margin-left: auto; color: var(--accent-hi); }

/* next shoot strip */
.pp-ct-shoot {
  display: flex; align-items: center; gap: 16px; padding: 14px 16px; margin: 18px 0 16px; border-radius: 18px;
  background: var(--w-bg); border: 1px solid var(--w-line);
}
.pp-ct-shoot-ic { width: 44px; height: 44px; border-radius: 13px; display: grid; place-items: center; background: var(--accent-soft); color: var(--accent-hi); flex: none; }
.pp-ct-shoot-main { flex: 1; min-width: 0; }
.pp-ct-eyebrow { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); }
.pp-ct-shoot-when { font-size: 18px; font-weight: 650; margin-top: 3px; }
.pp-ct-shoot-when span { color: var(--text-dim); font-weight: 500; font-size: 15px; }
.pp-ct-shoot-meta { font-size: 12.5px; color: var(--text-faint); margin-top: 3px; }
.pp-ct-shoot-acts { display: flex; gap: 8px; flex: none; }
.pp-ct-shoot-acts .pp-btn { min-height: 38px; }

/* chips */
.pp-ct-net { display: inline-flex; align-items: center; height: 20px; padding: 0 6px; border-radius: 6px; background: var(--surface-3); color: var(--text-dim); font-size: 10.5px; font-weight: 700; letter-spacing: .02em; }
.pp-ct-nets { display: flex; gap: 4px; flex-wrap: wrap; }
.pp-ct-st { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 9px; border-radius: 8px; font-size: 12px; font-weight: 650; white-space: nowrap; }
.pp-ct-st.is-posted { color: var(--text-faint); background: var(--w-card); }
.pp-ct-st.is-posted .pp-ic { color: var(--done); }
.pp-ct-st.is-ok { color: var(--done); background: var(--done-soft); }
.pp-ct-st.is-wait { color: var(--text-dim); background: var(--surface-3); }
.pp-ct-st.is-fix { color: var(--accent-hi); background: var(--accent-soft); }
.pp-ct-kind { position: absolute; right: 4px; bottom: 4px; width: 18px; height: 18px; border-radius: 5px; display: grid; place-items: center; background: var(--scrim); color: var(--text); }

/* ---------- Option A: month grid with the going-out rail ---------- */
.pp-ct-a { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 16px; align-items: start; }
.pp-ct-month { border-radius: 20px; background: var(--w-bg); border: 1px solid var(--w-line); padding: 14px; }
.pp-ct-mhead { display: flex; align-items: center; gap: 8px; padding: 0 4px 12px; }
.pp-ct-mname { font-size: 17px; font-weight: 700; margin-right: auto; }
.pp-ct-arrow { width: 34px; height: 34px; border-radius: 10px; border: 1px solid var(--w-line-2); background: transparent; color: var(--text-dim); display: grid; place-items: center; }
.pp-ct-legend { display: flex; gap: 14px; font-size: 12px; color: var(--text-faint); margin-right: 8px; }
.pp-ct-legend span { display: inline-flex; align-items: center; gap: 6px; }
.pp-ct-legend i { width: 8px; height: 8px; border-radius: 3px; display: block; }
.pp-ct-lg-post { background: var(--text-dim); }
.pp-ct-lg-shoot { background: var(--accent-hi); }
.pp-ct-lg-fix { background: var(--accent-soft); box-shadow: inset 0 0 0 1.5px var(--accent-hi); }
.pp-ct-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
.pp-ct-wd { font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-faint); padding: 0 6px 4px; }
.pp-ct-cell { min-height: 124px; border-radius: 12px; background: var(--bg); border: 1px solid var(--w-line); padding: 6px; display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.pp-ct-cell.is-out { opacity: .35; }
.pp-ct-cell.is-past { background: repeating-linear-gradient(135deg, transparent 0 7px, var(--w-hatch) 7px 14px), var(--bg); }
.pp-ct-cell.is-today { border-color: var(--accent-line); box-shadow: inset 0 0 0 1px var(--accent-line); }
.pp-ct-dn { font-size: 12.5px; font-weight: 700; color: var(--text-dim); padding: 1px 3px; display: flex; align-items: center; gap: 6px; }
.pp-ct-cell.is-today .pp-ct-dn b { background: var(--accent); color: var(--on-accent); border-radius: 7px; padding: 1px 6px; }
.pp-ct-item { display: flex; gap: 6px; align-items: center; padding: 4px; border-radius: 9px; background: var(--w-card); box-shadow: inset 0 1px 0 var(--edge-hi); min-width: 0; }
.pp-ct-item.is-posted { background: transparent; box-shadow: inset 0 0 0 1px var(--w-line); }
.pp-ct-item.is-fix { background: var(--accent-soft); box-shadow: inset 0 0 0 1.5px var(--accent-hi); }
.pp-ct-tthumb { position: relative; width: 26px; height: 40px; border-radius: 6px; background: var(--surface-3) center / cover; flex: none; }
.pp-ct-item.is-posted .pp-ct-tthumb { opacity: .55; }
.pp-ct-itext { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pp-ct-itime { font-size: 10.5px; font-weight: 700; color: var(--text-faint); display: flex; align-items: center; gap: 4px; }
.pp-ct-itime .pp-ic { color: var(--done); }
.pp-ct-item.is-fix .pp-ct-itime { color: var(--accent-hi); }
.pp-ct-ititle { font-size: 11.5px; font-weight: 600; line-height: 1.25; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.pp-ct-item.is-posted .pp-ct-ititle { color: var(--text-dim); font-weight: 500; }
.pp-ct-shootpill { display: flex; align-items: center; gap: 6px; padding: 6px 8px; border-radius: 9px; background: var(--accent-soft-2); border: 1.5px dashed var(--accent-line); color: var(--accent-hi); font-size: 11.5px; font-weight: 700; }

.pp-ct-rail { border-radius: 20px; background: var(--w-bg); border: 1px solid var(--w-line); padding: 14px; display: flex; flex-direction: column; gap: 8px; }
.pp-ct-rhead { display: flex; align-items: center; gap: 8px; padding: 2px 4px 6px; }
.pp-ct-rtitle { font-size: 15px; font-weight: 700; }
.pp-ct-rct { margin-left: auto; font-size: 12px; font-weight: 700; color: var(--text-dim); background: var(--w-card); border-radius: 8px; padding: 3px 8px; }
.pp-ct-rsec { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); padding: 10px 4px 2px; }
.pp-ct-rsec.is-fix { color: var(--accent-hi); }
.pp-ct-card { display: flex; gap: 12px; padding: 8px; border-radius: 14px; background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-ct-card.is-fix { box-shadow: inset 3px 0 0 var(--accent-hi), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-ct-thumb { position: relative; width: 58px; height: 92px; border-radius: 10px; background: var(--surface-3) center / cover; flex: none; }
.pp-ct-cbody { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 6px; padding: 2px 0; }
.pp-ct-cwhen { font-size: 12px; font-weight: 700; color: var(--text-dim); }
.pp-ct-ctitle { font-size: 14px; font-weight: 650; line-height: 1.3; }
.pp-ct-cfoot { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: auto; }
.pp-ct-note { font-size: 12.5px; line-height: 1.45; color: var(--text); background: var(--bg); border: 1px solid var(--w-line); border-radius: 10px; padding: 8px 10px; }
.pp-ct-note b { color: var(--accent-hi); font-weight: 700; }
.pp-ct-warn { display: flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--late); }

/* ---------- the phone calendar: weeks ---------- */
.pp-ct-agenda { display: flex; flex-direction: column; gap: 18px; }
.pp-ct-week { border-radius: 20px; background: var(--w-bg); border: 1px solid var(--w-line); padding: 14px; }
.pp-ct-week.is-past { background: transparent; }
.pp-ct-whead { display: flex; align-items: baseline; gap: 10px; padding: 0 4px 10px; }
.pp-ct-wtitle { font-size: 15px; font-weight: 700; }
.pp-ct-wsub { font-size: 12.5px; color: var(--text-faint); }
.pp-ct-days { display: flex; flex-direction: column; gap: 4px; }
.pp-ct-dayrow { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 12px; padding: 6px 4px; border-radius: 14px; }
.pp-ct-dayrow + .pp-ct-dayrow { border-top: 1px solid var(--w-line); }
.pp-ct-dlabel { display: flex; flex-direction: column; align-items: flex-start; padding-top: 8px; }
.pp-ct-dlabel b { font-size: 24px; font-weight: 650; line-height: 1; font-variant-numeric: tabular-nums; }
.pp-ct-dlabel span { font-size: 12px; font-weight: 700; color: var(--text-faint); text-transform: uppercase; letter-spacing: .06em; margin-top: 4px; }
.pp-ct-dayrow.is-today .pp-ct-dlabel b, .pp-ct-dayrow.is-today .pp-ct-dlabel span { color: var(--accent-hi); }
.pp-ct-dposts { display: flex; flex-direction: column; gap: 8px; }
.pp-ct-row { display: flex; gap: 14px; padding: 8px; border-radius: 14px; background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); align-items: stretch; }
.pp-ct-row.is-fix { box-shadow: inset 3px 0 0 var(--accent-hi), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-ct-row.is-posted { background: transparent; border-color: var(--w-line); box-shadow: none; }
.pp-ct-row.is-posted .pp-ct-thumb { opacity: .6; width: 40px; height: 64px; }
.pp-ct-row.is-posted .pp-ct-ctitle { color: var(--text-dim); font-weight: 550; }
.pp-ct-row .pp-ct-thumb { width: 66px; height: 106px; }
.pp-ct-rbody { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 7px; padding: 2px 0; }
.pp-ct-rtop { display: flex; align-items: center; gap: 8px; }
.pp-ct-rtop .pp-ct-st { margin-left: auto; }
.pp-ct-racts { display: flex; gap: 6px; margin-top: auto; }
.pp-ct-racts .pp-btn { min-height: 34px; padding: 0 11px; font-size: 13px; }
.pp-ct-shootrow { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-radius: 14px; background: var(--accent-soft-2); border: 1.5px dashed var(--accent-line); color: var(--accent-hi); font-weight: 700; font-size: 14px; }
.pp-ct-shootrow span { color: var(--text-dim); font-weight: 500; font-size: 13px; }
.pp-ct-empty { font-size: 13px; color: var(--text-faint); padding: 8px 0; }


/* ---------- built Oct 8 on top of the mockups ---------- */
.pp-rot90 { transform: rotate(90deg); }
.pp-rot-90 { transform: rotate(-90deg); }
.pp-ct-arrow { min-width: 34px; padding: 0 8px; font-size: 12.5px; font-weight: 650; }
/* Today is a word, not an arrow: it sizes to fit (Shadi, Oct 9: "fix the today button") */
.pp-ct-arrow.pp-ct-today { width: auto; padding: 0 12px; white-space: nowrap; }
/* The month name and the three buttons never squeeze; on a narrower window the colour key
   gives way first (its items stay whole and wrap), then hides. */
.pp-ct-mhead .pp-ct-arrow, .pp-ct-mname { flex: none; white-space: nowrap; }
.pp-ct-mhead .pp-ct-legend { min-width: 0; flex-wrap: wrap; justify-content: flex-end; row-gap: 4px; }
.pp-ct-legend span { white-space: nowrap; }
@media (max-width: 1100px) { .pp-ct-mhead .pp-ct-legend { display: none; } }
.pp-ct-pickwrap .pp-ct-pick { max-width: 240px; }
.pp-ct-pickname { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-ct-pop { padding: 8px; max-height: 60vh; overflow-y: auto; }
.pp-ct-opttext { display: flex; flex-direction: column; min-width: 0; text-align: left; }
.pp-ct-opttext b { font-size: 14px; font-weight: 650; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-ct-opttext small { font-size: 11.5px; color: var(--text-faint); font-weight: 500; }
.pp-ct-statfix b { color: var(--accent-hi); }
.pp-ct-who { display: inline-flex; align-items: center; height: 17px; margin-left: 5px; padding: 0 5px; border-radius: 5px; background: var(--both-soft); color: var(--both); font-size: 10px; font-weight: 700; letter-spacing: .02em; white-space: nowrap; }
.pp-ct-who.is-short { width: 15px; height: 15px; padding: 0; margin-left: auto; justify-content: center; border-radius: 4px; font-size: 9.5px; }
.pp-ct-itime { width: 100%; }
.pp-ct-lg-plan { background: transparent; box-shadow: inset 0 0 0 1.5px var(--text-faint); }
.pp-ct-item { width: 100%; border: 0; text-align: left; color: inherit; cursor: pointer; font: inherit; }
.pp-ct-item.is-plan { background: transparent; box-shadow: inset 0 0 0 1.5px var(--w-line-2); }
.pp-ct-item.is-plan .pp-ct-ititle { color: var(--text-dim); }
.pp-ct-item.is-ok .pp-ct-itime { color: var(--done); }
.pp-ct-item.is-error .pp-ct-itime, .pp-ct-item.is-draft .pp-ct-itime { color: var(--late); }
@media (hover: hover) and (pointer: fine) {
  .pp-ct-item:hover { background: var(--w-card-hi); }
  .pp-ct-card:hover, .pp-ct-vrow:hover, .pp-ct-idea:hover { background: var(--w-card-hi); }
}
.pp-ct-card { cursor: pointer; }
.pp-ct-fixbtn { margin-top: 4px; min-height: 36px; align-self: flex-start; }
.pp-ct-st.is-late { color: var(--late); background: var(--late-soft); }
.pp-ct-empty { font-size: 13px; color: var(--text-faint); padding: 8px 4px; }
.pp-ct-notice { display: flex; align-items: center; gap: 8px; margin: 0 0 14px; padding: 10px 14px; border-radius: 14px; background: var(--w-bg); border: 1px solid var(--w-line); color: var(--text-dim); font-size: 13.5px; }
.pp-ct-notice.is-late { color: var(--late); border-color: var(--late-line); }
.pp-ct-shoot.is-late .pp-ct-shoot-ic { background: var(--late-soft); color: var(--late); }
.pp-ct-shoot.is-late .pp-ct-shoot-when span { color: var(--late); }
.pp-ct-shoot-meta .pp-linkbtn { font-size: 12.5px; display: inline-block; padding: 15px 6px; margin: -15px -6px; }  /* a thumb-sized target that does not push the line apart */
.pp-ct-shootedit { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 8px; font-size: 14px; color: var(--text-dim); }
.pp-ct-shootedit label { display: inline-flex; align-items: center; gap: 8px; }
.pp-ct-num { width: 76px; min-height: 40px; text-align: center; }
.pp-ct-shootedit .pp-btn { min-height: 40px; }
.pp-ct-shootrow-all { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 18px 0 16px; }
.pp-ct-shootrow-all .pp-ct-eyebrow { display: inline-flex; align-items: center; gap: 6px; margin-right: 4px; }
.pp-ct-shootchip { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 0 12px; border-radius: 11px; border: 1px solid var(--w-line-2); background: var(--w-bg); color: var(--text-dim); font-size: 13px; font-weight: 600; }
.pp-ct-shootchip b { color: var(--text); }
.pp-ct-shootchip.is-soon { border-color: var(--accent-line); }
.pp-ct-shootchip.is-late { border-color: var(--late-line); color: var(--late); }
.pp-ct-row { cursor: pointer; border: 1px solid var(--w-card-line); text-align: left; color: inherit; font: inherit; width: 100%; }
.pp-ct-row.is-plan { background: transparent; box-shadow: none; border: 1.5px dashed var(--w-line-2); }
.pp-ct-row.is-posted .pp-ct-thumb { opacity: .6; width: 40px; height: 64px; }

/* Plan and Ideas: one column of rows grouped by stage */
.pp-ct-plan { display: flex; flex-direction: column; gap: 14px; max-width: 980px; margin-top: 18px; }
.pp-ct-add { display: flex; align-items: center; gap: 10px; padding: 8px 8px 8px 16px; border-radius: 16px; background: var(--w-bg); border: 1px solid var(--w-line-2); color: var(--accent-hi); }
.pp-ct-addinput { flex: 1; min-width: 0; height: 44px; border: 0; outline: 0; background: transparent; color: var(--text); font-size: 16px; }
.pp-ct-addselect { width: auto; min-height: 40px; }
.pp-ct-group { border-radius: 20px; background: var(--w-bg); border: 1px solid var(--w-line); padding: 12px; display: flex; flex-direction: column; gap: 6px; }
.pp-ct-group.is-done { background: transparent; }
.pp-ct-ghead { display: flex; align-items: center; gap: 8px; padding: 2px 6px 6px; font-size: 15px; font-weight: 700; }
.pp-ct-ghead .pp-ct-rct { margin-left: auto; }
.pp-ct-none { font-size: 13px; color: var(--text-faint); padding: 4px 6px 6px; }
.pp-ct-vrow { display: flex; align-items: center; gap: 12px; padding: 10px 10px 10px 14px; border-radius: 14px; background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); cursor: pointer; }
.pp-ct-vrow.is-late { box-shadow: inset 3px 0 0 var(--late), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-ct-group.is-done .pp-ct-vrow { background: transparent; box-shadow: none; border-color: var(--w-line); }
.pp-ct-vmain { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 7px; }
.pp-ct-vtitle { font-size: 14.5px; font-weight: 600; line-height: 1.35; }
.pp-ct-vmeta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 12px; color: var(--text-dim); }
.pp-ct-date { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 8px; border-radius: 7px; background: var(--surface-3); color: var(--text); font-weight: 600; }
.pp-ct-date.is-none { background: transparent; color: var(--text-faint); box-shadow: inset 0 0 0 1px var(--w-line-2); }
.pp-ct-date.is-late { color: var(--late); background: var(--late-soft); }
.pp-ct-to { color: var(--text-faint); }
.pp-ct-linked { display: inline-flex; align-items: center; gap: 4px; color: var(--done); font-weight: 650; }
.pp-ct-next { min-height: 36px; padding: 0 11px; font-size: 13px; gap: 5px; flex: none; }
.pp-ct-ideagrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; align-items: start; }
.pp-ct-idea { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 8px 8px 12px; border-radius: 12px; background: var(--w-card); border: 1px solid var(--w-card-line); color: inherit; font: inherit; text-align: left; cursor: pointer; }
.pp-ct-ideatext { flex: 1; min-width: 0; font-size: 14px; font-weight: 600; line-height: 1.35; }
.pp-ct-planit { min-height: 34px; padding: 0 10px; font-size: 12.5px; flex: none; }

/* the video panel and the post panel */
.pp-ct-stages { flex-wrap: wrap; }
.pp-ct-stages .pp-seg-btn { flex: 1 1 30%; }
.pp-ct-linkedpost { display: flex; gap: 12px; align-items: center; padding: 8px; border-radius: 14px; background: var(--w-bg); border: 1px solid var(--w-line); }
.pp-ct-linkedpost .pp-ct-thumb { width: 44px; height: 70px; }
.pp-ct-linkedpost b { font-size: 13.5px; display: block; margin-bottom: 6px; }
.pp-ct-pd-top { display: flex; gap: 14px; align-items: flex-start; }
.pp-ct-pd-media { position: relative; width: 150px; flex: none; aspect-ratio: 9 / 16; border-radius: 14px; overflow: hidden; background: var(--surface-3); }
.pp-ct-pd-media video, .pp-ct-pd-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pp-ct-pd-text { display: grid; place-items: center; height: 100%; color: var(--text-faint); font-size: 13px; }
.pp-ct-pd-count { position: absolute; top: 8px; right: 8px; font-size: 11.5px; font-weight: 700; padding: 3px 8px; border-radius: 99px; background: var(--scrim); }
.pp-ct-pd-info { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; min-width: 0; }
.pp-ct-pd-title { margin: 0; font-size: 18px; line-height: 1.3; }
.pp-ct-pd-fix { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; padding: 14px; border-radius: 16px; background: var(--accent-soft-2); border: 1px solid var(--accent-line); }
.pp-ct-eyebrow.is-fix { color: var(--accent-hi); }
.pp-ct-pd-why { display: flex; flex-wrap: wrap; gap: 6px; }
.pp-ct-pd-note { margin: 0; font-size: 15px; line-height: 1.5; color: var(--text); }
.pp-ct-fine { margin: 0; font-size: 12.5px; color: var(--text-dim); line-height: 1.5; }
.pp-ct-caption { white-space: pre-line; font-size: 14px; line-height: 1.55; color: var(--text); padding: 12px 14px; border-radius: 14px; background: var(--w-bg); border: 1px solid var(--w-line); }
.pp-ct-caption.is-short { display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical; overflow: hidden; }

/* Content on a client's profile */
.pp-ccontent .pp-h2 { display: flex; align-items: center; gap: 10px; }
.pp-ccontent-share { margin-left: auto; }
.pp-ccontent-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; margin-bottom: 12px; }
.pp-ccontent-shoot { font-size: 14px; color: var(--text-dim); min-height: 40px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.pp-ccontent-shoot b { color: var(--text); }
.pp-ccontent-list { display: flex; flex-direction: column; gap: 8px; }

/* phone */
.pp-ct-mtools { display: flex; gap: 8px; margin-top: 12px; }
.pp-ct-mtools .pp-tkh-fwrap { flex: 1; min-width: 0; }
.pp-ct-mtools .pp-ct-pick { width: 100%; max-width: none; height: 44px; justify-content: flex-start; }
.pp-ct-mtools .pp-ct-pickname { flex: 1; text-align: left; }
.pp-ct-mtools .pp-ct-share, .pp-ct-mtools .pp-ct-alerts { height: 44px; width: 48px; padding: 0; justify-content: center; flex: none; }
@media (max-width: 760px) {
  .pp-ct-mtools .pp-tkh-pop { position: fixed; top: auto; bottom: calc(76px + var(--safe-bottom)); left: 12px; right: 12px; width: auto; }
  .pp-ct-shoot { flex-wrap: wrap; margin: 14px 0; padding: 12px; gap: 12px; }
  .pp-ct-shoot-acts { width: 100%; }
  .pp-ct-shoot-acts .pp-btn { flex: 1; min-height: 44px; }
  .pp-ct-week { padding: 10px; border-radius: 18px; }
  .pp-ct-agenda { margin-top: 14px; }
  .pp-ct-dayrow { grid-template-columns: 40px minmax(0, 1fr); gap: 8px; padding: 6px 0; }
  .pp-ct-dlabel b { font-size: 20px; }
  .pp-ct-dlabel span { font-size: 10.5px; }
  .pp-ct-row { gap: 10px; padding: 7px; }
  .pp-ct-row .pp-ct-thumb { width: 54px; height: 88px; }
  .pp-ct-rtop { flex-wrap: wrap; }
  .pp-ct-rtop .pp-ct-st { margin-left: 0; }
  .pp-ct-fixbtn { width: 100%; min-height: 44px; }
  .pp-ct-plan { margin-top: 14px; }
  .pp-ct-add { padding: 6px 6px 6px 12px; flex-wrap: wrap; }
  .pp-ct-addselect { flex: 1; }
  .pp-ct-vrow { flex-wrap: wrap; }
  .pp-ct-next { width: 100%; min-height: 44px; }
  .pp-ct-planit { min-height: 44px; }
  .pp-ct-shootchip { min-height: 44px; }
  .pp-ct-ideagrid { grid-template-columns: 1fr; }
  .pp-ct-pd-media { width: 120px; }
  .pp-ct-shootedit .pp-btn { min-height: 44px; }
  .pp-ct-num { min-height: 44px; }
}
/* merge (Oct 9): the Content block on a client's page uses the same heading as Notes, Pages and Tasks */
[data-page="clients"] .pp-ccontent > .pp-h2 { font-size: 15px; font-weight: 700; letter-spacing: -.005em; text-transform: none; color: var(--text); }
[data-page="clients"] .pp-ccontent > .pp-h2 .pp-sec-ct { font-size: 12.5px; font-weight: 600; color: var(--text-faint); letter-spacing: 0; text-transform: none; }

/* ---------- NAVIGATION (Oct 9, Shadi: hidden until asked for, grouped, animated) ----------
   The top bar carries the menu button on every size. The panel slides in over the page from
   the left, its sections cascade in one after another, and each category folds open and shut
   (grid rows 0fr to 1fr, so the height animates without measuring anything). */
.pp-menubtn {
  width: 40px; height: 40px; flex: none; display: grid; place-items: center; border-radius: 12px;
  border: 1px solid var(--w-line-2); background: transparent; color: var(--text); cursor: pointer;
  transition: background .16s var(--ease), border-color .16s var(--ease);
}
.pp-menubtn-lines { display: flex; flex-direction: column; gap: 4px; width: 17px; }
.pp-menubtn-lines i { display: block; height: 2px; border-radius: 2px; background: currentColor; transition: width .22s var(--ease); }
.pp-menubtn-lines i:nth-child(2) { width: 12px; }
@media (hover: hover) and (pointer: fine) {
  .pp-menubtn:hover { background: var(--w-card); border-color: var(--w-card-line); }
  .pp-menubtn:hover .pp-menubtn-lines i:nth-child(2) { width: 17px; }
}
.pp-app.is-wide .pp-top { gap: 14px; padding-left: 20px; padding-right: 24px; }

.pp-nd { position: fixed; inset: 0; z-index: 80; pointer-events: none; }
.pp-nd.is-open { pointer-events: auto; }
.pp-nd-scrim { position: absolute; inset: 0; background: var(--scrim); opacity: 0; transition: opacity .3s var(--ease); }
.pp-nd.is-open .pp-nd-scrim { opacity: 1; }
.pp-nd-panel {
  position: absolute; top: 0; bottom: 0; left: 0; width: min(320px, 86vw); display: flex; flex-direction: column;
  padding: calc(var(--safe-top) + 16px) 14px calc(var(--safe-bottom) + 14px);
  background: var(--side-bg); border-right: 1px solid var(--w-line); border-radius: 0 24px 24px 0;
  box-shadow: inset -1px 0 0 var(--edge-hi), var(--shadow-lg);
  transform: translateX(-104%); transition: transform .44s cubic-bezier(.32, .72, 0, 1);
}
.pp-nd.is-open .pp-nd-panel { transform: none; }
.pp-nd-head { display: flex; align-items: center; gap: 11px; padding: 0 2px 16px 6px; margin-bottom: 8px; border-bottom: 1px solid var(--w-line); }
.pp-nd-mark { width: 38px; height: 38px; flex: none; }
.pp-nd-brand { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.pp-nd-app { font-family: var(--font-display); font-size: 18px; font-weight: 600; letter-spacing: -.01em; white-space: nowrap; }
.pp-nd-close { flex: none; }
.pp-nd-nav { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 2px; padding: 4px 0; scrollbar-width: none; }
.pp-nd-nav::-webkit-scrollbar { display: none; }

/* every row slides in a beat after the one above it */
.pp-nd-item, .pp-nd-ghead {
  opacity: 0; transform: translateX(-14px);
  transition: opacity .3s var(--ease) var(--d, 0s), transform .4s cubic-bezier(.2, .8, .2, 1) var(--d, 0s), background .15s var(--ease), color .15s var(--ease);
}
.pp-nd.is-open .pp-nd-item, .pp-nd.is-open .pp-nd-ghead { --d: calc(var(--i) * 24ms + 90ms); opacity: 1; transform: none; }

.pp-nd-item {
  position: relative; width: 100%; display: flex; align-items: center; gap: 12px; min-height: 46px; padding: 0 10px 0 7px;
  border: 0; border-radius: 13px; background: transparent; color: var(--text-dim); font-size: 15px; font-weight: 550; text-align: left; cursor: pointer;
}
.pp-nd-ic { width: 32px; height: 32px; flex: none; display: grid; place-items: center; border-radius: 9px; color: var(--text-dim); transition: background .15s var(--ease), color .15s var(--ease); }
.pp-nd-text { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-nd-ct { min-width: 24px; height: 22px; padding: 0 7px; border-radius: 7px; display: inline-flex; align-items: center; justify-content: center; background: var(--w-card); color: var(--text-dim); font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; }
.pp-nd-item.is-on { background: var(--w-card); color: var(--text); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-nd-item.is-on::before { content: ""; position: absolute; left: 0; top: 11px; bottom: 11px; width: 3px; border-radius: 0 3px 3px 0; background: var(--accent-hi); }
.pp-nd-item.is-on .pp-nd-ic { background: var(--accent-soft); color: var(--accent-hi); }
.pp-nd-item.is-on .pp-nd-ct { background: var(--accent-soft); color: var(--accent-hi); }
@media (hover: hover) and (pointer: fine) {
  .pp-nd-item:not(.is-on):hover { background: var(--w-bg); color: var(--text); }
  .pp-nd-item:not(.is-on):hover .pp-nd-ic { color: var(--text); }
}

/* a category: its name, a peek at what's inside when folded, and an arrow that turns */
.pp-nd-group { margin-top: 10px; }
.pp-nd-ghead {
  width: 100%; display: flex; align-items: center; gap: 8px; min-height: 34px; padding: 0 10px 0 12px; border: 0; border-radius: 10px;
  background: transparent; color: var(--text-faint); cursor: pointer;
}
.pp-nd-glabel { flex: 1; text-align: left; font-size: 11.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.pp-nd-gpeek { height: 20px; padding: 0 7px; border-radius: 6px; display: inline-flex; align-items: center; background: var(--w-card); color: var(--text-dim); font-size: 11.5px; font-weight: 700; }
.pp-nd-gpeek.is-on { background: var(--accent-soft); color: var(--accent-hi); }
.pp-nd-chev { transition: transform .28s cubic-bezier(.2, .8, .2, 1); }
.pp-nd-group.is-shut .pp-nd-chev { transform: rotate(-90deg); }
@media (hover: hover) and (pointer: fine) { .pp-nd-ghead:hover { color: var(--text); background: var(--w-bg); } }
.pp-nd-gbody { display: grid; grid-template-rows: 1fr; transition: grid-template-rows .32s cubic-bezier(.2, .8, .2, 1); }
.pp-nd-group.is-shut .pp-nd-gbody { grid-template-rows: 0fr; }
.pp-nd-ginner { min-height: 0; overflow: hidden; display: flex; flex-direction: column; gap: 2px; padding-top: 2px; }
.pp-nd-group.is-shut .pp-nd-ginner { padding-top: 0; }
.pp-nd-group.is-shut .pp-nd-ginner .pp-nd-item { opacity: 0; transform: translateY(-6px); }

.pp-nd-foot { padding: 12px 8px 0; border-top: 1px solid var(--w-line); font-size: 12px; color: var(--text-faint); }
.pp-nd-foot kbd { font: inherit; font-weight: 700; padding: 1px 6px; border-radius: 5px; border: 1px solid var(--w-line-2); color: var(--text-dim); }

@media (max-width: 760px) {
  .pp-menubtn { width: 40px; height: 40px; }
  .pp-nd-foot { display: none; }
  .pp-nd-item { min-height: 50px; font-size: 16px; }
}
@media (prefers-reduced-motion: reduce) {
  .pp-nd-panel, .pp-nd-scrim, .pp-nd-item, .pp-nd-ghead, .pp-nd-gbody, .pp-nd-chev { transition: none; }
}

/* ---------- personal clients (Oct 9): Agents Lens clients, hidden from the main list ---------- */
.pp-cpers-tick {
  width: 100%; display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 12px; text-align: left; cursor: pointer;
  border: 1px solid var(--w-line-2); background: transparent; color: var(--text); transition: border-color .15s var(--ease), background .15s var(--ease);
}
.pp-cpers-tick.is-on { border-color: var(--personal-line); background: var(--personal-soft); }
.pp-cpers-box { width: 20px; height: 20px; flex: none; display: grid; place-items: center; border-radius: 6px; border: 2px solid var(--text-faint); color: var(--bg); transition: background .15s var(--ease), border-color .15s var(--ease); }
.pp-cpers-tick.is-on .pp-cpers-box { background: var(--personal); border-color: var(--personal); }
.pp-cpers-txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.pp-cpers-txt b { font-size: 14px; font-weight: 650; }
.pp-cpers-txt small { font-size: 12px; color: var(--text-faint); }
.pp-cnew .pp-cpers-tick { flex: 1 1 100%; }
.pp-chead .pp-cpers-tick { max-width: 430px; }
.pp-cpers-tag { display: inline-flex; align-items: center; height: 20px; padding: 0 7px; border-radius: 6px; background: var(--personal-soft); color: var(--personal); font-size: 11.5px; font-weight: 700; }
.pp-cpers-tag.is-big { height: 24px; padding: 0 9px; border-radius: 7px; font-size: 12px; }
[data-page="clients"] .pp-crow.is-personal:not(.is-on) { box-shadow: inset 3px 0 0 var(--personal), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-chidden.is-on { color: var(--personal); border-color: var(--personal-line); background: var(--personal-soft); }
.pp-chidden-ct { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; background: var(--w-card); color: var(--text-dim); font-size: 11px; font-weight: 700; }
.pp-chidden-hint { display: block; margin: 4px 2px 0; font-size: 13.5px; text-align: left; }
@media (max-width: 760px) { .pp-chidden { width: auto; padding: 0 10px; gap: 6px; } }
/* Content has tabs again (Oct 14): Calendar, Scripts, Used, on the same tab line as Tasks and Clients */
[data-page="content"] .pp-tkh-bar { margin-top: 14px; }

/* ---------- SCRIPTS LIBRARY (Oct 14): Content > Scripts and Used ---------- */
.pp-sc { margin-top: 18px; }
.pp-sc-lib { min-width: 0; }
.pp-sc-group { display: flex; flex-direction: column; gap: 8px; }
.pp-sc-group + .pp-sc-group { margin-top: 18px; }
.pp-sc-rows { display: flex; flex-direction: column; gap: 8px; }
.pp-sc-row, .pp-sc-used {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 8px; padding: 6px 8px 6px 4px; border-radius: 14px;
  background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm);
}
.pp-sc-row.is-sent { box-shadow: inset 3px 0 0 var(--done), inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
.pp-sc-main {
  flex: 1; min-width: 0; min-height: 52px; display: flex; flex-direction: column; justify-content: center; gap: 3px;
  padding: 8px 10px; border: 0; border-radius: 10px; background: transparent; color: var(--text); text-align: left; cursor: pointer;
}
.pp-sc-title { font-size: 15px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-sc-meta { font-size: 12.5px; color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-sc-send {
  flex: none; display: inline-flex; align-items: center; gap: 7px; height: 36px; min-width: 44px; padding: 0 13px; border-radius: 10px;
  border: 1px solid var(--accent-line); background: var(--accent-soft); color: var(--accent-hi); font-size: 13.5px; font-weight: 650; cursor: pointer;
}
.pp-sc-insent {
  flex: none; display: inline-flex; align-items: center; gap: 7px; height: 36px; min-width: 44px; padding: 0 12px; border-radius: 10px;
  border: 1px solid transparent; background: var(--done-soft); color: var(--done); font-size: 13px; font-weight: 650; cursor: pointer;
}
@media (hover: hover) and (pointer: fine) { .pp-sc-insent:hover { border-color: var(--done); } }
.pp-sc-retire { flex: none; color: var(--text-faint); }
.pp-sc-newbtn { width: 100%; justify-content: center; margin-bottom: 16px; }
.pp-sc-make.is-open { display: flex; flex-direction: column; gap: 10px; margin-bottom: 18px; }
.pp-sc-done { align-self: flex-end; }
.pp-sc-hero { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.pp-sc-hero .pp-pr-composer { width: 100%; }
.pp-sc-for { display: flex; align-items: center; gap: 10px; font-size: 13.5px; font-weight: 600; color: var(--text-dim); margin: 12px 0 2px; }
@media (hover: hover) and (pointer: fine) {
  .pp-sc-main:hover .pp-sc-title { color: var(--accent-hi); }
  .pp-sc-send:hover { background: var(--accent-soft-2); }
  .pp-sc-retire:hover { color: var(--text); background: var(--w-card-hi); }
}

/* Used: a row opens in place to show the original next to the final */
.pp-sc-used { cursor: default; }
.pp-sc-used.is-open { background: var(--w-card-hi); border-color: var(--accent-line); }
.pp-sc-chip { flex: none; display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border-radius: 7px; font-size: 12px; font-weight: 700; background: var(--surface-3); color: var(--text-dim); }
.pp-sc-chip.is-changed { background: var(--surface-3); color: var(--text); }
.pp-sc-chip.is-same { background: var(--done-soft); color: var(--done); }
.pp-sc-chev { flex: none; color: var(--text-faint); margin-right: 6px; pointer-events: none; }
.pp-sc-body { flex: 1 1 100%; min-width: 0; padding: 4px 10px 12px 14px; display: flex; flex-direction: column; gap: 12px; }
.pp-sc-tools { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.pp-sc-tools-sp { flex: 1; }
.pp-sc-tools .pp-editbtn { display: inline-flex; align-items: center; gap: 6px; margin: 0; white-space: nowrap; }
.pp-sc-note { margin: 0; font-size: 13px; color: var(--text-dim); }
.pp-sc-text { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 15px; line-height: 1.65; color: var(--text); padding: 14px 16px; border-radius: 12px; background: var(--w-bg); border: 1px solid var(--w-line); }
.pp-sc-del { color: var(--red); background: var(--red-soft); text-decoration: line-through; text-decoration-thickness: 1.5px; border-radius: 4px; }
.pp-sc-add { color: var(--done); background: var(--done-soft); text-decoration: none; border-radius: 4px; }
.pp-sc-side { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; }
.pp-sc-col { min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.pp-sc-colh { font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--text-dim); }
.pp-sc-empty {
  display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 70px 20px; text-align: center;
  border: 1.5px dashed var(--w-line-2); border-radius: 20px; background: var(--w-bg); color: var(--text-dim); font-size: 14px;
}
.pp-sc-empty b { color: var(--text); font-size: 15.5px; }
.pp-sc-empty span { max-width: 460px; }
@media (max-width: 760px) {
  .pp-sc-side { grid-template-columns: minmax(0, 1fr); }
  .pp-sc-title { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .pp-sc-body { padding: 2px 6px 10px 10px; }
  .pp-sc-text { font-size: 15.5px; padding: 12px 13px; }
  .pp-sc-send { height: 40px; }
}

/* ---------- shoot rhythm (rebuilt Oct 9): a date, a bar from the last shoot to the next, one button ---------- */
.pp-sh {
  display: flex; align-items: center; gap: 28px; margin: 18px 0 16px; padding: 16px 18px 16px 22px; border-radius: 20px;
  background: var(--w-bg); border: 1px solid var(--w-line);
}
.pp-sh-when { flex: none; min-width: 0; }
.pp-sh-date-big { display: flex; align-items: baseline; gap: 10px; margin-top: 4px; font-size: 22px; font-weight: 650; letter-spacing: -.01em; color: var(--text); white-space: nowrap; }
.pp-sh-in { font-size: 13px; font-weight: 600; color: var(--text-dim); }
.pp-sh.is-soon .pp-sh-in { color: var(--accent-hi); }
.pp-sh.is-late .pp-sh-in { color: var(--late); }
.pp-sh-q { margin-top: 4px; font-size: 17px; font-weight: 650; color: var(--text); }
.pp-sh-cycle { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 7px; }
.pp-sh-cycle-top { display: flex; justify-content: space-between; gap: 12px; font-size: 12.5px; color: var(--text-faint); white-space: nowrap; }
.pp-sh-track { height: 6px; border-radius: 3px; background: var(--w-card); overflow: hidden; }
.pp-sh-track i { display: block; height: 100%; border-radius: 3px; background: var(--text-dim); transition: width .5s cubic-bezier(.2, .8, .2, 1); }
.pp-sh.is-soon .pp-sh-track i { background: var(--accent-hi); }
.pp-sh.is-late .pp-sh-track i { background: var(--late); }
.pp-sh-ready { font-size: 13px; color: var(--text-dim); }
.pp-sh-acts { flex: none; display: flex; align-items: center; gap: 14px; }
.pp-sh-acts .pp-editbtn { margin: 0; }
.pp-sh-save { min-height: 40px; height: 40px; padding: 0 16px; border-radius: 11px; font-size: 14px; gap: 7px; }

/* setting it: one-tap choices, every control 40px tall */
.pp-sh.is-setting { align-items: center; }
.pp-sh-edit { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 10px 14px; }
.pp-sh-seg { display: inline-flex; padding: 3px; gap: 2px; border-radius: 12px; background: var(--w-card); border: 1px solid var(--w-card-line); }
.pp-sh-opt { height: 32px; padding: 0 12px; border: 0; border-radius: 9px; background: transparent; color: var(--text-dim); font-size: 13.5px; font-weight: 600; white-space: nowrap; cursor: pointer; transition: background .15s var(--ease), color .15s var(--ease); }
.pp-sh-opt.is-on { background: var(--surface-3); color: var(--text); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); }
@media (hover: hover) and (pointer: fine) { .pp-sh-opt:not(.is-on):hover { color: var(--text); } }
.pp-sh-days { display: inline-flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--text-dim); }
.pp-sh-num { width: 64px; height: 40px; padding: 0 10px; border-radius: 11px; border: 1px solid var(--w-card-line); background: var(--w-card); color: var(--text); font: inherit; font-size: 15px; font-weight: 650; text-align: center; -moz-appearance: textfield; }
.pp-sh-num::-webkit-outer-spin-button, .pp-sh-num::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.pp-sh-last { display: inline-flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--text-dim); }
.pp-duebtn.pp-sh-date { min-height: 40px; height: 40px; border-radius: 11px; background: var(--w-card); border-color: var(--w-card-line); color: var(--text); box-shadow: none; }
.pp-sh-edit .pp-sh-acts { gap: 12px; }
.pp-sh-edit.is-compact { justify-content: flex-start; }

@media (max-width: 1100px) and (min-width: 761px) {
  .pp-sh { flex-wrap: wrap; gap: 14px 24px; }
  .pp-sh.is-setting .pp-sh-edit { justify-content: flex-start; }
}
@media (max-width: 760px) {
  .pp-sh { flex-direction: column; align-items: stretch; gap: 14px; margin: 14px 0; padding: 16px; border-radius: 18px; }
  .pp-sh-acts { justify-content: space-between; }
  .pp-sh-save { flex: 1; min-height: 44px; height: 44px; justify-content: center; }
  .pp-sh-edit { justify-content: flex-start; }
  .pp-sh-seg { width: 100%; display: grid; grid-template-columns: repeat(2, 1fr); }
  .pp-sh-opt { height: 40px; }
  .pp-sh-edit .pp-sh-acts { width: 100%; }
}
@media (max-width: 760px) { .pp-sh.is-setting { align-items: stretch; } }

/* ---------- NO TOP BAR (Oct 9, Shadi: "we don't need that top bar anymore") ----------
   On a computer the menu button sits at the start of the page's title row, so the page keeps
   its full width and stays centred (a gutter for it cost 88px and squeezed the narrower
   screens; Shadi: "why is everything pushed off to the right?"). Once the title has scrolled
   away, a small copy slides in at the top left whenever you scroll back up, and out again as
   you read on. A phone opens the menu from More. A running focus session and the sync notes
   float in the bottom right corner. Starting a session and logging out live at the foot of
   the menu. Everything that used to stick under the bar now sticks to the top. */
.pp-app.is-wide .pp-main { position: relative; }
.pp-menubtn.pp-menubtn-page { position: absolute; top: 38px; left: 24px; z-index: 2; width: 42px; height: 42px; }
.pp-app.is-wide .pp-tkh-titles, .pp-app.is-wide .pp-home-head > div:first-child { padding-left: 58px; }
.pp-menubtn.pp-menubtn-float {
  position: fixed; top: calc(var(--safe-top) + 14px); left: 14px; z-index: 30; width: 42px; height: 42px;
  background: var(--w-card); border-color: var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-lg);
  opacity: 0; visibility: hidden; transform: translateY(-14px) scale(.9);
  transition: opacity .2s var(--ease), transform .32s cubic-bezier(.2, .8, .2, 1), visibility 0s linear .32s;
}
.pp-menubtn.pp-menubtn-float.is-peek {
  opacity: 1; visibility: visible; transform: none;
  transition: opacity .2s var(--ease), transform .32s cubic-bezier(.2, .8, .2, 1), visibility 0s;
}
.pp-dock {
  position: fixed; right: 20px; bottom: calc(var(--safe-bottom) + 20px); z-index: 35;
  display: flex; align-items: center; gap: 8px; pointer-events: none;
}
.pp-dock > * { pointer-events: auto; }
.pp-dock:empty { display: none; }
.pp-dock .pp-focus-mine, .pp-dock .pp-focus-done, .pp-dock .pp-focus-mate { box-shadow: var(--shadow-lg); }
.pp-dock .pp-syncnote { min-height: 36px; padding: 0 12px; border-radius: 999px; background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: var(--shadow-lg); }
.pp-dock .pp-update { box-shadow: var(--shadow-lg); }

.pp-tb-bar { top: var(--safe-top); }
[data-page="timebox"] .pp-tb-rail { top: calc(var(--safe-top) + 18px); }
[data-page="timebox"] .pp-tb-people { top: var(--safe-top); }

/* ---------- The Mac app (stage 5, Nov 6 2026) ----------
   desktop/main.js opens this page in a window with no title bar, like the tracker's Mac app:
   macOS draws its real window buttons over the top left corner, and js/pwa.js marks the page
   pp-mac. A strip the height of the buttons' row is kept clear through the same --safe-top a
   phone's notch uses, so every bar, drawer and sheet that keeps clear of a notch keeps clear of
   the buttons too. The strip is the page's own background and is what you drag the window by;
   while something covers it (pp-mac-busy) clicks go to that instead. In a full-screen Space the
   buttons hide and the strip goes with them (pp-mac-full, set by the Mac app). */
html.pp-mac { --safe-top: 36px; }
html.pp-mac.pp-mac-full { --safe-top: 0px; }
.pp-macbar { display: none; }
html.pp-mac .pp-macbar {
  display: block; position: fixed; top: 0; left: 0; right: 0; height: var(--safe-top); z-index: 79;
  background: var(--bg); -webkit-app-region: drag;
}
html.pp-mac.pp-mac-busy .pp-macbar { -webkit-app-region: no-drag; }
html.pp-mac.pp-mac-full .pp-macbar { display: none; }
html.pp-mac .pp-app.is-wide .pp-main { padding-top: calc(var(--safe-top) + 26px); }
html.pp-mac .pp-menubtn.pp-menubtn-page { top: calc(var(--safe-top) + 38px); }

/* the menu's foot: Focus, then you */
.pp-nd-foot { display: flex; flex-direction: column; gap: 2px; padding: 8px 0 0; font-size: inherit; color: inherit; }
.pp-nd-foot .pp-nd-item { --i: 12; }
.pp-focus-nav { display: block; }
.pp-focus-navrow .pp-focus-time { margin-left: 4px; color: var(--accent-hi); font-variant-numeric: tabular-nums; }
.pp-focus-navrow.is-live .pp-nd-ic { background: var(--accent-soft); color: var(--accent-hi); }
.pp-focus-navstop {
  flex: none; padding: 5px 10px; border-radius: 8px; border: 1px solid var(--w-line-2);
  font-size: 12.5px; font-weight: 700; color: var(--text-dim);
}
.pp-nd-me { display: flex; align-items: center; gap: 11px; min-height: 52px; padding: 8px 4px 0 7px; margin-top: 6px; border-top: 1px solid var(--w-line); }
.pp-nd-me .pp-avatar { flex: none; }
.pp-nd-mename { flex: 1; min-width: 0; font-size: 14.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-nd-logout {
  flex: none; display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 0 12px;
  border-radius: 10px; border: 1px solid var(--w-line-2); background: transparent; color: var(--text-dim);
  font-size: 13px; font-weight: 600; cursor: pointer; transition: background .15s var(--ease), color .15s var(--ease);
}
@media (hover: hover) and (pointer: fine) {
  .pp-nd-logout:hover { background: var(--w-card); color: var(--text); }
  .pp-menubtn.pp-menubtn-float:hover, .pp-menubtn.pp-menubtn-page:hover { background: var(--w-card-hi); }
}
.pp-menu-scrim.is-over { z-index: 90; }
.pp-menu.is-over { z-index: 91; }

@media (max-width: 760px) {
  .pp-main { padding-top: calc(var(--safe-top) + 18px); }
  .pp-dock { right: 12px; bottom: calc(var(--safe-bottom) + 78px); }
  .pp-nd-foot { display: flex; }
  [data-page="timebox"] .pp-tb-people { top: var(--safe-top); }
  .pp-sec-head { top: var(--safe-top); }
}
/* ---------- FINANCES LOOK (lab, Oct 9, Shadi: "looks good"): Tasks' header, columns that even out ----------
   The three numbers you check most sit in the header, the four sections are the tab line,
   and Add income / Add expense ride at its right on every tab. The colours stay. */
.pp-finh .pp-tkh-tools { gap: 8px; }
.pp-finh .pp-fin-action { min-height: 40px; padding: 0 13px 0 6px; gap: 8px; font-size: 13.5px; }
.pp-finh .pp-fin-action .pp-fin-ico { width: 28px; height: 28px; border-radius: 8px; }
.pp-finh-add { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 0 0 12px; }
.pp-finh-add .pp-fin-action { justify-content: center; }
@media (max-width: 760px) {
  .pp-finh .pp-tkh-stat b { font-size: 21px; }
}
/* the rolling number inside a stat is a span too; it keeps the number's size, not the label's */
.pp-finh .pp-tkh-stat b span { font: inherit; color: inherit; letter-spacing: inherit; }
@media (max-width: 760px) {
  .pp-finh-add { margin: 10px 0 4px; }
  .pp-finh .pp-tkh-stat { padding: 0 10px; }
}

/* the project panel's foot: Delete project, set apart from the work above it */
.pp-pj-foot { display: flex; margin-top: 28px; padding-top: 18px; border-top: 1px solid var(--w-line); }

/* ---------- EDIT ROOM LOOK (Oct 9, Shadi: "change the whole look, make it look much nicer") ----------
   The studio board (he picked it over a review-desk version): Needs you / Being edited / Answered
   columns, a review opening in a panel, the Tasks-style header with a Shadi / Adam tab, the manager
   pill, and ONE client tag per video in its business colour. */
.pp-erh .pp-tkh-tools { padding-bottom: 9px; }
.pp-er-mgr { display: inline-flex; align-items: center; gap: 8px; height: 32px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--w-line-2); font-size: 12.5px; font-weight: 650; color: var(--text-dim); white-space: nowrap; }
.pp-er-mgr i { width: 8px; height: 8px; border-radius: 50%; background: var(--done); box-shadow: 0 0 0 3px var(--done-soft); }
.pp-er-mgr.is-down { color: var(--red); border-color: var(--red-line); }
.pp-er-mgr.is-down i { background: var(--red); box-shadow: 0 0 0 3px var(--red-soft); }

/* the client tag */
.pp-er-tag { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 10px; border-radius: 999px; font-size: 12px; font-weight: 700; white-space: nowrap; background: var(--w-card-hi); color: var(--text); }
.pp-er-tag::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--text-faint); }
.pp-er-tag.is-al { background: var(--er-al-soft); color: var(--er-al-ink); }
.pp-er-tag.is-al::before { background: var(--er-al); }
.pp-er-tag.is-sr { background: var(--er-sr-soft); color: var(--er-sr-ink); }
.pp-er-tag.is-sr::before { background: var(--er-sr); }

.pp-er-none { display: flex; align-items: center; gap: 16px; padding: 22px 20px; border-radius: 20px; border: 1.5px dashed var(--w-line-2); background: var(--w-bg); }
.pp-er-none-ic { width: 46px; height: 46px; flex: none; display: grid; place-items: center; border-radius: 13px; background: var(--w-card); color: var(--text-dim); }
.pp-er-none-h { font-size: 15.5px; font-weight: 650; }
.pp-er-none-p { margin: 3px 0 0; font-size: 13.5px; line-height: 1.45; color: var(--text-faint); }

/* a review, as it reads inside the panel */
.pp-er-chead-top { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.pp-er-kind { font-size: 12.5px; font-weight: 600; color: var(--text-faint); }
.pp-er-when::before { content: "·"; margin-right: 8px; color: var(--text-faint); }
.pp-ers-sheet .pp-er-ctitle { margin-top: 10px; font-size: 20px; font-weight: 700; letter-spacing: -.015em; }
.pp-ers-sheet .pp-er-cmeta { margin-top: 4px; gap: 8px; }
/* the video on a dark stage: a tall talking head sits in the middle instead of filling the width */
.pp-ers-sheet .pp-er-vids { gap: 14px; }
.pp-ers-sheet .pp-er-vids.is-single { grid-template-columns: minmax(0, 1fr); }
.pp-ers-sheet .pp-er-vid { padding: 10px; border-radius: 16px; background: var(--er-screen); }
.pp-ers-sheet .pp-er-player { width: 100%; max-height: min(58vh, 540px); object-fit: contain; border-radius: 10px; }
.pp-ers-sheet .pp-er-vcap { margin: 9px 2px 0; }
.pp-ers-sheet .pp-er-answer { padding-top: 14px; border-top: 1px solid var(--w-line); }
.pp-ers-sheet .pp-er-acts .pp-btn { min-height: 44px; padding: 0 18px; border-radius: 12px; }
.pp-er-dmeta { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; }

/* ===== B: the studio board ===== */
.pp-ers { display: flex; flex-direction: column; gap: 16px; }
.pp-ers-res { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px; padding: 11px 16px; border-radius: 16px; background: var(--w-bg); border: 1px solid var(--w-line); font-size: 13.5px; }
.pp-ers-res-k { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); }
.pp-ers-res-now { display: inline-flex; align-items: center; gap: 0; color: var(--text); }
.pp-ers-res-now i { width: 8px; height: 8px; margin-right: 8px; border-radius: 50%; background: var(--accent-hi); }
.pp-ers-res-now.is-free { color: var(--text-dim); }
.pp-ers-res-q { display: inline-flex; align-items: center; gap: 6px; color: var(--text-faint); }
.pp-ers-res-qn { padding: 2px 9px; border-radius: 999px; background: var(--w-card); color: var(--text-dim); font-weight: 600; }

.pp-ers-cols { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.pp-ers-col { min-width: 0; display: flex; flex-direction: column; gap: 10px; padding: 14px; border-radius: 22px; background: var(--w-bg); border: 1px solid var(--w-line); }
.pp-ers-colhead { display: flex; align-items: center; gap: 9px; padding: 2px 4px 4px; }
.pp-ers-colhead h2 { margin: 0; font-size: 14px; font-weight: 700; }
.pp-ers-coldot { width: 8px; height: 8px; border-radius: 50%; background: var(--text-faint); }
.pp-ers-coldot.is-you { background: var(--accent-hi); box-shadow: 0 0 0 3px var(--accent-soft); }
.pp-ers-coldot.is-done { background: var(--done); }
.pp-ers-ct { margin-left: auto; min-width: 26px; height: 22px; padding: 0 8px; border-radius: 7px; display: inline-flex; align-items: center; justify-content: center; background: var(--w-card); color: var(--text-dim); font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; }
.pp-ers-list { display: flex; flex-direction: column; gap: 10px; }
.pp-ers-empty { padding: 18px 8px; font-size: 13px; color: var(--text-faint); text-align: center; }

.pp-ers-tile {
  position: relative; display: flex; flex-direction: column; width: 100%; padding: 0; overflow: hidden; text-align: left; cursor: pointer;
  border-radius: 18px; background: var(--w-card); border: 1px solid var(--w-card-line); color: var(--text);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-sm); transition: transform .18s var(--ease), border-color .18s var(--ease);
}
.pp-ers-tile.is-unchecked { border-style: dashed; }
/* one shape for every tile, whatever the video's own shape: the frames sit inside it */
.pp-ers-thumb { position: relative; display: block; aspect-ratio: 16 / 9; overflow: hidden; background: var(--er-screen); }
.pp-ers-thumb video, .pp-ers-thumb-gone { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; }
.pp-ers-thumb.is-pair > :nth-child(1) { width: calc(50% - 1px); }
.pp-ers-thumb.is-pair > :nth-child(2) { left: auto; right: 0; width: calc(50% - 1px); }
.pp-ers-badge { position: absolute; left: 10px; bottom: 10px; padding: 4px 10px; border-radius: 999px; background: var(--scrim); color: var(--text); font-size: 11.5px; font-weight: 700; }
.pp-ers-tbody { display: flex; flex-direction: column; gap: 5px; padding: 12px 14px 14px; }
.pp-ers-ttop { display: flex; align-items: center; gap: 8px; }
.pp-ers-when { margin-left: auto; font-size: 12px; color: var(--text-faint); white-space: nowrap; }
.pp-ers-ttitle { font-size: 15.5px; font-weight: 700; line-height: 1.3; overflow-wrap: anywhere; }
.pp-ers-tmeta { font-size: 12.5px; color: var(--text-dim); }
.pp-ers-go { position: absolute; top: 10px; right: 10px; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 10px; background: var(--scrim); color: var(--text); }

.pp-ers-ed { padding: 12px 13px; border-radius: 16px; background: var(--w-card); border: 1px solid var(--w-card-line); box-shadow: inset 0 1px 0 var(--edge-hi); }
.pp-ers-ed.is-blocked { border-color: var(--red-line); }
.pp-ers-ed-top { display: flex; align-items: center; gap: 9px; }
.pp-ers-ed-av { width: 28px; height: 28px; flex: none; display: grid; place-items: center; border-radius: 9px; background: var(--w-card-hi); font-size: 12.5px; font-weight: 800; color: var(--text); }
.pp-ers-ed-name { flex: 1; min-width: 0; font-size: 14.5px; font-weight: 650; }
.pp-ers-ed-video { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 9px; font-size: 13.5px; }
.pp-ers-ed-step { margin-top: 6px; font-size: 13px; color: var(--text-dim); }
.pp-ers-ed-note { margin-top: 8px; padding: 8px 10px; border-radius: 10px; background: var(--red-soft); font-size: 13px; color: var(--text); }
.pp-ers-ed-when { margin-top: 7px; font-size: 11.5px; color: var(--text-faint); }
.pp-ers-col.is-done .pp-er-done { gap: 10px; }
.pp-ers-col.is-done .pp-er-drow { border-radius: 16px; background: var(--w-card); border: 1px solid var(--w-card-line); }

/* the panel a review opens in */
body.pp-ers-locked { overflow: hidden; }
.pp-ers-sheetwrap { position: fixed; inset: 0; z-index: 85; }
.pp-ers-scrim { position: absolute; inset: 0; background: var(--scrim); animation: pp-fade .2s ease both; }
.pp-ers-sheet {
  position: absolute; top: 12px; right: 12px; bottom: 12px; width: min(820px, calc(100vw - 24px)); display: flex; flex-direction: column;
  border-radius: 24px; background: var(--side-bg); border: 1px solid var(--w-line); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-lg);
  animation: pp-ers-in .38s cubic-bezier(.32, .72, 0, 1) both;
}
@keyframes pp-ers-in { from { transform: translateX(40px); opacity: 0; } to { transform: none; opacity: 1; } }
.pp-ers-sheetbar { display: flex; align-items: center; justify-content: space-between; padding: 12px 12px 0 22px; }
.pp-ers-sheetk { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); }
.pp-ers-sheetbody { flex: 1; min-height: 0; overflow-y: auto; padding: 4px 22px 24px; }
.pp-ers-sheet .pp-er-card { padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; gap: 16px; animation: none; }
.pp-ers-sheet.is-phone { top: auto; left: 0; right: 0; bottom: 0; width: 100%; max-height: calc(100% - var(--safe-top) - 24px); border-radius: 24px 24px 0 0; padding-bottom: var(--safe-bottom); animation-name: pp-ers-up; }
@keyframes pp-ers-up { from { transform: translateY(40px); opacity: 0; } to { transform: none; opacity: 1; } }

@media (hover: hover) and (pointer: fine) {
  .pp-ers-tile:hover { transform: translateY(-2px); border-color: var(--accent-line); }
}
@media (max-width: 1180px) and (min-width: 761px) {
  .pp-ers-cols { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .pp-ers-col.is-done { grid-column: 1 / -1; }
}
@media (max-width: 760px) {
  .pp-erh .pp-tkh-tools { padding-bottom: 0; }
  .pp-er-mgr { height: 30px; padding: 0 10px; font-size: 12px; }
  .pp-ers-cols { grid-template-columns: minmax(0, 1fr); }
  .pp-ers-col { padding: 10px; border-radius: 18px; }
  .pp-ers-sheetbody { padding: 4px 16px 20px; }
}
@media (prefers-reduced-motion: reduce) {
  .pp-ers-sheet, .pp-ers-scrim { animation: none; }
  .pp-ers-tile { transition: none; }
}

/* ---------- SCRIPT EDITOR (Oct 14 redesign): the drawer reads as a document ----------
   Status pill on top, the title as a heading you type into, client / length / author as quiet
   properties (the project panel's language), and the script as the page, filling the panel. */
/* Opaque, not glass: it is a page you write on, and blurred lists behind the words fight them
   (WebKit without backdrop blur showed the whole page through it). The paper is the card on it. */
.pp-drawer.pp-se {
  width: 600px; background: var(--surface); -webkit-backdrop-filter: none; backdrop-filter: none;
  border-color: var(--line-2); box-shadow: inset 1px 0 0 var(--edge-hi), var(--shadow-lg);
}
.pp-se-bar { display: flex; align-items: center; gap: 10px; min-height: 60px; padding: calc(var(--safe-top) + 10px) 12px 6px 22px; }
.pp-se-state {
  flex: none; display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 11px; border-radius: 999px;
  background: var(--surface-3); color: var(--text-dim); font-size: 12.5px; font-weight: 700;
}
.pp-se-state.is-sent { background: var(--done-soft); color: var(--done); }
.pp-se-when { min-width: 0; font-size: 12.5px; color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-se-close { margin-left: auto; flex: none; }
.pp-se-body { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 14px; padding: 4px 22px 18px; -webkit-overflow-scrolling: touch; }
.pp-se-title {
  width: 100%; min-height: 48px; padding: 2px 0; border: 0; border-radius: 0; background: transparent; outline: none; color: var(--text);
  font-family: var(--font-display); font-size: 28px; font-weight: 600; letter-spacing: -.02em; line-height: 1.2;
  resize: none; overflow: hidden; field-sizing: content;
}
.pp-se-title::placeholder { color: var(--text); opacity: 1; }
.pp-se-props { display: flex; flex-direction: column; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
.pp-se-prop { display: grid; grid-template-columns: 124px minmax(0, 1fr); align-items: center; min-height: 44px; }
.pp-se-pk { display: inline-flex; align-items: center; gap: 9px; font-size: 13.5px; color: var(--text-faint); }
.pp-se-pk .pp-ic { color: var(--text-faint); }
.pp-se-pv { min-width: 0; font-size: 14.5px; color: var(--text); }
.pp-se-len { color: var(--text-dim); font-variant-numeric: tabular-nums; }

/* the client picker (drawer and the Scripts "For" row): a real control, its own chevron */
.pp-se-pickwrap { position: relative; display: inline-flex; max-width: 100%; }
.pp-se-pick {
  max-width: 100%; min-height: 40px; display: inline-flex; align-items: center; gap: 9px; padding: 0 11px 0 8px; border-radius: 11px;
  border: 1px solid var(--line-2); background: var(--surface-2); color: var(--text); font-size: 14.5px; font-weight: 600; cursor: pointer;
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-ctl); transition: border-color .16s var(--ease), background .16s var(--ease);
}
.pp-se-pick.is-open { border-color: var(--accent-line); }
.pp-se-pickname { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-se-pickchev { flex: none; margin-left: 4px; color: var(--text-dim); transition: transform .2s var(--ease); }
.pp-se-pick.is-open .pp-se-pickchev { transform: rotate(180deg); }
.pp-se-menu {
  position: absolute; z-index: 95; top: calc(100% + 6px); left: 0; width: 290px; max-height: 330px; overflow-y: auto;
  display: flex; flex-direction: column; gap: 2px; padding: 6px; border-radius: 14px;
  background: var(--pop-bg); border: 1px solid var(--line-2); box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-lg);
}
@media (hover: hover) and (pointer: fine) {
  .pp-se-pick:hover { background: var(--surface-2-hi); }
  .pp-se-menu .pp-ct-opt:not(.is-on):hover { background: var(--w-card); color: var(--text); }
}

/* the script itself: the page */
.pp-se-paper {
  flex: 1 0 auto; min-height: 320px; display: flex; border-radius: 16px; background: var(--surface-2); border: 1px solid var(--card-line);
  box-shadow: inset 0 1px 0 var(--edge-hi), var(--shadow-card); transition: border-color .18s var(--ease);
}
.pp-se-paper:focus-within { border-color: var(--accent-line); }
.pp-se-text {
  flex: 1; width: 100%; min-height: 320px; resize: none; border: 0; outline: none; background: transparent; color: var(--text);
  padding: 20px 22px; font-size: 17px; line-height: 1.75;
}
.pp-se-text::placeholder { color: var(--text-faint); }
.pp-se-note { margin: 0; display: flex; align-items: center; gap: 7px; font-size: 13px; color: var(--text-faint); }
.pp-se-note .pp-ic { color: var(--done); flex: none; }
.pp-se-foot { display: flex; align-items: center; gap: 10px; padding: 12px 22px calc(12px + var(--safe-bottom)); border-top: 1px solid var(--line); }
.pp-se-retire { color: var(--text-dim); }
.pp-se-go { margin-left: auto; min-height: 46px; padding: 0 20px; font-size: 15px; box-shadow: inset 0 1px 0 var(--edge-hi-strong), var(--shadow-key); }
@media (max-width: 760px) {
  .pp-se-bar { padding-left: 18px; }
  .pp-se-body { padding: 2px 18px 16px; }
  .pp-se-title { font-size: 24px; }
  .pp-se-prop { grid-template-columns: 104px minmax(0, 1fr); }
  .pp-se-menu { width: min(290px, calc(100vw - 140px)); }
  .pp-se-paper, .pp-se-text { min-height: 260px; }
  .pp-se-text { padding: 16px 16px; font-size: 17px; }
  .pp-se-foot { padding-left: 18px; padding-right: 18px; }
  .pp-se-go { flex: 1; }
}


/* ---------- The phone bar and its More panel (js/phone-nav.jsx, Shadi Nov 6 2026) ----------
   Replaces the glass bar with the gold lens ("not the real liquid glass", "I don't like how it's
   yellow"). A plain dark bar, four sections and a round More button in the middle. More grows a
   panel out of itself, almost the whole screen, with every other page in it. The bar stays on
   top of the panel, so the same button (now an X) closes it. */
.pp-pb {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 92;
  display: grid; grid-template-columns: 1fr 1fr 76px 1fr 1fr; align-items: end;
  padding: 0 6px var(--safe-bottom); min-height: calc(62px + var(--safe-bottom));
  background: var(--pb-bg); border-top: 1px solid var(--line);
}
.pp-pb-tab {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
  min-height: 60px; padding: 6px 2px 4px; border: 0; background: none; color: var(--text-faint);
  font: inherit; cursor: pointer; -webkit-tap-highlight-color: transparent;
  transition: color .18s var(--ease);
}
.pp-pb-tab.is-on { color: var(--text); }
.pp-pb-ic { position: relative; display: grid; place-items: center; width: 44px; height: 28px; border-radius: 14px; transition: background .18s var(--ease); }
.pp-pb-tab.is-on .pp-pb-ic { background: var(--surface-3); }
.pp-pb-dot { position: absolute; top: 1px; right: 8px; width: 7px; height: 7px; border-radius: 50%; background: var(--accent-hi); box-shadow: 0 0 0 2px var(--pb-bg); }
.pp-pb-lbl { font-size: 11px; font-weight: 600; letter-spacing: .01em; white-space: nowrap; }
.pp-pb-mid { position: relative; height: 60px; display: flex; justify-content: center; }
.pp-pb-more {
  position: absolute; top: -20px; width: 58px; height: 58px; border-radius: 50%;
  display: grid; place-items: center; border: 0; cursor: pointer;
  background: var(--text); color: var(--bg); box-shadow: var(--pb-more-shadow);
  transition: transform .35s cubic-bezier(.32, .72, 0, 1), background .2s var(--ease);
  -webkit-tap-highlight-color: transparent;
}
.pp-pb-more:active { transform: scale(.94); }
.pp-pb-more.is-here::after { content: ""; position: absolute; bottom: -9px; width: 5px; height: 5px; border-radius: 50%; background: var(--text); }
.pp-pb-moreic { position: relative; width: 22px; height: 22px; }
.pp-pb-moreic i {
  position: absolute; left: 50%; top: 50%; width: 5px; height: 5px; margin: -2.5px 0 0 -2.5px; border-radius: 3px;
  background: currentColor; transition: transform .35s cubic-bezier(.32, .72, 0, 1), width .35s cubic-bezier(.32, .72, 0, 1), margin .35s cubic-bezier(.32, .72, 0, 1);
}
.pp-pb-moreic i:nth-child(1) { transform: translateX(-8px); }
.pp-pb-moreic i:nth-child(3) { transform: translateX(8px); }
/* open: the three dots stretch into an X */
.pp-pb-more.is-open .pp-pb-moreic i { width: 22px; height: 2.6px; margin: -1.3px 0 0 -11px; }
.pp-pb-more.is-open .pp-pb-moreic i:nth-child(1) { transform: rotate(45deg); }
.pp-pb-more.is-open .pp-pb-moreic i:nth-child(2) { transform: scaleX(0); }
.pp-pb-more.is-open .pp-pb-moreic i:nth-child(3) { transform: rotate(-45deg); }

.pp-ms { position: fixed; inset: 0; z-index: 88; pointer-events: none; }
.pp-ms.is-open { pointer-events: auto; }
.pp-ms-scrim { position: absolute; inset: 0; background: var(--scrim); opacity: 0; transition: opacity .3s var(--ease); }
.pp-ms.is-open .pp-ms-scrim { opacity: 1; }
.pp-ms-panel {
  position: absolute; left: 0; right: 0; bottom: 0; top: calc(var(--safe-top) + 44px);
  overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
  padding: 22px 18px calc(110px + var(--safe-bottom));
  background: var(--side-bg); border-top: 1px solid var(--line-2); border-radius: 28px 28px 0 0;
  /* grows out of the More button: a circle from the button's centre */
  clip-path: circle(28px at 50% calc(100% - 50px - var(--safe-bottom)));
  transition: clip-path .5s cubic-bezier(.32, .72, 0, 1);
}
.pp-ms.is-open .pp-ms-panel { clip-path: circle(150% at 50% calc(100% - 50px - var(--safe-bottom))); }
.pp-ms-head, .pp-ms-glabel, .pp-ms-item, .pp-ms-foot {
  opacity: 0; transform: translateY(14px);
  transition: opacity .25s var(--ease), transform .4s cubic-bezier(.32, .72, 0, 1);
}
.pp-ms.is-open .pp-ms-head, .pp-ms.is-open .pp-ms-glabel, .pp-ms.is-open .pp-ms-item, .pp-ms.is-open .pp-ms-foot {
  opacity: 1; transform: none; transition-delay: calc(110ms + var(--i) * 22ms);
}
.pp-ms-head { display: flex; align-items: center; gap: 10px; margin: 0 2px 18px; }
.pp-ms-mark { height: 34px; width: auto; flex: none; object-fit: contain; }   /* the key is taller than wide: never squeeze it square */
.pp-ms-title { font-family: var(--font-display); font-size: 26px; font-weight: 600; letter-spacing: -.02em; }
.pp-ms-group + .pp-ms-group { margin-top: 20px; }
.pp-ms-glabel { margin: 0 4px 9px; font-size: 11.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--text-faint); }
.pp-ms-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.pp-ms-item {
  position: relative; display: flex; align-items: center; gap: 11px; min-height: 62px; padding: 10px 12px;
  border-radius: 16px; border: 1px solid var(--w-card-line); background: var(--w-card); color: var(--text);
  font: inherit; text-align: left; cursor: pointer; -webkit-tap-highlight-color: transparent;
}
.pp-ms-item:active { background: var(--w-card-hi); }
.pp-ms-item.is-on { border-color: var(--line-2); background: var(--w-card-hi); }
.pp-ms-ic { flex: none; width: 36px; height: 36px; border-radius: 11px; display: grid; place-items: center; background: var(--surface-3); color: var(--text); }
.pp-ms-item.is-on .pp-ms-ic { background: var(--text); color: var(--bg); }
.pp-ms-lbl { flex: 1; min-width: 0; font-size: 15px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-ms-ct { flex: none; min-width: 22px; height: 22px; padding: 0 7px; border-radius: 11px; display: grid; place-items: center; font-size: 12px; font-weight: 700; background: var(--surface-3); color: var(--text-dim); }
.pp-ms-foot { margin-top: 22px; padding-top: 12px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 4px; }
.pp-ms-me { display: flex; align-items: center; gap: 11px; min-height: 52px; padding: 4px; }
.pp-ms-mename { flex: 1; min-width: 0; font-size: 15px; font-weight: 600; }
@media (prefers-reduced-motion: reduce) {
  .pp-ms-panel { clip-path: none; opacity: 0; transition: opacity .2s; }
  .pp-ms.is-open .pp-ms-panel { clip-path: none; opacity: 1; }
  .pp-ms-head, .pp-ms-glabel, .pp-ms-item, .pp-ms-foot { transform: none; }
}
/* the focus row borrows the side menu's look, which hides it until that menu opens; here the foot fades in whole */
.pp-ms .pp-nd-item { opacity: 1; transform: none; }
.pp-ct-note.pp-ct-autofix b { color: var(--done); }
