
                          #tempTimelineEmptyState {
                            --bg:#03050b;
                            --ink:#e9eef8;
                            --dim:#8b96ac;
                            --green:#3ee98c;
                            --blue:#4aa9ff;
                            --cyan:#35d6e8;
                            --gold:#f6b83f;
                            --gold-hi:#ffe08a;
                            --purple:#a56bff;
                            --red:#ff5252;

                            /* Deal Room Menu accents — the SAME values the sidebar menu
                               uses, so a section reads in one colour everywhere it
                               appears in the deal room. Section identity lives on the
                               orb + its own controls; the older --green/--cyan/--gold
                               above stay put because they also drive status chips
                               (In Progress / Attention / overdue) and the rail gradient,
                               which are orthogonal to which section you're looking at.
                               Paired with an "r,g,b" triplet for alpha compositing. */
                            --drm-parts:#2ECC71;  --drm-parts-r:46,204,113;
                            --drm-chat:#FF3B4D;   --drm-chat-r:255,59,77;
                            --drm-invite:#2D8CFF; --drm-invite-r:45,140,255;
                            --drm-docs:#22D3EE;   --drm-docs-r:34,211,238;


                            font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
                            color:var(--ink);
                            display:flex;
                            justify-content:center;
                            align-items:flex-start;
                            gap:26px;
                            flex-wrap:wrap;
                            padding:34px 16px 60px;
                            background:
                              radial-gradient(1200px 700px at 20% -10%, #0b1226 0%, transparent 60%),
                              radial-gradient(900px 600px at 90% 110%, #120b22 0%, transparent 55%),
                              #03050b;
                            border-radius: 12px;
                            text-align: left;
                          }
                          #tempTimelineEmptyState * { box-sizing: border-box; }
                          #tempTimelineEmptyState .phone{
                            position:relative;width:402px;max-width:96vw;
                            border-radius:34px;overflow:hidden;
                            background:linear-gradient(180deg,#060a14 0%,#04070f 55%,#070b16 100%);
                            border:1px solid #131c30;
                            box-shadow:0 30px 80px rgba(0,0,0,.7), inset 0 1px 0 rgba(255,255,255,.04);
                          }
                          #tempTimelineEmptyState .screen{position:relative;z-index:2;padding:16px 14px 18px;}
                          #tempTimelineEmptyState .stars{position:absolute;inset:0;z-index:0;pointer-events:none;}
                          #tempTimelineEmptyState .stars i{position:absolute;background:#cfe2ff;border-radius:50%;opacity:.7;animation:twk var(--d,4s) ease-in-out infinite;}
                          @keyframes twk{0%,100%{opacity:.12}50%{opacity:.85}}
                          #tempTimelineEmptyState .neb{position:absolute;border-radius:50%;filter:blur(50px);z-index:0;pointer-events:none;}
                          /* Retention banner — tells the guest their uploads outlive the
                             deal. Uses the Documents cyan (--drm-docs) so it reads as a
                             documents-scoped promise rather than a stage status.
                             Margin is on TOP: it closes the timeline rather than opening it,
                             sitting directly under the last stage, and .export below brings
                             its own 14px. */
                          #tempTimelineEmptyState .keepbar{
                            margin-top:12px;padding:12px 13px;border-radius:12px;
                            background:linear-gradient(160deg,rgba(34,211,238,.09),rgba(10,20,32,.55));
                            border:1px solid rgba(var(--drm-docs-r),.32);
                            box-shadow:0 0 22px -8px rgba(var(--drm-docs-r),.45), inset 0 0 26px -18px rgba(var(--drm-docs-r),.9);
                          }
                          #tempTimelineEmptyState .keepbar .kbtop{display:flex;align-items:center;gap:10px;}
                          #tempTimelineEmptyState .keepbar .kbico{
                            flex:0 0 auto;width:34px;height:34px;border-radius:10px;
                            display:grid;place-items:center;
                            color:var(--drm-docs);font-size:16px;
                            background:rgba(var(--drm-docs-r),.1);
                            border:1px solid rgba(var(--drm-docs-r),.4);
                            box-shadow:0 0 14px -4px rgba(var(--drm-docs-r),.6);
                          }
                          #tempTimelineEmptyState .keepbar b{font-size:14.5px;font-weight:700;line-height:1.35;color:#eaf6ff;}
                          #tempTimelineEmptyState .keepbar p{margin:9px 0 0;font-size:13.5px;line-height:1.55;color:var(--dim);}
                          #tempTimelineEmptyState .keepbar p em{font-style:normal;font-weight:700;color:#cfeffa;}
                          #tempTimelineEmptyState .hdr{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
                          #tempTimelineEmptyState .back, #tempTimelineEmptyState .menu{
                            width:34px;height:34px;border-radius:50%;flex:0 0 auto;
                            display:grid;place-items:center;color:#c6d2e8;
                            background:#0c1324;border:1px solid #1c2740;cursor:pointer;font-size:16px;
                          }
                          /* pill + deal-room clip, side by side. Wraps rather than squeezing:
                             below ~440px the two would each be too narrow to read, so the clip
                             drops under the pill and takes the full width instead. */
                          #tempTimelineEmptyState .hdr-mid{
                            flex:1;min-width:0;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
                          }
                          /* GROWS into whatever the pill leaves rather than sitting at a fixed
                             width. This started as a fixed 168/218px with every type size
                             shrunk to fit, which made the intro clip — a thing people are meant
                             to watch — the smallest element on the board. It is the header's
                             second subject, so it takes the leftover space and keeps the shared
                             .stvid type sizes; only the max-width stops it overwhelming the
                             trace id on a very wide board. */
                          #tempTimelineEmptyState .hdr-vid{flex:1 1 240px;min-width:0;max-width:420px;}
                          /* a slot with no video in it (STAGE_VIDEOS_ON off) takes no room, so
                             the trace pill sits alone and centred */
                          #tempTimelineEmptyState [data-stvidslot]:empty{display:none !important;}
                          @media (max-width:440px){
                            #tempTimelineEmptyState .hdr-vid{flex:1 0 100%;max-width:none;}
                          }
                          /* a header element, not a stage card — the only thing it drops is the
                             card's top margin */
                          #tempTimelineEmptyState .hdr-vid .stvid{margin-top:0;}
                          #tempTimelineEmptyState .idpill{
                            flex:1;text-align:center;border-radius:20px;padding:7px 14px;
                            background:linear-gradient(180deg,#0d1322,#0a0f1c);
                            border:1.5px solid rgba(246,184,63,.55);
                            box-shadow:0 0 16px rgba(246,184,63,.12), inset 0 0 18px rgba(246,184,63,.04);
                          }
                          #tempTimelineEmptyState .idpill small{display:block;font-size:12px;color:var(--dim);letter-spacing:.6px;}
                          #tempTimelineEmptyState .idpill b{font-size:16px;font-weight:700;letter-spacing:1.5px;color:#ffedbe;text-shadow:0 0 10px rgba(246,184,63,.5);}
                          /* sits under the trace id, quieter than the "Deal Room" label above
                             it so the pill still reads id-first */
                          #tempTimelineEmptyState .idpill .idcreated{
                            display:block; margin-top:3px; font-size:11.5px; font-weight:600;
                            color:var(--dim); letter-spacing:.4px; white-space:nowrap;
                          }
                          #tempTimelineEmptyState .hdr2{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:2px;}
                          #tempTimelineEmptyState .hdr2 small{font-size:11.5px;color:var(--dim);letter-spacing:.8px;text-transform:uppercase;}
                          #tempTimelineEmptyState .hdr2 h2{font-size:16px;font-weight:700;letter-spacing:.3px;color:#ffffff !important;}
                          #tempTimelineEmptyState .tl{position:relative;}
                          #tempTimelineEmptyState .tl::before{
                            content:"";position:absolute;left:63px;top:40px;bottom:30px;width:2px;
                            background:linear-gradient(180deg,
                              var(--green) 0%, var(--blue) 15%, var(--cyan) 32%,
                              var(--gold) 50%, var(--purple) 66%, var(--green) 78%,
                              #55607a 90%, #3a4256 100%);
                            opacity:.5;filter:drop-shadow(0 0 6px rgba(130,160,255,.35));
                          }
                          #tempTimelineEmptyState .row{position:relative;display:flex;gap:12px;padding:10px 0;align-items:flex-start;}
                          #tempTimelineEmptyState .row .orbcol{flex:0 0 128px;display:flex;flex-direction:column;align-items:center;gap:6px;}
                          #tempTimelineEmptyState .row .side{flex:1;min-width:0;padding-top:8px;}
                          #tempTimelineEmptyState .orb{position:relative;width:112px;height:112px;}
                          #tempTimelineEmptyState .orb.sm{width:84px;height:84px;}
                          #tempTimelineEmptyState .orb .core{
                            position:absolute;inset:11px;border-radius:50%;z-index:3;
                            display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
                            text-align:center;color:#eef4ff;
                          }
                          #tempTimelineEmptyState .orb .core .ic{font-size:24px;line-height:1;filter:drop-shadow(0 0 6px rgba(255,255,255,.25));}
                          #tempTimelineEmptyState .orb.sm .core .ic{font-size:17px;}
                          #tempTimelineEmptyState .orb .core .nm{font-size:14px;font-weight:700;letter-spacing:.2px;max-width:94%;line-height:1.15;overflow-wrap:break-word;}
                          #tempTimelineEmptyState .orb.sm .core .nm{font-size:12.5px;}
                          #tempTimelineEmptyState .orb .core .sb{font-size:11.5px;color:rgba(225,236,255,.7);font-weight:500;}
                          /* ── orbital ring ──────────────────────────────────────────────
                             The band circles the planet instead of hovering over it: the
                             far half (.rB) is painted BEHIND the core, the near half (.rF)
                             crosses in FRONT of it, so the ring visibly passes around the
                             sphere. .ring carries the static tilt of the orbital plane and
                             the clip that picks its half; the inner <i class="bd"> carries
                             the band and does the spinning — keeping the two separate is
                             what stops the spin from dragging the clip around with it. */
                          /* .46 rather than the hero's flatter plane: the near half has to
                             clear the stage label sitting on the planet's face */
                          #tempTimelineEmptyState .orb .ring{
                            position:absolute;inset:-22px;border-radius:50%;pointer-events:none;
                            transform:rotate(-14deg) scaleY(.46);
                          }
                          #tempTimelineEmptyState .orb.sm .ring{inset:-17px;}
                          #tempTimelineEmptyState .orb .ring.rB{z-index:2;clip-path:inset(0 0 50% 0);}
                          #tempTimelineEmptyState .orb .ring.rF{z-index:4;clip-path:inset(50% 0 0 0);}
                          #tempTimelineEmptyState .orb .ring .bd{position:absolute;border-radius:50%;animation:spin var(--sp,10s) linear infinite;}
                          #tempTimelineEmptyState .orb .halo{position:absolute;inset:-16px;border-radius:50%;z-index:1;filter:blur(13px);opacity:.5;}
                          #tempTimelineEmptyState .orb .num{
                            position:absolute;top:-2px;left:50%;transform:translateX(-50%);z-index:6;
                            width:17px;height:17px;border-radius:50%;
                            background:color-mix(in srgb, var(--c) 80%, #000);
                            border:1px solid color-mix(in srgb, var(--c) 60%, #fff);
                            font-size:11px;font-weight:800;display:grid;place-items:center;color:#04101c;
                          }
                          #tempTimelineEmptyState .orb canvas.dust{position:absolute;inset:-26px;z-index:4;pointer-events:none;}
                          /* ── PALETTES ────────────────────────────────────────────────────
                             --c   lit side / ring / halo
                             --c2  night side
                             --auA/B/C  the three aurora stops, as RGB TRIPLETS because the
                                   conic-gradient needs to fade its own hue out to alpha 0 and
                                   `transparent` would interpolate through transparent BLACK,
                                   which greys the wash instead of dissolving it.
                             Every stage carries all five now. The aurora used to belong to the
                             Documents orb alone; it is what makes that planet read as premium
                             rather than as a coloured circle, so each stage gets its own — lead
                             in the stage's own hue, then two neighbours for depth, so the ring
                             has real hue travel instead of one colour at three opacities.
                             Drawn only on the stage view's planet (see .dglance .orb): ten
                             spinning blurred conics on the rail at once is exactly the
                             compositing cost .hb-lowfx exists to claw back. */
                          #tempTimelineEmptyState .orb[data-c="green"]{--c:#3ee98c;--c2:#07301d;--auA:62,233,140;--auB:34,211,238;--auC:129,140,248;}
                          #tempTimelineEmptyState .orb[data-c="blue"]{--c:#4aa9ff;--c2:#0a2249;--auA:74,169,255;--auB:129,140,248;--auC:34,211,238;}
                          #tempTimelineEmptyState .orb[data-c="cyan"]{--c:#35d6e8;--c2:#062a33;--auA:53,214,232;--auB:129,140,248;--auC:62,233,140;}
                          #tempTimelineEmptyState .orb[data-c="gold"]{--c:#f6b83f;--c2:#402a06;--auA:246,184,63;--auB:255,138,76;--auC:217,70,239;}
                          #tempTimelineEmptyState .orb[data-c="purple"]{--c:#a56bff;--c2:#240d47;--auA:165,107,255;--auB:217,70,239;--auC:74,169,255;}
                          #tempTimelineEmptyState .orb[data-c="green2"]{--c:#57e07f;--c2:#0a2f1b;--auA:87,224,127;--auB:34,211,238;--auC:246,184,63;}
                          /* Dormant. Slate keeps a cool blue bias rather than going neutral grey —
                             a true grey planet beside these reads as a rendering fault, not as a
                             stage that has not started. Its aurora is suppressed further down. */
                          #tempTimelineEmptyState .orb[data-c="gray"]{--c:#9aa6bd;--c2:#161c2b;--auA:154,166,189;--auB:154,166,189;--auC:154,166,189;}
                          /* Deal Room Menu accents as orb palettes. Deliberately NEW keys
                             rather than retuning "cyan"/"gold" — those two are shared with
                             the Created / Property / Financing orbs and the rail gradient,
                             so editing them would drag unrelated rows along. */
                          #tempTimelineEmptyState .orb[data-c="parts"]{--c:#2ECC71;--c2:#07351e;--auA:46,204,113;--auB:34,211,238;--auC:129,140,248;}
                          #tempTimelineEmptyState .orb[data-c="docs"]{--c:#22D3EE;--c2:#0a3b46;--auA:34,211,238;--auB:129,140,248;--auC:217,70,239;}
                          /* Created — crimson gas giant. --c2 is a deep wine rather than a
                             darkened --c so the night side goes plum instead of muddy brown,
                             which is what sells the reference planet's depth. */
                          #tempTimelineEmptyState .orb[data-c="crimson"]{--c:#FF4D6D;--c2:#3D0716;--auA:255,77,109;--auB:217,70,239;--auC:246,184,63;}
                          /* Offer & Negotiation — amber. User-managed stage; never reset by
                             the payload loops (they exclude .row-offer), so this palette is
                             the orb's one permanent colour. */
                          #tempTimelineEmptyState .orb[data-c="offer"]{--c:#F6A83F;--c2:#422305;--auA:246,168,63;--auB:255,120,80;--auC:217,70,239;}
                          /* Appraisal — rose. Added late as a .row-extra stage, exactly like
                             Offer above, and like Offer it had no palette of its own: it sat on
                             data-c="gray" and STAGE_COLOR had no key for it, so the painter's
                             `STAGE_COLOR[key] || orb.dataset.c` fallback wrote gray back over
                             gray and the orb never changed colour — not even at Complete.
                             Rose rather than another green/blue because this orb is bracketed by
                             Inspections (#57e07f) and Closing (#35d6e8); gold was unavailable
                             since tspPaintTimelineCards() reserves it for the "attention" state. */
                          #tempTimelineEmptyState .orb[data-c="appraisal"]{--c:#F472B6;--c2:#3C0A24;--auA:244,114,182;--auB:165,107,255;--auC:34,211,238;}
                          /* ---- RENTAL TRACK ORBS ----
                             Four palettes chosen the same way Appraisal's was: each orb is
                             bracketed by its neighbours on the rail, so no two adjacent
                             rentals share a hue, and gold is left alone because
                             tspPaintTimelineCards() reserves it for the "attention" state.

                             Deliberately echoing the purchase track's own logic rather than
                             inventing a second language: Tenant Qualification is the rental
                             analogue of Participants-plus-Documents (violet, between the two),
                             Lease is where Offer's amber duty falls (teal to separate it from
                             Documents' cyan), Active Lease is the one stage that means "this
                             is working" (emerald, like Deal Complete), and Purchase
                             Transaction borrows Appraisal's rose family because it CONTAINS
                             the appraisal. */
                          #tempTimelineEmptyState .orb[data-c="tenantq"]{--c:#818CF8;--c2:#1B1B4B;--auA:129,140,248;--auB:34,211,238;--auC:217,70,239;}
                          #tempTimelineEmptyState .orb[data-c="lease"]{--c:#2DD4BF;--c2:#0A3A38;--auA:45,212,191;--auB:129,140,248;--auC:62,233,140;}
                          #tempTimelineEmptyState .orb[data-c="activelease"]{--c:#34D399;--c2:#07341F;--auA:52,211,153;--auB:246,184,63;--auC:34,211,238;}
                          #tempTimelineEmptyState .orb[data-c="purchasetx"]{--c:#E879F9;--c2:#3B0A42;--auA:232,121,249;--auB:165,107,255;--auC:244,114,182;}

                          /* A row belonging to the OTHER track is removed from the rail
                             entirely, not merely faded: the timeline draws a connecting line
                             through its rows (.tl .row::after), and a hidden-but-present row
                             would leave the rail running through a gap. display:none takes it
                             out of layout so the line closes up. Driven by
                             tempTimelineApplyTrack(). */
                          #tempTimelineEmptyState #p1 .tl .row.tl-offtrack{ display:none !important; }
                          #tempTimelineEmptyState .orb .core{
                            background:
                              radial-gradient(circle at 30% 26%, color-mix(in srgb, var(--c) 40%, #fff 8%) 0%, transparent 32%),
                              radial-gradient(circle at 62% 74%, var(--c2) 0%, #05080f 80%);
                            border:1px solid color-mix(in srgb, var(--c) 40%, transparent);
                            box-shadow:inset 0 0 24px color-mix(in srgb, var(--c) 28%, transparent);
                          }
                          /* the band never goes fully transparent — a continuous ellipse is
                             what makes it read as an orbit rather than a stray arc */
                          #tempTimelineEmptyState .orb .ring .bd.b1{
                            inset:0;--sp:10s;
                            background:conic-gradient(from 0deg,
                              color-mix(in srgb,var(--c) 30%, transparent) 0deg, var(--c) 35deg,
                              color-mix(in srgb,var(--c) 45%, #fff) 62deg, var(--c) 95deg,
                              color-mix(in srgb,var(--c) 26%, transparent) 155deg,
                              color-mix(in srgb,var(--c) 32%, transparent) 195deg, var(--c) 245deg,
                              color-mix(in srgb,var(--c) 55%, #fff) 268deg,
                              color-mix(in srgb,var(--c) 30%, transparent) 330deg);
                            -webkit-mask:radial-gradient(farthest-side, transparent calc(100% - 7px), #000 calc(100% - 6px));
                                    mask:radial-gradient(farthest-side, transparent calc(100% - 7px), #000 calc(100% - 6px));
                            filter:drop-shadow(0 0 7px var(--c));
                          }
                          #tempTimelineEmptyState .orb .ring .bd.b2{
                            inset:11px;--sp:16s;animation-direction:reverse;opacity:.6;
                            background:conic-gradient(from 120deg,
                              color-mix(in srgb,var(--c) 22%, transparent), var(--c) 30%,
                              color-mix(in srgb,var(--c) 22%, transparent) 58%,
                              color-mix(in srgb,var(--c) 70%, #fff) 82%,
                              color-mix(in srgb,var(--c) 22%, transparent));
                            -webkit-mask:radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 2px));
                                    mask:radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 2px));
                            filter:drop-shadow(0 0 4px var(--c));
                          }
                          #tempTimelineEmptyState .orb .halo{background:radial-gradient(circle, var(--c) 0%, transparent 68%);}
                          #tempTimelineEmptyState .orb[data-c="gray"] .ring{opacity:.45;}
                          #tempTimelineEmptyState .orb[data-c="gray"] .ring .bd.b1{animation-duration:22s;filter:none;}
                          #tempTimelineEmptyState .orb[data-c="gray"] .ring .bd.b2{display:none;}
                          #tempTimelineEmptyState .orb[data-c="gray"] .halo{opacity:.14;}

                          /* ══ DOCUMENTS & CUSTOM TASKS — the one oversized planet ══════════
                             Stage 5 is the only orb that has to answer two questions at once
                             (how many files are in, how much is still open), so it is
                             deliberately the largest body on the rail — ~18% over a standard
                             stage — with a two-line name and a pill readout on its face where
                             the other orbs carry a one-line caption.

                             Only this orb: everything below is scoped to .docs-xl, and the
                             shared .orb rules above are left alone. The rail measures orb
                             rects rather than assuming a size, so the connector follows the
                             bigger circle on its own. --c2 goes indigo (not a darkened cyan)
                             so the night side reads blue-violet like the reference. */
                          #tempTimelineEmptyState .orb.docs-xl{width:132px;height:132px;--c2:#14205c;}
                          #tempTimelineEmptyState .orb.docs-xl .core{inset:9px;gap:3px;}
                          #tempTimelineEmptyState .orb.docs-xl .core .ic{font-size:28px;color:#b5efff;}
                          /* The stacked-folder glyph is a FILLED shape, unlike the stroked
                             outlines the rest of this set uses, so it needs its own contrast:
                             a hard dark shadow underneath it (it sits on the planet's lit
                             half) plus a cyan bloom to sell it as lit. */
                          #tempTimelineEmptyState .orb.docs-xl .core .ic svg{
                            fill:currentColor;stroke:none;
                            filter:drop-shadow(0 1px 2px rgba(2,6,20,.9))
                                   drop-shadow(0 0 8px rgba(34,211,238,.7));
                          }
                          #tempTimelineEmptyState .orb.docs-xl .core .nm{
                            font-size:13.5px;line-height:1.18;letter-spacing:.2px;max-width:100%;
                          }
                          /* a block span, never <br>: styles.css hides every <br> under 991px,
                             which would silently collapse this back to one long line on phones */
                          #tempTimelineEmptyState .orb.docs-xl .core .nm .l2{display:block;}
                          #tempTimelineEmptyState .orb.docs-xl .core .sb{display:none;}
                          #tempTimelineEmptyState .orb.docs-xl .halo{inset:-17px;opacity:.55;}
                          /* the readout itself — files | open, painted by paintDocsOrbStats() */
                          /* Width is the constraint, not height: the pill sits BELOW the orb's
                             centre, where the circle has already narrowed, so the padding and
                             gap are tuned to keep both ends inside the limb rather than
                             crossing it. Widen either and the readout starts poking out of
                             the planet. */
                          #tempTimelineEmptyState .orb.docs-xl .dstats{
                            display:inline-flex;align-items:center;gap:7px;margin-top:2px;
                            padding:3px 8px;border-radius:11px;
                            background:rgba(3,9,24,.72);
                            border:1.5px solid rgba(103,232,249,.72);
                            box-shadow:0 0 12px rgba(34,211,238,.28),
                                       inset 0 1px 0 rgba(255,255,255,.07);
                          }
                          #tempTimelineEmptyState .orb.docs-xl .dstat{display:inline-flex;align-items:center;gap:4px;}
                          #tempTimelineEmptyState .orb.docs-xl .dstat .di{
                            display:inline-flex;width:12px;height:12px;flex:0 0 auto;color:#67e8f9;
                            filter:drop-shadow(0 0 4px rgba(34,211,238,.55));
                          }
                          #tempTimelineEmptyState .orb.docs-xl .dstat .di svg{
                            width:100%;height:100%;stroke:currentColor;fill:none;stroke-width:2;
                            stroke-linecap:round;stroke-linejoin:round;display:block;
                          }
                          #tempTimelineEmptyState .orb.docs-xl .dv{display:flex;flex-direction:column;align-items:center;line-height:1;}
                          #tempTimelineEmptyState .orb.docs-xl .dv b{
                            font-size:14px;font-weight:800;color:#fff;
                            text-shadow:0 1px 3px rgba(0,0,0,.6);
                          }
                          /* lower case, not the uppercase micro-caps the rest of this board
                             uses — the reference reads "files" / "open" as plain words */
                          #tempTimelineEmptyState .orb.docs-xl .dv em{
                            font-style:normal;font-size:7px;font-weight:700;letter-spacing:.01em;
                            text-transform:none;color:#67e8f9;margin-top:1px;
                          }
                          /* The stage number is the planet's marker, so it scales with it and
                             clears the limb instead of sitting on it. Lifted onto the rail that
                             already runs into this row — that stroke becomes the connector the
                             reference draws. */
                          #tempTimelineEmptyState .orb.docs-xl .num{
                            top:-18px;width:24px;height:24px;font-size:14px;
                            background:radial-gradient(circle at 50% 34%, #10345c 0%, #04101f 100%);
                            border:2px solid #22d3ee;color:#d7f7ff;
                            box-shadow:0 0 13px rgba(34,211,238,.55), inset 0 0 8px rgba(34,211,238,.3);
                          }
                          #tempTimelineEmptyState .orb.docs-xl .dsep{
                            width:1.5px;height:16px;border-radius:1px;background:rgba(103,232,249,.5);
                          }
                          /* open tasks take the amber this timeline already uses for "needs doing" */
                          #tempTimelineEmptyState .orb.docs-xl .dstat.op .di{
                            color:#FFC53D;filter:drop-shadow(0 0 4px rgba(246,184,63,.6));
                          }
                          #tempTimelineEmptyState .orb.docs-xl .dstat.op .dv em{color:#FFC53D;}
                          /* A pending stage greys the whole orb (the payload loop sets
                             data-c="gray"). The readout's cyan and amber are literal here, not
                             --c, so each one is restated in slate — otherwise a dormant planet
                             still glows through its own pill. */
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .dstats{
                            border-color:rgba(154,166,189,.45);box-shadow:none;
                          }
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .dstat .di,
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .dstat .dv em,
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .dstat.op .di,
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .dstat.op .dv em{
                            color:#9aa6bd;filter:none;
                          }
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .dsep{background:rgba(154,166,189,.4);}
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .core .ic{color:#aeb9cc;}
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .core .ic svg{filter:none;}
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"] .num{
                            background:radial-gradient(circle at 50% 34%, #222a3b 0%, #0d1220 100%);
                            border-color:#6e7a91;color:#c3ccdd;box-shadow:none;
                          }

                          /* ── the light this planet throws OUTSIDE its limb ────────────────
                             The shared .halo is a static blurred disc that stops at the edge.
                             On the one orb that carries live numbers that is too quiet: a
                             counter can change while the viewer is reading another part of
                             the board, and nothing on the rail moves to say so.

                             Two layers, both OUTSIDE the body and both behind it (z-index:0,
                             under .halo's 1), so neither touches the face or the readout:

                               ::before  a colour wheel — cyan → indigo → magenta — turning
                                         once every 18s. Blurred hard enough that what reads
                                         is a slowly drifting wash, not a spinning edge.
                               ::after   a breathing bloom, the "alive" pulse.

                             The wheel is a conic gradient on a rotating element rather than an
                             animated background, so it composites on the GPU and costs nothing
                             per frame. Both are pointer-events:none — this is light, and it
                             extends past the orb's own hit box.

                             The palette is state-driven, which is the point of the whole
                             thing: cyan while the stage is merely active, amber-magenta the
                             moment a task is actually open (.has-open, set by dpPaint), so
                             "something needs you" is legible from across the board without
                             reading a single number. */
                          #tempTimelineEmptyState .orb.docs-xl{
                            --auA:34,211,238;    /* lead   — cyan    */
                            --auB:129,140,248;   /* middle — indigo  */
                            --auC:217,70,239;    /* trail  — magenta */
                          }
                          #tempTimelineEmptyState .orb.docs-xl::before{
                            content:'';position:absolute;inset:-30px;border-radius:50%;
                            z-index:0;pointer-events:none;
                            background:conic-gradient(from 0deg,
                              rgba(var(--auA),0) 0deg, rgba(var(--auA),.46) 58deg,
                              rgba(var(--auB),.44) 132deg, rgba(var(--auC),.40) 208deg,
                              rgba(var(--auA),.34) 288deg, rgba(var(--auA),0) 360deg);
                            filter:blur(19px);opacity:.72;
                            animation:dpAuroraSpin 18s linear infinite;
                          }
                          #tempTimelineEmptyState .orb.docs-xl::after{
                            content:'';position:absolute;inset:-12px;border-radius:50%;
                            z-index:0;pointer-events:none;
                            background:radial-gradient(circle,
                              rgba(var(--auA),.30) 0%, rgba(var(--auB),.19) 46%, transparent 72%);
                            filter:blur(12px);
                            animation:dpAuroraBreathe 4.8s ease-in-out infinite;
                          }
                          @keyframes dpAuroraSpin{ to{ transform:rotate(360deg); } }
                          @keyframes dpAuroraBreathe{
                            0%,100%{ transform:scale(1);    opacity:.5; }
                            50%    { transform:scale(1.10); opacity:.95; }
                          }
                          /* something is open — the wash warms and speeds up. Amber leads
                             because that is this timeline's "needs doing" colour everywhere
                             else (the .op half of the readout, .chip.gd, the AI callouts). */
                          #tempTimelineEmptyState .orb.docs-xl.has-open{
                            --auA:246,184,63; --auB:217,70,239; --auC:34,211,238;
                          }
                          #tempTimelineEmptyState .orb.docs-xl.has-open::before{
                            animation-duration:11s;opacity:.85;
                          }
                          #tempTimelineEmptyState .orb.docs-xl.has-open::after{
                            animation-duration:2.9s;
                          }
                          /* a count actually changed — one extra ring expands off the limb and
                             fades, so the change is visible even on a stage already glowing */
                          #tempTimelineEmptyState .orb.docs-xl.has-new .halo{
                            animation:dpHaloPing 2.4s ease-out infinite;
                          }
                          @keyframes dpHaloPing{
                            0%  { transform:scale(.94); opacity:.45; }
                            55% { transform:scale(1.17); opacity:.85; }
                            100%{ transform:scale(1.3);  opacity:.30; }
                          }
                          /* A dormant stage throws no light. The pseudo-elements are dropped
                             rather than dimmed — a blurred 30px ring at low opacity still
                             lifts the row's background out of black. */
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"]::before,
                          #tempTimelineEmptyState .orb.docs-xl[data-c="gray"]::after{display:none;}
                          @media (prefers-reduced-motion:reduce){
                            #tempTimelineEmptyState .orb.docs-xl::before,
                            #tempTimelineEmptyState .orb.docs-xl::after,
                            #tempTimelineEmptyState .orb.docs-xl.has-new .halo{animation:none;}
                          }

                          /* ══ DOCUMENTS & CUSTOM TASKS — the panel beside the planet ════════
                             Two counters that move for different reasons: files only ever go
                             up, open tasks go both ways. So they get one card each rather than
                             a shared row, and each card owns its own accent — cyan for the
                             archive, magenta for the thing that wants you.

                             Everything that signals CHANGE (.is-bump, the badges, the arrows,
                             the tick on the number) is applied by dpPaint and removed by it
                             again when the change goes stale. Nothing here is decorative-only:
                             if a badge is on screen, a number moved. */
                          #tempTimelineEmptyState .dpanel{
                            background:linear-gradient(180deg, rgba(13,21,37,.92), rgba(9,15,28,.94));
                            border:1px solid rgba(103,232,249,.20);
                            border-radius:15px;padding:12px 13px 11px;
                            box-shadow:0 10px 26px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.05);
                            transition:border-color .3s ease, box-shadow .3s ease;
                          }
                          #tempTimelineEmptyState .dpanel.is-new{
                            border-color:rgba(103,232,249,.46);
                            box-shadow:0 10px 26px rgba(0,0,0,.45),
                                       0 0 24px rgba(34,211,238,.17),
                                       inset 0 1px 0 rgba(255,255,255,.05);
                          }
                          #tempTimelineEmptyState .dp-head{display:flex;align-items:flex-start;gap:9px;flex-wrap:wrap;}
                          #tempTimelineEmptyState .dp-hic{
                            display:inline-flex;width:17px;height:17px;flex:0 0 auto;color:#67e8f9;margin-top:2px;
                            filter:drop-shadow(0 0 6px rgba(34,211,238,.5));
                          }
                          /* folder-stack is the one FILLED glyph in the set (see the IC table) */
                          #tempTimelineEmptyState .dp-hic svg{width:100%;height:100%;fill:currentColor;stroke:none;display:block;}
                          #tempTimelineEmptyState .dp-ht{flex:1;min-width:148px;}
                          #tempTimelineEmptyState .dp-ht b{display:block;font-size:15px;font-weight:800;color:#eaf3ff;letter-spacing:.2px;}
                          #tempTimelineEmptyState .dp-hsub{display:block;font-size:12.5px;color:#8b96ac;margin-top:2px;line-height:1.35;}
                          #tempTimelineEmptyState .dp-live{
                            display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;
                            font-size:11.5px;font-weight:700;color:#7fe6b4;white-space:nowrap;
                            background:rgba(62,233,140,.10);border:1px solid rgba(62,233,140,.34);
                            border-radius:999px;padding:3px 8px;
                          }
                          #tempTimelineEmptyState .dp-live b{color:#c6f8dc;font-weight:800;margin-left:3px;}
                          #tempTimelineEmptyState .dp-live i{
                            width:6px;height:6px;border-radius:50%;background:#3ee98c;flex:0 0 auto;
                            box-shadow:0 0 7px rgba(62,233,140,.85);animation:dpBlink 2.1s ease-in-out infinite;
                          }
                          @keyframes dpBlink{0%,100%{opacity:1;}50%{opacity:.26;}}

                          /* the "something landed" banner */
                          #tempTimelineEmptyState .dp-new{
                            display:flex;align-items:center;gap:9px;margin-top:10px;
                            padding:8px 10px;border-radius:11px;
                            background:linear-gradient(180deg, rgba(62,233,140,.13), rgba(62,233,140,.05));
                            border:1px solid rgba(62,233,140,.38);
                            box-shadow:0 0 16px rgba(62,233,140,.13);
                            animation:dpRise .34s ease both;
                          }
                          @keyframes dpRise{from{opacity:0;transform:translateY(-5px);}to{opacity:1;transform:none;}}
                          #tempTimelineEmptyState .dp-newic{display:inline-flex;width:17px;height:17px;flex:0 0 auto;color:#3ee98c;}
                          #tempTimelineEmptyState .dp-newic svg{
                            width:100%;height:100%;stroke:currentColor;fill:none;stroke-width:2;
                            stroke-linecap:round;stroke-linejoin:round;display:block;
                          }
                          #tempTimelineEmptyState .dp-newtx{flex:1;min-width:0;}
                          #tempTimelineEmptyState .dp-newtx b{display:block;font-size:13.5px;font-weight:800;color:#d8fbe8;}
                          #tempTimelineEmptyState .dp-newtx span{display:block;font-size:12px;color:#8fb3a2;margin-top:1px;}
                          #tempTimelineEmptyState .dp-newbtn{
                            flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;cursor:pointer;
                            background:#0b1a16;border:1px solid rgba(62,233,140,.5);border-radius:9px;
                            padding:5px 9px;font-size:12px;font-weight:700;color:#bdf5d6;
                            transition:background .18s ease,border-color .18s ease;
                          }
                          #tempTimelineEmptyState .dp-newbtn:hover{background:#0f241d;border-color:rgba(62,233,140,.85);}
                          #tempTimelineEmptyState .dp-newbtn i{font-size:10px;}

                          /* the two counters */
                          /* auto-fit, not `1fr 1fr`: the thing that squeezes these cards is the
                             TIMELINE COLUMN, which narrows independently of the viewport, so a
                             width media query is measuring the wrong box. auto-fit drops to one
                             column when two no longer fit whatever width this panel actually
                             has. */
                          #tempTimelineEmptyState .dp-grid{
                            display:grid;grid-template-columns:repeat(auto-fit, minmax(124px, 1fr));
                            gap:9px;margin-top:10px;
                          }
                          #tempTimelineEmptyState .dp-card{
                            --dpA:#22D3EE; --dpAR:34,211,238;
                            position:relative;overflow:hidden;border-radius:12px;padding:9px 10px 8px;
                            background:linear-gradient(180deg, rgba(var(--dpAR),.11) 0%, rgba(6,12,24,.86) 62%);
                            border:1px solid rgba(var(--dpAR),.34);
                            box-shadow:inset 0 1px 0 rgba(255,255,255,.05);
                            transition:border-color .25s ease, box-shadow .25s ease;
                          }
                          /* Custom Tasks takes magenta, not the amber the rest of the board uses
                             for "needs doing": amber is already the ATTENTION tone inside this
                             card (the badge, the arrow), and a card whose frame and whose alert
                             are the same colour has no alert. */
                          #tempTimelineEmptyState .dp-card.dp-task{--dpA:#E879F9; --dpAR:232,121,249;}
                          #tempTimelineEmptyState .dp-card.is-bump{
                            border-color:rgba(var(--dpAR),.75);
                            box-shadow:0 0 20px rgba(var(--dpAR),.30), inset 0 1px 0 rgba(255,255,255,.07);
                          }
                          /* a light crosses the card that changed — the sweep points AT the
                             counter rather than decorating the panel as a whole */
                          #tempTimelineEmptyState .dp-card.is-bump::after{
                            content:'';position:absolute;inset:0;pointer-events:none;
                            background:linear-gradient(105deg, transparent 36%, rgba(var(--dpAR),.20) 50%, transparent 64%);
                            animation:dpSweep 2.1s ease-in-out infinite;
                          }
                          @keyframes dpSweep{0%{transform:translateX(-125%);}60%,100%{transform:translateX(125%);}}
                          #tempTimelineEmptyState .dp-ct{
                            display:flex;align-items:center;justify-content:space-between;gap:6px;
                            font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:#9fb0c9;
                          }
                          #tempTimelineEmptyState .dp-ci{
                            display:inline-flex;width:13px;height:13px;flex:0 0 auto;color:var(--dpA);
                            filter:drop-shadow(0 0 5px rgba(var(--dpAR),.5));
                          }
                          #tempTimelineEmptyState .dp-ci svg,
                          #tempTimelineEmptyState .dp-ri svg{
                            width:100%;height:100%;stroke:currentColor;fill:none;stroke-width:2;
                            stroke-linecap:round;stroke-linejoin:round;display:block;
                          }
                          #tempTimelineEmptyState .dp-cv{display:flex;align-items:center;gap:7px;margin-top:3px;}
                          #tempTimelineEmptyState .dp-cv b{
                            font-size:27px;font-weight:800;line-height:1;color:#fff;
                            text-shadow:0 2px 10px rgba(var(--dpAR),.35);
                          }
                          /* the number flips when it changes — a counter that redraws silently
                             is exactly the update this panel exists to stop people missing */
                          #tempTimelineEmptyState .dp-cv b.tick{animation:dpTick .5s ease;}
                          @keyframes dpTick{
                            0%  {transform:translateY(8px) scale(.84);opacity:0;}
                            62% {transform:none;opacity:1;}
                            100%{transform:none;}
                          }
                          /* The arrow only ever means "this went UP" — dpDelta shows it solely
                             for a positive delta and hides it otherwise, so there is no
                             down-state to style and no direction class to toggle. */
                          #tempTimelineEmptyState .dp-arrow{
                            width:0;height:0;flex:0 0 auto;
                            border-left:6px solid transparent;border-right:6px solid transparent;
                            border-bottom:9px solid #3ee98c;
                            filter:drop-shadow(0 0 5px rgba(62,233,140,.6));
                            animation:dpArrow 1.5s ease-in-out infinite;
                          }
                          /* more open tasks is not good news, so that arrow is red where the
                             documents one is green — direction and sentiment are two axes */
                          #tempTimelineEmptyState .dp-card.dp-task .dp-arrow{
                            border-bottom-color:#ff5f6d;filter:drop-shadow(0 0 5px rgba(255,95,109,.6));
                          }
                          @keyframes dpArrow{0%,100%{transform:translateY(0);}50%{transform:translateY(-3px);}}
                          #tempTimelineEmptyState .dp-cl{font-size:12px;color:#8b96ac;margin-top:2px;}
                          #tempTimelineEmptyState .dp-cd{display:flex;align-items:center;gap:6px;margin-top:6px;flex-wrap:wrap;}
                          #tempTimelineEmptyState .dp-badge{
                            display:inline-flex;align-items:center;font-size:11px;font-weight:800;letter-spacing:.03em;
                            padding:2.5px 7px;border-radius:999px;
                            background:rgba(62,233,140,.14);border:1px solid rgba(62,233,140,.55);color:#bdf5d6;
                            animation:dpPulseGr 1.9s ease-in-out infinite;
                          }
                          #tempTimelineEmptyState .dp-badge.dp-rd{
                            background:rgba(255,95,109,.14);border-color:rgba(255,95,109,.6);color:#ffc9cd;
                            animation-name:dpPulseRd;
                          }
                          @keyframes dpPulseGr{0%,100%{box-shadow:0 0 0 0 rgba(62,233,140,0);}50%{box-shadow:0 0 11px 0 rgba(62,233,140,.6);}}
                          @keyframes dpPulseRd{0%,100%{box-shadow:0 0 0 0 rgba(255,95,109,0);}50%{box-shadow:0 0 11px 0 rgba(255,95,109,.6);}}
                          #tempTimelineEmptyState .dp-cd em{font-style:normal;font-size:11.5px;color:#8b96ac;}
                          #tempTimelineEmptyState .dp-clink{
                            display:inline-flex;align-items:center;gap:5px;cursor:pointer;margin-top:7px;
                            background:transparent;border:0;padding:0;font-size:12.5px;font-weight:700;color:var(--dpA);
                          }
                          #tempTimelineEmptyState .dp-clink:hover{text-decoration:underline;}
                          #tempTimelineEmptyState .dp-clink i{font-size:11px;transition:transform .18s ease;}
                          #tempTimelineEmptyState .dp-clink:hover i{transform:translateX(3px);}

                          /* what a Custom Task actually is — asked often enough in the pilot
                             rooms that it belongs on the surface, not behind a tooltip */
                          #tempTimelineEmptyState .dp-note{
                            display:flex;gap:7px;align-items:flex-start;margin-top:9px;
                            padding:7px 9px;border-radius:10px;
                            background:rgba(246,184,63,.07);border:1px solid rgba(246,184,63,.26);
                            font-size:12px;line-height:1.4;color:#c2b18d;
                          }
                          #tempTimelineEmptyState .dp-note i{color:#f6b83f;font-size:12px;margin-top:2px;flex:0 0 auto;}
                          #tempTimelineEmptyState .dp-note b{color:#ffe6ae;}

                          /* the change list — REAL log rows only (see dpRecent) */
                          #tempTimelineEmptyState .dp-recent{margin-top:9px;border-top:1px solid rgba(255,255,255,.07);padding-top:8px;}
                          #tempTimelineEmptyState .dp-rh{
                            font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
                            color:#7d8798;margin-bottom:5px;
                          }
                          #tempTimelineEmptyState .dp-r{
                            display:flex;align-items:center;gap:7px;padding:5px 0;
                            border-bottom:1px dashed rgba(255,255,255,.055);
                          }
                          #tempTimelineEmptyState .dp-r:last-child{border-bottom:0;}
                          #tempTimelineEmptyState .dp-ri{display:inline-flex;width:13px;height:13px;flex:0 0 auto;color:#67e8f9;}
                          #tempTimelineEmptyState .dp-r.tk .dp-ri{color:#e879f9;}
                          #tempTimelineEmptyState .dp-rt{flex:1;min-width:0;}
                          #tempTimelineEmptyState .dp-rt b{
                            display:block;font-size:12.5px;font-weight:700;color:#dbe6f7;
                            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
                          }
                          #tempTimelineEmptyState .dp-rt span{
                            display:block;font-size:11.5px;color:#8b96ac;
                            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
                          }
                          #tempTimelineEmptyState .dp-rn{
                            flex:0 0 auto;font-size:10px;font-weight:800;letter-spacing:.06em;
                            padding:1.5px 5px;border-radius:4px;
                            background:rgba(62,233,140,.16);border:1px solid rgba(62,233,140,.5);color:#bdf5d6;
                          }
                          #tempTimelineEmptyState .dp-rm{flex:0 0 auto;font-size:11px;color:#7d8798;white-space:nowrap;}
                          /* the counters stack before they squash: two 27px numbers plus their
                             captions do not survive a half-width card */
                          @media (max-width:560px){
                            #tempTimelineEmptyState .dp-live{margin-top:2px;}
                          }
                          @media (prefers-reduced-motion:reduce){
                            #tempTimelineEmptyState .dp-live i,
                            #tempTimelineEmptyState .dp-badge,
                            #tempTimelineEmptyState .dp-arrow,
                            #tempTimelineEmptyState .dp-card.is-bump::after,
                            #tempTimelineEmptyState .dp-cv b.tick,
                            #tempTimelineEmptyState .dp-new{animation:none;}
                          }

                          /* ══ STAGE WALKTHROUGH VIDEO ══════════════════════════════════════
                             One clip per stage, sitting at the BOTTOM of that stage's card —
                             full width, below the detail text, so nothing above it moves.

                             Two states, and the difference between them is the point:
                               · a stage with a file gets a real play button and a duration;
                               · a stage without one gets neither. It paints itself in the
                                 stage's own accent and says so, rather than showing a play
                                 control that does nothing.
                             Everything is driven off --sv, the stage's planet colour, set
                             inline by stageVideoHTML(). */
                          #tempTimelineEmptyState .stvid{
                            --sv:#4aa9ff;
                            margin-top:10px;border-radius:11px;overflow:hidden;
                            border:1px solid color-mix(in srgb, var(--sv) 32%, transparent);
                            box-shadow:0 6px 18px rgba(0,0,0,.38);
                          }
                          /* 16/9 because the clips ARE 16/9 (1280x720). The poster and the
                             <video> that replaces it therefore occupy exactly the same box:
                             no letterboxing inside the frame, and no layout jump at the moment
                             someone presses play. If a future clip ships at another ratio,
                             object-fit:contain on .stvid-el keeps it whole rather than cropped. */
                          #tempTimelineEmptyState .stvid-poster{
                            position:relative;display:block;
                            aspect-ratio:16/9;min-height:96px;
                            background-color:#0a1120;background-size:cover;background-position:center;
                          }
                          /* Legibility wash. Stacking order inside the poster is deliberate:
                               1  .stvid-el   the frozen frame (or the accent gradient behind it)
                               2  ::before    this wash, ON TOP of the frame
                               3  .stvid-tx   kicker + title
                               4  play / duration
                             The wash has to outrank the video or the title would sit directly
                             on picture and become unreadable the moment a bright frame lands. */
                          #tempTimelineEmptyState .stvid-poster::before{
                            content:'';position:absolute;inset:0;z-index:2;
                            background:linear-gradient(180deg, rgba(4,10,22,.30) 0%, rgba(4,10,22,.86) 100%);
                          }
                          /* .np = no still yet. The accent lives HERE rather than in the wash
                             above so a real poster never gets colour-cast by the stage tint. */
                          #tempTimelineEmptyState .stvid.np .stvid-poster{
                            background-image:
                              radial-gradient(120% 120% at 80% 10%, color-mix(in srgb, var(--sv) 42%, transparent) 0%, transparent 60%),
                              radial-gradient(90% 90% at 10% 96%, color-mix(in srgb, var(--sv) 20%, transparent) 0%, transparent 55%),
                              linear-gradient(160deg,#101b30 0%,#070d1a 100%);
                          }
                          #tempTimelineEmptyState .stvid-tx{
                            position:absolute;left:11px;top:9px;right:11px;z-index:3;display:block;
                          }
                          #tempTimelineEmptyState .stvid-k{
                            display:block;font-size:11.5px;font-weight:700;letter-spacing:.06em;
                            color:color-mix(in srgb, var(--sv) 58%, #ffffff);
                            text-shadow:0 1px 4px rgba(0,0,0,.75);
                          }
                          #tempTimelineEmptyState .stvid-t{
                            display:block;font-size:14px;font-weight:800;color:#f2f7ff;
                            margin-top:1px;line-height:1.25;text-shadow:0 1px 5px rgba(0,0,0,.8);
                          }
                          #tempTimelineEmptyState .stvid-play{
                            position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:4;
                            width:38px;height:38px;border-radius:50%;cursor:pointer;padding:0;
                            display:grid;place-items:center;
                            background:rgba(8,15,28,.62);border:1.5px solid rgba(255,255,255,.72);
                            color:#fff;font-size:14px;
                            transition:transform .18s ease, background .18s ease, border-color .18s ease;
                          }
                          /* the triangle's visual centre is left of its bounding box */
                          #tempTimelineEmptyState .stvid-play i{margin-left:2px;}
                          #tempTimelineEmptyState .stvid-play:hover{
                            background:color-mix(in srgb, var(--sv) 52%, rgba(8,15,28,.72));
                            border-color:#fff;transform:translate(-50%,-50%) scale(1.08);
                          }
                          #tempTimelineEmptyState .stvid-play:active{transform:translate(-50%,-50%) scale(.97);}
                          #tempTimelineEmptyState .stvid-len{
                            position:absolute;right:9px;bottom:8px;z-index:4;
                            font-size:12px;font-weight:700;color:#e7eefc;
                            background:rgba(4,10,22,.78);border-radius:5px;padding:2px 6px;
                          }
                          #tempTimelineEmptyState .stvid-soon{
                            position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:4;
                            display:inline-flex;align-items:center;gap:6px;white-space:nowrap;
                            font-size:12px;font-weight:700;letter-spacing:.03em;color:#c3d0e6;
                            background:rgba(6,12,24,.72);border:1px dashed rgba(255,255,255,.26);
                            border-radius:999px;padding:5px 11px;
                          }
                          #tempTimelineEmptyState .stvid-soon i{color:color-mix(in srgb, var(--sv) 70%, #fff);}
                          /* The frozen frame, sitting under the wash and the overlay (see the
                             stacking note above). `cover` while it is a thumbnail so it fills
                             the frame like a poster image would. */
                          #tempTimelineEmptyState .stvid-el{
                            position:absolute;inset:0;z-index:1;
                            display:block;width:100%;height:100%;
                            object-fit:cover;background:transparent;
                          }
                          /* iOS paints its own giant play glyph over an idle inline video, which
                             would sit under our designed one */
                          #tempTimelineEmptyState .stvid-el::-webkit-media-controls-start-playback-button{
                            display:none !important;
                          }
                          /* Playing: the video takes the whole card and every piece of the
                             designed overlay steps out of its way — including the wash, which
                             would otherwise darken the footage it was only ever meant to make
                             text readable against. `contain` now, not `cover`: a clip that is
                             not 16/9 must be shown whole rather than cropped. */
                          #tempTimelineEmptyState .stvid.playing .stvid-el{
                            z-index:5;object-fit:contain;background:#000;
                          }
                          #tempTimelineEmptyState .stvid.playing .stvid-poster::before,
                          #tempTimelineEmptyState .stvid.playing .stvid-tx,
                          #tempTimelineEmptyState .stvid.playing .stvid-play,
                          #tempTimelineEmptyState .stvid.playing .stvid-len{display:none;}

                          #tempTimelineEmptyState .chip{
                            display:inline-flex;align-items:center;gap:5px;
                            background:#0c1324;border:1px solid #1e2a46;border-radius:9px;
                            padding:5px 9px;font-size:12.5px;color:#cdd8ec;margin:0 4px 5px 0;
                            white-space:nowrap;
                          }
                          #tempTimelineEmptyState .chip.gr{border-color:rgba(62,233,140,.45);color:#bdf5d6;}
                          #tempTimelineEmptyState .chip.bl{border-color:rgba(74,169,255,.45);color:#cfe6ff;}
                          #tempTimelineEmptyState .chip.cy{border-color:rgba(53,214,232,.45);color:#c9f3f8;}
                          #tempTimelineEmptyState .chip.gd{border-color:rgba(246,184,63,.5);color:#ffe6ae;}
                          #tempTimelineEmptyState .chip.tiny{font-size:11.5px;padding:3px 7px;color:var(--dim);}

                          /* ══ Participants-row pills: four controls, four accents ══════════
                             The row shows In Progress / N members / Chat / Invite side by
                             side. Flat bordered chips made those four read as one grey block,
                             so each now carries its own accent and its own outer glow via a
                             shared treatment (.gl) driven by --pAcc / --pAccR.

                             .gl only supplies the LOOK. Affordance is a separate axis: the two
                             read-only status pills stay 1px and inert, while the two real
                             buttons below get a heavier edge, a hover lift, a press state and
                             a focus ring — so "four distinct colours" never implies "four
                             things you can click". */
                          #tempTimelineEmptyState .chip.gl{
                            --pAcc:#8fa3c4; --pAccR:143,163,196;   /* fallback, always overridden */
                            background:
                              linear-gradient(180deg, rgba(var(--pAccR),.17) 0%, rgba(var(--pAccR),.05) 100%),
                              #0b1120;
                            border:1px solid rgba(var(--pAccR),.58);
                            box-shadow:0 0 14px rgba(var(--pAccR),.22),
                                       0 2px 6px rgba(0,0,0,.35),
                                       inset 0 1px 0 rgba(255,255,255,.07);
                            text-shadow:0 0 10px rgba(var(--pAccR),.30);
                          }
                          #tempTimelineEmptyState .chip.gl i{ color:var(--pAcc); }

                          /* Accent per pill. The status pill keeps whichever of gr/cy/gd the
                             stage is actually in, so a Complete or Attention room still reads
                             correctly — the accent follows the status rather than being
                             hardcoded to "In Progress". */
                          #tempTimelineEmptyState .chip.gl.gr{ --pAcc:#3EE98C; --pAccR:62,233,140; color:#c6f8dc; }
                          #tempTimelineEmptyState .chip.gl.cy{ --pAcc:#35D6E8; --pAccR:53,214,232; color:#d2f6fb; }
                          #tempTimelineEmptyState .chip.gl.gd{ --pAcc:#F4C84A; --pAccR:244,200,74; color:#ffe9b8; }
                          #tempTimelineEmptyState .chip.gl.bl{ --pAcc:#2D8CFF; --pAccR:45,140,255; color:#cfe4ff; }
                          /* member count — a Participants-section fact, so it carries that
                             section's own accent (a neighbouring "invited" chip stays gold,
                             because pending-invite is a status, not a section) */
                          #tempTimelineEmptyState .chip.gl.pt,
                          #tempTimelineEmptyState .chip.pt{
                            --pAcc:var(--drm-parts); --pAccR:var(--drm-parts-r);
                            border-color:rgba(var(--drm-parts-r),.58);
                            color:#c8f7dd;
                          }
                          /* the leading ● reads as the pill's status light, so it takes the
                             accent at full strength rather than the label's softened tint */
                          #tempTimelineEmptyState .chip.gl .dt{
                            color:var(--pAcc); text-shadow:0 0 8px rgba(var(--pAccR),.9);
                          }

                          /* ── member name pills under the Participants orb ──────────────
                             Solid fill is deliberate: the timeline rail runs down this
                             column behind the content, and a translucent pill let the line
                             stripe through the name. The accent marks these as Participants
                             rows; the leading dot + "· invited" suffix carry joined-vs-
                             pending, which is a different axis from section identity. */
                          #tempTimelineEmptyState .mname{
                            display:flex;align-items:center;gap:6px;
                            font-size:14px;color:#dcf3e6;
                            white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
                            background:linear-gradient(90deg, rgba(var(--drm-parts-r),.14) 0%, rgba(var(--drm-parts-r),.04) 55%, rgba(var(--drm-parts-r),0) 100%), #0c1324;
                            border:1px solid rgba(var(--drm-parts-r),.5);
                            border-radius:9px;padding:4px 9px;
                            box-shadow:0 0 12px rgba(var(--drm-parts-r),.16);
                          }
                          #tempTimelineEmptyState .mname .st{
                            width:6px;height:6px;border-radius:50%;flex:0 0 auto;
                          }
                          #tempTimelineEmptyState .mname .inv{color:#8b96ac;}
                          /* the "+N more" tail is a counter, not a person — no accent */
                          #tempTimelineEmptyState .mname.more{
                            background:#0c1324;border-color:#1e2a46;
                            box-shadow:none;color:#8b96ac;font-size:14px;
                          }
                          /* …but it is also the ONLY route from this card to the people the
                             two rows had to truncate, so both tails render as real <button>s
                             (keyboard + screen-reader affordance for free) and open the
                             participants dialog below. Button reset first, then hover/press/
                             focus states — per the note on the Chat/Invite pills further
                             down, colour alone never carries "clickable". */
                          #tempTimelineEmptyState button.mname.more,
                          #tempTimelineEmptyState button.pav.more{
                            font:inherit; cursor:pointer; text-align:left;
                            transition:color .18s, background .18s, border-color .18s, box-shadow .18s;
                          }
                          #tempTimelineEmptyState button.mname.more{ width:100%; }
                          #tempTimelineEmptyState button.pav.more{ padding:0; }
                          /* the caret is what separates this pill from the inert name pills
                             above it at a glance; margin-left:auto pins it to the far edge */
                          #tempTimelineEmptyState button.mname.more .cv{
                            margin-left:auto; flex:0 0 auto; font-size:11px; opacity:.7;
                          }
                          #tempTimelineEmptyState button.mname.more:hover,
                          #tempTimelineEmptyState button.pav.more:hover{
                            color:#dcf3e6;
                            border-color:rgba(var(--drm-parts-r),.6);
                            box-shadow:0 0 12px rgba(var(--drm-parts-r),.2);
                          }
                          #tempTimelineEmptyState button.mname.more:hover .cv{ opacity:1; }
                          #tempTimelineEmptyState button.pav.more:hover{ background:#1d2a44; }
                          #tempTimelineEmptyState button.mname.more:active,
                          #tempTimelineEmptyState button.pav.more:active{ filter:brightness(.93); }
                          #tempTimelineEmptyState button.mname.more:focus-visible,
                          #tempTimelineEmptyState button.pav.more:focus-visible{
                            outline:2px solid var(--drm-parts); outline-offset:2px;
                          }
                          @media (prefers-reduced-motion:reduce){
                            #tempTimelineEmptyState button.mname.more,
                            #tempTimelineEmptyState button.pav.more{ transition:none; }
                          }

                          /* ── "+N more" → the participants dialog ──────────────────────────
                             mpOpen() portals this panel to <body>, so these selectors are
                             deliberately NOT scoped to #tempTimelineEmptyState — the panel
                             stops being a descendant the moment it opens. It has to leave:
                             the timeline lives inside the chat shell, the .sec cards around
                             it carry backdrop-filter (each one its own stacking context, so
                             no z-index inside can win), and the site footer paints over
                             fixed overlays on mobile. Same portal treatment as .tpd-menu and
                             the auth sheets. The accent tokens are re-declared on .mp-card
                             for the same reason: --drm-parts lives on the timeline root and
                             does not follow the panel out. */
                          #tempMorePartsOv, #tempMorePartsOv *{ box-sizing:border-box; }
                          #tempMorePartsOv{
                            position:fixed; inset:0; z-index:2147483001;
                            display:flex; align-items:center; justify-content:center;
                            padding:18px;
                            background:rgba(3,5,11,.74);
                            -webkit-backdrop-filter:blur(7px); backdrop-filter:blur(7px);
                            font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
                            animation:tempMorePartsIn .16s ease-out;
                          }
                          @keyframes tempMorePartsIn{ from{opacity:0;} to{opacity:1;} }
                          @keyframes tempMorePartsPop{
                            from{opacity:0; transform:translateY(12px) scale(.975);}
                            to{opacity:1; transform:none;}
                          }
                          #tempMorePartsOv .mp-card{
                            --acc:#2ECC71; --accR:46,204,113;
                            width:min(430px,100%);
                            max-height:min(580px, calc(100vh - 36px));
                            display:flex; flex-direction:column; overflow:hidden;
                            background:linear-gradient(180deg,#0e1626 0%,#080e1a 100%);
                            border:1px solid rgba(var(--accR),.4);
                            border-radius:18px;
                            box-shadow:0 28px 74px rgba(0,0,0,.68),
                                       0 0 36px rgba(var(--accR),.13),
                                       inset 0 1px 0 rgba(255,255,255,.06);
                            animation:tempMorePartsPop .22s cubic-bezier(.2,.8,.3,1);
                          }
                          #tempMorePartsOv .mp-hd{
                            display:flex; align-items:center; gap:12px;
                            padding:16px 16px 14px;
                            border-bottom:1px solid rgba(255,255,255,.07);
                          }
                          #tempMorePartsOv .mp-ic{
                            width:40px; height:40px; flex:0 0 auto; border-radius:11px;
                            display:grid; place-items:center; font-size:16px;
                            color:var(--acc);
                            background:rgba(var(--accR),.12);
                            border:1px solid rgba(var(--accR),.45);
                            box-shadow:0 0 14px rgba(var(--accR),.18);
                          }
                          #tempMorePartsOv .mp-ti{ min-width:0; flex:1 1 auto; }
                          #tempMorePartsOv .mp-ti b{
                            display:block; color:#f2f6ff; font-size:16.5px; font-weight:800; letter-spacing:-.2px;
                          }
                          #tempMorePartsOv .mp-ti .mp-sub{ display:block; color:#8b96ac; font-size:14px; margin-top:2px; }
                          #tempMorePartsOv .mp-x{
                            width:34px; height:34px; flex:0 0 auto; border-radius:9px; cursor:pointer;
                            display:grid; place-items:center; font:inherit; font-size:15.5px;
                            color:#8b96ac; background:rgba(255,255,255,.03);
                            border:1px solid rgba(255,255,255,.1);
                            transition:color .18s, background .18s, border-color .18s;
                          }
                          #tempMorePartsOv .mp-x:hover{ color:#fff; background:rgba(255,255,255,.09); border-color:rgba(255,255,255,.22); }
                          #tempMorePartsOv .mp-x:focus-visible{ outline:2px solid var(--acc); outline-offset:2px; }
                          #tempMorePartsOv .mp-list{
                            list-style:none; margin:0; padding:8px 10px 10px;
                            flex:1 1 auto; overflow-y:auto; overscroll-behavior:contain;
                          }
                          #tempMorePartsOv .mp-row{
                            display:flex; align-items:center; gap:11px;
                            padding:10px; border-radius:12px; border:1px solid transparent;
                          }
                          #tempMorePartsOv .mp-row + .mp-row{ margin-top:2px; }
                          #tempMorePartsOv .mp-row:hover{
                            background:rgba(var(--accR),.06); border-color:rgba(var(--accR),.22);
                          }
                          #tempMorePartsOv .mp-av{
                            width:36px; height:36px; flex:0 0 auto; border-radius:50%; overflow:hidden;
                            background:#182238; border:1px solid rgba(255,255,255,.1);
                          }
                          #tempMorePartsOv .mp-av svg{ width:100%; height:100%; display:block; }
                          #tempMorePartsOv .mp-tx{ min-width:0; flex:1 1 auto; }
                          #tempMorePartsOv .mp-tx b{
                            display:block; color:#e9eef8; font-size:15px; font-weight:700;
                            white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
                          }
                          #tempMorePartsOv .mp-tx .mp-role{
                            display:block; color:#8b96ac; font-size:13.5px; margin-top:2px;
                            white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
                          }
                          /* joined vs invited — the same two states the stage overlay's
                             .tpd-active / .tpd-sent chips use, so one person reads the same
                             way in both places */
                          #tempMorePartsOv .mp-badge{
                            flex:0 0 auto; font-size:12.5px; font-weight:700;
                            padding:4px 10px; border-radius:50px; white-space:nowrap;
                          }
                          #tempMorePartsOv .mp-badge.ok{ color:#3ee98c; background:rgba(62,233,140,.12); border:1px solid rgba(62,233,140,.45); }
                          #tempMorePartsOv .mp-badge.pend{ color:#f6ce7c; background:rgba(246,184,63,.12); border:1px solid rgba(246,184,63,.45); }
                          #tempMorePartsOv .mp-ft{
                            display:flex; align-items:center; justify-content:space-between;
                            gap:10px; flex-wrap:wrap; padding:12px 16px;
                            border-top:1px solid rgba(255,255,255,.07);
                            background:rgba(255,255,255,.015);
                          }
                          #tempMorePartsOv .mp-tot{ color:#8b96ac; font-size:13.5px; }
                          #tempMorePartsOv .mp-all{
                            display:inline-flex; align-items:center; gap:7px; cursor:pointer;
                            font:inherit; font-size:13.5px; font-weight:700;
                            padding:8px 14px; border-radius:10px; color:#c8f7dd;
                            background:linear-gradient(180deg, rgba(var(--accR),.22) 0%, rgba(var(--accR),.07) 100%), #0b1120;
                            border:1.5px solid rgba(var(--accR),.7);
                            box-shadow:0 0 16px rgba(var(--accR),.24), inset 0 1px 0 rgba(255,255,255,.1);
                            transition:filter .18s, box-shadow .18s;
                          }
                          #tempMorePartsOv .mp-all i{ color:var(--acc); font-size:13px; }
                          #tempMorePartsOv .mp-all:hover{
                            filter:brightness(1.12);
                            box-shadow:0 0 24px rgba(var(--accR),.36), inset 0 1px 0 rgba(255,255,255,.14);
                          }
                          #tempMorePartsOv .mp-all:focus-visible{ outline:2px solid var(--acc); outline-offset:2px; }
                          /* phones: bottom sheet, and every label steps up a size — the same
                             treatment the timeline's own mobile block gives its text */
                          @media (max-width:560px){
                            #tempMorePartsOv{ padding:12px; align-items:flex-end; }
                            #tempMorePartsOv .mp-card{
                              width:100%; max-height:min(78vh, calc(100vh - 24px)); border-radius:20px;
                            }
                            #tempMorePartsOv .mp-ti b{ font-size:16px; }
                            #tempMorePartsOv .mp-ti .mp-sub{ font-size:14px; }
                            #tempMorePartsOv .mp-tx b{ font-size:16px; }
                            #tempMorePartsOv .mp-tx .mp-role{ font-size:14px; }
                            #tempMorePartsOv .mp-badge{ font-size:13.5px; }
                            #tempMorePartsOv .mp-tot{ font-size:14px; }
                            #tempMorePartsOv .mp-all{ font-size:14.5px; padding:10px 16px; }
                          }
                          @media (prefers-reduced-motion:reduce){
                            #tempMorePartsOv, #tempMorePartsOv .mp-card{ animation:none; }
                          }
                          /* ── the two actionable pills beside the Participants orb ──────
                             Same accent-glow language as the status pills above, promoted to
                             a real button: 1.5px edge, taller hit area, bold label, an inner
                             top highlight for the raised read, plus hover / press / keyboard-
                             focus states. That extra weight is what separates "clickable"
                             from the two inert status pills — colour alone never carries it.

                             Accent per action matches the Deal Room Menu rows (Chat red,
                             Invite blue). It lives here rather than inline on the button
                             because applyMembersToUI() re-renders the whole .side block on
                             every participant poll — one CSS rule can't drift out of sync the
                             way two duplicated style strings could. */
                          #tempTimelineEmptyState .tempChatWithParts,
                          #tempTimelineEmptyState .tempInviteParts{
                            cursor:pointer;margin-top:7px;font:inherit;
                            display:inline-flex;align-items:center;gap:7px;
                            padding:7px 13px;font-size:13px;font-weight:700;letter-spacing:.15px;
                            border-radius:10px;
                            background:
                              linear-gradient(180deg, rgba(var(--pAccR),.22) 0%, rgba(var(--pAccR),.07) 100%),
                              #0b1120;
                            border:1.5px solid rgba(var(--pAccR),.7);
                            box-shadow:0 0 18px rgba(var(--pAccR),.26),
                                       0 3px 10px rgba(0,0,0,.42),
                                       inset 0 1px 0 rgba(255,255,255,.1);
                            text-shadow:0 0 10px rgba(var(--pAccR),.35);
                            transition:filter .18s, transform .18s, box-shadow .18s, border-color .18s;
                          }
                          #tempTimelineEmptyState .tempChatWithParts{
                            --pAcc:var(--drm-chat); --pAccR:var(--drm-chat-r); color:#ffcdd2;
                          }
                          #tempTimelineEmptyState .tempInviteParts{
                            --pAcc:var(--drm-invite); --pAccR:var(--drm-invite-r); color:#cbe2ff;
                          }
                          #tempTimelineEmptyState .tempChatWithParts i,
                          #tempTimelineEmptyState .tempInviteParts i{
                            color:var(--pAcc);
                            filter:drop-shadow(0 0 6px rgba(var(--pAccR),.75));
                          }
                          #tempTimelineEmptyState .tempChatWithParts:hover,
                          #tempTimelineEmptyState .tempInviteParts:hover{
                            filter:brightness(1.12); transform:translateY(-1px);
                            border-color:rgba(var(--pAccR),.95);
                            box-shadow:0 0 26px rgba(var(--pAccR),.40),
                                       0 6px 16px rgba(0,0,0,.45),
                                       inset 0 1px 0 rgba(255,255,255,.14);
                          }
                          #tempTimelineEmptyState .tempChatWithParts:active,
                          #tempTimelineEmptyState .tempInviteParts:active{
                            transform:translateY(0); filter:brightness(.96);
                            box-shadow:0 0 12px rgba(var(--pAccR),.22),
                                       inset 0 2px 5px rgba(0,0,0,.5);
                          }
                          #tempTimelineEmptyState .tempChatWithParts:focus-visible,
                          #tempTimelineEmptyState .tempInviteParts:focus-visible{
                            outline:2px solid var(--pAcc); outline-offset:2px;
                          }
                          @media (prefers-reduced-motion:reduce){
                            #tempTimelineEmptyState .tempChatWithParts,
                            #tempTimelineEmptyState .tempInviteParts{ transition:none; }
                            #tempTimelineEmptyState .tempChatWithParts:hover,
                            #tempTimelineEmptyState .tempInviteParts:hover{ transform:none; }
                          }
                          #tempTimelineEmptyState .ok{color:var(--green);}
                          #tempTimelineEmptyState .warn{color:var(--gold);}
                          #tempTimelineEmptyState .bad{color:var(--red);}
                          #tempTimelineEmptyState .card{
                            background:linear-gradient(180deg,#0c1424,#090f1c);
                            border:1px solid #1c2842;border-radius:13px;
                            padding:9px 11px;font-size:12.5px;line-height:1.5;color:#c7d3e8;margin-top:5px;
                          }
                          #tempTimelineEmptyState .card b{color:#eef3ff;font-weight:700;}
                          #tempTimelineEmptyState .card.gd{border-color:rgba(246,184,63,.55);box-shadow:0 0 14px rgba(246,184,63,.12);}
                          #tempTimelineEmptyState .card.pu{border-color:rgba(165,107,255,.55);box-shadow:0 0 14px rgba(165,107,255,.14);}
                          #tempTimelineEmptyState .card .blk{color:#ff7a7a;font-weight:800;letter-spacing:.4px;}
                          #tempTimelineEmptyState .redbadge{
                            display:inline-grid;place-items:center;width:15px;height:15px;border-radius:50%;
                            background:var(--red);color:#fff;font-size:11px;font-weight:800;
                            box-shadow:0 0 8px rgba(255,82,82,.7);vertical-align:middle;margin-left:4px;
                          }
                          #tempTimelineEmptyState .mini-btn{
                            display:inline-block;padding:5px 12px;border-radius:9px;cursor:pointer;margin-top:7px;
                            font-size:12.5px;font-weight:700;border:1px solid;background:transparent;
                            transition:transform .15s, box-shadow .15s;letter-spacing:.2px;
                          }
                          #tempTimelineEmptyState .mini-btn:active{transform:scale(.96);}
                          #tempTimelineEmptyState .mini-btn.pu{color:#dcc8ff;border-color:rgba(165,107,255,.7);}
                          #tempTimelineEmptyState .mini-btn.pu:hover{box-shadow:0 0 12px rgba(165,107,255,.4);}
                          #tempTimelineEmptyState .mini-btn.gd{color:var(--gold-hi);border-color:rgba(246,184,63,.7);}
                          #tempTimelineEmptyState .mini-btn.gd:hover{box-shadow:0 0 12px rgba(246,184,63,.4);}
                          #tempTimelineEmptyState .mini-btn.bl{color:#cfe6ff;border-color:rgba(74,169,255,.7);}
                          #tempTimelineEmptyState .mini-btn.bl:hover{box-shadow:0 0 12px rgba(74,169,255,.4);}
                          #tempTimelineEmptyState .photoCard{
                            display:flex;gap:0;border-radius:13px;overflow:hidden;margin-top:6px;
                            border:1.5px solid rgba(246,184,63,.5);
                            background:#0b101d;box-shadow:0 0 16px rgba(246,184,63,.1);
                          }
                          #tempTimelineEmptyState .photoCard .ph{flex:0 0 108px;height:76px;position:relative;}
                          #tempTimelineEmptyState .photoCard .ph svg{position:absolute;inset:0;width:100%;height:100%;}
                          #tempTimelineEmptyState .photoCard .inf{flex:1;padding:8px 10px;font-size:12.5px;line-height:1.5;color:#c7d3e8;}
                          #tempTimelineEmptyState .photoCard .inf b{display:block;font-size:14px;color:#fff;}
                          #tempTimelineEmptyState .avrow{display:flex;align-items:center;margin-top:2px;}
                          #tempTimelineEmptyState .pav{width:26px;height:26px;border-radius:50%;border:2px solid #0a101d;margin-left:-7px;overflow:hidden;flex:0 0 auto;background:#182238;}
                          #tempTimelineEmptyState .pav:first-child{margin-left:0;}
                          #tempTimelineEmptyState .pav svg{width:100%;height:100%;display:block;}
                          #tempTimelineEmptyState .pav.more{display:grid;place-items:center;font-size:10.5px;font-weight:700;color:#9fb0cc;}
                          #tempTimelineEmptyState .docrow{display:flex;gap:6px;align-items:center;margin-top:7px;}
                          #tempTimelineEmptyState .doc{
                            width:24px;height:30px;border-radius:4px;position:relative;
                            background:linear-gradient(160deg,#23314f,#131c31);border:1px solid #2b3a5e;
                          }
                          #tempTimelineEmptyState .doc::before{content:"";position:absolute;left:4px;right:4px;top:6px;height:2px;background:#41537d;box-shadow:0 5px 0 #41537d,0 10px 0 #41537d;}
                          #tempTimelineEmptyState .doc.gd{border-color:rgba(246,184,63,.6);box-shadow:0 0 8px rgba(246,184,63,.3);}
                          #tempTimelineEmptyState .doc.bl{border-color:rgba(74,169,255,.6);box-shadow:0 0 8px rgba(74,169,255,.3);}
                          #tempTimelineEmptyState .docrow .arr{color:#5b6884;font-size:14.5px;margin-left:2px;}

                          /* ── Offer & Negotiation — the user-managed stage card ──────────
                             A checklist the room's members tick off themselves (every other
                             stage is AI-driven). Amber accent = the offer orb's --c.
                             Moved below the planet orb so it spans full timeline width
                             without breaking/clipping step titles and progress. */
                          #tempTimelineEmptyState .row-offer{
                            flex-direction:column;
                            align-items:stretch;
                            gap:6px;
                          }
                          #tempTimelineEmptyState .row-offer .orbcol{
                            flex:0 0 auto !important;
                            width:128px !important;
                            height:auto !important;
                          }
                          #tempTimelineEmptyState .row-offer .side{
                            width:100% !important;
                            flex:1 1 100% !important;
                            padding-top:0 !important;
                          }
                          #tempTimelineEmptyState .offer-card{
                            background:linear-gradient(180deg, rgba(14,22,38,.92), rgba(10,16,29,.94));
                            border:1px solid rgba(246,168,63,.5);
                            border-radius:14px;
                            padding:12px 14px 14px;
                            box-shadow:0 0 18px rgba(246,168,63,.10), 0 10px 26px rgba(0,0,0,.45);
                            width:100%;
                            box-sizing:border-box;
                            overflow:hidden;
                          }
                          #tempTimelineEmptyState .offer-card.complete{
                            border-color:rgba(62,233,140,.55);
                            box-shadow:0 0 18px rgba(62,233,140,.12), 0 10px 26px rgba(0,0,0,.45);
                          }
                          #tempTimelineEmptyState .offer-head{
                            display:flex; align-items:flex-start; gap:9px; cursor:pointer;
                          }
                          #tempTimelineEmptyState .offer-ht{flex:1 1 auto; min-width:0;}
                          #tempTimelineEmptyState .offer-ht b{
                            display:block; font-size:15.5px; font-weight:800; color:#f2f6ff;
                            letter-spacing:.2px; line-height:1.25;
                          }
                          #tempTimelineEmptyState .offer-hsub{
                            display:flex; justify-content:space-between; align-items:baseline; gap:10px;
                            flex-wrap:wrap; margin-top:2px; font-size:13px; color:#8b96ac; line-height:1.4;
                          }
                          #tempTimelineEmptyState .offer-hts{font-size:12.5px; color:#77839b; white-space:nowrap;}
                          #tempTimelineEmptyState .offer-hts b{color:#c8d2e4; font-weight:700;}
                          #tempTimelineEmptyState .offer-chip{flex:0 0 auto; margin:0;}
                          #tempTimelineEmptyState .offer-chip.gd{border-color:rgba(246,184,63,.55);color:#ffe6ae;}
                          #tempTimelineEmptyState .offer-chip.gr{border-color:rgba(62,233,140,.5);color:#bdf5d6;}
                          #tempTimelineEmptyState .offer-chev{
                            flex:0 0 auto; margin-top:3px; font-size:13px; color:#8b96ac;
                            transition:transform .25s ease;
                          }
                          #tempTimelineEmptyState .offer-card.closed .offer-chev{transform:rotate(180deg);}
                          #tempTimelineEmptyState .offer-card.closed .offer-body{display:none;}
                          #tempTimelineEmptyState .offer-body{margin-top:10px;}
                          /* the milestones: 8 steps spanning 100% width cleanly */
                          #tempTimelineEmptyState .offer-steps{
                            position:relative; display:flex; align-items:flex-start;
                            justify-content:space-between; gap:2px; padding:10px 8px 6px;
                            width:100%; box-sizing:border-box; overflow:hidden;
                          }
                          #tempTimelineEmptyState .offer-steps::-webkit-scrollbar{display:none;}
                          #tempTimelineEmptyState .offer-steps::before{
                            content:''; position:absolute; left:calc(100% / 16); right:calc(100% / 16); top:18px; height:2px;
                            background:rgba(255,255,255,.15);
                            z-index:0;
                          }
                          #tempTimelineEmptyState .ostep{
                            position:relative; z-index:1; flex:1 1 0%; min-width:0;
                            display:flex; flex-direction:column; align-items:center; gap:4px;
                            padding:0 2px 4px; border-radius:8px; cursor:pointer; text-align:center;
                            transition:background .15s ease; box-sizing:border-box;
                          }
                          #tempTimelineEmptyState .ostep:hover{background:rgba(255,255,255,.04);}
                          #tempTimelineEmptyState .ostep .oic{
                            position:relative; z-index:1; justify-self:center;
                            width:18px; height:18px; border-radius:50%; box-sizing:border-box;
                            display:grid; place-items:center;
                            border:1.5px solid #55607a; background:#0b1220;
                            color:transparent; font-size:10.5px;
                          }
                          #tempTimelineEmptyState .ostep.done .oic{
                            border-color:#3ee98c; background:rgba(62,233,140,.16); color:#3ee98c;
                            box-shadow:0 0 8px rgba(62,233,140,.25);
                          }
                          #tempTimelineEmptyState .ostep.now .oic{
                            border-color:#f6b83f; background:rgba(246,184,63,.15); color:#f6b83f;
                            box-shadow:0 0 8px rgba(246,184,63,.25);
                          }
                          #tempTimelineEmptyState .ostep .otx{min-width:0; width:100%;}
                          #tempTimelineEmptyState .ostep .otx b{
                            display:block; font-size:11px; font-weight:700; color:#9aa6bd; line-height:1.2;
                            white-space:normal; word-break:normal; overflow-wrap:break-word; text-align:center;
                          }
                          #tempTimelineEmptyState .ostep.done .otx b,
                          #tempTimelineEmptyState .ostep.now .otx b{color:#e9eef8;}
                          /* the waiting/by text moves into the tooltip in this layout */
                          #tempTimelineEmptyState .ostep .otx small{display:none;}
                          #tempTimelineEmptyState .ostep .ots{
                            font-size:10px; color:#77839b; white-space:normal; line-height:1.15; text-align:center; margin-top:1px;
                          }
                          #tempTimelineEmptyState .ostep:not(.done) .ots{visibility:hidden;}
                          /* ============================================================
                             THE PROGRESS RAIL INSIDE A STAGE DETAIL (.tsp-hrail)
                             ------------------------------------------------------------
                             Same object as the Offer card's rail, in a wider and lighter
                             container, so only the metrics change: bigger nodes, room for
                             the labels, and a connector positioned to meet the node's new
                             centre. Everything else is inherited from .offer-steps/.ostep
                             so the two rails cannot drift apart visually.
                             ============================================================ */
                          #tempTimelineEmptyState .tsp-hrail{
                            padding:20px 10px 12px; gap:4px; overflow-x:auto; overflow-y:hidden;
                            scrollbar-width:none;
                            /* NO max-width. A 760px cap was tried and measured worse: at the
                               full 964px panel width each of six nodes gets ~156px and every
                               label sits on ONE line, while capping at 760 drops them to ~127px
                               and "Background Check Cleared" wraps to three lines — the same
                               cramped look the old half-width column caused. The labels fill the
                               width themselves, so the run stays a run. */
                          }
                          #tempTimelineEmptyState .tsp-hrail::before{
                            /* meets the centre of a 22px node: 18px top pad + 11px */
                            top:29px; left:calc(100% / (2 * var(--tspn, 6)));
                            right:calc(100% / (2 * var(--tspn, 6)));
                            background:rgba(235,216,176,.18);
                          }
                          #tempTimelineEmptyState .tsp-hrail .ostep{
                            min-width:82px; padding:0 4px 6px; gap:6px;
                          }
                          #tempTimelineEmptyState .tsp-hrail .ostep .oic{
                            width:22px; height:22px; font-size:11px; border-width:2px;
                          }
                          #tempTimelineEmptyState .tsp-hrail .ostep .otx b{
                            font-size:11.5px; line-height:1.25;
                          }
                          #tempTimelineEmptyState .tsp-hrail .ostep .ots{ font-size:10.5px; }
                          /* the step in play — amber, and gently pulsing so the eye lands on
                             the one thing that can be actioned right now */
                          #tempTimelineEmptyState .tsp-hrail .ostep.now .oic{
                            animation:tspNowPulse 2.2s ease-in-out infinite;
                          }
                          @keyframes tspNowPulse{
                            0%,100%{ box-shadow:0 0 8px rgba(246,184,63,.28); }
                            50%    { box-shadow:0 0 16px rgba(246,184,63,.55); }
                          }
                          /* a forked step (an appraisal under the purchase price) is red, not
                             amber — it is not "next", it is wrong */
                          #tempTimelineEmptyState .tsp-hrail .ostep.bad .oic{
                            border-color:#ff6b6b; background:rgba(255,107,107,.16); color:#ff8a8a;
                            box-shadow:0 0 10px rgba(255,107,107,.3);
                          }
                          #tempTimelineEmptyState .tsp-hrail .ostep.bad .otx b{ color:#ffc9c9; }
                          #tempTimelineEmptyState .tsp-hrail .ostep:focus-visible{
                            outline:2px solid rgba(74,169,255,.8); outline-offset:2px; border-radius:8px;
                          }
                          @media (prefers-reduced-motion: reduce){
                            #tempTimelineEmptyState .tsp-hrail .ostep.now .oic{ animation:none; }
                          }
                          @media (max-width:560px){
                            #tempTimelineEmptyState .tsp-hrail{ justify-content:flex-start; }
                            #tempTimelineEmptyState .tsp-hrail .ostep{ min-width:74px; }
                            #tempTimelineEmptyState .tsp-hrail .ostep .otx b{ font-size:10.5px; }
                          }
                          #tempTimelineEmptyState .offer-loading{
                            padding:8px 4px; font-size:13px; color:#8b96ac;
                          }
                          #tempTimelineEmptyState .offer-foot{
                            display:flex; align-items:center; flex-wrap:wrap;
                            gap:8px 12px; margin-top:9px;
                          }
                          #tempTimelineEmptyState .offer-view{
                            flex:0 0 auto; display:inline-flex; align-items:center; gap:7px;
                            font:inherit; font-size:13px; font-weight:700; cursor:pointer;
                            color:#9ee9f4; background:rgba(53,214,232,.08);
                            border:1px solid rgba(53,214,232,.5); border-radius:9px;
                            padding:7px 12px; transition:background .18s ease;
                          }
                          #tempTimelineEmptyState .offer-view:hover{background:rgba(53,214,232,.16);}
                          #tempTimelineEmptyState .offer-view .li{width:12px;height:12px;display:inline-block;}
                          #tempTimelineEmptyState .offer-view .li svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2;}
                          #tempTimelineEmptyState .offer-note{
                            flex:1 1 150px; min-width:0; font-size:12px; color:#77839b; line-height:1.45;
                          }
                          #tempTimelineEmptyState .offer-note b{color:#c8d2e4; font-weight:700;}

                          /* -- Offer & Acceptance board ------------------------------------
                             The live negotiation, sitting ABOVE the eight-step checklist in
                             the same stage. The checklist is the ledger of how far the offer
                             has got; this is where the offer actually happens - buyers bid,
                             the seller side counters, one offer is accepted.

                             Scoped .oba-* rather than extending .offer-*: the checklist card
                             below shares this column and half a dozen writers already target
                             its class names. Two features in one .side must not be able to
                             restyle each other by accident. */
                          #tempTimelineEmptyState .oba{
                            background:linear-gradient(180deg, rgba(16,25,43,.94), rgba(10,16,29,.96));
                            border:1px solid rgba(246,168,63,.55);
                            border-radius:14px; padding:12px 14px 13px; margin-bottom:10px;
                            box-shadow:0 0 20px rgba(246,168,63,.12), 0 10px 26px rgba(0,0,0,.45);
                            width:100%; box-sizing:border-box; overflow:hidden;
                          }
                          #tempTimelineEmptyState .oba.decided{
                            border-color:rgba(62,233,140,.55);
                            box-shadow:0 0 20px rgba(62,233,140,.13), 0 10px 26px rgba(0,0,0,.45);
                          }
                          #tempTimelineEmptyState .oba-hd{
                            display:flex; align-items:flex-start; gap:9px; flex-wrap:wrap;
                          }
                          #tempTimelineEmptyState .oba-ht{flex:1 1 180px; min-width:0;}
                          #tempTimelineEmptyState .oba-ht b{
                            display:block; font-size:15.5px; font-weight:800; color:#f2f6ff;
                            letter-spacing:.2px; line-height:1.25;
                          }
                          #tempTimelineEmptyState .oba-hsub{
                            display:block; margin-top:4px; font-size:13.5px; color:#a8bccf; line-height:1.5;
                          }
                          #tempTimelineEmptyState .oba-hchip{
                            flex:0 0 auto; display:inline-flex; align-items:center; gap:7px;
                            padding:7px 14px; border-radius:50px; font-size:12.5px; font-weight:800;
                            letter-spacing:.03em; border:1px solid rgba(246,184,63,.6);
                            color:#ffe6ae; background:rgba(246,184,63,.14); white-space:nowrap;
                            box-shadow:0 0 16px rgba(246,184,63,.14);
                          }
                          #tempTimelineEmptyState .oba-hchip.gr{
                            border-color:rgba(62,233,140,.5); color:#bdf5d6; background:rgba(62,233,140,.10);
                          }
                          #tempTimelineEmptyState .oba-hchip.mut{
                            border-color:rgba(255,255,255,.18); color:#9aa6bb; background:rgba(255,255,255,.04);
                          }

                          /* one buyer's negotiation */
                          #tempTimelineEmptyState .oba-th{
                            /* Lit from the top left, like every other premium panel on the
                               site: gold radial in, sapphire counter-light out, navy base. The
                               borders are graded on purpose — a uniform hairline reads as a box,
                               a graded one reads as a lit surface. */
                            background:
                              radial-gradient(ellipse at top left, rgba(235,216,176,.13) 0%, transparent 58%),
                              radial-gradient(ellipse at bottom right, rgba(43,93,153,.15) 0%, transparent 58%),
                              linear-gradient(158deg, rgba(14,30,55,.72) 0%, rgba(6,17,33,.66) 100%);
                            border-top:1px solid rgba(235,216,176,.34);
                            border-left:1px solid rgba(235,216,176,.22);
                            border-right:1px solid rgba(235,216,176,.10);
                            border-bottom:1px solid rgba(235,216,176,.07);
                            border-radius:13px; padding:13px 14px; margin-top:11px;
                            box-shadow:
                              inset 0 1px 0 rgba(255,255,255,.05),
                              2px 3px 0 rgba(150,112,26,.16),
                              0 8px 20px rgba(3,10,20,.4);
                          }
                          #tempTimelineEmptyState .oba-th.awaiting{
                            border-color:rgba(246,184,63,.5); background:rgba(246,184,63,.055);
                          }
                          #tempTimelineEmptyState .oba-th.won{
                            border-color:rgba(62,233,140,.5); background:rgba(62,233,140,.055);
                          }
                          /* A closed round should recede, not become unreadable. .62 was set when the
                             card was flat grey; with colour on it the same value reads as murk, and
                             the history a buyer is scrolling back through is the thing they most need
                             to be able to read. */
                          #tempTimelineEmptyState .oba-th.dead{opacity:.82;}
                          #tempTimelineEmptyState .oba-th.mine{box-shadow:inset 3px 0 0 rgba(53,214,232,.8);}
                          #tempTimelineEmptyState .oba-thh{
                            display:flex; align-items:baseline; gap:9px; flex-wrap:wrap;
                          }
                          #tempTimelineEmptyState .oba-who{
                            flex:1 1 120px; min-width:0; font-size:14px; font-weight:800; color:#f2f6ff;
                            overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
                          }
                          #tempTimelineEmptyState .oba-who em{
                            font-style:normal; font-weight:700; color:#5fd8e8; font-size:11.5px;
                            margin-left:6px; letter-spacing:.05em;
                          }
                          #tempTimelineEmptyState .oba-px{
                            /* The one number this card exists for, so it is set like the site's
                               other headline figures: bigger, and on the gold ramp rather than a
                               flat tint. */
                            flex:0 0 auto; font-size:22px; font-weight:800;
                            letter-spacing:-.2px; font-variant-numeric:tabular-nums;
                            color:#ffe6ae;
                            background:linear-gradient(180deg,#fff6dc 0%,#f0dca8 46%,#d9b96a 100%);
                            -webkit-background-clip:text; background-clip:text;
                            -webkit-text-fill-color:transparent;
                          }
                          #tempTimelineEmptyState .oba-th.won .oba-px{color:#8ff3bd;}
                          #tempTimelineEmptyState .oba-st{
                            /* Was an outline with 11px grey text — the least legible element on a
                               card whose whole point is its state. Filled and larger; each variant
                               tints its own background below. */
                            flex:0 0 auto; font-size:11.5px; font-weight:800; letter-spacing:.07em;
                            text-transform:uppercase; padding:5px 11px; border-radius:50px;
                            border:1px solid rgba(255,255,255,.2); color:#c3cddd;
                            background:rgba(255,255,255,.07);
                          }
                          #tempTimelineEmptyState .oba-st.y{
    border-color:rgba(246,184,63,.6); color:#ffe6ae; background:rgba(246,184,63,.16);
}
                          #tempTimelineEmptyState .oba-st.g{
    border-color:rgba(62,233,140,.55); color:#a9f7ce; background:rgba(62,233,140,.15);
}
                          #tempTimelineEmptyState .oba-st.c{
    border-color:rgba(53,214,232,.55); color:#b6f0f8; background:rgba(53,214,232,.15);
}
                          #tempTimelineEmptyState .oba-st.r{
    border-color:rgba(255,122,122,.55); color:#ffb9b9; background:rgba(255,90,90,.16);
}

                          /* ── WHAT KIND OF THING IS ON THE TABLE ──────────────────────────
                             An offer and a counteroffer are different acts with different
                             people owing the next move, and the card used to distinguish them
                             with one small amber chip sitting among the terms chips — the same
                             size and shape as "Earnest $1,000", so it read as another term
                             rather than as the name of the document.

                             It is a header line now: what this is, which round it is, and when
                             it was sent. Green for an offer, gold for a counteroffer, matching
                             the direction the board already colours everything else. */
                          #tempTimelineEmptyState .oba-kind{
                            display:flex; align-items:center; flex-wrap:wrap; gap:8px;
                            margin-top:10px; padding-bottom:7px;
                            border-bottom:1px solid rgba(235,216,176,.13);
                          }
                          #tempTimelineEmptyState .oba-kind .k{
                            padding:3px 9px; border-radius:6px;
                            font-size:10.5px; font-weight:800; letter-spacing:.1em; text-transform:uppercase;
                            color:#8ff3bd; background:rgba(52,211,153,.13);
                            border:1px solid rgba(52,211,153,.4);
                          }
                          #tempTimelineEmptyState .oba-kind.counter .k{
                            color:#ffd894; background:rgba(246,184,63,.12);
                            border-color:rgba(246,184,63,.48);
                          }
                          #tempTimelineEmptyState .oba-kind .r,
                          #tempTimelineEmptyState .oba-kind .d{
                            font-size:11.5px; font-weight:700; letter-spacing:.04em;
                            text-transform:uppercase; color:#8695ac;
                          }
                          #tempTimelineEmptyState .oba-kind .d{ margin-left:auto; text-transform:none;
                            letter-spacing:0; font-weight:600; color:#77839b; }
                          @media (max-width:480px){
                            #tempTimelineEmptyState .oba-kind .d{ margin-left:0; }
                          }

                          #tempTimelineEmptyState .oba-terms{
                            display:flex; flex-wrap:wrap; gap:5px 6px; margin-top:8px;
                          }
                          #tempTimelineEmptyState .oba-t{
                            display:inline-flex; align-items:center; gap:6px; padding:6px 11px;
                            border-radius:8px; background:rgba(6,17,33,.5);
                            border:1px solid rgba(235,216,176,.18);
                            font-size:12.5px; color:#c8d5e4; white-space:nowrap;
                          }
                          #tempTimelineEmptyState .oba-t b{color:#eef3ff; font-weight:700;}
                          #tempTimelineEmptyState .oba-t.warn{
                            border-color:rgba(246,184,63,.45); color:#ffd894; background:rgba(246,184,63,.08);
                          }
                          #tempTimelineEmptyState .oba-note{
                            /* The only words a person actually wrote on this card, and they were
                               the dimmest thing on it (#9aa6bb at 12.4px). Given a gold rule, a
                               tinted well and readable ink so they read as a quote. */
                            margin-top:10px; font-size:13.5px; color:#dbe4f0; line-height:1.6;
                            border-left:3px solid rgba(235,216,176,.5);
                            padding:8px 12px; border-radius:0 8px 8px 0;
                            background:rgba(235,216,176,.06);
                            font-style:italic; overflow-wrap:anywhere;
                          }

                          /* ── THE CONDITIONS THAT ARE NOT CHIPS, AND THE REVIEW ────────────
                             Listed rather than chipped. .oba-t is nowrap because every chip
                             beside it is two or three words; these are whole conditions, and a
                             ninety-character one in a nowrap chip scrolls a phone sideways.

                             They sit ABOVE the message, not inside it. The seller is being
                             asked to agree to each of them — they are terms of the offer, and
                             burying a walk-away condition in a paragraph of prose is how it
                             gets agreed to by somebody who skimmed. */
                          #tempTimelineEmptyState .oba-cc,
                          #tempTimelineEmptyState .oba-dd{
                            margin-top:9px; padding:8px 11px 9px; border-radius:9px;
                            background:rgba(6,17,33,.5); border:1px solid rgba(235,216,176,.18);
                          }
                          #tempTimelineEmptyState .oba-cc h6,
                          #tempTimelineEmptyState .oba-dd h6{
                            margin:0 0 6px; font-size:10px; font-weight:800; letter-spacing:.09em;
                            text-transform:uppercase; color:#ebd8b0;
                            display:flex; align-items:center; gap:6px;
                          }
                          #tempTimelineEmptyState .oba-cc h6 i,
                          #tempTimelineEmptyState .oba-dd h6 i{ font-size:10.5px; color:#ebd8b0 !important; }
                          #tempTimelineEmptyState .oba-cc ul{
                            margin:0; padding:0; list-style:none;
                            display:flex; flex-direction:column; gap:4px;
                          }
                          #tempTimelineEmptyState .oba-cc li{
                            position:relative; padding-left:15px; font-size:12.6px; line-height:1.5;
                            color:#c8d5e4; overflow-wrap:anywhere;
                          }
                          #tempTimelineEmptyState .oba-cc li::before{
                            content:''; position:absolute; left:2px; top:7px;
                            width:5px; height:5px; border-radius:50%; background:#ebd8b0;
                          }
                          /* pre-wrap: the sender's own line breaks are part of what they wrote,
                             and a list of four things they typed on four lines must not arrive
                             as one run-on sentence. */
                          #tempTimelineEmptyState .oba-dd p{
                            margin:0; font-size:12.6px; line-height:1.6; color:#c8d5e4;
                            white-space:pre-wrap; overflow-wrap:anywhere;
                          }
                          /* ---- the property an offer is on, and HOUSBE's read of it ----
                          Only ever rendered in an off-market room, where the buyer is judging
                          several houses from several professionals and a bare price says
                          nothing about which one. */
                          #tempTimelineEmptyState .oba-prop {
                          margin: 9px 0 0; padding: 10px 12px; border-radius: 11px;
                          border: 1px solid rgba(235,216,176,.20); background: rgba(10,26,48,.55);
                          }
                          #tempTimelineEmptyState .oba-prop-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
                          font-size: 13px; color: #eaf1f7; }
                          #tempTimelineEmptyState .oba-prop-h i { color: #ebd8b0 !important; font-size: 11.5px; }
                          #tempTimelineEmptyState .oba-prop-h b { font-weight: 700; }
                          #tempTimelineEmptyState .oba-prop-h a { font-size: 11.5px; color: #7fc4ff; text-decoration: underline; }
                          #tempTimelineEmptyState .oba-prop-f { margin-top: 3px; font-size: 11.5px; color: #8fa4b8; }
                          #tempTimelineEmptyState .oba-prop-n { margin-top: 6px; font-size: 12px; color: #c2d3e3; font-style: italic; }

                          #tempTimelineEmptyState .oba-prop-ai { margin-top: 9px; padding-top: 9px;
                          border-top: 1px dashed rgba(235,216,176,.22); }
                          #tempTimelineEmptyState .oba-prop-ai-h { font-size: 10px; font-weight: 800; letter-spacing: .09em;
                          color: #ebd8b0; }
                          #tempTimelineEmptyState .oba-prop-ai.bad .oba-prop-ai-h { color: #ff9ea3; }
                          #tempTimelineEmptyState .oba-prop-ai p { margin: 5px 0 0; font-size: 12.3px; line-height: 1.6; color: #c2d3e3; }
                          #tempTimelineEmptyState .oba-prop-ai-i { margin-top: 6px; font-size: 12px; line-height: 1.55; color: #8fa4b8; }
                          #tempTimelineEmptyState .oba-prop-ai-i b { color: #eaf1f7; font-weight: 700; font-size: 10.5px;
                          letter-spacing: .05em; margin-right: 5px; }
                          #tempTimelineEmptyState .oba-prop-ai-f { margin-top: 8px; font-size: 10.8px; color: #6d8299; }
                          #tempTimelineEmptyState .oba-prop-retry {
                          margin-top: 8px; padding: 6px 12px; border-radius: 8px; cursor: pointer;
                          font: 700 11.5px/1 inherit; color: #ebd8b0;
                          background: rgba(235,216,176,.10); border: 1px solid rgba(235,216,176,.38);
                          }
                          #tempTimelineEmptyState .oba-prop-retry:hover { background: rgba(235,216,176,.18); }
                          #tempTimelineEmptyState .obaf-panel.prop .obaf-sel {
                          width: 100%; padding: 10px 12px; border-radius: 9px; font: 500 14.5px/1.2 inherit;
                          color: #eaf1f7; background: #0a1a30; border: 1px solid rgba(235,216,176,.24);
                          }
                          #tempTimelineEmptyState .obaf-hint { margin: 9px 0 0; font-size: 13px; line-height: 1.55; color: #6d8299; }

                          #tempTimelineEmptyState .oba-reason{
                            /* An outcome, not a footnote: banded so it is not mistaken for another
                               grey line of terms. */
                            margin-top:10px; font-size:13px; font-weight:600; color:#ffc2c2;
                            line-height:1.55; padding:8px 11px; border-radius:8px;
                            background:rgba(255,90,90,.10);
                            border:1px solid rgba(255,122,122,.28);
                          }
                          #tempTimelineEmptyState .oba-acts{
                            display:flex; flex-wrap:wrap; gap:7px; margin-top:10px;
                          }
                          #tempTimelineEmptyState .oba-b{
                            display:inline-flex; align-items:center; gap:6px; font:inherit;
                            font-size:12.6px; font-weight:700; cursor:pointer; padding:7px 12px;
                            border-radius:9px; border:1px solid rgba(255,255,255,.16);
                            background:rgba(255,255,255,.05); color:#e2e8f0;
                            transition:background .16s ease, border-color .16s ease;
                          }
                          #tempTimelineEmptyState .oba-b:hover{background:rgba(255,255,255,.1); border-color:rgba(255,255,255,.3);}
                          #tempTimelineEmptyState .oba-b[disabled]{opacity:.45; cursor:not-allowed;}
                          #tempTimelineEmptyState .oba-b.pri{
                            background:linear-gradient(180deg,#f6d374,#eec14e); border-color:transparent; color:#201a06;
                          }
                          #tempTimelineEmptyState .oba-b.pri:hover{filter:brightness(1.07); background:linear-gradient(180deg,#f6d374,#eec14e);}
                          #tempTimelineEmptyState .oba-b.ok{
                            background:rgba(62,233,140,.12); border-color:rgba(62,233,140,.5); color:#8ff3bd;
                          }
                          #tempTimelineEmptyState .oba-b.dgr{border-color:rgba(255,122,122,.4); color:#ff9d9d;}
                          #tempTimelineEmptyState .oba-b.dgr:hover{border-color:rgba(255,122,122,.7); background:rgba(255,122,122,.1);}

                          #tempTimelineEmptyState .oba-empty{
                            margin-top:9px; padding:12px; border-radius:11px; text-align:center;
                            border:1px dashed rgba(255,255,255,.16); background:rgba(255,255,255,.02);
                            font-size:13px; color:#9aa6bb; line-height:1.55;
                          }
                          #tempTimelineEmptyState .oba-empty b{display:block; color:#e6ecf8; font-size:14px; margin-bottom:3px;}
                          #tempTimelineEmptyState .oba-foot{
                            margin-top:10px; display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px;
                          }
                          #tempTimelineEmptyState .oba-fnote{
                            flex:1 1 160px; min-width:0; font-size:11.8px; color:#77839b; line-height:1.45;
                          }
                          /* the read-only banner a deactivated buyer keeps seeing after they
                             dismiss the modal - the state has not changed, so neither does this */
                          #tempTimelineEmptyState .oba-lockbar{
                            display:flex; align-items:flex-start; gap:9px; margin-top:9px;
                            padding:10px 12px; border-radius:11px;
                            border:1px solid rgba(255,122,122,.4); background:rgba(255,122,122,.07);
                            font-size:12.6px; color:#ffc9c9; line-height:1.5;
                          }
                          #tempTimelineEmptyState .oba-lockbar i{margin-top:2px; color:#ff9d9d;}
                          #tempTimelineEmptyState .oba-lockbar b{display:block; color:#ffe0e0; font-size:13.2px; margin-bottom:2px;}

                          /* history of one thread, revealed on demand */
                          #tempTimelineEmptyState .oba-hist{
                            margin-top:11px; padding-top:10px;
                            border-top:1px solid rgba(235,216,176,.18);
                            display:none;
                          }
                          #tempTimelineEmptyState .oba-th.open-hist .oba-hist{display:block;}
                          #tempTimelineEmptyState .oba-hr{
                            /* Five rounds at 12px grey with no separators read as one block. Banded
                               rows give the sequence a shape, which is the only thing a negotiation
                               history is for. */
                            display:flex; align-items:baseline; gap:10px;
                            padding:8px 10px; border-radius:7px;
                            font-size:12.5px; color:#aebbcd; line-height:1.45;
                          }
#tempTimelineEmptyState .oba-hr:nth-child(odd){background:rgba(255,255,255,.035);}
#tempTimelineEmptyState .oba-hr + .oba-hr{margin-top:2px;}
                          #tempTimelineEmptyState .oba-hr .w{flex:1 1 auto; min-width:0;}
                          #tempTimelineEmptyState .oba-hr .p{
    flex:0 0 auto; font-weight:800; font-size:13.5px; color:#eaf1f7;
    font-variant-numeric:tabular-nums; letter-spacing:-.1px;
}
                          #tempTimelineEmptyState .oba-hr.owner .p{color:#ffd894;}
                          #tempTimelineEmptyState .oba-more{
                            margin-top:10px; font:inherit; font-size:12.5px; font-weight:800;
                            cursor:pointer; background:rgba(235,216,176,.08);
                            border:1px solid rgba(235,216,176,.24); border-radius:8px;
                            padding:7px 13px; color:#f0dca8;
                          }
#tempTimelineEmptyState .oba-more:hover{background:rgba(235,216,176,.16); color:#fff6dc;}

                          /* ── stage cards — every stage's .side renders this shell ─────────
                             Head: title + status chip. Meta: description left, the stage's
                             MOST MEANINGFUL timestamp right (completion time for static
                             stages, latest-activity time for dynamic ones — the [data-stts]
                             spans are repainted by applyStageTs() whenever fresher data
                             arrives from the activity log / members / documents). */
                          #tempTimelineEmptyState .stcard{
                            background:linear-gradient(180deg, rgba(13,21,37,.88), rgba(9,15,28,.9));
                            border:1px solid rgba(255,255,255,.09);
                            border-radius:13px; padding:11px 13px 10px;
                            box-shadow:0 8px 22px rgba(0,0,0,.4);
                          }
                          /* The status chip is flex:0 0 auto and the title was the only thing
                             allowed to give, so every pixel this row lost came out of the title:
                             squeeze the timeline column on a smaller desktop and "Created" became
                             "Creat…", "Documents" became "Doc…". These names ARE the card's
                             identity — they must never be the part that gets cut.

                             flex-wrap lets the chip drop to its own line once both no longer fit,
                             and the title wraps instead of ellipsing. Same treatment .stmeta below
                             already uses for the description/timestamp row, which is why that row
                             never had this problem. */
                          #tempTimelineEmptyState .sthead{
                            display:flex; align-items:center; gap:9px; flex-wrap:wrap;
                          }
                          #tempTimelineEmptyState .sthead b{
                            flex:1 1 auto; min-width:0; font-size:15px; font-weight:800;
                            color:#f2f6ff; letter-spacing:.2px; line-height:1.25;
                            white-space:normal; overflow-wrap:break-word;
                          }
                          #tempTimelineEmptyState .stchip{
                            flex:0 0 auto; display:inline-flex; align-items:center; gap:5px;
                            font-size:12px; font-weight:700; border-radius:8px; padding:4px 9px;
                            border:1px solid #2a3550; color:#9aa6bd; background:rgba(255,255,255,.03);
                            white-space:nowrap;
                          }
                          #tempTimelineEmptyState .stchip .li{width:10px;height:10px;display:inline-block;}
                          #tempTimelineEmptyState .stchip .li svg{width:10px;height:10px;stroke:currentColor;fill:none;stroke-width:2.4;}
                          #tempTimelineEmptyState .stchip.ok{border-color:rgba(62,233,140,.5);color:#7bf0a8;background:rgba(62,233,140,.07);}
                          #tempTimelineEmptyState .stchip.prog{border-color:rgba(246,184,63,.55);color:#ffd97a;background:rgba(246,184,63,.07);}
                          #tempTimelineEmptyState .stchip.warn{border-color:rgba(255,122,122,.55);color:#ff9d9d;background:rgba(255,82,82,.07);}
                          #tempTimelineEmptyState .stmeta{
                            display:flex; align-items:baseline; gap:8px 14px; flex-wrap:wrap;
                            justify-content:space-between; margin-top:5px;
                          }
                          #tempTimelineEmptyState .stdesc{
                            flex:1 1 auto; min-width:0; font-size:12.5px; color:#8b96ac; line-height:1.45;
                          }
                          #tempTimelineEmptyState .stts{
                            flex:0 0 auto; font-size:12px; color:#77839b; white-space:nowrap;
                          }
                          #tempTimelineEmptyState .stts b{color:#c8d2e4; font-weight:700;}
                          #tempTimelineEmptyState .stsub{
                            margin-top:7px; font-size:12.5px; color:#a9b4c9;
                            display:flex; align-items:center; gap:6px;
                          }
                          #tempTimelineEmptyState .stsub .li{width:11px;height:11px;}
                          #tempTimelineEmptyState .stsub .li svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2;}
                          /* ── documents filed under this stage, on the card itself ────── */
                          #tempTimelineEmptyState .stdocs{ margin-top:9px; }
                          #tempTimelineEmptyState .stdocs-h{
                            font-size:11.5px; font-weight:800; letter-spacing:.7px; text-transform:uppercase;
                            color:#8b96ac; margin-bottom:6px;
                          }
                          #tempTimelineEmptyState .stdocs-h i{ font-size:11px; margin-right:4px; opacity:.85; }
                          #tempTimelineEmptyState .stdocs-i{
                            display:flex; align-items:center; gap:7px; width:100%;
                            text-align:left; cursor:pointer;
                            background:rgba(34,211,238,.06); border:1px solid rgba(34,211,238,.28);
                            border-radius:9px; padding:6px 9px; margin-bottom:5px;
                            color:#bfe9f5; font-size:13px; font-weight:600; font-family:inherit;
                            transition:background .18s ease, border-color .18s ease;
                          }
                          #tempTimelineEmptyState .stdocs-i:hover{
                            background:rgba(34,211,238,.13); border-color:rgba(34,211,238,.5);
                          }
                          #tempTimelineEmptyState .stdocs-i i{ font-size:12.5px; color:#22d3ee !important; flex:0 0 auto; }
                          /* the name is the only part allowed to give — the icon and the
                             count must stay legible at any card width */
                          #tempTimelineEmptyState .stdocs-i span{
                            min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
                          }
                          #tempTimelineEmptyState .stdocs-m{ font-size:12px; color:#7d8798; font-weight:700; }

                          #tempTimelineEmptyState .stcard .card{margin-top:8px;}
                          #tempTimelineEmptyState .strow-btns{
                            display:flex; align-items:center; flex-wrap:wrap; gap:7px; margin-top:9px;
                          }
                          #tempTimelineEmptyState .stview{
                            flex:0 0 auto; display:inline-flex; align-items:center; gap:7px;
                            font:inherit; font-size:12.5px; font-weight:700; cursor:pointer;
                            color:#9ee9f4; background:rgba(53,214,232,.08);
                            border:1px solid rgba(53,214,232,.5); border-radius:9px;
                            padding:6px 11px; transition:background .18s ease;
                          }
                          #tempTimelineEmptyState .stview:hover{background:rgba(53,214,232,.16);}
                          /* "Update purchase status" beside the Deal Complete planet */
                          #tempTimelineEmptyState .stview.dco-upd{color:#ffd894;background:rgba(246,184,63,.10);border-color:rgba(246,184,63,.6);}
                          #tempTimelineEmptyState .stview.dco-upd:hover{background:rgba(246,184,63,.2);}
                          #tempTimelineEmptyState .stview.dco-upd i{font-size:11.5px;color:inherit !important;}
                          /* A stage card's buttons may shrink and wrap. They were flex:0 0 auto, so a long
                             label ("View Deal Complete Details") kept its full width in the narrow column
                             beside the planet on a phone and widened the card past it, clipping the card's
                             text and buttons on the right. */
                          #tempTimelineEmptyState .strow-btns .stview{flex:0 1 auto;min-width:0;max-width:100%;white-space:normal;text-align:left;line-height:1.3;}
                          /* "Last activity: Oct 12, 2026 · 8:50 AM" was nowrap, 234px in the 198px column beside
                             the planet on a phone: the label may wrap there, the date itself stays whole. */
                          @media (max-width:600px){
                            #tempTimelineEmptyState .dglance .stts{white-space:normal;flex:1 1 100%;min-width:0;}
                            #tempTimelineEmptyState .dglance .stts b{white-space:nowrap;}
                          }
                          #tempTimelineEmptyState .stview .li{width:11px;height:11px;display:inline-block;}
                          #tempTimelineEmptyState .stview .li svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2;}

                          /* .tl-note (the "timeline shows all key steps" footer note) was
                             removed along with the JS that injected it — the retention banner
                             closes the timeline now. Rules deleted rather than left behind:
                             nothing renders that class any more. */
                          #tempTimelineEmptyState .inspBadges{display:flex;gap:8px;margin-top:6px;}
                          #tempTimelineEmptyState .ib{
                            width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-size:14.5px;
                            background:#0c1424;border:1.5px solid;
                          }
                          #tempTimelineEmptyState .ib.gr{border-color:rgba(62,233,140,.6);box-shadow:0 0 9px rgba(62,233,140,.3);}
                          #tempTimelineEmptyState .ib.bl{border-color:rgba(74,169,255,.6);box-shadow:0 0 9px rgba(74,169,255,.3);}
                          #tempTimelineEmptyState .export{
                            margin-top:14px;width:100%;padding:12px;border-radius:13px;cursor:pointer;
                            background:linear-gradient(180deg,#0e1628,#0a1120);
                            border:1.5px solid rgba(246,184,63,.65);
                            color:var(--gold-hi);font-size:14.5px;font-weight:700;letter-spacing:.3px;
                            box-shadow:0 0 18px rgba(246,184,63,.16), inset 0 0 22px rgba(246,184,63,.05);
                            transition:box-shadow .2s, transform .15s;
                          }
                          #tempTimelineEmptyState .export:hover{box-shadow:0 0 28px rgba(246,184,63,.32);}
                          #tempTimelineEmptyState .export:active{transform:scale(.985);}

                          /* ── "Have an idea to improve the Deal Timeline?" ─────────────────
                             Sits under Export Full PDF. Teal on purpose: every other control
                             in this column is deal-gold, so the one thing that is NOT about
                             the deal reads as a different kind of thing at a glance. */
                          #tempTimelineEmptyState .tlsug-card{
                            --tlsug: #35d6e8;          /* cyan — headline + ring */
                            --tlsug-2: #2fe0c0;        /* teal — border + button */
                            --tlsug-spark: #f6b83f;    /* deal-gold sparkles tie it to the room */
                            position:relative; z-index:1;
                            display:flex; align-items:flex-start; gap:16px;
                            margin-top:14px; padding:20px 20px 18px;
                            border-radius:18px;
                            border:1.5px solid rgba(47,224,192,.62);
                            background:linear-gradient(180deg,#0a1a24 0%,#061119 100%);
                            box-shadow:0 0 22px rgba(47,224,192,.20), inset 0 0 26px rgba(47,224,192,.05);
                          }
                          /* --- speech-bubble mark with orbiting sparkles --- */
                          #tempTimelineEmptyState .tlsug-art{
                            position:relative; flex:0 0 auto;
                            width:76px; height:72px;
                          }
                          #tempTimelineEmptyState .tlsug-bubble{
                            position:absolute; left:7px; top:3px;
                            width:58px; height:60px;
                            fill:none; stroke:var(--tlsug); stroke-width:2.6;
                            stroke-linejoin:round; stroke-linecap:round;
                            opacity:.95; filter:drop-shadow(0 0 10px rgba(53,214,232,.45));
                          }
                          /* Box centred on the drawn circle (viewBox centre 28,26 + the svg
                             offset above), so the inner glyph sits dead centre in the bubble
                             rather than being nudged by eye. */
                          #tempTimelineEmptyState .tlsug-bubble-in{
                            position:absolute; left:7px; top:3px;
                            width:58px; height:54px;
                            display:grid; place-items:center;
                            font-size:18px; line-height:1; color:#bff3fa;
                          }
                          #tempTimelineEmptyState .tlsug-spark{
                            position:absolute; width:10px; height:10px;
                            background:var(--tlsug-spark);
                            /* 4-point star — clip-path rather than a glyph so it can't be
                               swapped out by a font that lacks U+2726 */
                            clip-path:polygon(50% 0%,60% 40%,100% 50%,60% 60%,50% 100%,40% 60%,0% 50%,40% 40%);
                            filter:drop-shadow(0 0 5px rgba(246,184,63,.85));
                            animation:tlsugTwinkle 2.8s ease-in-out infinite;
                          }
                          #tempTimelineEmptyState .tlsug-spark.s1{left:0;    top:6px;  width:12px; height:12px; animation-delay:0s;}
                          #tempTimelineEmptyState .tlsug-spark.s2{right:2px; top:0;    width:9px;  height:9px;  animation-delay:.9s;}
                          #tempTimelineEmptyState .tlsug-spark.s3{left:52px; bottom:2px; width:11px; height:11px; animation-delay:1.7s;}
                          @keyframes tlsugTwinkle{
                            0%,100%{opacity:.35; transform:scale(.82) rotate(0deg);}
                            50%    {opacity:1;   transform:scale(1.12) rotate(18deg);}
                          }
                          /* --- copy + CTA --- */
                          #tempTimelineEmptyState .tlsug-body{
                            flex:1 1 auto; min-width:0;
                            display:flex; flex-direction:column; align-items:flex-start;
                          }
                          #tempTimelineEmptyState .tlsug-title{
                            margin:2px 0 0; font-size:17px; font-weight:800;
                            letter-spacing:.2px; line-height:1.3; color:var(--tlsug);
                          }
                          #tempTimelineEmptyState .tlsug-sub{
                            margin:7px 0 0; font-size:15.5px; font-weight:500;
                            line-height:1.45; color:#cfd9e6;
                          }
                          #tempTimelineEmptyState .tlsug-cta{
                            align-self:flex-end; margin-top:16px;
                            display:inline-flex; align-items:center; gap:10px;
                            padding:13px 22px; border-radius:12px; cursor:pointer;
                            font:inherit; font-size:16px; font-weight:800; letter-spacing:.2px;
                            color:#7defd9;
                            background:rgba(47,224,192,.07);
                            border:1.5px solid rgba(47,224,192,.55);
                            transition:background .18s ease, box-shadow .2s ease, transform .15s ease;
                          }
                          #tempTimelineEmptyState .tlsug-cta:hover{
                            background:rgba(47,224,192,.16);
                            box-shadow:0 0 22px rgba(47,224,192,.32);
                          }
                          #tempTimelineEmptyState .tlsug-cta:active{transform:scale(.985);}
                          #tempTimelineEmptyState .tlsug-cta i{font-size:15.5px;}
                          @media (prefers-reduced-motion:reduce){
                            #tempTimelineEmptyState .tlsug-spark{animation:none; opacity:.9;}
                          }
                          /* "Back to Timeline" (stage overlay footer) — same footprint as .export
                             but deliberately NOT that class: .export clicks stream a PDF. */
                          #tempTimelineEmptyState .tempDBackBottom{
                            margin-top:14px;width:100%;padding:15px;border-radius:13px;cursor:pointer;
                            display:inline-flex;align-items:center;justify-content:center;gap:9px;
                            background:rgba(229,193,88,0.08);
                            border:1.5px solid rgba(229,193,88,.55);
                            color:#eec85e;font-size:16px;font-weight:800;letter-spacing:.3px;
                            transition:box-shadow .2s, transform .15s;
                          }
                          #tempTimelineEmptyState .tempDBackBottom:hover{box-shadow:0 0 24px rgba(229,193,88,.28);}
                          #tempTimelineEmptyState .tempDBackBottom:active{transform:scale(.985);}
                          /* ===== Premium Saturn hero ===== */
                          #tempTimelineEmptyState .hero{position:relative;height:320px;margin:2px -6px 8px;display:grid;place-items:center;overflow:hidden;border-radius:16px;}
                          #tempTimelineEmptyState .hero canvas.heroDust{position:absolute;inset:0;z-index:7;pointer-events:none;}
                          /* deep-space base + warm nebula clouds */
                          #tempTimelineEmptyState .hero .space{position:absolute;inset:0;z-index:0;
                            background:
                              radial-gradient(60% 42% at 16% 10%, rgba(214,150,70,.20) 0%, rgba(120,70,30,.10) 40%, transparent 72%),
                              radial-gradient(52% 38% at 88% 8%, rgba(230,180,110,.18) 0%, rgba(120,80,40,.08) 44%, transparent 72%),
                              radial-gradient(120% 90% at 50% 44%, #070912 0%, #04050b 72%, #030409 100%);}
                          #tempTimelineEmptyState .hero .neb{position:absolute;z-index:0;border-radius:50%;filter:blur(34px);pointer-events:none;}
                          #tempTimelineEmptyState .hero .neb.n1{width:220px;height:150px;left:-46px;top:-30px;background:radial-gradient(circle,rgba(226,158,74,.38),transparent 66%);}
                          #tempTimelineEmptyState .hero .neb.n2{width:210px;height:150px;right:-40px;top:-40px;background:radial-gradient(circle,rgba(236,192,120,.30),transparent 66%);}
                          /* starfield — dense, full-width, warm-white, gently twinkling */
                          @keyframes heroTwk{0%,100%{opacity:.55;}50%{opacity:1;}}
                          #tempTimelineEmptyState .hero .stars,#tempTimelineEmptyState .hero .stars2,#tempTimelineEmptyState .hero .starsBig{position:absolute;left:0;top:0;width:2px;height:2px;border-radius:50%;z-index:1;}
                          #tempTimelineEmptyState .hero .stars{background:#fff;animation:heroTwk 3.8s ease-in-out infinite;box-shadow:
                            18px 12px 0 0 rgba(255,255,255,.5),44px 60px 0 0 rgba(255,255,255,.35),80px 24px 0 0 rgba(255,255,255,.45),
                            120px 90px 0 0 rgba(255,255,255,.3),160px 40px 0 0 rgba(255,255,255,.5),210px 100px 0 0 rgba(255,255,255,.35),
                            260px 30px 0 0 rgba(255,255,255,.4),300px 120px 0 0 rgba(255,255,255,.3),340px 60px 0 0 rgba(255,255,255,.45),
                            60px 150px 0 0 rgba(255,255,255,.3),140px 200px 0 0 rgba(255,255,255,.4),230px 180px 0 0 rgba(255,255,255,.3),
                            310px 220px 0 0 rgba(255,255,255,.35),30px 250px 0 0 rgba(255,255,255,.3),190px 270px 0 0 rgba(255,255,255,.4),
                            350px 280px 0 0 rgba(255,255,255,.3),100px 300px 0 0 rgba(255,255,255,.35),250px 300px 0 0 rgba(255,255,255,.3),
                            380px 40px 0 0 rgba(255,255,255,.45),410px 140px 0 0 rgba(255,255,255,.3),430px 250px 0 0 rgba(255,255,255,.35),
                            460px 80px 0 0 rgba(255,255,255,.5),490px 180px 0 0 rgba(255,255,255,.3),510px 30px 0 0 rgba(255,255,255,.4),
                            540px 120px 0 0 rgba(255,255,255,.35),560px 260px 0 0 rgba(255,255,255,.3),590px 60px 0 0 rgba(255,255,255,.45),
                            610px 200px 0 0 rgba(255,255,255,.3),640px 100px 0 0 rgba(255,255,255,.4),660px 20px 0 0 rgba(255,255,255,.35),
                            680px 160px 0 0 rgba(255,255,255,.45),695px 280px 0 0 rgba(255,255,255,.3),400px 300px 0 0 rgba(255,255,255,.3),
                            470px 220px 0 0 rgba(255,255,255,.35),530px 290px 0 0 rgba(255,255,255,.3),600px 140px 0 0 rgba(255,255,255,.35),
                            650px 240px 0 0 rgba(255,255,255,.4),690px 60px 0 0 rgba(255,255,255,.3),370px 180px 0 0 rgba(255,255,255,.35),
                            445px 10px 0 0 rgba(255,255,255,.4),575px 10px 0 0 rgba(255,255,255,.35),625px 300px 0 0 rgba(255,255,255,.3),
                            20px 190px 0 0 rgba(255,255,255,.35),90px 120px 0 0 rgba(255,255,255,.3);}
                          #tempTimelineEmptyState .hero .stars2{background:#ffe;animation:heroTwk 5.2s ease-in-out 1.2s infinite;filter:drop-shadow(0 0 2px rgba(255,240,200,.7));box-shadow:
                            70px 40px 0 0 rgba(255,246,220,.9),200px 70px 0 0 rgba(255,246,220,.8),330px 150px 0 0 rgba(255,246,220,.85),
                            40px 180px 0 0 rgba(255,246,220,.75),150px 250px 0 0 rgba(255,246,220,.8),280px 210px 0 0 rgba(255,246,220,.8),
                            120px 20px 0 0 rgba(255,238,205,.85),300px 40px 0 0 rgba(255,238,205,.8),
                            390px 90px 0 0 rgba(255,246,220,.85),450px 200px 0 0 rgba(255,246,220,.8),520px 60px 0 0 rgba(255,246,220,.85),
                            580px 160px 0 0 rgba(255,246,220,.75),640px 40px 0 0 rgba(255,246,220,.8),670px 220px 0 0 rgba(255,246,220,.85),
                            500px 290px 0 0 rgba(255,246,220,.8),430px 20px 0 0 rgba(255,246,220,.75);}
                          #tempTimelineEmptyState .hero .starsBig{width:3px;height:3px;background:#fff;animation:heroTwk 2.9s ease-in-out .6s infinite;box-shadow:
                            55px 55px 0 0 rgba(255,255,255,.95),245px 95px 0 0 rgba(255,236,200,.9),315px 250px 0 0 rgba(255,244,215,.9),
                            95px 235px 0 0 rgba(255,255,255,.9),
                            420px 70px 0 0 rgba(255,244,215,.95),560px 230px 0 0 rgba(255,255,255,.9),610px 90px 0 0 rgba(255,236,200,.95),
                            660px 180px 0 0 rgba(255,255,255,.9),480px 150px 0 0 rgba(255,244,215,.85);filter:drop-shadow(0 0 4px rgba(255,240,190,.9));}
                          #tempTimelineEmptyState .hero .planetGlow{
                            position:absolute;z-index:2;width:300px;height:300px;border-radius:50%;pointer-events:none;
                            background:radial-gradient(circle, rgba(255,214,120,.5) 0%, rgba(246,184,63,.18) 44%, transparent 70%);
                            filter:blur(24px);animation:glowPulse 4.6s ease-in-out infinite;
                          }
                          /* Declared HERE, next to its only caller. It used to live in the stage
                             hero's block further down — and this glow sat perfectly static for as
                             long as that block did not exist, because nothing on the page had
                             declared the keyframes at all. */
                          @keyframes glowPulse{
                            0%,100%{ opacity:.78; transform:scale(1); }
                            50%    { opacity:1;   transform:scale(1.04); }
                          }
                          /* ring system — fine particle rings, bright band + Cassini gap */
                          #tempTimelineEmptyState .hero .ring{position:absolute;left:50%;top:50%;width:470px;height:470px;border-radius:50%;pointer-events:none;
                            transform:translate(-50%,-50%) rotate(-24deg) scaleY(.345);}
                          #tempTimelineEmptyState .hero .ring .disc,#tempTimelineEmptyState .hero .ring .main,#tempTimelineEmptyState .hero .ring .lite{
                            -webkit-mask:radial-gradient(circle at 50% 50%, transparent 0 30%, #000 31% 49.4%, transparent 50%);
                                    mask:radial-gradient(circle at 50% 50%, transparent 0 30%, #000 31% 49.4%, transparent 50%);}
                          #tempTimelineEmptyState .hero .ring .disc{position:absolute;inset:0;border-radius:50%;
                            filter:drop-shadow(0 0 6px rgba(246,184,63,.5));
                            background:repeating-radial-gradient(circle at 50% 50%,
                              rgba(255,236,190,0) 0px, rgba(255,236,190,0) 1px,
                              rgba(252,216,140,.92) 1px, rgba(252,216,140,.92) 2.6px);}
                          #tempTimelineEmptyState .hero .ring .main{position:absolute;inset:0;border-radius:50%;
                            background:radial-gradient(circle at 50% 50%,
                              transparent 0 31%,
                              rgba(255,228,168,.85) 33%, rgba(255,240,198,1) 39%, rgba(248,210,138,.95) 43%,
                              rgba(10,7,3,.9) 44.6%, rgba(10,7,3,.9) 45.4%,
                              rgba(255,236,184,.95) 46.5%, rgba(255,246,210,1) 48%, rgba(234,190,118,.85) 49.4%,
                              transparent 50%);
                            filter:drop-shadow(0 0 10px rgba(246,184,63,.65));}
                          #tempTimelineEmptyState .hero .ring .lite{position:absolute;inset:0;border-radius:50%;mix-blend-mode:screen;
                            background:conic-gradient(from -34deg,
                              rgba(255,244,208,0) 0deg, rgba(255,244,208,.75) 46deg, rgba(255,228,168,.2) 120deg,
                              rgba(255,244,208,0) 182deg, rgba(255,244,208,.7) 246deg, rgba(255,244,208,0) 330deg);}
                          /* .ring.back also matches the generic ".back" header-button rule above,
                             which painted the whole ring ellipse dark blue — neutralize it */
                          #tempTimelineEmptyState .hero .ring.back{z-index:2;clip-path:inset(0 0 49% 0);background:none;border:none;}
                          #tempTimelineEmptyState .hero .ring.front{z-index:6;clip-path:inset(51% 0 0 0);}
                          #tempTimelineEmptyState .hero .ringShadow{position:absolute;left:50%;top:50%;width:470px;height:470px;border-radius:50%;z-index:3;pointer-events:none;
                            transform:translate(-50%,-50%) rotate(-24deg) scaleY(.345);clip-path:inset(0 0 49% 0);
                            background:radial-gradient(circle at 50% 50%, rgba(4,3,1,.5) 0 42%, transparent 51%);
                            -webkit-mask:linear-gradient(96deg, #000 40%, transparent 60%);mask:linear-gradient(96deg,#000 40%,transparent 60%);}
                          /* planet — smooth warm banding, bright limb */
                          #tempTimelineEmptyState .hero .planet{
                            position:relative;width:186px;height:186px;border-radius:50%;z-index:4;overflow:hidden;
                            display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;text-align:center;
                            background:
                              radial-gradient(circle at 30% 22%, rgba(255,251,236,.95) 0%, rgba(255,236,184,.42) 17%, transparent 45%),
                              linear-gradient(177deg,
                                #f2d59c 0%, #e6ba76 9%, #eecb8c 18%, #dcae64 27%, #ecc281 36%,
                                #d3a057 45%, #eec888 55%, #d8a75f 65%, #e9c07d 76%, #cd9750 88%, #ddb26c 100%);
                            box-shadow:
                              inset -30px -36px 66px rgba(36,17,0,.88),
                              inset 16px 16px 34px rgba(255,246,214,.34),
                              0 0 62px rgba(246,184,63,.45);
                            border:1px solid rgba(255,226,150,.5);
                            animation:breathe 5.5s ease-in-out infinite;
                          }
                          #tempTimelineEmptyState .hero .planet::after{content:"";position:absolute;inset:0;border-radius:50%;
                            box-shadow:inset 0 0 22px 6px rgba(255,230,160,.25);pointer-events:none;}
                          /* the label overlay sits ABOVE the front ring (z8 > ring z6) so the
                             bright band can never cover or clip the title */
                          #tempTimelineEmptyState .hero .planetLabel{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:8;
                            width:186px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;text-align:center;pointer-events:none;}
                          #tempTimelineEmptyState .hero .planetLabel .folder{position:relative;display:inline-flex;width:44px;height:44px;color:#fff2cf;
                            filter:drop-shadow(0 0 12px rgba(255,220,140,.85));}
                          #tempTimelineEmptyState .hero .planetLabel .folder svg{fill:rgba(80,44,8,.5);}
                          #tempTimelineEmptyState .hero .planetLabel h1{position:relative;font-size:16px;font-weight:800;letter-spacing:1.6px;color:#fff;
                            max-width:88%;overflow-wrap:break-word;
                            text-shadow:0 2px 8px rgba(40,20,0,.95), 0 0 16px rgba(255,222,150,.7);line-height:1.25;}
                          #tempTimelineEmptyState .hero .alertDot{
                            position:absolute;z-index:8;right:36px;top:70px;
                            width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
                            background:var(--red);color:#fff;font-size:14px;font-weight:800;
                            box-shadow:0 0 14px rgba(255,82,82,.9);animation:blink 1.6s ease-in-out infinite;
                          }
                          /* moons along the ring plane */
                          #tempTimelineEmptyState .hero .moon{position:absolute;border-radius:50%;z-index:5;}
                          #tempTimelineEmptyState .hero .m1{width:16px;height:16px;left:52px;bottom:70px;
                            background:radial-gradient(circle at 34% 30%,#ffe6b0,#c98a3a 62%,#6b4310 100%);box-shadow:0 0 10px rgba(246,184,63,.7);}
                          #tempTimelineEmptyState .hero .m2{width:11px;height:11px;left:96px;bottom:44px;
                            background:radial-gradient(circle at 34% 30%,#fff0cf,#caa25a 60%,#5c3d12 100%);box-shadow:0 0 8px rgba(246,184,63,.6);}
                          #tempTimelineEmptyState .hero .m3{width:8px;height:8px;left:150px;bottom:30px;
                            background:radial-gradient(circle at 34% 30%,#fff6dd,#d9b16a 60%,#6e4a15 100%);box-shadow:0 0 7px rgba(246,184,63,.6);}
                          #tempTimelineEmptyState .hero .m4{width:22px;height:22px;right:44px;top:40px;
                            background:radial-gradient(circle at 34% 30%,#f4d79a,#a97c33 62%,#4a3010 100%);box-shadow:0 0 10px rgba(246,184,63,.5);}
                          #tempTimelineEmptyState .hero .m5{width:6px;height:6px;right:120px;bottom:56px;
                            background:radial-gradient(circle at 34% 30%,#fff,#d8b878 60%,#7a5620 100%);box-shadow:0 0 6px rgba(246,184,63,.6);}
                          #tempTimelineEmptyState .healthLine{text-align:center;font-size:14px;color:#c9d5ea;margin:-4px 0 10px;position:relative;z-index:5;}
                          #tempTimelineEmptyState .healthLine b{color:var(--green);font-size:16px;font-weight:800;text-shadow:0 0 12px rgba(62,233,140,.6);}
                          #tempTimelineEmptyState .sec{
                            background:linear-gradient(180deg,rgba(13,20,36,.92),rgba(9,15,28,.92));
                            border:1px solid #1d2b48;border-radius:15px;padding:11px 12px;margin-bottom:11px;
                            backdrop-filter:blur(2px);
                          }
                          #tempTimelineEmptyState .sec .shead{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
                          #tempTimelineEmptyState .sec .shead b{font-size:14px;font-weight:800;letter-spacing:1px;color:#8fd4ff;}
                          #tempTimelineEmptyState .sec .shead b.gold{color:#ffe08a;}
                          #tempTimelineEmptyState .sec .shead .view{font-size:12.5px;color:var(--dim);cursor:pointer;}
                          #tempTimelineEmptyState .sec .shead .view:hover{color:#fff;}
                          #tempTimelineEmptyState .upl{display:flex;align-items:center;gap:8px;font-size:13px;color:#cfe0d6;margin-bottom:8px;}
                          #tempTimelineEmptyState .bar{flex:1;height:6px;border-radius:4px;background:#16213a;overflow:hidden;}
                          #tempTimelineEmptyState .bar i{display:block;height:100%;width:0;border-radius:4px;
                            background:linear-gradient(90deg,#2fd46e,#7bf0a8);
                            box-shadow:0 0 8px rgba(62,233,140,.6);transition:width 1.4s cubic-bezier(.3,.8,.3,1);}
                          #tempTimelineEmptyState .feed{display:flex;gap:9px;padding:7px 0;align-items:flex-start;}
                          #tempTimelineEmptyState .feed + .feed{border-top:1px solid #16213a;}
                          #tempTimelineEmptyState .feed .st{width:8px;height:8px;border-radius:50%;margin-top:9px;flex:0 0 auto;}
                          #tempTimelineEmptyState .st.g{background:var(--green);box-shadow:0 0 7px var(--green);}
                          #tempTimelineEmptyState .st.y{background:var(--gold);box-shadow:0 0 7px var(--gold);}
                          #tempTimelineEmptyState .st.r{background:var(--red);box-shadow:0 0 7px var(--red);}
                          #tempTimelineEmptyState .feed .pav{width:28px;height:28px;margin:0;border-color:#131d33;}
                          #tempTimelineEmptyState .feed .tx{flex:1;min-width:0;}
                          #tempTimelineEmptyState .feed .tx b{font-size:13.5px;color:#eef3ff;display:block;}
                          #tempTimelineEmptyState .feed .tx span{font-size:11.5px;color:var(--dim);display:block;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
                          #tempTimelineEmptyState .feed .tm{font-size:11.5px;color:#6c7894;white-space:nowrap;padding-top:3px;}
                          #tempTimelineEmptyState .role{display:flex;align-items:center;gap:9px;padding:7px 0;font-size:13.5px;color:#d5dff0;}
                          #tempTimelineEmptyState .role + .role{border-top:1px solid #16213a;}
                          #tempTimelineEmptyState .role .pav{width:26px;height:26px;margin:0;border-color:#131d33;}
                          #tempTimelineEmptyState .role .t{flex:1;}
                          #tempTimelineEmptyState .role .sq{width:12px;height:12px;border-radius:3px;flex:0 0 auto;}
                          #tempTimelineEmptyState .sq.g{background:var(--green);box-shadow:0 0 7px var(--green);}
                          #tempTimelineEmptyState .sq.y{background:var(--gold);box-shadow:0 0 7px var(--gold);}
                          #tempTimelineEmptyState .sq.r{background:var(--red);box-shadow:0 0 7px var(--red);}
                          #tempTimelineEmptyState .dsGrid{display:flex;gap:10px;}
                          #tempTimelineEmptyState .dsTable{flex:1.15;font-size:12px;}
                          #tempTimelineEmptyState .dsr{display:flex;align-items:center;gap:6px;padding:4px 0;color:#c9d5ea;}
                          #tempTimelineEmptyState .dsr + .dsr{border-top:1px solid #141f38;}
                          #tempTimelineEmptyState .dsr .n{flex:1;}
                          #tempTimelineEmptyState .dsr .s{font-weight:700;font-size:11.5px;}
                          #tempTimelineEmptyState .dsr .s.g{color:#7bf0a8;} #tempTimelineEmptyState .dsr .s.y{color:#ffd97a;} #tempTimelineEmptyState .dsr .s.r{color:#ff8a8a;}
                          #tempTimelineEmptyState .dsr .c{width:18px;text-align:right;color:#8b96ac;font-weight:700;}
                          #tempTimelineEmptyState .donutWrap{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;}
                          #tempTimelineEmptyState .donutBox{position:relative;width:118px;height:118px;display:grid;place-items:center;}
                          #tempTimelineEmptyState .donutBox svg{transform:rotate(-90deg);}
                          #tempTimelineEmptyState .donutBox .mid{position:absolute;text-align:center;}
                          #tempTimelineEmptyState .donutBox .mid b{font-size:22px;font-weight:800;display:block;line-height:1;}
                          #tempTimelineEmptyState .donutBox .mid span{font-size:11px;color:var(--dim);letter-spacing:.5px;}
                          #tempTimelineEmptyState .legend{display:flex;gap:10px;font-size:11px;color:#aab6cc;}
                          #tempTimelineEmptyState .legend b{display:block;text-align:center;font-size:14px;}
                          #tempTimelineEmptyState .legend .lg b{color:#7bf0a8;} #tempTimelineEmptyState .legend .ly b{color:#ffd97a;} #tempTimelineEmptyState .legend .lr b{color:#ff8a8a;}
                          #tempTimelineEmptyState .ai{
                            display:flex;gap:11px;align-items:flex-start;border-radius:15px;padding:12px;
                            background:linear-gradient(135deg, rgba(80,60,180,.16), rgba(30,40,90,.12));
                            border:1.5px solid rgba(120,110,255,.5);
                            box-shadow:0 0 20px rgba(120,110,255,.15);margin-bottom:11px;
                          }
                          #tempTimelineEmptyState .ai .orbIc{
                            width:42px;height:42px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;
                            font-size:14.5px;font-weight:800;color:#fff;
                            background:radial-gradient(circle at 32% 28%, #7d8cff 0%, #3a2d8f 55%, #150f3a 100%);
                            border:1px solid rgba(140,150,255,.6);
                            box-shadow:0 0 16px rgba(120,110,255,.55), inset 0 0 12px rgba(160,170,255,.35);
                            animation:aiPulse 3s ease-in-out infinite;
                          }
                          @keyframes aiPulse{50%{box-shadow:0 0 26px rgba(120,110,255,.85), inset 0 0 12px rgba(160,170,255,.35);}}
                          #tempTimelineEmptyState .ai .tx{flex:1;font-size:13px;line-height:1.55;color:#d5dcf2;}
                          #tempTimelineEmptyState .ai .tx b.hd{color:#cfd6ff;font-size:13.5px;letter-spacing:.3px;}
                          #tempTimelineEmptyState .ai .btns{display:flex;gap:8px;flex-wrap:wrap;}
                          #tempTimelineEmptyState .nav{
                            position:relative;display:flex;justify-content:space-between;align-items:flex-end;
                            margin-top:4px;padding:9px 12px 7px;border-radius:16px;
                            background:#0a111f;border:1px solid #182540;
                          }
                          #tempTimelineEmptyState .nav .it{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;color:var(--dim);cursor:pointer;min-width:48px;position:relative;transition:color .15s;}
                          #tempTimelineEmptyState .nav .it .i{font-size:16px;line-height:1;}
                          #tempTimelineEmptyState .nav .it.on{color:var(--gold-hi);}
                          #tempTimelineEmptyState .nav .it.on .i{filter:drop-shadow(0 0 7px rgba(246,184,63,.8));}
                          #tempTimelineEmptyState .nav .it:hover{color:#e6edf8;}
                          #tempTimelineEmptyState .nav .it .bdg{
                            position:absolute;top:-5px;right:4px;min-width:14px;height:14px;border-radius:7px;
                            background:var(--red);color:#fff;font-size:10.5px;font-weight:800;
                            display:grid;place-items:center;box-shadow:0 0 8px rgba(255,82,82,.8);
                          }
                          #tempTimelineEmptyState .nav .fab{
                            width:52px;height:52px;border-radius:50%;margin:0 2px -14px;cursor:pointer;flex:0 0 auto;
                            background:
                              radial-gradient(circle at 32% 26%, #9fd0ff 0%, rgba(80,150,255,.5) 22%, transparent 40%),
                              radial-gradient(circle at 62% 74%, #123a6b 0%, #060c18 78%);
                            border:1.5px solid rgba(110,180,255,.6);
                            box-shadow:0 0 22px rgba(90,160,255,.55), inset 0 0 16px rgba(110,180,255,.35);
                            display:grid;place-items:center;font-size:20px;
                            animation:aiPulse 3.4s ease-in-out infinite;
                          }
                          #tempTimelineEmptyState .li{display:inline-flex;width:1em;height:1em;vertical-align:-0.12em;flex:0 0 auto;}
                          #tempTimelineEmptyState .li svg,#tempTimelineEmptyState .ic svg,#tempTimelineEmptyState .i svg{width:100%;height:100%;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:block;}
                          #tempTimelineEmptyState .ic{display:inline-flex;width:1em;height:1em;}
                          #tempTimelineEmptyState .nav .i{display:inline-flex;width:17px;height:17px;}
                          #tempTimelineEmptyState .li.ok{color:var(--green);} #tempTimelineEmptyState .li.warn{color:var(--gold);}
                          #tempTimelineEmptyState .dsr .s .li{width:.95em;height:.95em;margin-right:2px;}
                          #tempTimelineEmptyState .dsr .s.g .li{color:#7bf0a8;} #tempTimelineEmptyState .dsr .s.y .li{color:#ffd97a;} #tempTimelineEmptyState .dsr .s.r .li{color:#ff8a8a;}
                          #tempTimelineEmptyState .planet .folder,
                          #tempTimelineEmptyState .planetLabel .folder{display:inline-flex;width:46px;height:46px;color:var(--gold-hi);filter:drop-shadow(0 0 16px rgba(246,184,63,.8));}
                          #tempTimelineEmptyState .planet .folder svg,
                          #tempTimelineEmptyState .planetLabel .folder svg{fill:rgba(246,184,63,.28);}
                          #tempTimelineEmptyState .export .li{width:15px;height:15px;margin-right:2px;}
                          #tempTimelineEmptyState .shoot{
                            position:absolute;width:110px;height:2px;z-index:1;pointer-events:none;opacity:0;
                            background:linear-gradient(90deg, rgba(255,255,255,0), #dfeaff 70%, #fff);
                            border-radius:2px;filter:drop-shadow(0 0 4px #cfe2ff);
                            animation:shoot var(--sd,9s) linear infinite;animation-delay:var(--dl,0s);
                          }
                          #tempTimelineEmptyState .comet{
                            position:absolute;z-index:1;pointer-events:none;width:8px;height:8px;border-radius:50%;
                            background:radial-gradient(circle at 35% 35%, #fff, #9fd0ff 55%, transparent 75%);
                            box-shadow:0 0 12px #9fd0ff;
                            animation:cometDrift var(--cd,38s) linear infinite;
                          }
                          #tempTimelineEmptyState .comet::before{
                            content:"";position:absolute;right:5px;top:50%;height:2px;width:70px;
                            transform:translateY(-50%);border-radius:2px;
                            background:linear-gradient(270deg, rgba(159,208,255,.9), transparent);
                            filter:blur(1px);
                          }
                          #tempTimelineEmptyState .dplanet{position:absolute;z-index:1;pointer-events:none;opacity:.9;}
                          #tempTimelineEmptyState .dplanet svg{display:block;overflow:visible;}
                          #tempTimelineEmptyState .spiral{
                            position:absolute;z-index:0;pointer-events:none;border-radius:50%;
                            background:conic-gradient(from 0deg, transparent 0%, rgba(150,170,255,.20) 12%, transparent 26%,
                              transparent 50%, rgba(200,160,255,.16) 62%, transparent 78%);
                            filter:blur(10px);
                            animation:spin 90s linear infinite;
                            -webkit-mask:radial-gradient(circle, #000 0%, rgba(0,0,0,.5) 40%, transparent 72%);
                                    mask:radial-gradient(circle, #000 0%, rgba(0,0,0,.5) 40%, transparent 72%);
                          }
                          #tempTimelineEmptyState .asteroids{position:absolute;inset:0;z-index:1;pointer-events:none;}
                          #tempTimelineEmptyState #p1 .screen{transition:transform .6s cubic-bezier(.45,.7,.25,1), opacity .5s ease, filter .5s ease;}
                          #tempTimelineEmptyState #p1.detailOpen .screen{transform:scale(2.7);opacity:0;filter:blur(5px);pointer-events:none;}
                          #tempTimelineEmptyState #p1 .tl .orb{cursor:pointer;transition:transform .25s ease;}
                          #tempTimelineEmptyState #p1 .tl .orb:hover{transform:scale(1.045);}
                          #tempTimelineEmptyState #p1 .tl .orb:hover .halo{opacity:.85;}
                          #tempTimelineEmptyState .detailOv{
                            position:absolute;inset:0;z-index:10;display:flex;flex-direction:column;
                            padding:16px 14px 14px;
                            background:rgba(3,6,13,.9);backdrop-filter:blur(7px);
                            opacity:0;pointer-events:none;transform:scale(.5);
                            transition:opacity .45s ease .1s, transform .6s cubic-bezier(.3,.85,.3,1) .08s;
                          }
                          #tempTimelineEmptyState #p1.detailOpen .detailOv{opacity:1;transform:scale(1);pointer-events:auto;}
                          /* Once the zoom-in settles the overlay becomes normal flow content and
                             the timeline screen collapses — without this the overlay stays pinned
                             over the FULL (very tall) timeline, so the stage view ends in a huge
                             empty void below its content that reads as "cannot scroll". */
                          #tempTimelineEmptyState #p1.detailOpen.dvSettled .screen{display:none;}
                          #tempTimelineEmptyState #p1.detailOpen.dvSettled .detailOv{position:relative;inset:auto;min-height:70vh;}
                          #tempTimelineEmptyState .detailOv .dscroll{flex:1;overflow-y:auto;scrollbar-width:none;padding-bottom:8px;}
                          #tempTimelineEmptyState .detailOv .dscroll::-webkit-scrollbar{display:none;}
                          /* ── A STAGE OPENS AS ITS OWN VIEW ────────────────────────────────
                             The board is two columns: the timeline, and the Deal Details panel
                             (deal globe, health, AI summary, tasks, document checklist) beside it.
                             That split is right while you are scanning the rail — two views of the
                             same deal, side by side.
                             It is wrong once you open ONE stage. Reading a stage is a
                             single-subject task, and half a board is not enough width for it: the
                             Documents panel had to stack its two counters under its own heading and
                             the planet sat in a column of dead space.
                             Moving that panel above the stage instead was worse than leaving it
                             beside — opening a stage landed you at the TAIL of it, on somebody
                             else's document checklist and Export button, with the stage you had
                             asked for pushed off the fold. So it is not moved: while a stage is
                             open it is out, along with the two cards that trail the timeline
                             column, and the stage view has the board to itself.
                             display:none only — nothing is unbound or emptied, so every poll,
                             button and observer in those panels is untouched and they come straight
                             back when the stage closes. The class is kept in step with #p1's own
                             detailOpen by an observer; see dvWide in the script.
                             !important throughout: the base rule pins the row layout the same way. */
                          #tempTimelineEmptyState.dvWide{ flex-direction:column !important; }
                          #tempTimelineEmptyState.dvWide > #p2,
                          #tempTimelineEmptyState.dvWide > .temp-left-col > :not(#p1){
                            display:none !important;
                          }
                          #tempTimelineEmptyState.dvWide > .temp-left-col{
                            flex:0 0 auto !important; width:100% !important; max-width:100% !important;
                            min-width:0 !important;
                          }
                          /* ── STAGE GLANCE: the timeline row, reopened ────────────────────
                             A stage used to open onto a 272px hero — a second, much bigger drawing of
                             the planet the user had just tapped, with its own ring geometry, its own
                             dust field and its own label. Two renderings of one object, and the large
                             one carried no information: the numbers that answer "what state is this
                             stage in" — files on file, tasks still open, when it last moved — all
                             live on the small card BESIDE the orb, back on the timeline.

                             So the stage view opens on that pair instead. The planet IS the timeline's
                             orb (same .orb markup, same .sm / .docs-xl size class, .core copied
                             straight off the row) and the card beside it is a live mirror of that
                             row's .side. Neither is re-implemented here, which is the point: what you
                             tapped and what you land on cannot drift apart.

                             .row / .orbcol / .side are reused deliberately rather than restyled —
                             every breakpoint rule the timeline already has for that geometry (the
                             220px orb column on desktop, the type ladder on the orb) then applies
                             here for free. See dgPaintOrb / dgSyncSide for the painting side. */
                          #tempTimelineEmptyState .dglance{ padding-top:0; align-items:center; }
                          /* THE PLANET NEEDS ROOM THE TIMELINE NEVER HAD TO GIVE IT.
                             An orb draws well outside its own box — the Documents aurora reaches
                             inset:-38px past a 160px body, the dust canvas -32px, the number
                             badge -21px. On the rail all of that spills into the phone's own
                             padding and is only ever met by .phone's rounded edge. Here the
                             container is .dscroll, which scrolls vertically — and CSS forces
                             overflow-x to auto the moment overflow-y is not visible, so this one
                             CLIPS: a hard horizontal cut through the top of the glow, with the
                             "5" badge gone entirely.
                             Clearance therefore lives on the ORB COLUMN, where it also survives
                             align-items:center — the column's own padding is centred with it, so
                             the orb keeps its distance from the top edge whether the card beside
                             it is taller than the planet or shorter. Past this only the aurora's
                             19px blur tail feathers off, which does not read as a cut. */
                          #tempTimelineEmptyState .dglance .orbcol{ padding:24px 0; }
                          #tempTimelineEmptyState .dglance:not(.dg-onecard) .orbcol{ padding-top:42px; }
                          /* ── SIZE: THE PLANET IS THE SUBJECT HERE, NOT A THUMBNAIL ───────────
                             On the rail an orb is 112px because it is one of ten in a list. At that
                             size in here two things go wrong and both read as "overlapping":

                               · the LABEL overruns the planet. A .core's night-side gradient is
                                 black by 80% of its box, so the sphere the eye sees is smaller than
                                 the box — and a name at 94% of the box (".nm" max-width) therefore
                                 sits outside the visible disc. "Offer & Negotiation" was hanging
                                 off both sides of its own planet;
                               · the RING has nowhere to go. Its arcs are inset:-22px, i.e. 44px
                                 wider than the body, against a 128px column — so they ran straight
                                 into the card's frame.

                             Both are size problems, so the fix is size: every glance planet is the
                             Documents planet's size (132 / 160 at >=1025px, which was the one
                             already signed off) in a column wide enough for its rings to clear the
                             frame, and the label is scaled to sit inside the visible disc rather
                             than inside the box. */
                          #tempTimelineEmptyState .dglance .orbcol{ flex:0 0 214px !important; }
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl){
                            width:132px !important; height:132px !important;
                          }
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core{ inset:12px; gap:3px; }
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core .ic{ font-size:30px !important; }
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core .nm{
                            font-size:15px !important; max-width:86%; line-height:1.2;
                          }
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core .sb{ font-size:13px !important; }
                          /* the rail's 17px badge is a marker on a thumbnail; on a planet this size
                             it reads as a speck. Same 24px disc the Documents orb carries. */
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .num{
                            top:-11px; width:24px; height:24px; font-size:14px; border-width:2px;
                          }
                          @media (min-width:1025px){
                            #tempTimelineEmptyState .dglance .orbcol{ flex:0 0 232px !important; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl){
                              width:160px !important; height:160px !important;
                            }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core{ inset:14px; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core .ic{ font-size:34px !important; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core .nm{ font-size:16px !important; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .core .sb{ font-size:14px !important; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl) .num{ top:-14px; width:28px; height:28px; font-size:15px; }
                          }
                          /* ── THE PLANET, AT FULL DRESS ───────────────────────────────────────
                             On the rail a planet is a thumbnail in a list of ten and is drawn
                             accordingly. In here it is THE subject of the view, and the treatment
                             the Documents orb already proved — a spinning aurora behind the body
                             and a warm breathing wash against it — is what separates a premium
                             object from a coloured circle. Every stage now gets it, in its own
                             three aurora stops (see the palettes), and only here: one at a time
                             instead of ten animated blurred conics on the rail at once.
                             The pair is ::before / ::after on the ORB, which .docs-xl already
                             claims for exactly this — so that rule is left to win on Documents
                             (it is tuned to a 160px body) and this one covers the rest.

                             And the radii here are TIGHTER, not the same numbers: a 160px body
                             carries a 38px aurora under a 19px blur comfortably, but on a
                             112-136px one those figures put a wide soft haze exactly where the
                             ring arcs already are, and the two blend into a single coloured smear
                             with a planet somewhere inside it. 20px under a 12px blur keeps the
                             aurora reading BEHIND the rings, which is the depth cue doing the
                             work. */
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl)::before{
                            content:''; position:absolute; inset:-20px; border-radius:50%;
                            z-index:0; pointer-events:none;
                            background:conic-gradient(from 0deg,
                              rgba(var(--auA),0) 0deg, rgba(var(--auA),.46) 58deg,
                              rgba(var(--auB),.42) 132deg, rgba(var(--auC),.38) 208deg,
                              rgba(var(--auA),.32) 288deg, rgba(var(--auA),0) 360deg);
                            filter:blur(12px); opacity:.6;
                            animation:dpAuroraSpin 20s linear infinite;
                          }
                          #tempTimelineEmptyState .dglance .orb:not(.docs-xl)::after{
                            content:''; position:absolute; inset:-7px; border-radius:50%;
                            z-index:0; pointer-events:none;
                            background:radial-gradient(circle,
                              rgba(var(--auA),.26) 0%, rgba(var(--auB),.16) 48%, transparent 72%);
                            filter:blur(9px);
                            animation:dpAuroraBreathe 5.2s ease-in-out infinite;
                          }
                          /* A stage that has not started stays unlit — a dormant planet wearing a
                             full aurora would claim progress it does not have. */
                          #tempTimelineEmptyState .dglance .orb[data-c="gray"]::before,
                          #tempTimelineEmptyState .dglance .orb[data-c="gray"]::after{ display:none; }
                          /* Contrast, at this size only: a brighter lit limb and a deeper terminator
                             than a 90px thumbnail can carry — at thumbnail scale the same numbers
                             just crush the face to black. */
                          #tempTimelineEmptyState .dglance .orb .core{
                            border-color:color-mix(in srgb, var(--c) 62%, transparent);
                            box-shadow:
                              inset 0 0 30px color-mix(in srgb, var(--c) 34%, transparent),
                              inset 7px 9px 16px -10px rgba(255,255,255,.72),
                              inset -14px -16px 30px -18px color-mix(in srgb, var(--c2) 92%, #000);
                          }
                          #tempTimelineEmptyState .dglance .orb .halo{ opacity:.66; }
                          #tempTimelineEmptyState .dglance .orb .core .nm{
                            color:#fff; text-shadow:0 1px 8px rgba(0,0,0,.75);
                          }
                          #tempTimelineEmptyState .dglance .orb .core .sb{
                            color:#e8f2ff; text-shadow:0 1px 6px rgba(0,0,0,.7);
                          }
                          /* ── ONE CARD, PLANET INCLUDED ──────────────────────────────────────
                             The reference draws the planet INSIDE the panel: a single frame around
                             the orb, the heading and the two counters. The orb cannot move into
                             the mirrored markup — it is the timeline's own element, not part of
                             that card — so the frame moves OUTWARD instead. .dg-onecard wears the
                             .dpanel chrome and the panel inside it goes frameless, which is also
                             why the "something landed" glow (.is-new) is toggled out here by
                             dpWrite rather than on the panel it belongs to.
                             Every stage gets it, not just Documents: a .stcard and the offer card
                             are flattened the same way, so all ten stages open on one frame with
                             their own planet inside it instead of each stage inventing a layout. */
                          /* the stage accent, inherited by everything in the overlay. dgPaintOrb
                             overwrites it on #tempDOv from the open stage's own planet. */
                          #tempTimelineEmptyState .detailOv{ --dgc:#67e8f9; }
                          #tempTimelineEmptyState .dglance.dg-onecard{
                            padding:18px 20px;
                            background:
                              radial-gradient(78% 120% at 8% 50%,
                                color-mix(in srgb, var(--dgc) 9%, transparent) 0%, transparent 62%),
                              linear-gradient(180deg, rgba(13,21,37,.92), rgba(9,15,28,.94));
                            border:1px solid color-mix(in srgb, var(--dgc) 44%, transparent);
                            border-radius:15px;
                            box-shadow:
                              0 10px 26px rgba(0,0,0,.45),
                              0 0 30px -14px color-mix(in srgb, var(--dgc) 60%, transparent),
                              inset 0 1px 0 rgba(255,255,255,.06);
                            transition:border-color .3s ease, box-shadow .3s ease;
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard.is-new{
                            border-color:color-mix(in srgb, var(--dgc) 72%, transparent);
                            box-shadow:
                              0 10px 26px rgba(0,0,0,.45),
                              0 0 26px color-mix(in srgb, var(--dgc) 22%, transparent),
                              inset 0 1px 0 rgba(255,255,255,.06);
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard .side{ padding-top:0 !important; }
                          /* the three cards a row can hand over, all flattened the same way — the
                             row is the frame now, and two nested frames read as a mistake */
                          #tempTimelineEmptyState .dglance.dg-onecard .dpanel,
                          #tempTimelineEmptyState .dglance.dg-onecard .dpanel.is-new,
                          #tempTimelineEmptyState .dglance.dg-onecard .stcard,
                          #tempTimelineEmptyState .dglance.dg-onecard .offer-card{
                            background:none; border:none; border-radius:0; box-shadow:none; padding:0;
                          }
                          /* ── THE PLAIN STAGE CARD, AT WIDTH ─────────────────────────────────
                             .stcard is built for a ~230px column: name and status stacked over a
                             description and a timestamp. Given the whole board it reads the same
                             way the Documents panel now does — identity on the left, state on the
                             right — so the eye lands in the same place on every stage instead of
                             hunting for where this one put its status. */
                          #tempTimelineEmptyState .dglance.dg-onecard .stcard{
                            display:flex; flex-wrap:wrap; align-items:center; column-gap:20px; row-gap:10px;
                          }
                          /* .sthead takes the whole first line (everything else below is
                             flex-basis:100%), and it is a flex row whose title already carries
                             flex:1 — so the status chip lands hard against the card's right edge,
                             which is where Documents puts its counters. No reordering needed. */
                          #tempTimelineEmptyState .dglance.dg-onecard .sthead{
                            flex:1 1 260px; align-items:center;
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard .sthead b{ font-size:18px; }
                          #tempTimelineEmptyState .dglance.dg-onecard .stchip{
                            font-size:14px; padding:7px 14px; border-radius:10px;
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard .stmeta{
                            flex:1 1 100%; margin-top:0; order:3;
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard .stdesc{ font-size:14.5px; }
                          #tempTimelineEmptyState .dglance.dg-onecard .stts{ font-size:14px; }
                          #tempTimelineEmptyState .dglance.dg-onecard .stdocs,
                          #tempTimelineEmptyState .dglance.dg-onecard .strow-btns,
                          #tempTimelineEmptyState .dglance.dg-onecard .stsub{
                            flex:1 1 100%; order:4; margin-top:0;
                          }
                          /* the offer card lays out the same way: head and figures on line one, the
                             step rail full width beneath */
                          #tempTimelineEmptyState .dglance.dg-onecard .offer-card{
                            display:flex; flex-wrap:wrap; align-items:center; column-gap:20px; row-gap:11px;
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard .offer-head{ flex:1 1 260px; }
                          #tempTimelineEmptyState .dglance.dg-onecard .offer-body{ flex:1 1 100%; order:4; }
                          /* ── KEY FIGURES (dgFillFigures) ─────────────────────────────────────
                             Deliberately the Documents counters' own .dp-card markup, so the two are
                             one instrument and not a lookalike. Only the value type differs: a trace
                             id, a date or a price cannot be set at the counters' 34px, so those
                             carry .dg-figtx and read as a figure rather than a headline number. */
                          #tempTimelineEmptyState .dglance.dg-onecard .dg-figtx .dp-cv b{
                            font-size:17px; letter-spacing:.01em; line-height:1.25;
                            overflow-wrap:anywhere;
                          }
                          /* ── COUNTERS BESIDE THE HEADING, NOT UNDER IT ──────────────────────
                             Beside the rail this panel is ~230px wide and has no choice but to
                             stack its two counters under its own heading. The stage view is the
                             whole board (see .dvWide), so here they sit on the heading's line —
                             the reference layout — and only the note and the recent list run the
                             full width beneath. Flex on the panel rather than a grid: the four
                             blocks are already siblings and each one decides its own basis. */
                          #tempTimelineEmptyState .dglance.dg-onecard .dpanel{
                            display:flex; flex-wrap:wrap; align-items:center;
                            column-gap:20px; row-gap:11px;
                          }
                          /* The heading block becomes a small 2x2 grid so the Updated stamp sits
                             UNDER the sub-line and indented to it, as in the reference, instead of
                             floating off in the corner the way a ~230px card had to put it. */
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-head{
                            flex:1 1 250px;
                            display:grid; grid-template-columns:auto minmax(0,1fr);
                            column-gap:10px; row-gap:10px; align-items:start;
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-hic{ grid-area:1/1; margin-top:5px; }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-ht{ grid-area:1/2; min-width:0; }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-live{ grid-area:2/2; justify-self:start; }
                          /* the card is three times the width it gets on the rail — the heading can
                             be read at heading size again */
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-ht b{ font-size:18px; }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-hsub{ font-size:14.5px; margin-top:4px; }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-live{ font-size:13.5px; padding:5px 11px; }
                          /* THIS IS THE RULE THAT PUSHED CARDS OFF THE SCREEN. `repeat(2, minmax(146px,
                             …))` gives the grid a min-content width of 2x146 plus the gap — a hard
                             floor a flex item cannot shrink past — so on a phone, where the panel
                             beside the planet has ~175px to work with, the counters simply hung 130px
                             out of the view and took the whole card with them.
                             auto-fit drops to ONE column instead of overflowing, min-width:0 lets the
                             flex item shrink far enough for that to happen, and max-width keeps the
                             pair from sprawling to half a desktop card once it does fit. */
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-grid{
                            flex:1 1 292px; min-width:0; max-width:396px; margin-top:0;
                            grid-template-columns:repeat(auto-fit, minmax(132px, 1fr));
                          }
                          /* The note explains the counters, so it stays with them: second line,
                             right-hand side, the counters' own width (2 x 188 + the 20px gap).
                             Full width would drag the eye back across the heading it has nothing
                             to do with. */
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-note{
                            flex:0 1 396px; margin:0 0 0 auto;
                          }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-new,
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-recent,
                          #tempTimelineEmptyState .dglance.dg-onecard .stdocs{
                            flex:1 1 100%; margin-top:0;
                          }
                          /* ORDER MATTERS MORE THAN DOM ORDER HERE. .dp-new sits between the
                             heading and the counters in the markup, and it is full-width — so the
                             moment a document landed and the banner unhid itself, it split the two
                             apart and the counters dropped to a third line. Explicit orders keep
                             heading+counters on line one whatever else is visible. */
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-head,
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-grid{ order:0; }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-new{ order:1; }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-note{ order:2; }
                          #tempTimelineEmptyState .dglance.dg-onecard .dp-recent{ order:3; }
                          #tempTimelineEmptyState .dglance.dg-onecard .stdocs{ order:4; }
                          /* .dstats — the Documents planet's two-number readout — is the one part of
                             a .core that is not universal: a timeline orb only ships the markup when
                             .docs-xl is there to size it. The glance orb inherits whichever .core is
                             on screen, so the readout has to be inert on the stages that do not. */
                          #tempTimelineEmptyState .orb:not(.docs-xl) .dstats{ display:none; }
                          /* ── PHONE: SAME ALIGNMENT, SMALLER PLANET ──────────────────────────
                             This used to stack — planet centred above the card — which read as a
                             different design rather than the same one at another size. It stays a
                             row: planet left, card right, exactly as on desktop, so the light
                             stream to Tiffany still has a left-to-right line to follow.

                             What changes is the planet's FOOTPRINT, and it has to. An orb draws far
                             outside its own box (ring -22px, dust -26px, aurora -20px), so a 132px
                             planet occupies 184px — 26px past a 132px column on each side, which on
                             a phone is 6px past the card itself and straight into a horizontal
                             scrollbar on .dscroll. Pulling the body to 112px AND the three
                             decoration layers in to -18/-16/-14 lands the whole thing at 148px
                             inside a 152px column: nothing overhangs, nothing scrolls.
                             The dust needs no separate retune — dgTuneDust() rescales the motes to
                             whatever the canvas actually measures, so a tighter canvas gives a
                             tighter band on its own. */
                          @media (max-width:560px){
                            #tempTimelineEmptyState .dglance.dg-onecard{ padding:14px; }
                            #tempTimelineEmptyState .dglance .orbcol{ flex:0 0 152px !important; padding:18px 0; }
                            #tempTimelineEmptyState .dglance:not(.dg-onecard) .orbcol{ padding-top:30px; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl),
                            #tempTimelineEmptyState .dglance .orb.docs-xl{
                              width:112px !important; height:112px !important;
                            }
                            #tempTimelineEmptyState .dglance .orb .ring{ inset:-18px; }
                            #tempTimelineEmptyState .dglance .orb canvas.dust{ inset:-16px !important; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl)::before,
                            #tempTimelineEmptyState .dglance .orb.docs-xl::before{ inset:-14px !important; }
                            #tempTimelineEmptyState .dglance .orb:not(.docs-xl)::after,
                            #tempTimelineEmptyState .dglance .orb.docs-xl::after{ inset:-6px !important; }
                            #tempTimelineEmptyState .dglance .orb .halo{ inset:-12px !important; }
                            /* the label follows the body down, or it hangs off the disc again */
                            #tempTimelineEmptyState .dglance .orb .core{ inset:10px !important; }
                            #tempTimelineEmptyState .dglance .orb .core .ic{ font-size:24px !important; }
                            #tempTimelineEmptyState .dglance .orb .core .nm{ font-size:13.5px !important; max-width:88%; }
                            #tempTimelineEmptyState .dglance .orb .core .sb{ font-size:11.5px !important; }
                            #tempTimelineEmptyState .dglance .orb .num{
                              top:-9px !important; width:20px !important; height:20px !important; font-size:12.5px !important;
                            }
                            /* Documents' two-number readout has no room on a 112px face — its own
                               .sb caption comes back instead, which is what every other stage shows */
                            #tempTimelineEmptyState .dglance .orb.docs-xl .dstats{ display:none; }
                            #tempTimelineEmptyState .dglance .orb.docs-xl .core .sb{ display:block; }
                            /* the heading no longer has a desktop card's width to be set at */
                            #tempTimelineEmptyState .dglance.dg-onecard .dp-ht b,
                            #tempTimelineEmptyState .dglance.dg-onecard .sthead b{ font-size:16px; }
                            #tempTimelineEmptyState .dglance.dg-onecard .dp-hsub{ font-size:14px; }
                            #tempTimelineEmptyState .dglance.dg-onecard .dp-head,
                            #tempTimelineEmptyState .dglance.dg-onecard .sthead,
                            #tempTimelineEmptyState .dglance.dg-onecard .offer-head{ flex:1 1 100%; }
                            #tempTimelineEmptyState .dglance.dg-onecard .dp-note{ flex:1 1 100%; margin-left:0; }
                          }
                          /* Belt and braces for the whole stage view. Every flex child in here can
                             shrink, and anything that still cannot gets CLIPPED rather than handed a
                             horizontal scrollbar: this panel scrolls vertically, and sideways
                             scrolling inside it is never the right answer — it just hides content
                             off the edge, which is the "cards going out of the screen" report.
                             overflow-x had been resolving to auto on its own anyway, because CSS
                             promotes it the moment overflow-y is not visible; this only decides
                             WHICH non-visible value it gets. */
                          #tempTimelineEmptyState .detailOv .dscroll{ overflow-x:hidden; }
                          #tempTimelineEmptyState .dglance .side,
                          #tempTimelineEmptyState .dglance .side > *{ min-width:0; }
                          #tempTimelineEmptyState .mini-btn.rd{color:#ffb3b3;border-color:rgba(255,82,82,.7);}
                          #tempTimelineEmptyState .mini-btn.rd:hover{box-shadow:0 0 12px rgba(255,82,82,.4);}
                          #tempTimelineEmptyState .alertD{border-radius:13px;padding:10px 12px;font-size:13px;line-height:1.55;color:#dbe4f4;}
                          #tempTimelineEmptyState .alertD + .alertD{margin-top:9px;}
                          #tempTimelineEmptyState .alertD.gd{background:rgba(246,184,63,.07);border:1.5px solid rgba(246,184,63,.6);box-shadow:0 0 14px rgba(246,184,63,.13);}
                          #tempTimelineEmptyState .alertD.gd b{color:var(--gold-hi);}
                          #tempTimelineEmptyState .alertD.rd{background:rgba(255,82,82,.07);border:1.5px solid rgba(255,82,82,.6);box-shadow:0 0 14px rgba(255,82,82,.13);}
                          #tempTimelineEmptyState .alertD.rd b{color:#ffb3b3;}
                          #tempTimelineEmptyState .alertD.gr{background:rgba(62,233,140,.06);border:1.5px solid rgba(62,233,140,.45);}
                          #tempTimelineEmptyState .alertD.gr b{color:#a9f5cd;}
                          /* Heading and body as blocks, replacing the two <br>s the global
                             `br{display:none}` below 991px was deleting on every phone. */
                          #tempTimelineEmptyState .alertD .ah{display:block;margin-bottom:3px;}
                          #tempTimelineEmptyState .alertD .ab{display:block;}
                          #tempTimelineEmptyState .alertD .mini-btn{margin-top:9px;}
                          @media (prefers-reduced-motion: reduce){
                            #tempTimelineEmptyState *{animation:none !important;transition:none !important;}
                            #tempTimelineEmptyState canvas{display:none;}
                            #tempTimelineEmptyState .bar i{transition:none;}
                          }
                          @media (min-width: 1025px) {
                            #tempTimelineEmptyState {
                              display: flex !important;
                              flex-direction: row !important;
                              flex-wrap: wrap !important; /* stack the two halves when the (possibly windowed) container can't fit both side-by-side */
                              align-items: stretch !important;
                              gap: 30px !important;
                              padding: 30px 24px !important;
                              background:
                                radial-gradient(1600px 900px at 20% -10%, #0b1226 0%, transparent 60%),
                                radial-gradient(1200px 800px at 90% 110%, #120b22 0%, transparent 55%),
                                #03050b !important;
                              border-radius: 16px !important;
                              text-align: left !important;
                            }
                            #tempTimelineEmptyState .phone {
                              flex: 1;
                              width: auto;
                              max-width: none;
                              border-radius: 16px;
                              border: 1px solid rgba(255, 255, 255, 0.05);
                              background: rgba(6, 10, 20, 0.4);
                              box-shadow: 0 20px 50px rgba(0, 0, 0, 0.4);
                              overflow: visible;
                            }
                            #tempTimelineEmptyState .phone .screen {
                              padding: 24px 20px;
                            }
                            #tempTimelineEmptyState .phone .detailOv {
                              border-radius: 16px;
                            }
                            /* Hide mobile navigation / header back and menu dots on desktop */
                            #tempTimelineEmptyState .phone .screen .hdr .back,
                            #tempTimelineEmptyState .phone .screen .hdr .menu,
                            #tempTimelineEmptyState .phone .hdr2 .menu,
                            #tempTimelineEmptyState .phone .nav {
                              display: none !important;
                            }
                            /* Adjust ID pill header on desktop to look like a clean title widget */
                            #tempTimelineEmptyState .phone .idpill {
                              max-width: 320px;
                              margin: 0 auto 20px auto;
                              flex: 0 0 auto;
                            }
                            /* …but once the intro clip sits beside it, the pill's own `margin:
                               0 auto` would eat the free space and shove the clip out to the
                               right edge. Centre the PAIR instead: the auto margins move up to
                               .hdr-mid, which also takes over the 20px gap the pill was
                               contributing above the timeline. */
                            #tempTimelineEmptyState .phone .hdr-mid {
                              justify-content: center;
                              gap: 14px;
                              margin: 0 auto 20px auto;
                            }
                            #tempTimelineEmptyState .phone .hdr-mid .idpill { margin: 0; }
                            /* No .hdr-vid size rule here on purpose. The base `flex:1 1 240px;
                               max-width:420px` already grows the clip into whatever this wider
                               layout leaves, and a larger flex-basis would only make the pair
                               WRAP sooner — the basis is what decides when a flex line breaks,
                               not how big the clip ends up. Type sizes are inherited from the
                               shared .stvid rules above, which is what keeps the title as
                               readable here as on the rail. */

                            /* Each half keeps a sensible floor so a narrow/windowed container
                               wraps them (timeline over AI summary) instead of crushing the
                               timeline's side column into unreadable vertical text. */
                            #tempTimelineEmptyState > .temp-left-col,
                            #tempTimelineEmptyState > #p2 {
                              min-width: 380px !important; /* beats the later min-width:0 base rule so the halves actually wrap */
                            }
                            /* Orb column: sized to the 136px orb + centering (was 300px, which
                               starved the side content). Timeline line stays at the orb's centre. */
                            #tempTimelineEmptyState .tl::before {
                              left: 109px !important;
                            }
                            #tempTimelineEmptyState .row .orbcol {
                              flex: 0 0 220px !important;
                            }
                            #tempTimelineEmptyState .row .side {
                              padding-top: 16px !important;
                            }

                            /* Offer stage card: stack below orb, remove 220px height gap */
                            #tempTimelineEmptyState .row.row-offer {
                              flex-direction: column !important;
                              align-items: stretch !important;
                              gap: 0px !important;
                              padding-bottom: 4px !important;
                            }
                            #tempTimelineEmptyState .row.row-offer .orbcol {
                              flex: 0 0 auto !important;
                              width: 136px !important;
                              height: auto !important;
                              min-height: 0 !important;
                              max-height: 140px !important;
                              margin-bottom: 0px !important;
                            }
                            #tempTimelineEmptyState .row.row-offer .side {
                              width: 100% !important;
                              flex: 1 1 100% !important;
                              padding-top: 0px !important;
                              margin-top: 0px !important;
                            }

                            /* Increase orb circle sizes on desktop */
                            #tempTimelineEmptyState .orb {
                              width: 136px !important;
                              height: 136px !important;
                            }
                            #tempTimelineEmptyState .orb.sm {
                              width: 104px !important;
                              height: 104px !important;
                            }
                            #tempTimelineEmptyState .orb .core {
                              inset: 14px !important;
                            }
                            #tempTimelineEmptyState .orb.sm .core {
                              inset: 10px !important;
                            }
                            #tempTimelineEmptyState .orb .core .ic {
                              font-size: 32px !important;
                            }
                            #tempTimelineEmptyState .orb.sm .core .ic {
                              font-size: 24px !important;
                            }
                            #tempTimelineEmptyState .orb .core .nm {
                              font-size: 16px !important;
                              letter-spacing: 0.3px !important;
                            }
                            #tempTimelineEmptyState .orb.sm .core .nm {
                              font-size: 15px !important;
                            }
                            #tempTimelineEmptyState .orb .core .sb {
                              font-size: 14.5px !important;
                            }
                            #tempTimelineEmptyState .orb.sm .core .sb {
                              font-size: 13.5px !important;
                            }
                            /* Documents & Custom Tasks stays the biggest planet at this
                               breakpoint too — 160 against the 136 every other stage gets.
                               The !important here is only matching the block's own rules
                               above; the readout's .di / .dv are untouched by them. */
                            #tempTimelineEmptyState .orb.docs-xl {
                              width: 160px !important;
                              height: 160px !important;
                            }
                            #tempTimelineEmptyState .orb.docs-xl .core { inset: 12px !important; }
                            #tempTimelineEmptyState .orb.docs-xl .core .ic { font-size: 34px !important; }
                            #tempTimelineEmptyState .orb.docs-xl .core .nm {
                              font-size: 15.5px !important;
                              letter-spacing: .25px !important;
                            }
                            #tempTimelineEmptyState .orb.docs-xl .halo { inset: -23px !important; }
                            #tempTimelineEmptyState .orb.docs-xl .dstats { gap: 9px; padding: 4px 11px; margin-top: 3px; border-radius: 13px; }
                            #tempTimelineEmptyState .orb.docs-xl .dstat .di { width: 15px; height: 15px; }
                            #tempTimelineEmptyState .orb.docs-xl .dv b { font-size: 16px; }
                            #tempTimelineEmptyState .orb.docs-xl .dv em { font-size: 10.5px; }
                            #tempTimelineEmptyState .orb.docs-xl .dsep { height: 19px; }
                            #tempTimelineEmptyState .orb.docs-xl .num { top: -21px; width: 28px; height: 28px; font-size: 15px; }
                            /* the aurora is sized off the orb, so it has to grow with it —
                               a -30px ring around a 160px planet reads as a thin rim */
                            #tempTimelineEmptyState .orb.docs-xl::before { inset: -38px !important; }
                            #tempTimelineEmptyState .orb.docs-xl::after  { inset: -16px !important; }
                            /* Documents & Custom Tasks panel: the desktop column is wide enough
                               to read this at document scale rather than caption scale. */
                            #tempTimelineEmptyState .dpanel { padding: 15px 16px 13px; }
                            #tempTimelineEmptyState .dp-ht b { font-size: 16.5px; }
                            #tempTimelineEmptyState .dp-hsub { font-size: 14px; }
                            #tempTimelineEmptyState .dp-live { font-size: 13px; padding: 4px 10px; }
                            #tempTimelineEmptyState .dp-hic { width: 20px; height: 20px; }
                            #tempTimelineEmptyState .dp-newtx b { font-size: 14.5px; }
                            #tempTimelineEmptyState .dp-newtx span { font-size: 13.5px; }
                            #tempTimelineEmptyState .dp-newbtn { font-size: 13.5px; padding: 6px 11px; }
                            #tempTimelineEmptyState .dp-grid { gap: 12px; }
                            #tempTimelineEmptyState .dp-card { padding: 11px 13px 10px; border-radius: 14px; }
                            #tempTimelineEmptyState .dp-ct { font-size: 12.5px; }
                            #tempTimelineEmptyState .dp-ci { width: 16px; height: 16px; }
                            #tempTimelineEmptyState .dp-cv b { font-size: 34px; }
                            #tempTimelineEmptyState .dp-cl { font-size: 13.5px; }
                            #tempTimelineEmptyState .dp-badge { font-size: 12.5px; padding: 3px 9px; }
                            #tempTimelineEmptyState .dp-cd em { font-size: 13px; }
                            #tempTimelineEmptyState .dp-clink { font-size: 14px; }
                            #tempTimelineEmptyState .dp-note { font-size: 13.5px; padding: 9px 11px; }
                            #tempTimelineEmptyState .dp-rh { font-size: 12.5px; }
                            #tempTimelineEmptyState .dp-rt b { font-size: 14px; }
                            #tempTimelineEmptyState .dp-rt span { font-size: 13px; }
                            #tempTimelineEmptyState .dp-rm { font-size: 12.5px; }
                            #tempTimelineEmptyState .dp-rn { font-size: 11.5px; }
                            #tempTimelineEmptyState .dp-ri { width: 15px; height: 15px; }
                            /* walkthrough clip: the desktop card is wide, so the poster gets a
                               taller crop and the controls scale with it */
                            #tempTimelineEmptyState .stvid { margin-top: 12px; border-radius: 13px; }
                            #tempTimelineEmptyState .stvid-poster { min-height: 132px; }
                            #tempTimelineEmptyState .stvid-k { font-size: 13px; }
                            #tempTimelineEmptyState .stvid-t { font-size: 16px; }
                            #tempTimelineEmptyState .stvid-play { width: 46px; height: 46px; font-size: 16px; }
                            #tempTimelineEmptyState .stvid-len { font-size: 13.5px; padding: 3px 8px; }
                            #tempTimelineEmptyState .stvid-soon { font-size: 13.5px; padding: 6px 13px; }
                            #tempTimelineEmptyState .stvid-tx { left: 14px; top: 12px; right: 14px; }
                            /* .ring.rB / .ring.rF are the two arcs of the planet's ring system
                               now (see "4b. the stages are PLANETS"), sized in % of the orb so
                               they scale with these bigger desktop orbs on their own — the old
                               inset:5px override would have collapsed the near arc onto the
                               body. */
                            #tempTimelineEmptyState .orb .halo {
                              inset: -20px !important;
                            }
                            #tempTimelineEmptyState .orb canvas.dust {
                              inset: -32px !important;
                            }
                          }

                          /* ══ STEP GUIDE CLIP — SUPPORTING CONTENT, SIZED LIKE IT ═══════════
                             A 16/9 poster takes whatever width its card is given, so every stage
                             was handing more than half its own height to a video — ten of them
                             down the rail, each brighter and higher-contrast than the step status
                             it exists to support, plus the intro clip at the top of the board. The
                             timeline is the subject; these are footnotes.

                             Capped by HEIGHT rather than reshaped, which is what keeps this a size
                             change and not a redesign:

                                 stage card   ~123-130px  ->  80px   (~35-38% smaller)
                                 header clip  ~236px      ->  132px  (~44% smaller)

                             THE HEIGHT IS SET, NOT CAPPED, and the ratio is dropped with it. A
                             max-height over `aspect-ratio:16/9` looked like the tidier way to do
                             this and it is a trap: given a constrained height and a ratio to
                             honour, the browser shrinks the WIDTH to match rather than cropping —
                             so the clip came out 142px wide in a 250px card with dead space beside
                             it, instead of a full-width strip. An explicit height with
                             aspect-ratio:auto is unambiguous: full width, 80px tall, the still
                             cropped by background-size:cover / object-fit:cover as intended.

                             THE RATIO COMES BACK WHEN IT PLAYS, which reverses the base rule's
                             "no layout jump on press play" deliberately: a playing .stvid-el
                             switches to object-fit:contain, and contain inside a 3:1 box would
                             shrink the picture to a sliver. So at rest it is a strip, and pressing
                             play restores the whole 16/9 frame — the one moment the clip should
                             dominate anything. That step is not animated: height cannot transition
                             to auto, and a fixed target would have to guess the card's width.

                             At 80px the three overlays no longer fit around a centred play button,
                             so the poster is re-anchored: text along the top, play bottom-left,
                             duration bottom-right. Nothing overlaps, and the duration — the one
                             thing on the poster the timeline does not already tell you — comes out
                             bigger than it was, not smaller. */
                          #tempTimelineEmptyState .stvid{ width:100%; }
                          #tempTimelineEmptyState .stvid-poster{
                            aspect-ratio:auto; width:100%;
                            height:80px; min-height:0; max-height:none;
                          }
                          #tempTimelineEmptyState .hdr-vid .stvid-poster{ height:132px; }
                          #tempTimelineEmptyState .stvid.playing .stvid-poster{
                            height:auto; aspect-ratio:16/9;
                          }

                          #tempTimelineEmptyState .stvid{ margin-top:9px; border-radius:10px; }
                          #tempTimelineEmptyState .stvid-tx{ left:10px; top:8px; right:10px; }
                          #tempTimelineEmptyState .stvid-k{ font-size:11px; }
                          /* one line, ellipsised: two lines of title in an 80px poster leaves the
                             play control nowhere to sit that is not on top of the words */
                          #tempTimelineEmptyState .stvid-t{
                            font-size:14px; margin-top:1px;
                            white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
                          }
                          #tempTimelineEmptyState .hdr-vid .stvid-t{ font-size:15px; }

                          /* bottom-left — and the centring transform has to go with it, because the
                             base rule's :hover / :active states re-apply translate(-50%,-50%) and
                             would throw the button back into the middle on hover */
                          #tempTimelineEmptyState .stvid-play{
                            left:10px; top:auto; bottom:8px; transform:none;
                            width:32px; height:32px; font-size:14px;
                          }
                          #tempTimelineEmptyState .stvid-play:hover{ transform:scale(1.08); }
                          #tempTimelineEmptyState .stvid-play:active{ transform:scale(.97); }
                          #tempTimelineEmptyState .stvid-play i{ margin-left:1px; }
                          #tempTimelineEmptyState .hdr-vid .stvid-play{ width:38px; height:38px; font-size:15.5px; }

                          /* reads at a glance on a smaller poster, not despite it: larger type on a
                             solid plate with a hairline, so a bright frame behind it cannot wash
                             the figure out */
                          #tempTimelineEmptyState .stvid-len{
                            right:9px; bottom:8px; font-size:13.5px; font-weight:800;
                            letter-spacing:.02em; padding:3px 8px; border-radius:6px;
                            color:#fff; background:rgba(4,10,22,.9);
                            border:1px solid rgba(255,255,255,.16);
                          }
                          /* a "coming soon" stage has no play control, so its pill takes that slot
                             rather than the middle, where it would sit under the title */
                          #tempTimelineEmptyState .stvid-soon{
                            left:10px; top:auto; bottom:8px; transform:none;
                            font-size:12px; padding:5px 10px;
                          }

                          /* ══ PHONE: THE RAIL HAS TO FIT THE PHONE ═══════════════════════════
                             Measured, not guessed. On a phone .screen carries 8px of side padding
                             and .orbcol is 128px around a 112px orb, so the orb's own box starts
                             at 16px — but an orb draws far outside that box: the dust canvas at
                             inset:-26px lands at -10px and the ring at -22px lands at -6px. Both
                             are past the left edge, and .phone is overflow:hidden, so the left
                             side of every planet on the rail was being sliced off.

                             The fix is the planet's FOOTPRINT, the same way it was for the stage
                             view's glance orb: a smaller body AND the decoration layers pulled in
                             to match, so the whole thing fits inside its column instead of
                             relying on padding it does not have.

                                 84px body in a 104px column -> box starts at 18px
                                 dust/ring at -12px          -> lands at 6px, clear of the edge

                             The rail moves with it. .tl::before is positioned at the orb's centre
                             (63px for the old geometry); with a 104px column starting at 8px that
                             centre is 60px, and leaving it at 63 would run the spine visibly off
                             the planets it is supposed to thread.

                             The label scales with the body too — the phone tier bumps .nm to
                             14.5px for readability on a 112px orb, which on an 84px one overruns
                             the sphere completely. */
                          @media (max-width:560px){
                            #tempTimelineEmptyState .tl::before{ left:60px !important; }
                            #tempTimelineEmptyState #p1 .tl .row{ gap:8px !important; }
                            #tempTimelineEmptyState #p1 .tl .row .orbcol{ flex:0 0 104px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb{ width:84px !important; height:84px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb.sm{ width:76px !important; height:76px !important; }
                            /* Documents stays the biggest planet, as it is at every other width —
                               just not so big that it reaches the edge again */
                            #tempTimelineEmptyState #p1 .tl .orb.docs-xl{ width:88px !important; height:88px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb .ring{ inset:-12px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb canvas.dust{ inset:-12px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb .halo{ inset:-9px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb.docs-xl::before{ inset:-13px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb.docs-xl::after{ inset:-6px !important; }
                            /* label back in proportion to the smaller body */
                            #tempTimelineEmptyState #p1 .tl .orb .core{ inset:8px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb .core .ic{ font-size:21px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb .core .nm{ font-size:10.5px !important; line-height:1.15 !important; }
                            #tempTimelineEmptyState #p1 .tl .orb .core .sb{ font-size:9px !important; }
                            #tempTimelineEmptyState #p1 .tl .orb .num{
                              top:-7px !important; width:17px !important; height:17px !important; font-size:9.5px !important;
                            }
                            /* the two-number readout has no room on a 92px face; the caption every
                               other stage shows comes back instead */
                            #tempTimelineEmptyState #p1 .tl .orb.docs-xl .dstats{ display:none !important; }
                            #tempTimelineEmptyState #p1 .tl .orb.docs-xl .core .sb{ display:block !important; }
                            /* the card keeps what the column gave back */
                            #tempTimelineEmptyState #p1 .tl .row .side{ padding-top:4px !important; }
                          }

                          /* ══ PHONE: THE HEADER PILL ROW ═════════════════════════════════════
                             My Deal Rooms / wallet / Timeline / Deal Concierge ran off BOTH edges
                             of the screen. The compacting rules for this row — icons hidden,
                             tighter padding, count badge dropped — existed only below 540px, but
                             the row runs out of room long before that: four pills WITH icons need
                             roughly 420px of content width, and a 600px phone in landscape or a
                             small tablet sits above the tier that would have helped.

                             So the compact tier starts at 820px instead, where the row genuinely
                             stops fitting, and min-width:0 lets the buttons shrink rather than
                             forcing the flex line wider than its container — which is what pushed
                             it past both edges instead of wrapping. */
                          @media (max-width:820px){
                            .header-actions-right{
                              flex-wrap:wrap !important;
                              align-items:center !important;
                              justify-content:flex-start !important;
                              min-width:0 !important;
                              max-width:100% !important;
                              gap:8px !important;
                              width:100% !important;
                            }
                            .header-actions-right button,
                            .header-actions-right a,
                            .header-actions-right .aiw-chip,
                            .header-actions-right .hb-notify-btn{
                              height:36px !important;
                              min-height:36px !important;
                              max-height:36px !important;
                              box-sizing:border-box !important;
                              display:inline-flex !important;
                              align-items:center !important;
                              justify-content:center !important;
                              vertical-align:middle !important;
                              margin:0 !important;
                            }
                            .header-actions-right button:not(.hb-notify-btn):not(#btnAiWalletRecharge),
                            .header-actions-right a{
                              flex:1 1 auto !important;
                              min-width:0 !important;
                              padding:0 12px !important;
                              font-size:12.5px !important;
                              font-weight:700 !important;
                              gap:6px !important;
                              border-radius:50px !important;
                            }
                            .header-actions-right #btnAiWalletRecharge{
                              width:26px !important; height:26px !important;
                              min-width:26px !important; max-width:26px !important;
                              padding:0 !important;
                              display:inline-flex !important;
                              align-items:center !important; justify-content:center !important;
                              flex:0 0 26px !important;
                              background:none !important;
                              border:0 !important;
                            }
                            .header-actions-right #btnAiWalletRecharge > img{
                              display:block !important; width:24px !important; height:24px !important;
                            }
                            .header-actions-right .hb-notify-btn{
                              width:36px !important; height:36px !important;
                              min-width:36px !important; max-width:36px !important;
                              flex:0 0 36px !important;
                              border-radius:50% !important;
                              padding:0 !important;
                            }
                            .header-actions-right #aiWalletChip,
                            .header-actions-right .aiw-chip{
                              flex:1 1 auto !important;
                              min-width:0 !important;
                              padding:0 6px 0 12px !important;
                              gap:6px !important;
                              border-radius:50px !important;
                            }
                            .header-actions-right #myDealRoomsCount{ display:none !important; }
                          }
                        