export declare const BASE_CSS = "\n/* ---------- base control styles (rendered at any width, hidden where unused) ---------- */\n\n[data-mobile-nav=\"toggle\"],\n[data-mobile-nav=\"files\"] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex: none;\n padding: 0;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: var(--dsw-alias-label-secondary, inherit);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n[data-mobile-nav=\"toggle\"]:hover,\n[data-mobile-nav=\"files\"]:hover,\n[data-mobile-nav=\"toggle\"]:active,\n[data-mobile-nav=\"files\"]:active {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06));\n}\n[data-mobile-nav=\"toggle\"]:focus-visible,\n[data-mobile-nav=\"files\"]:focus-visible {\n outline: 2px solid var(--dsw-alias-state-business-primary, #4f6ef7);\n outline-offset: 1px;\n}\n\n/* Drawer brand-row session-log icon (issue #225): the plugin-owned button is\n injected into the host's logo row by effects/drawer-session-log.ts, so it\n sizes as a compact icon control instead of the old footer pill. The host\n brand button is flex:1 and gives up exactly this width. The wrapper keeps the\n button out of the row's direct-button set: the third-party dsh-web-all layer\n adopts that row's last direct button as its sidebar toggle (see\n effects/drawer-session-log.ts#mount). */\n[data-mobile-nav=\"session-log-wrap\"] {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n}\n[data-mobile-nav=\"session-log\"] {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-md, 8px);\n background: transparent;\n color: var(--dsw-alias-label-secondary, inherit);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n[data-mobile-nav=\"session-log\"]:hover:not(:disabled),\n[data-mobile-nav=\"session-log\"]:active:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06));\n}\n[data-mobile-nav=\"session-log\"]:disabled {\n color: var(--dsw-alias-label-dimmed, rgba(0, 0, 0, .35));\n cursor: default;\n background: transparent;\n}\n\n[data-mobile-nav=\"delete-confirm-title\"] {\n font-size: 16px;\n font-weight: 500;\n line-height: 24px;\n color: var(--dsw-alias-text-primary, rgb(15, 17, 21));\n}\n[data-mobile-nav=\"delete-confirm-desc\"] {\n font-size: 12px;\n line-height: 17px;\n color: var(--dsw-alias-label-secondary, inherit);\n}\n[data-mobile-nav=\"delete-confirm-actions\"] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 2px;\n}\n[data-mobile-nav=\"delete-confirm-actions\"] > button {\n height: 36px;\n padding: 0 14px;\n border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, .12));\n border-radius: 18px;\n background: transparent;\n color: var(--dsw-alias-label-primary, inherit);\n font-family: inherit;\n font-size: 14px;\n line-height: 20px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n[data-mobile-nav=\"delete-confirm-yes\"] {\n border-color: transparent !important;\n background: var(--dsw-alias-state-error-primary, #b91c1c) !important;\n color: #ffffff !important;\n}\n[data-mobile-nav=\"delete-confirm-actions\"] > button:disabled {\n opacity: .55;\n cursor: default;\n}\n[data-mobile-nav=\"delete-error\"] {\n width: 100%;\n font-size: 14px;\n line-height: 20px;\n color: var(--dsw-alias-state-error-primary, #b91c1c);\n}\n\n/* Centered frosted-glass modal for the delete confirm / error card: the\n backdrop is a flex positioning container (centering + 16px inset padding)\n and the card rides inside it as a static child (session-menu.ts appends\n the card INTO the backdrop for exactly this reason). Look baseline = the\n host \u22EF menu's portal root, measured 2026-09-24: translucent\n rgba(248,249,250,.58) fill with blur(40px) saturate(1.5) frosted glass,\n 16px radius, hairline + soft shadow. Geometry baseline = the host Dialog,\n measured the same day: centered modal, 16px/500 title, 36px pill buttons,\n solid-fill primary. [hidden] keeps the error line out of layout until a\n failure lands. */\n[data-mobile-nav=\"delete-dialog-backdrop\"] {\n position: fixed;\n inset: 0;\n z-index: 55;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(0, 0, 0, .4);\n animation: dsh-web-mobile-fade .2s var(--ds-ease-in-out, ease-in-out);\n}\n[data-mobile-nav=\"delete-dialog\"] {\n position: static;\n width: min(420px, calc(100vw - 32px));\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n border-radius: 16px;\n background: rgba(248, 249, 250, .58);\n -webkit-backdrop-filter: blur(40px) saturate(1.5);\n backdrop-filter: blur(40px) saturate(1.5);\n box-shadow: rgba(0, 0, 0, .04) 0 0 0 .5px, rgba(0, 0, 0, .04) 0 3px 8px 0, rgba(0, 0, 0, .05) 0 0 20px 0;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-mobile-nav=\"delete-dialog-backdrop\"],\n [data-mobile-nav=\"delete-dialog\"],\n [data-mobile-nav=\"file-picker-backdrop\"],\n [data-mobile-nav=\"file-picker\"] {\n animation: none !important;\n }\n}\n\n/* ---------- composer file picker (effects/composer-file-picker.ts) ----------\n \u624B\u673A\u6863\u56DE\u5F62\u9488\u5165\u53E3\u7684\u4E24\u9009\u9879\u6D6E\u5C42\uFF08\u4E0A\u4F20\u56FE\u7247 / \u4E0A\u4F20\u9644\u4EF6\uFF09\u3002\u5BBF\u4E3B\u5728 0.1.6 \u5220\u6389\u4E86\u81EA\u5E26\u7684\n \u9644\u4EF6\u6309\u94AE\uFF0C\u53EA\u5269 composer \u91CC\u4E00\u4E2A\u9690\u85CF input\uFF0C\u76F4\u63A5\u70B9\u5B83\u53EA\u4F1A\u5F39\u7CFB\u7EDF\u6587\u4EF6\u9009\u62E9\u5668 \u2014\u2014\n \u5F62\u6001\u4E0D\u53EF\u63A7\u3001\u4E5F\u6CA1\u6709\u300C\u53EA\u6311\u56FE\u7247\u300D\u8FD9\u6761\u8DEF\uFF082026-10-06 \u62A5\u969C\uFF09\u3002\n \u5F62\u6001\uFF08\u540C\u65E5\u5E97\u4E3B\u53CD\u9988\u300C\u8FD9\u4E2A UI \u592A\u4E11\u4E86\uFF0C\u7F29\u5C0F\u70B9\uFF0C\u4E0D\u8981\u4ECE\u5E95\u90E8\u5F39\u51FA\u300D\uFF09\uFF1A**\u8D34\u951A\u70B9\u7684\u5C0F\u6D6E\u5C42**\uFF0C\n \u4E0D\u662F\u6574\u5BBD\u5E95\u90E8\u5F39\u5C42 \u2014\u2014 \u5BBD\u5EA6\u8D34\u7740\u5185\u5BB9\uFF08\u300Cwidth: max-content\u300D\uFF0C\u4E0A\u9650 min(78vw, 240px)\uFF09\uFF0C\u884C\u9AD8 34px\u3001\n \u884C\u95F4\u8DDD 0\uFF082026-10-07 \u5E97\u4E3B\uFF1A\u300C\u4E4B\u95F4\u7684\u8DDD\u79BB\u66F4\u7D27\u81F4\u4E00\u70B9\u300D+\u300C\u53F3\u8FB9\u7684\u7559\u767D\u6709\u70B9\u591A\u4E86\uFF0C\u5F80\u5DE6\u8FB9\u7F29\u70B9\u300D\uFF09\uFF0C\u5B57\u53F7 14px\u3002\n \u5B9A\u4F4D\u7528\u300Cposition: fixed\u300D\uFF0Ctop/left \u7531 JS \u6309\u56DE\u5F62\u9488 rect \u7B97\uFF08\u4E0A\u65B9\u4F18\u5148\uFF0C\u5939\u8FDB\u89C6\u53E3 8px\n \u5185\u8FB9\u8DDD\uFF0C\u4E14**\u89C6\u53E3\u4E00\u53D8\u5C31\u91CD\u7B97** \u2014\u2014 \u952E\u76D8\u6536\u8D77\u628A\u6574\u4F53\u4E0B\u79FB\u4E00\u4E2A\u952E\u76D8\u9AD8\u65F6\u6D6E\u5C42\u5FC5\u987B\u8DDF\u7740\u951A\u70B9\u8D70\uFF0C\n \u5426\u5219\u4F1A\u505C\u5728\u4F1A\u8BDD\u4E2D\u90E8\uFF0C2026-10-07 \u771F\u673A\u62A5\u969C\uFF09\uFF0C\u6240\u4EE5\u8FD9\u91CC\u53EA\u5199\u76D2\u5B50\u3001\u4E0D\u5199\u5B9A\u4F4D\u4E0E\u6574\u5BBD\u3002\n \u6CA1\u6709\u300C\u53D6\u6D88\u300D\u884C\uFF1A\u70B9\u6D6E\u5C42\u5916\u6216\u6309\u8FD4\u56DE\u952E\u5173\u95ED\uFF08\u5916\u5C42\u900F\u660E\u906E\u7F69\u53EA\u8D1F\u8D23\u6536\u70B9\u51FB\uFF09\u3002\n \u6302 document.body\uFF08\u4E0E\u4E0A\u9762\u7684 delete-dialog \u540C\u4E00\u53D6\u820D\uFF1A\u6302\u5728 frame \u91CC\u4F1A\u88AB\u7B2C\u4E09\u65B9\n dismiss shim \u7684\u6355\u83B7\u94FE\u541E\u70B9\u51FB\uFF09\uFF0Cz \u5728\u79FB\u52A8\u6863\u5757\u91CC\u62AC\u5230 1400\u3002 */\n[data-mobile-nav=\"file-picker-backdrop\"] {\n position: fixed;\n inset: 0;\n z-index: 55;\n background: transparent;\n}\n[data-mobile-nav=\"file-picker\"] {\n position: fixed;\n box-sizing: border-box;\n /* \u5BBD\u5EA6\u8D34\u7740\u5185\u5BB9\uFF082026-10-07 \u5E97\u4E3B\uFF1A\u300C\u53F3\u8FB9\u7684\u7559\u767D\u6709\u70B9\u591A\u4E86\uFF0C\u5F80\u5DE6\u8FB9\u7F29\u70B9\u300D\uFF09\uFF1A\n \u4E24\u884C\u90FD\u662F\u300C\u56FE\u6807 + \u4E24\u5B57\u6807\u7B7E\u300D\uFF0C\u56FA\u5B9A 168px \u8D77\u6B65\u4F1A\u5728\u53F3\u4FA7\u7559\u4E00\u5927\u5757\u7A7A\u767D\u3002 */\n width: max-content;\n min-width: 0;\n max-width: min(78vw, 240px);\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 5px;\n border-radius: 12px;\n background: var(--dsw-alias-bg-layer-2, #fff);\n box-shadow: rgba(0, 0, 0, .16) 0 8px 28px, rgba(0, 0, 0, .06) 0 0 0 .5px;\n animation: dsh-web-mobile-fade .12s var(--ds-ease-in-out, ease-in-out);\n}\n[data-mobile-nav=\"file-picker-option\"] {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 10px;\n min-height: 34px;\n padding: 0 10px;\n border: 0;\n border-radius: 8px;\n background: transparent;\n color: var(--dsw-alias-label-primary, currentColor);\n font: inherit;\n font-size: 14px;\n line-height: 1.3;\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n[data-mobile-nav=\"file-picker-icon\"] {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-secondary, currentColor);\n}\n[data-mobile-nav=\"file-picker-icon\"] svg {\n width: 18px;\n height: 18px;\n}\n[data-mobile-nav=\"file-picker-option\"]:active {\n background: var(--dsw-alias-interactive-bg-active, rgba(127, 127, 127, .12));\n}\n\n/* ---------- popover band above the open drawer (mobile only) ----------\n The host portals its menus to as position: fixed with z-index 1100,\n while the drawer column carries 1300 and our backdrop 1250. A menu opened\n from inside the drawer therefore painted UNDER both: measured 2026-09-14 at\n 390px on the session row's \u22EF menu \u2014 menu rect [160,454,218,168] z1100, and\n elementFromPoint at its centre AND at both of its ends returned drawer\n elements, so the whole menu was unreachable and the row could not be\n renamed/forked/archived/deleted from the phone (the second half of the\n owner's report: the popup the \u22EF opens is pressed under the drawer).\n The raise is gated on the open drawer: our backdrop makes that the only\n state in which a menu can be opened from the drawer, so the closed-drawer\n and desktop stacks keep the host's own ordering.\n The plugin's own confirm card sits in the same band: it mounts on\n document.body (NOT in the frame \u2014 see session-menu.ts, which appends the\n backdrop and the card there so the third-party dismiss shim's capture-phase\n click chain cannot swallow its buttons) and carried the base z 55/56, so the\n drawer covered its left 272px (measured: elementFromPoint inside that band hit\n the drawer's own button, and the confirm card is 358px wide starting at x=8). */\n@media (max-width: 1023px) and (pointer: coarse) {\n body:has([data-mobile-nav=\"frame\"]:not([data-sidebar-collapsed])) [role=\"menu\"] {\n z-index: 1400 !important;\n }\n /* Host modal dialogs (workspace rename, and any future dialog of the same\n shape) portal to a direct body child that carries the stacking context:\n body > div { position: fixed; z-index: 1000 } wrapping\n [role=\"dialog\"][aria-modal=\"true\"] (inner z-index: 1 \u2014 raising the dialog\n itself is useless, it only sorts inside that root).\n NOTE (2026-09-23): the hashes once recorded here (_root_w1urq_2 /\n _dialog_w1urq_22) are gone from both 0.1.7-alpha.1 and alpha.2, so this\n comment anchors on the SHAPE only \u2014 which is what the rule below already\n matches. Do not reintroduce a hash here without re-measuring.\n Measured 2026-09-19: with the drawer open (column z 1300) the workspace\n Rename dialog sat entirely under it and needed the drawer closed first.\n Raise the portal root, not the dialog.\n GATE (2026-09-25, real device): the gate is OUR BACKDROP'S PRESENCE, not\n the drawer-open marker. Marker and paint disagree for the whole close\n transition \u2014 the backdrop fades over .2s and is removed 260ms after the\n marker flips (overlay-backdrop-fab.ts), the column transitions .28s\n (layout.css.ts) and React swaps the pane subtree ~200ms late \u2014 so a\n marker-gated raise went dark inside that window and the drawer band\n covered any open modal. Measured on the reporter's phone (Android 16\n WebView) with the shortcut modal open: forcing data-sidebar-collapsed\n dropped this root 1400 -> 1000 and made elementsFromPoint(0.85w, .30h)\n return [data-mobile-nav=\"backdrop\"] \u2014 rgba(0,0,0,.45) over the modal's\n white = luminance 141, matching the reporter's recording (140 behind a\n 280px drawer edge). That is the \"\u5FEB\u6377\u952E\u5F39\u5C42\u62BD\u6410/\u95EA\" report: a ~200-280ms\n dark frame with the drawer over the shortcut modal, not a compositing\n tear. The backdrop's presence IS the drawing condition, so gating on it\n has no such window; with no backdrop the host's own ordering stands (a\n menu opened inside a modal still sorts above it). Our own delete backdrop\n matches this rule too since the 2026-09-24 centered rework (its direct\n child card carries role=dialog) \u2014 harmlessly: it sets the same 1400 the\n dedicated rule below sets. */\n body:has([data-mobile-nav=\"backdrop\"])\n > div:has(> [role=\"dialog\"][aria-modal=\"true\"]) {\n z-index: 1400 !important;\n }\n [data-mobile-nav=\"delete-dialog-backdrop\"] {\n z-index: 1400 !important;\n }\n /* \u540C\u4E00\u4E2A\u5E26\u91CC\uFF1A\u56DE\u5F62\u9488\u5F39\u5C42\u4E5F\u8981\u538B\u8FC7\u62BD\u5C49\uFF08z 1300\uFF09\u4E0E\u62BD\u5C49\u906E\u7F69\uFF081250\uFF09\u3002 */\n [data-mobile-nav=\"file-picker-backdrop\"] {\n z-index: 1400 !important;\n }\n [data-mobile-nav=\"delete-dialog\"] {\n z-index: 1401 !important;\n }\n /* dsh-usage-stats portals its panel to as position: fixed with\n z-index 100 (desktop-designed; the drawer does not exist there). With our\n drawer open (column z 1300) the\u300C\u7528\u91CF/\u4F59\u989D\u300Dpanel sat under it: measured\n 2026-09-20 at 390px \u2014 panel rect [12,91,366,625] z100 vs drawer 280px wide\n z1300, and elementFromPoint at the panel's centre AND its left corners\n returned drawer elements, so only a ~98px strip on the right stayed\n reachable. The plugin also unmounts the panel when the drawer closes\n (Escape-linked dismissal) and the badge only renders in the open drawer,\n so the open-drawer gate covers the panel's only reachable state; the\n closed-drawer and desktop stacks keep the plugin's own ordering. */\n body:has([data-mobile-nav=\"frame\"]:not([data-sidebar-collapsed]))\n [data-usage-stats-panel] {\n z-index: 1400 !important;\n }\n /* AppFrame overlayLayer band \u2014 the class self-fix of our own layering\n contract (NOT a per-plugin adaptation): plugin and host sheets portal\n INTO the AppFrame overlay layer (position: absolute; z-index 20 \u2014 its\n own stacking context), so no z-index on a sheet itself can out-rank the\n drawer column's 1300 in the root context, and every sheet opened from\n the drawer landed behind it. Measured 2026-09-22 at 390px with the\n drawer open: a probe sheet inside the layer stayed hit-blocked by\n drawer elements at z auto AND z 9999 alike, and only raising the layer\n ROOT revealed it (elementFromPoint). Raise the stacking root, not the\n children \u2014 the same shape as the dialog portal-root raise above. The\n body-ported bands keep their own raises (menus 1100, dialog root 1000,\n usage-stats panel 100): each is a per-surface adaptation patch for a\n portal OUTSIDE this layer. Closed-drawer and desktop stacks keep the\n host's own ordering. */\n body:has([data-mobile-nav=\"frame\"]:not([data-sidebar-collapsed]))\n [class*=\"_overlayLayer\"] {\n z-index: 1400 !important;\n }\n /* 0.1.7 fullscreen sidebar panels (the sidebar terminal / files / preview /\n browser tabs) state the dockkit cell at z 40 \u2014 the host sets\n --dsh-dockkit-dock-layer: 40 on .panel[data-sidebar-right-panel=fullscreen]\n \u2014 which outranks the\n host's own overlay layer (20) and our FAB (21). Measured 2026-09-23 at\n 390px with the terminal panel open: elementFromPoint at the FAB's centre\n returned a panel child, and a real tap on it left the drawer closed \u2014 the\n phone lost its only way back to navigation (the FAB is the screen's only\n control once a panel owns the main area, see overlay-backdrop-fab.ts).\n Raise OUR two surfaces for that state, the same \"raise the root, not the\n children\" shape as above; the FAB stays in the below-the-drawer band (55)\n so an open drawer keeps covering it. Gate on the open attribute: the\n presentation attribute alone survives a closed panel. Closed-panel,\n docked-panel (dock layer 10) and desktop stacks keep the host's order. */\n body:has([data-sidebar-right-open][data-sidebar-right-panel=\"fullscreen\"]) [data-mobile-nav=\"fab\"] {\n z-index: 55 !important;\n }\n body:has([data-sidebar-right-open][data-sidebar-right-panel=\"fullscreen\"])\n [class*=\"_overlayLayer\"] {\n z-index: 1400 !important;\n }\n}\n\n/* ---------- touch press feedback (mobile + hover: none only) ----------\n Android WebView paints its own translucent blue tap highlight\n (-webkit-tap-highlight-color default) over every tapped control. The\n property is inherited and no host package sets it on descendants (grep of\n dsh-client-ui-* bundles, 2026-10), so transparent on html/body clears it\n page-wide; the explicit transparent values on our own controls above stay\n as the desktop-width fallback. In its place the UI gives its own pressed\n state: an inset box-shadow tint (paint-only, no layout, does not fight a\n host background) in the host's interactive-bg-active colour, which the\n theme defines for both light and dark. Every selector sits in :where(), so\n (0,0,0) loses to any host or plugin rule that styles the element itself \u2014\n aria-selected / aria-pressed / own :active states keep their look \u2014 and\n :focus-visible outlines are untouched. Desktop and narrow mouse windows\n never enter this block (MOBILE_QUERY + hover: none). */\n@media (max-width: 1023px) and (pointer: coarse) {\n @media (hover: none) {\n html,\n body {\n -webkit-tap-highlight-color: transparent;\n }\n :where(button, [role=\"button\"], [role=\"menuitem\"], [role=\"menuitemradio\"], [role=\"option\"], [role=\"tab\"], [role=\"treeitem\"], a[href]) {\n transition: box-shadow .12s var(--ds-ease-in-out, ease-in-out), transform .12s var(--ds-ease-in-out, ease-in-out);\n }\n :where(button, [role=\"button\"], [role=\"menuitem\"], [role=\"menuitemradio\"], [role=\"option\"], [role=\"tab\"], [role=\"treeitem\"], a[href]):where(:active):where(:not(:disabled, [aria-disabled=\"true\"], [aria-selected=\"true\"], [aria-pressed=\"true\"], [aria-checked=\"true\"])) {\n box-shadow: inset 0 0 0 100vmax var(--dsw-alias-interactive-bg-active, color-mix(in srgb, currentColor 8%, transparent));\n }\n /* Icon-only buttons (a lone svg child, or a button that carries only an\n aria-label) also shrink a touch. */\n :where(button:has(> svg:only-child), button[aria-label]:not(:has(> span, > div))):where(:active):where(:not(:disabled, [aria-disabled=\"true\"])) {\n transform: scale(.96);\n }\n /* \u4F8B\u5916\uFF082026-10-20\uFF0C\u5E97\u4E3B\uFF09\uFF1A\u5934\u90E8\u90A3\u4E24\u9897\u82AF\u7247\u4E0D\u8981\u6309\u538B\u53CD\u9988\u3002\n \u75C7\u72B6\uFF1A\u70B9\u300C\u667A\u80FD\u4F53\u56E2\u961F\u300D\u56FE\u6807\u5F00\u9762\u677F\u3001\u518D\u70B9\u5B83\u5173\u95ED\u65F6\uFF0C\u56FE\u6807\u5468\u56F4\u95EA\u4E00\u5757\u6D45\u7070\n \uFF08:active \u7684 inset \u586B\u5145 + \u56FE\u6807\u7F29\u5230 .96\uFF09\uFF1B\u300C\u5B50\u667A\u80FD\u4F53 / N \u4E2A\u5B50\u4EE3\u7406\u300D\u82AF\u7247\u540C\u6837\u3002\n \u4E3A\u4EC0\u4E48\u8981\u53BB\u6389\uFF1A\u8FD9\u4E24\u9897**\u5F00\u542F\u6001\u672C\u6765\u5C31\u6709\u5BBF\u4E3B\u81EA\u5DF1\u7684\u53CD\u9988** \u2014\u2014 \u56E2\u961F\u56FE\u6807\u6253\u5F00\u65F6\u53D8\u7C97\uFF0C\n \u5B50\u667A\u80FD\u4F53\u82AF\u7247\u53F3\u4FA7\u6709 chevron\uFF1B\u6309\u538B\u7070\u5708\u548C\u5B83\u4EEC\u8BF4\u7684\u662F\u540C\u4E00\u4EF6\u4E8B\uFF0C\u7B49\u4E8E\u4E24\u4EFD\u53CD\u9988\u53E0\u5728\n \u4E00\u8D77\uFF0C\u529F\u80FD\u91CD\u590D\u3002\u52A0\u4E0A\u4E24\u9897\u5E73\u65F6\u6CA1\u6709\u5E95\u8272\uFF0C\u6574\u5757\u6D6E\u7070\u5728\u6D45\u8272\u58C1\u7EB8\u4E0A\u50CF\u4E00\u5757\u810F\u3002\u6240\u4EE5\n \u53EA\u7ED9\u5B83\u4EEC\u6E05\u6389\uFF0C\u5176\u5B83\u6309\u94AE\uFF08\u62BD\u5C49\u884C\u3001\u83DC\u5355\u9879\u3001\u6807\u7B7E\u9875\u3001\u56DE\u5F62\u9488\u7B49\uFF09\u7684\u6309\u538B\u53CD\u9988\u539F\u6837\u4FDD\u7559\u3002\n \u4E24\u4E2A\u6807\u8BB0\u90FD\u662F\u5BBF\u4E3B\u7A33\u5B9A\u7684 data-*\uFF08\u4E0D\u662F\u54C8\u5E0C\u7C7B\uFF09\uFF1B\u5BBF\u4E3B\u6362\u6807\u8BB0\u65F6\u672C\u5757\u60F0\u6027\u5931\u6548\uFF0C\n \u5C4A\u65F6\u6309\u65B0\u6807\u8BB0\u6539\u9009\u62E9\u5668\u5373\u53EF\uFF0C\u4E0D\u5FC5\u8FDE\u5E26\u6539\u4E0A\u9762\u4E24\u6761\u901A\u7528\u89C4\u5219\u3002 */\n [data-team-action] > button:active,\n [data-dsha-lineage-trigger]:active {\n box-shadow: none;\n transform: none;\n }\n @media (prefers-reduced-motion: reduce) {\n :where(button, [role=\"button\"], [role=\"menuitem\"], [role=\"menuitemradio\"], [role=\"option\"], [role=\"tab\"], [role=\"treeitem\"], a[href]) {\n transition: none;\n }\n :where(button:has(> svg:only-child), button[aria-label]:not(:has(> span, > div))):where(:active) {\n transform: none;\n }\n }\n }\n}\n\n/* Floating fallback button (hero / blank phases without a session header).\n Top aligns with the session header's toggle row (that row sits 12px below\n the frame's safe-area padding); when the client has set viewport-fit=cover\n the safe-area inset moves it below the notch too. */\n[data-mobile-nav=\"fab\"] {\n position: absolute;\n top: calc(env(safe-area-inset-top, 0px) + 12px);\n left: 10px;\n z-index: 21;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n padding: 0;\n border: 1px solid var(--dsw-alias-border-l1, rgba(0, 0, 0, .12));\n border-radius: 50%;\n background: var(--dsw-alias-button-floating-fill, #ffffff);\n color: var(--dsw-alias-label-primary, inherit);\n cursor: pointer;\n box-shadow: 0 2px 12px rgba(0, 0, 0, .18);\n -webkit-tap-highlight-color: transparent;\n}\n[data-mobile-nav=\"fab\"]:hover {\n background: var(--dsw-alias-button-floating-hover, rgba(0, 0, 0, .08));\n}\n[data-mobile-nav=\"fab\"]:focus-visible {\n outline: 2px solid var(--dsw-alias-state-business-primary, #4f6ef7);\n outline-offset: 2px;\n}\n\n/* Dimmed backdrop under the open drawer; above every column, below the drawer.\n z 1250: 0.1.5 pins its native sidebarCol at z-index:1100 and paints mid\n layers up to that band; the backdrop must sit above the host stack\n (below the drawer's 1300) so the dim covers the content area on every\n host generation. Keep in sync with the drawer z in layout.css.ts. */\n[data-mobile-nav=\"backdrop\"] {\n position: absolute;\n inset: 0;\n z-index: 1250;\n background: rgba(0, 0, 0, .45);\n cursor: pointer;\n animation: dsh-web-mobile-fade .2s var(--ds-ease-in-out, ease-in-out);\n /* Fade-out twin of the mount animation: the task eases the dimming away\n (inline opacity 0 + pointer-events none) and removes the element after\n the fade. Also used by the gesture layer so the backdrop fades in step\n with a close-follow commit's slide-out. */\n transition: opacity .2s var(--ds-ease-in-out, ease-in-out);\n -webkit-tap-highlight-color: transparent;\n}\n@keyframes dsh-web-mobile-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@media (prefers-reduced-motion: reduce) {\n [data-mobile-nav=\"backdrop\"] {\n animation: none !important;\n transition: none !important;\n }\n}\n/* Settings sheet entrance: the official dialog mounts with no animation at\n all, so it snaps in. A slight rise/scale reads as a proper sheet.\n No opacity arm (issue #124, 2026-09-25): checker scene 4 screencast caught\n the fade double-exposing the still-open drawer underneath the panel\n (frame a005) \u2014 sliding in fully opaque keeps the motion, drops the bleed. */\n@keyframes dsh-web-mobile-sheet-in {\n from {\n transform: translateY(14px) scale(.98);\n }\n to {\n transform: none;\n }\n}\n/* Preview sheet rise: the aionui preview column opens as a bottom sheet. */\n@keyframes dsh-web-mobile-sheet-up {\n from {\n opacity: 0;\n transform: translateY(28px);\n }\n to {\n opacity: 1;\n transform: none;\n }\n}\n\n"; //# sourceMappingURL=base.css.d.ts.map