export declare const HOME_CSS = "/* ---------- phone app shell (< 768px) ---------- */\n\n@media (max-width: 767px) {\n /* --- the document never scrolls (S1.1, 2026-08-17) ---\n Real-device symptom: the workspace title bar, the session header, the\n composer and the FAB all slid with the finger \u2014 every fixed surface\n \"followed the drag\". They are not misplaced; the whole DOCUMENT was\n rubber-banding under them (they are absolute/in-flow inside the frame,\n so a document-level bounce moves them all as one).\n\n After the S2.1 box-sizing fix the document has no overflow at all\n (scrollHeight === clientHeight, measured with ?mobile-nav-inset=54), so\n this is not scrolling \u2014 it is iOS's elastic overscroll, which happens on\n an unscrollable document too, and which an inner scroller chains into as\n soon as it hits its own end.\n\n overscroll-behavior: none on the viewport kills both halves at once: the\n document itself gets no bounce, and overscroll chained up from the\n message flow / session list is absorbed without moving anything.\n overflow: hidden then hard-locks the document scroller so future content\n can never reintroduce a real scroll. Set on html AND body: the spec\n propagates the viewport's value from html, but engines have historically\n read body, and neither is a scroll container we ever want.\n\n Deliberately NOT position: fixed on body \u2014 the app shell does not need\n it, and it is the variant that strands iOS's fixed elements behind the\n on-screen keyboard. With plain overflow: hidden, iOS still pans the\n visual viewport to reveal a focused textarea, so the composer stays\n visible while typing without any visualViewport JS. */\n html,\n body {\n overflow: hidden !important;\n overscroll-behavior: none !important;\n }\n\n /* The message flow is the one scroller that regularly hits its end under a\n finger. Root-level `none` already absorbs the chain, but declaring it\n at the source keeps the guarantee if the root rule is ever weakened\n (the home list and both sheets already declare it).\n\n `none`, NOT `contain` (S4.1 fix, 2026-08-17). The two differ in exactly\n the way that bit us: `contain` stops overscroll from CHAINING OUT to the\n document but deliberately KEEPS this element's own local elastic bounce,\n while `none` suppresses that local bounce too. S1.1 only reasoned about\n the chain, so it picked `contain` \u2014 and the composer went on twitching\n upward on every drag-past-the-end while the header and FAB stayed put.\n\n Why only the composer moved: the official composer seat\n (`[class$=\"_composerSeat\"]`) is `position: sticky; bottom: 0` and lives\n INSIDE this scroller (measured 2026-08-17: seat 0,710 390x134 inside\n _scrollBody 0,131 390x713, contains() === true). A sticky box is laid out\n against its scroll container's content, so the container's own rubber-band\n drags it along. The header/FAB are absolute on the frame, outside this\n scroller entirely \u2014 which is precisely why S1.1's document-level fix\n pinned them and left this one surface behind.\n\n Deliberately NOT re-pinning the seat with position: fixed: sticky inside\n the scroller is what keeps the focused textarea visible when iOS pans the\n visual viewport for the keyboard, and fixed is the variant that strands\n it behind the keyboard (same trap as the body rule above). Kill the\n bounce, keep the sticky. */\n [data-phase] [class$=\"_scrollBody\"] {\n overscroll-behavior: none !important;\n }\n\n /* The official sidebar is no longer a drawer on a phone \u2014 the home screen\n replaced it. Hidden outright (not translated off-screen) so it cannot\n capture taps or hold layout. */\n [data-mobile-nav=\"frame\"] > :first-child {\n display: none !important;\n }\n /* The header's drawer toggle opened that sidebar; with it gone the button\n has nothing to open. (S2 owns the rest of the header layout \u2014\n styles/header.css.ts \u2014 including the Files button's replacement.) */\n [data-mobile-nav=\"toggle\"] {\n display: none !important;\n }\n\n /* --- level 1: the session list ---\n Renders inside the shell overlay layer (absolute, pointer-events: none),\n so the page re-enables pointer events for itself. The layer's containing\n block is the frame's padding box, which still starts under the status\n bar \u2014 hence the safe-area padding here. */\n [data-mobile-nav=\"home\"] {\n position: absolute;\n inset: 0;\n /* rc.3 raise (real-device report 2026-10-25 \"top strip leaking the\n conversation through\"): this shell layer mounts INSIDE the host's\n PIRFFq_overlayLayer (z-index:20, new in rc.3 \u2014 the conversation\n content itself moved under it too), so the old z:5 let host session\n content (STRONG/CODE rows measured at viewport y=4) paint over the\n shell's top bar on BOTH pages, reading as a faint fixed strip at the\n window top. z:30 puts the whole shell above everything the host\n stacks inside that layer; the shell's own transparent middle and\n pointer-events passthrough keep the conversation visible and tappable\n (verified live via console injection before landing). */\n z-index: 30;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n /* dsw-specific-sidebar-fill, not an alias bg-layer-* token (real-device\n round 2 follow-up, 2026-08-17): fetched and diffed the live theme\n CSS (both light/dark blocks in /assets/index-*.css) because computed\n values, not source-read guesses, are what actually matter here \u2014\n --dsw-alias-bg-base/-layer-1/-layer-2 all resolve to the exact same\n color in the LIGHT theme (neutral-bluish-00, i.e. plain white); they\n only diverge in dark mode.\n\n 2026-08-20: the page and the CARDS swapped tokens. This surface used\n to be --dsw-specific-sidebar-fill, which made the list page a\n different shade from the session page \u2014 measured on-device in dark\n theme, rgb(27,27,28) here against rgb(21,21,23) there, a visible step\n every time you opened a session. The page now takes bg-base, the same\n token the session page and resolve to, so the two screens are\n literally the same colour; the cards took sidebar-fill in exchange, so\n the contrast that separates a row from the page is preserved \u2014 it\n just runs the other way (raised card on a base page, the more\n conventional reading of the two anyway). */\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, inherit);\n padding-top: var(--mnav-sat);\n transform: translateX(0);\n opacity: 1;\n transition:\n transform .3s var(--ds-ease-in-out, ease-in-out),\n opacity .3s var(--ds-ease-in-out, ease-in-out);\n }\n /* Push transition: the list slides out to the left as the session takes\n the screen, and comes back from the left. It stays mounted (visibility,\n not display) so the slide has something to animate; the delayed\n visibility keeps it non-interactive the moment the transition ends. */\n [data-mobile-nav=\"home\"][data-view=\"session\"] {\n transform: translateX(-100%);\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition:\n transform .3s var(--ds-ease-in-out, ease-in-out),\n opacity .3s var(--ds-ease-in-out, ease-in-out),\n visibility 0s .3s;\n }\n /* The host's SESSION header must not sit on top of this list page.\n Real-device report (2026-10-22, DSH 0.2.0-rc.2, dsh-web-mobile 3.2.1,\n 360x792 phone): on the list page the top strip showed the LAST SESSION's\n header \u2014 its title plus the session's tab row \u2014 and the workspace switcher\n underneath was neither visible nor tappable, so \"switch workspace\" did\n nothing at all. Measured with elementFromPoint(150,30) on the phone\n viewport: span.wSkVaW_crumbCurrent, i.e. the host header's crumb, while\n our own workspace button sat at [46,8,208,44] underneath it.\n\n Why z-index is not the fix: this page is position:absolute; z-index:5\n inside the shell overlay layer, and the host header carries its own\n stacking context, so raising us above its z-index:30 changed nothing\n (measured: the crumb still won the hit test). The session header has to\n leave the hit tree while the list page is up \u2014 the list page draws its\n own top bar (home-top, with the workspace switcher).\n\n The gate is this page's own marker: data-view=\"session\" means a session\n is open, so the rule lapses exactly when the host header is wanted again\n (verified: entering a session restores display:grid, the back button in\n that header stays tappable, and going back hides it once more). Two\n selectors on purpose \u2014 the class suffix survives CSS-module hash renames,\n the structural one survives a rename of the class itself. */\n [data-mobile-nav=\"frame\"]:not([data-mobile-view=\"session\"]) header[class*=\"_header\"],\n [data-mobile-nav=\"frame\"]:not([data-mobile-view=\"session\"]) header:has([class*=\"_titleRow\"]),\n body:has([data-mobile-nav=\"home\"]:not([data-view=\"session\"])) [data-mobile-nav=\"frame\"] header[class*=\"_header\"],\n body:has([data-mobile-nav=\"home\"]:not([data-view=\"session\"])) [data-mobile-nav=\"frame\"] header:has([class*=\"_titleRow\"]) {\n display: none !important;\n }\n @media (prefers-reduced-motion: reduce) {\n [data-mobile-nav=\"home\"],\n [data-mobile-nav=\"home\"][data-view=\"session\"] {\n transition: none !important;\n }\n }\n\n /* Title bar: the workspace name IS the switcher. */\n [data-mobile-nav=\"home-top\"] {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n min-height: 52px;\n padding: 4px 16px 6px;\n }\n /* Site logo (real-device round 2, 2026-08-17): rendered only when\n document.head actually has a (MobileHome.tsx never\n ships a placeholder box), so this rule only ever needs to size the\n image, not reserve space for its absence. */\n [data-mobile-nav=\"home-logo\"] {\n width: 24px;\n height: 24px;\n margin-right: 6px;\n flex: none;\n border-radius: 6px;\n object-fit: contain;\n /* rc.3 fix (2026-10-25, Safari real-device report \"logo \u4E0D\u663E\u793A\"): the\n host now ships TWO media-scoped favicons and the first in DOM order\n is the DARK one \u2014 a WHITE whale (fill #fff). useSiteIconHref picks\n the first link unconditionally, so on a light page the logo arrived\n white-on-light and vanished. brightness(0) collapses ANY source (the\n old single black favicon or the new white one) to a black silhouette,\n making light mode correct for both hosts; the dark-theme rules below\n re-invert it to white. */\n filter: brightness(0);\n }\n /* Dark theme (real-device report, 2026-08-17): force a white silhouette\n regardless of the source image's own colors \u2014 brightness(0) collapses\n every opaque pixel to black first, invert(1) then flips that to white;\n transparent pixels stay transparent either way. Three dark signals,\n deliberately redundant: the pre-rc.3 body[data-ds-dark-theme] marker,\n and rc.3's resolved (\"dark\" pinned, or\n \"system\" under a dark OS \u2014 rc.3 stamps the resolved scheme on\n html[style] with no body attribute until the first theme flip). */\n body[data-ds-dark-theme] [data-mobile-nav=\"home-logo\"],\n html[data-ds-theme-source=\"dark\"] [data-mobile-nav=\"home-logo\"] {\n filter: brightness(0) invert(1);\n }\n @media (prefers-color-scheme: dark) {\n html[data-ds-theme-source=\"system\"] [data-mobile-nav=\"home-logo\"] {\n filter: brightness(0) invert(1);\n }\n }\n [data-mobile-nav=\"ws-switch\"] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n min-height: 44px;\n max-width: 100%;\n padding: 0 6px 0 0;\n border: none;\n background: transparent;\n color: inherit;\n font-family: inherit;\n font-size: 22px;\n font-weight: 600;\n line-height: 1.2;\n cursor: pointer;\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n }\n [data-mobile-nav=\"ws-switch\"] > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n [data-mobile-nav=\"ws-switch\"] > svg {\n flex: none;\n opacity: .55;\n }\n [data-mobile-nav=\"ws-switch\"]:active {\n opacity: .6;\n }\n\n /* Session list: rounded cards, not bordered rows (real-device round 2\n follow-up, 2026-08-17 \u2014 reference: Claude Code mobile app's session\n list). `gap` on the flex column IS the inter-card spacing; no\n per-row margin bookkeeping. */\n [data-mobile-nav=\"home-list\"] {\n flex: 1 1 auto;\n min-height: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px 16px calc(var(--mnav-sab) + 96px);\n list-style: none;\n overflow-y: auto;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n /* Swipe-to-archive wrapper (redone 2026-08-25, real-device round): iOS-mail\n mechanics. The wrapper CLIPS (overflow hidden, same 22px radius as the\n card) and the archive button is parked past the right edge, sliding in\n lock-step with the card \u2014 a 1px drag reveals a 1px slice, never a\n fully-drawn button behind a gap. Clipping would eat the card's cast\n shadow, so the light-theme shadow moves up to this wrapper (identical\n values; the dark theme's INSET hairline on the card survives clipping\n untouched). pan-y keeps vertical list scrolling native; the direction\n lock in MobileHome.tsx decides horizontal-vs-vertical once per touch. */\n [data-mobile-nav=\"home-swipe\"] {\n position: relative;\n overflow: hidden;\n border-radius: 22px;\n /* The list is a flex column: without this, an overflowing list SHRINKS\n every row and the clip above slices the squashed card's bottom edge\n flat (real-device report, 2026-08-25). Rows keep natural height; the\n list scrolls. */\n flex: 0 0 auto;\n touch-action: pan-y;\n box-shadow: 0 1px 3px rgba(0, 0, 0, .06), 0 4px 12px rgba(0, 0, 0, .05);\n }\n body[data-ds-dark-theme] [data-mobile-nav=\"home-swipe\"] {\n box-shadow: none;\n }\n /* Press = settle toward the page (mirrors the card's own :active swap,\n which the clip made invisible at wrapper level). */\n [data-mobile-nav=\"home-swipe\"]:has([data-mobile-nav=\"home-row\"]:active) {\n box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n }\n body[data-ds-dark-theme] [data-mobile-nav=\"home-swipe\"]:has([data-mobile-nav=\"home-row\"]:active) {\n box-shadow: none;\n }\n [data-mobile-nav=\"home-swipe-card\"] {\n position: relative;\n z-index: 1;\n transition: transform .22s var(--ds-ease-out, ease-out);\n will-change: transform;\n }\n /* Inset pill, not a full-bleed slab (real-device feedback: hard edges).\n 5px breathing room on three sides inside the 88px reveal; its own\n radius echoes the card family. It still slides in lock-step from past\n the right edge (transform driven from MobileHome.tsx). */\n [data-mobile-nav=\"home-archive\"] {\n position: absolute;\n z-index: 0;\n top: 5px;\n bottom: 5px;\n right: 5px;\n width: 78px;\n border: none;\n border-radius: 17px;\n background: var(--dsw-alias-state-error-primary, #d4494c);\n color: #fff;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: transform .22s var(--ds-ease-out, ease-out);\n will-change: transform;\n }\n [data-mobile-nav=\"home-archive\"]:active {\n filter: brightness(.9);\n }\n\n [data-mobile-nav=\"home-row\"] {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-height: 60px;\n padding: 14px 16px;\n border: none;\n border-radius: 22px;\n /* The page's old colour (see the swap note on [data-mobile-nav=\"home\"]):\n differs from bg-base in BOTH themes, and is the token\n dsh-better-sidebar's panel already uses for a secondary surface. */\n background: var(--dsw-specific-sidebar-fill, #f5f5f5);\n color: inherit;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n /* Card edge definition (2026-08-17). Light theme only \u2014 see the dark\n override below. Two stacked shadows in the iOS idiom: a tight 1px\n contact shadow that draws the edge itself, plus a wide soft one that\n lifts the card off the page. Both are deliberately weak (.06/.05):\n the page sits on --dsw-specific-sidebar-fill and the card on\n --dsw-alias-bg-base, so there is already a slight tonal step here and\n the shadow only has to sharpen it, not carry it alone. */\n box-shadow: 0 1px 3px rgba(0, 0, 0, .06), 0 4px 12px rgba(0, 0, 0, .05);\n }\n [data-mobile-nav=\"home-row\"]:active {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06));\n /* Press = settle toward the page. Dropping the wide shadow and keeping a\n tighter contact one reads as the card pushing in, which is what the\n darkening background already implies; leaving the lifted shadow under\n a pressed card is the combination that looks wrong. */\n box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n }\n /* Dark theme: a black shadow on a near-black page is invisible, so the\n edge is drawn instead of cast. A 1px hairline at --dsw-alias-border-l2\n weight, delivered as an INSET box-shadow rather than a real border so\n the card's geometry is untouched (a real 1px border would grow every\n row by 2px unless box-sizing cooperated) and so it overrides the light\n shadow through the same property instead of fighting it.\n\n Chosen over \"brighten the card face\" because in dark theme the card\n (--dsw-alias-bg-base, bluish-950) is already DARKER than the page\n (--dsw-specific-sidebar-fill, bluish-900); lightening the card past the\n page would invert the layering that the light theme establishes, while\n a hairline keeps both themes reading as \"page behind, card in front\".\n\n Theme is read from body[data-ds-dark-theme], never prefers-color-scheme:\n the app hardcodes color-scheme: light on and switches themes with\n this attribute, so a media query would never fire (AGENTS.md). This\n selector also outranks the :active rule above (0,2,1 vs 0,2,0), so one\n declaration covers the pressed state too. */\n body[data-ds-dark-theme] [data-mobile-nav=\"home-row\"] {\n box-shadow: inset 0 0 0 1px var(--dsw-alias-border-l2, rgba(255, 255, 255, .12));\n }\n [data-mobile-nav=\"home-row\"][data-current] [data-mobile-nav=\"home-row-title\"] {\n font-weight: 600;\n }\n /* Avatar: a running/warning/done session shows its existing StateDot\n (same component, same semantics as the old inline dot \u2014 just bigger\n and re-homed); otherwise the title's own first character stands in\n for it, so every row has a mark even when idle. interactive-bg-hover,\n not a bg-layer-* token: same reason as the page background above \u2014\n bg-layer-2 is IDENTICAL to the card's own bg-base in light theme\n (verified against the live theme CSS), so it would render invisible\n there. interactive-bg-hover is a translucent rgba tint rather than a\n solid layer color, so it always reads as \"a shade over the card\" in\n both themes regardless of what the card's base color resolves to. */\n [data-mobile-nav=\"home-row-avatar\"] {\n flex: none;\n display: grid;\n place-items: center;\n width: 40px;\n height: 40px;\n border-radius: 12px;\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06));\n color: var(--dsw-alias-label-secondary, rgba(0, 0, 0, .55));\n font-size: 16px;\n font-weight: 600;\n }\n [data-mobile-nav=\"home-row-body\"] {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n [data-mobile-nav=\"home-row-title\"] {\n font-size: 16px;\n line-height: 21px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n [data-mobile-nav=\"home-row-status\"] {\n color: var(--dsw-alias-label-secondary, rgba(0, 0, 0, .5));\n font-size: 12.5px;\n line-height: 17px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n [data-mobile-nav=\"home-row-time\"] {\n flex: none;\n align-self: flex-start;\n color: var(--dsw-alias-label-tertiary, rgba(0, 0, 0, .4));\n font-size: 12.5px;\n line-height: 18px;\n }\n [data-mobile-nav=\"home-empty\"] {\n margin: 12px 16px;\n padding: 48px 24px;\n border-radius: 22px;\n /* Stands in for the rows, so it carries the rows' surface. */\n background: var(--dsw-specific-sidebar-fill, #f5f5f5);\n color: var(--dsw-alias-label-secondary, rgba(0, 0, 0, .5));\n font-size: 15px;\n text-align: center;\n }\n\n /* New-session FAB: a labeled pill (real-device round 2 follow-up), not a\n bare circle \u2014 tap starts in the shown workspace, long press picks\n one. Inverted-surface tokens (not a hardcoded accent color): the same\n pair the official git-commit button in dsh-better-sidebar uses for\n its own solid CTA. */\n [data-mobile-nav=\"home-fab\"] {\n position: absolute;\n right: 18px;\n bottom: calc(var(--mnav-sab) + 22px);\n z-index: 6;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 48px;\n padding: 0 20px 0 16px;\n border: none;\n border-radius: 999px;\n background: var(--dsw-alias-button-primary-fill, #1a1a1a);\n color: var(--dsw-alias-label-primary-inverted, #ffffff);\n font-family: inherit;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n box-shadow: 0 6px 20px rgba(0, 0, 0, .24);\n touch-action: manipulation;\n user-select: none;\n -webkit-user-select: none;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n }\n [data-mobile-nav=\"home-fab\"]:active {\n transform: scale(.96);\n }\n\n /* Workspace sheet (switcher and long-press New Session share it). */\n [data-mobile-nav=\"home-sheet-layer\"] {\n position: absolute;\n inset: 0;\n z-index: 7;\n }\n [data-mobile-nav=\"home-sheet-mask\"] {\n position: absolute;\n inset: 0;\n background: var(--dsw-alias-bg-mask-3, rgba(0, 0, 0, .45));\n border: none;\n animation: dsh-mobile-nav-fade .18s var(--ds-ease-out, ease-in-out);\n }\n /* Docked to the screen edge, matching the composer's permission/model\n sheets (styles/composer.css.ts section 4) rather than floating.\n\n It used to sit at `bottom: calc(var(--mnav-sab) + 8px)` with all four\n corners rounded, which left a 42px strip of bare mask under it at\n sab: 34 (measured). Docking removes the strip instead of dimming it, and\n the safe area moves INSIDE the card as bottom padding \u2014 so the white\n card body runs all the way to the physical screen edge and the last row\n still clears the home indicator. Same reason the corners go top-only:\n a rounded bottom corner on a card flush with the screen edge reads as a\n rendering mistake. */\n [data-mobile-nav=\"home-sheet\"] {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n max-height: 70%;\n overflow-y: auto;\n overscroll-behavior: contain;\n box-sizing: border-box;\n padding: 6px 6px calc(var(--mnav-sab) + 14px);\n border-radius: 20px 20px 0 0;\n /* layer-2, not bg-base: in dark mode the sheet must lift off a page that\n shares bg-base, or only the shadow separates them. */\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n box-shadow: 0 -8px 32px rgba(0, 0, 0, .28);\n animation: dsh-mobile-nav-sheet-up .22s var(--ds-ease-out, ease-in-out);\n }\n @media (prefers-reduced-motion: reduce) {\n [data-mobile-nav=\"home-sheet-mask\"],\n [data-mobile-nav=\"home-sheet\"] {\n animation: none !important;\n }\n }\n [data-mobile-nav=\"home-sheet-title\"] {\n padding: 10px 12px 6px;\n color: var(--dsw-alias-label-secondary, rgba(0, 0, 0, .5));\n font-size: 13px;\n }\n [data-mobile-nav=\"home-sheet-item\"] {\n display: flex;\n align-items: center;\n width: 100%;\n min-height: 48px;\n padding: 0 12px;\n border: none;\n border-radius: 12px;\n background: transparent;\n color: inherit;\n font-family: inherit;\n font-size: 16px;\n text-align: left;\n cursor: pointer;\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n }\n [data-mobile-nav=\"home-sheet-item\"][data-selected] {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06));\n font-weight: 600;\n }\n [data-mobile-nav=\"home-sheet-item\"]:active {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06));\n }\n\n /* --- hero fallback back button ---\n The hero (new blank session) page renders no conversation.session.header,\n so the header-slot back button (S2) does not exist there. This floating\n fallback covers that page and hides itself as soon as the real header\n back mounts. */\n [data-mobile-nav=\"hero-back\"] {\n position: absolute;\n top: calc(var(--mnav-sat) + 8px);\n left: 8px;\n z-index: 6;\n width: 44px;\n height: 44px;\n display: grid;\n place-items: center;\n border: none;\n border-radius: 14px;\n background: transparent;\n color: var(--dsw-alias-label-secondary, inherit);\n pointer-events: auto;\n }\n [data-mobile-nav=\"hero-back\"]:active {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06));\n }\n [data-mobile-nav=\"frame\"]:has([data-mobile-nav=\"header-back\"]) ~ [data-mobile-nav=\"hero-back\"],\n body:has([data-mobile-nav=\"header-back\"]) [data-mobile-nav=\"hero-back\"] {\n display: none;\n }\n}\n"; //# sourceMappingURL=home.css.d.ts.map