@vibes.diy/base 14.3.275 → 14.3.277
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/VibesWindowFrame.d.ts +1 -0
- package/components/VibesWindowFrame.js +10 -3
- package/components/VibesWindowFrame.js.map +1 -1
- package/components/VibesWindowFrame.styles.d.ts +1 -1
- package/components/VibesWindowFrame.styles.js +51 -0
- package/components/VibesWindowFrame.styles.js.map +1 -1
- package/components/vibe-menu/cards/AccountCard.d.ts +4 -1
- package/components/vibe-menu/cards/AccountCard.js +39 -0
- package/components/vibe-menu/cards/AccountCard.js.map +1 -1
- package/components/vibe-menu/cards/CodeCard.js +18 -4
- package/components/vibe-menu/cards/CodeCard.js.map +1 -1
- package/components/vibe-menu/cards/CodeTabRow.d.ts +10 -1
- package/components/vibe-menu/cards/CodeTabRow.js +13 -4
- package/components/vibe-menu/cards/CodeTabRow.js.map +1 -1
- package/components/vibe-menu/parts/CardTabRow.d.ts +1 -1
- package/components/vibe-menu/slices.d.ts +2 -0
- package/components/vibe-menu/slices.js.map +1 -1
- package/components/vibe-menu/vibe-menu.styles.d.ts +1 -1
- package/components/vibe-menu/vibe-menu.styles.js +11 -0
- package/components/vibe-menu/vibe-menu.styles.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import React, { useEffect, useId, useRef, useState } from "react";
|
|
1
|
+
import React, { createContext, useContext, useEffect, useId, useRef, useState } from "react";
|
|
2
2
|
import { VibesWindowHeader, VibesWindowStyles } from "./VibesWindowHeader.js";
|
|
3
3
|
import { LAUNCH_PAGE_COPY, LaunchMoment } from "./vibe-menu/cards/LaunchMoment.js";
|
|
4
|
+
const WindowBarCenterContext = createContext(null);
|
|
5
|
+
export function useWindowBarCenter() {
|
|
6
|
+
return useContext(WindowBarCenterContext);
|
|
7
|
+
}
|
|
4
8
|
const CLOSE_MS = 500;
|
|
5
9
|
const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
6
10
|
function isShown(el) {
|
|
@@ -17,6 +21,7 @@ export function VibesWindowFrame({ menuOpen, onToggleMenu, onCloseMenu, onMenuIn
|
|
|
17
21
|
const barRef = useRef(null);
|
|
18
22
|
const panelRef = useRef(null);
|
|
19
23
|
const returnFocusRef = useRef(null);
|
|
24
|
+
const [barCenter, setBarCenter] = useState(null);
|
|
20
25
|
const [closing, setClosing] = useState(false);
|
|
21
26
|
const [prevOpen, setPrevOpen] = useState(menuOpen);
|
|
22
27
|
if (prevOpen !== menuOpen) {
|
|
@@ -90,11 +95,13 @@ export function VibesWindowFrame({ menuOpen, onToggleMenu, onCloseMenu, onMenuIn
|
|
|
90
95
|
React.createElement("div", { className: "vwin-panel", "data-testid": "window-panel" },
|
|
91
96
|
React.createElement("div", { className: "vwin-grid-area", "aria-hidden": "true" },
|
|
92
97
|
React.createElement("div", { className: "vwin-grid", "data-testid": "window-grid" })),
|
|
93
|
-
React.createElement("div", { className: "vwin-content", "data-testid": "window-content", inert: leaving },
|
|
98
|
+
React.createElement("div", { className: "vwin-content", "data-testid": "window-content", inert: leaving },
|
|
99
|
+
React.createElement(WindowBarCenterContext.Provider, { value: barCenter }, children))),
|
|
94
100
|
leaving && leavingMoment ? React.createElement(LeavingMoment, null) : null,
|
|
95
101
|
React.createElement("div", { className: "vwin-chrome", "data-testid": "window-chrome", style: pan },
|
|
96
102
|
React.createElement("div", { className: "vwin-chrome-bar" },
|
|
97
|
-
React.createElement(VibesWindowHeader, { buttonRef: barRef, withStyles: false, onIntent: onMenuIntent, isOpen: menuOpen, onToggle: onToggleMenu, controlsId: menuId, scheme: scheme, ovalColor: ovalColor, ovalStatusKey: ovalStatusKey, isTwinkling: isTwinkling, menuHidden: menuHidden })
|
|
103
|
+
React.createElement(VibesWindowHeader, { buttonRef: barRef, withStyles: false, onIntent: onMenuIntent, isOpen: menuOpen, onToggle: onToggleMenu, controlsId: menuId, scheme: scheme, ovalColor: ovalColor, ovalStatusKey: ovalStatusKey, isTwinkling: isTwinkling, menuHidden: menuHidden }),
|
|
104
|
+
React.createElement("div", { ref: setBarCenter, className: "vwin-bar-center", "data-testid": "window-bar-center" }))),
|
|
98
105
|
React.createElement("div", { className: "vwin-menu-layer", "data-testid": "window-menu-layer", inert: phase !== "open", style: pan },
|
|
99
106
|
React.createElement("div", { className: "vwin-overlay", "data-testid": "window-menu-overlay", onClick: onCloseMenu }),
|
|
100
107
|
React.createElement("div", { ref: panelRef, id: menuId, className: "vwin-menu-panel", role: "dialog", "aria-modal": "true", "aria-label": menuLabel, tabIndex: -1 }, menu))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VibesWindowFrame.js","sourceRoot":"","sources":["../../jsr/components/VibesWindowFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"VibesWindowFrame.js","sourceRoot":"","sources":["../../jsr/components/VibesWindowFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAUnF,MAAM,sBAAsB,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAC;AAGvE,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAC5C,CAAC;AAGD,MAAM,QAAQ,GAAG,GAAG,CAAC;AAIrB,MAAM,SAAS,GACb,2IAA2I,CAAC;AAG9I,SAAS,OAAO,CAAC,EAAW;IAC1B,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,CAAC;AAGD,SAAS,YAAY,CAAC,IAAiB;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;AACjI,CAAC;AAID,SAAS,iBAAiB,CAAC,SAAsB;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,sCAAsC,CAAC,CAAC,CAAC,IAAI,CACvF,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,CACnE,CAAC;AACJ,CAAC;AA2DD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,SAAS,GAAG,MAAM,EAClB,MAAM,EACN,SAAS,EACT,aAAa,EACb,WAAW,EACX,SAAS,GAAG,CAAC,EACb,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,KAAK,EACf,aAAa,GAAG,IAAI,EACpB,UAAU,GAAG,KAAK,EAClB,QAAQ,GACc;IACtB,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAIrE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtB,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAc,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE5E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAGd,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAC3B,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC;YAChD,KAAK,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,MAAM,cAAc,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7F,IAAI,cAAc,CAAC,OAAO,KAAK,IAAI,IAAI,cAAc,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,YAAY,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACrG,IAAI,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;IAChC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAIf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAMf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC;gBAAE,OAAO;YACvD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,WAAW,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;gBAAE,OAAO;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;YAEtC,MAAM,EAAE,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAqB,CAAC,CAAC;YACvE,IAAI,IAAY,CAAC;YACjB,IAAI,KAAK,CAAC,QAAQ;gBAAE,IAAI,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;;gBACjF,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAE5B,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,OAAO,CACL,6BACE,SAAS,EAAC,uBAAuB,iBACpB,MAAM,qBACF,KAAK,gBACV,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,kBAChC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAEtC,KAAK,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAE,EAAE,YAAY,EAAE,GAAG,SAAS,IAAI,EAA0B,CAAC,CAAC,CAAC,SAAS,iBAClF,cAAc;QAE1B,oBAAC,iBAAiB,OAAG;QACrB,6BAAK,SAAS,EAAC,YAAY,iBAAa,cAAc;YACpD,6BAAK,SAAS,EAAC,gBAAgB,iBAAa,MAAM;gBAChD,6BAAK,SAAS,EAAC,WAAW,iBAAa,aAAa,GAAG,CACnD;YACN,6BAAK,SAAS,EAAC,cAAc,iBAAa,gBAAgB,EAAC,KAAK,EAAE,OAAO;gBACvE,oBAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,IAAG,QAAQ,CAAmC,CAC3F,CACF;QACL,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,oBAAC,aAAa,OAAG,CAAC,CAAC,CAAC,IAAI;QACpD,6BAAK,SAAS,EAAC,aAAa,iBAAa,eAAe,EAAC,KAAK,EAAE,GAAG;YACjE,6BAAK,SAAS,EAAC,iBAAiB;gBAC9B,oBAAC,iBAAiB,IAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,GACtB;gBAEF,6BAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAC,iBAAiB,iBAAa,mBAAmB,GAAG,CAClF,CACF;QACN,6BAAK,SAAS,EAAC,iBAAiB,iBAAa,mBAAmB,EAAC,KAAK,EAAE,KAAK,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG;YAClG,6BAAK,SAAS,EAAC,cAAc,iBAAa,qBAAqB,EAAC,OAAO,EAAE,WAAW,GAAI;YACxF,6BACE,GAAG,EAAE,QAAQ,EACb,EAAE,EAAE,MAAM,EACV,SAAS,EAAC,iBAAiB,EAC3B,IAAI,EAAC,QAAQ,gBACF,MAAM,gBACL,SAAS,EACrB,QAAQ,EAAE,CAAC,CAAC,IAEX,IAAI,CACD,CACF,CACF,CACP,CAAC;AACJ,CAAC;AAKD,SAAS,aAAa;IACpB,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,OAAO,oBAAC,YAAY,IAAC,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,SAAG,CAAC;AACpF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VIBES_WINDOW_CSS = "\n.vwin-scope {\n --vwin-frame: #000;\n --vwin-bar: #fefff1;\n --vwin-line: #2c2c22;\n --vwin-field: #cccdc8;\n --vwin-grid-line: rgba(255, 255, 255, 0.375);\n --vwin-red: #d92a1c;\n --vwin-gear-disc: #231f20;\n --vwin-cream: #fffff0;\n --vwin-edge: #231f20;\n --vwin-menu-bg: #fefff1;\n --vwin-menu-ink: #1a1a1a;\n --vwin-bar-height: 53px;\n /* The black border: 15px on the sides, top and bottom from 768px up (the\n designer comp, #6906). Phones go full bleed (Marcus, 2026-10-07: side\n borders made the page feel glitchy on a phone); the black stays only at\n the top, behind the bar's rounded corners. */\n --vwin-side: 15px;\n --vwin-top: 15px;\n --vwin-bottom: 15px;\n /* The bottom border never sits over the home indicator, except in the iOS\n app on a phone (see the phone tokens). */\n --vwin-bottom-floor: var(--vibes-safe-bottom, env(safe-area-inset-bottom, 0px));\n /* Display headings in the frame are set bold (Chris, 2026-10-07); getTitle\n reads this, so pages outside the frame keep the regular cut. */\n --vibes-home-title-weight: 700;\n}\n/* Phones (Chris, 2026-10-08): a few px of black round the sides and top, and\n a black foundation under the window, so the site sits popped out on top of\n a black base with all the active content above it. The window ends in\n rounded corners 16px above the foundation strip (see .vwin-frame::after);\n in mobile Safari that strip is the whole toolbar area, painted solid black,\n so the address bar floats on black. */\n@media (width < 768px) {\n .vwin-scope {\n --vwin-side: 4px;\n --vwin-top: 4px;\n --vwin-bottom: 16px;\n }\n /* The iOS app has no address bar to float: the bottom edge matches the\n sides (4px) and the window runs over the home-indicator area, its content\n padded to clear the indicator (Marcus, 2026-10-08). */\n .vwin-scope[data-shell=\"native\"] {\n --vwin-bottom: 4px;\n --vwin-bottom-floor: 0px;\n }\n .vwin-scope[data-shell=\"native\"] .vwin-content {\n padding-bottom: var(--vibes-safe-bottom, env(safe-area-inset-bottom, 0px));\n }\n}\n@media (prefers-color-scheme: dark) {\n .vwin-scope:not([data-scheme=\"light\"]) {\n --vwin-line: #83817d;\n --vwin-field: #2a2a2a;\n --vwin-grid-line: rgba(0, 0, 0, 0.275);\n --vwin-edge: #000;\n --vwin-menu-bg: #2a2a2a;\n --vwin-menu-ink: #e0e0e0;\n --vibes-home-title-ink: #fefff1;\n}\n}\n.vwin-scope[data-scheme=\"dark\"] {\n --vwin-line: #83817d;\n --vwin-field: #2a2a2a;\n --vwin-grid-line: rgba(0, 0, 0, 0.275);\n --vwin-edge: #000;\n --vwin-menu-bg: #2a2a2a;\n --vwin-menu-ink: #e0e0e0;\n --vibes-home-title-ink: #fefff1;\n}\n\n/* The page background is the frame's black. Safari paints the strips above\n and below the page (status bar, the room under its toolbar) from it or from\n the fixed black edges, so the site sits on black all round (Chris,\n 2026-10-08: the window resting on a solid black foundation). */\nhtml:has(.vwin-frame),\nbody:has(.vwin-frame) {\n background-color: #000;\n}\n/* An open menu holds the page still behind its overlay. */\nhtml[data-vwin-menu-open] {\n overflow: hidden;\n}\n\n/* The page scrolls on the DOCUMENT, not inside the panel. iOS 26 Safari only\n lets page content show through its floating glass address bar when the\n document scrolls; a frame whose content scrolled in an inner box got solid\n strips there instead. So the frame and panel are in flow, at least the large\n viewport tall (toolbar collapsed; 100vh where lvh is unknown), and nothing\n fixed or sticky touches the bottom edge while the menu is closed: Safari\n colours the strip under its toolbar from such an element (it took the\n panel's grey when the frame was pinned there). */\n.vwin-frame {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-height: 100vh;\n min-height: 100lvh;\n /* The page ends --vwin-bottom above the bottom (15px from 768px up). Phones\n override the whole frame below (it is fixed there). */\n padding: max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px))) max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px))) var(--vwin-bottom)\n max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n background-color: var(--vwin-frame);\n}\n/* No z-index and no isolation on purpose: a page's own full-screen overlays\n (z-50 detail panels and modals) must still rise above the bar (40) and the\n menu (45), as they do outside the frame. */\n.vwin-panel {\n position: relative;\n flex: 1 0 auto;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n /* The fixed bar covers the panel's first 54px at rest; content starts under it. */\n padding-top: calc(var(--vwin-bar-height) + 1px);\n border-radius: 12px;\n overflow: clip;\n background-color: var(--vwin-field);\n}\n/* The black border, fixed over the page edges, so it shows on every side\n while the page scrolls under it: a rounded cut-out the size of the window,\n with black spread out from it. 15px all round from 768px up (the comp,\n #6906); on phones a 4px edge and the black foundation at the bottom (see the\n phone tokens). Above the menu (45) so the menu's ends tuck under the border;\n a page's own z-50 overlays still cover it. It holds still with the chrome\n through the iOS keyboard pan (--vwin-pan). */\n.vwin-frame::before {\n content: \"\";\n position: fixed;\n top: max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px)));\n left: max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n right: max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px)));\n bottom: max(var(--vwin-bottom), var(--vwin-bottom-floor));\n border-radius: 12px;\n box-shadow: 0 0 0 100vmax var(--vwin-frame);\n transform: translateY(var(--vwin-pan, 0px));\n pointer-events: none;\n z-index: 46;\n}\n/* Phones: the black foundation strip, pinned to the bottom edge. A fixed\n element on that edge is what mobile Safari colours the strip under its\n floating toolbar from, so the whole toolbar area turns solid black and the\n address bar floats on it; the window's rounded bottom sits 16px above. In the\n iOS app (no toolbar) it is the home-indicator area. */\n@media (width < 768px) {\n .vwin-frame::after {\n content: \"\";\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n height: max(var(--vwin-bottom), var(--vwin-bottom-floor));\n background-color: var(--vwin-frame);\n transform: translateY(var(--vwin-pan, 0px));\n pointer-events: none;\n z-index: 46;\n }\n}\n\n/* The grid: behind the content, the full height of the panel, whole cells\n only. It scrolls with the page (a fixed grid would touch the bottom edge). */\n.vwin-grid-area {\n position: absolute;\n top: calc(var(--vwin-bar-height) + 1px);\n left: 15px;\n right: 15px;\n bottom: 25px;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n pointer-events: none;\n z-index: 0;\n}\n.vwin-grid {\n flex: none;\n width: 100%;\n height: 100%;\n background-image:\n linear-gradient(to right, var(--vwin-grid-line) 1px, transparent 1px),\n linear-gradient(to bottom, var(--vwin-grid-line) 1px, transparent 1px);\n background-size: 32px 30px;\n background-position: 0 0;\n}\n@supports (width: round(down, 100px, 32px)) {\n .vwin-grid {\n width: calc(round(down, 100% - 1px, 32px) + 1px);\n height: calc(round(down, 100% - 1px, 30px) + 1px);\n }\n}\n/* Phones: the grid runs edge to edge inside the window. A plain strip of field\n beside a whole-cell grid read as a border down each side (Marcus,\n 2026-10-07). Cells start at the left edge, as the iOS launch screen tiles\n them, so the launch hands off to the same grid. */\n@media (width < 768px) {\n .vwin-grid-area {\n left: 0;\n right: 0;\n bottom: 0;\n }\n .vwin-grid {\n width: 100%;\n height: 100%;\n background-position: 0 0;\n }\n}\n\n/* The page, in normal flow under the bar and over the grid. Positioned (after\n the grid) so it paints above it, and so a page that fills the panel\n (absolute inset-0: the auth boot shell, the logged-out view) fills at least\n the viewport under the bar. */\n.vwin-content {\n position: relative;\n flex: 1 0 auto;\n /* The panel runs under the home indicator; the last content clears it. */\n padding-bottom: var(--vibes-safe-bottom, env(safe-area-inset-bottom, 0px));\n box-sizing: border-box;\n}\n\n/* Leaving: a navigation away has started, so the page clears off the grid and\n only the bar and the grid stay until the next page commits. The short delay\n keeps a navigation that commits at once from flickering; the return is\n instant (no transition outside this state). */\n.vwin-frame[data-leaving] .vwin-content {\n opacity: 0;\n transform: translateY(6px);\n pointer-events: none;\n transition:\n opacity 120ms ease-in 40ms,\n transform 120ms ease-in 40ms;\n}\n@media (prefers-reduced-motion: reduce) {\n .vwin-frame[data-leaving] .vwin-content {\n transform: none;\n }\n}\n\n/* Phones: the window is fixed and its content scrolls inside it, the grid\n holding still behind (the #6906 layout). Mobile Safari only paints the strip\n under its floating toolbar solid when the document itself does not scroll;\n then it takes the colour of the black foundation pinned to the bottom edge\n (.vwin-frame::after), and the window rests on black with the address bar\n floating on it (Chris, 2026-10-08). From 768px up the document scrolls. */\n@media (width < 768px) {\n html:has(.vwin-frame),\n body:has(.vwin-frame) {\n height: 100%;\n overflow: hidden;\n }\n .vwin-frame {\n position: fixed;\n inset: 0;\n min-height: 0;\n padding-bottom: max(var(--vwin-bottom), var(--vwin-bottom-floor));\n }\n .vwin-panel {\n flex: 1 1 auto;\n min-height: 0;\n }\n .vwin-content {\n position: absolute;\n top: calc(var(--vwin-bar-height) + 1px);\n left: 0;\n right: 0;\n bottom: 0;\n padding-bottom: 0;\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n}\n\n/* The top chrome: a fixed black strip holding the bar. iOS 26 Safari colours\n the status-bar strip from the fixed element pinned to the top edge; pinned\n there itself, the bar turned it cream. The strip's black also shows in the\n bar's rounded top corners, as the frame's did. */\n.vwin-chrome {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 40;\n box-sizing: border-box;\n padding: max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px))) max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px))) 0 max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n background-color: var(--vwin-frame);\n}\n.vwin-chrome-bar {\n position: relative;\n border-radius: 12px 12px 0 0;\n overflow: hidden;\n}\n\n/* The bar: one real button, so a tap anywhere on it toggles the menu. */\n.vwin-bar {\n position: relative;\n z-index: 40;\n box-sizing: content-box;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: var(--vwin-bar-height);\n margin: 0;\n padding: 0;\n border: 0;\n border-bottom: 1px solid var(--vwin-line);\n background-color: var(--vwin-bar);\n color: var(--vwin-cream);\n font: inherit;\n text-align: left;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n overflow: hidden;\n}\n.vwin-bar:focus-visible {\n outline: 3px solid var(--vwin-red);\n outline-offset: -3px;\n}\n.vwin-pill {\n display: flex;\n align-items: center;\n height: 100%;\n padding-left: 4px;\n}\n/* The pill's slide runs on the menu's clock (same 0.5s and closing curve), so\n pill and menu read as one physical piece. Opening, its spring is a touch\n softer than the menu's (1.25 vs 1.56): at the menu's full overshoot the\n cream shape poked past the pill's black outline. */\n.vwin-pill {\n --vibes-switch-slide: 0.5s cubic-bezier(0.34, 1.25, 0.64, 1);\n}\n.vwin-frame[data-menu-phase=\"closing\"] .vwin-pill,\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-pill {\n --vibes-switch-slide: 0.5s cubic-bezier(0.64, 0, 0.66, 0);\n}\n/* The status glow behind the pill (#7154 option 5b; made invisible at rest\n by owner 2026-10-30, #8202). It keeps the vibe card corner's .vm-glass shape,\n fitted to the drawn logo at size 54 (the black stadium measures 91.9 x\n 33.6px, its left edge 12px into .vwin-pill and its centre 26.3px down the\n bar) with 3px on every side, the menu's MENU_GEOMETRY.ring, but no obsidian\n paint: the top-left logo sits bare on the bar, and the obsidian glass\n belongs only to the switch docked bottom right. The switch draws no status\n ring here (statusRing={false}); a live status fills this shape instead. */\n.vwin-pill {\n position: relative;\n}\n.vwin-pill-glass {\n position: absolute;\n left: 9px;\n top: 6px;\n width: 98px;\n height: 40px;\n border-radius: 999px;\n background-color: transparent;\n pointer-events: none;\n}\n/* The status cue, on the ring's own clock: VibesSwitch's vibes-oval-trace is\n one 7s pass that draws the ring on by 14.3% (cubic-bezier(0.3, 0.6, 0.25,\n 1)), holds it to 71.4%, then fades it out (ease-in) by 100%. The glow runs\n the same stops: clear to the status colour while the ring would draw, held\n while it would hold, back to clear while it would fade. Replays per status\n because VibesWindowHeader keys the glow on colour + status id, as\n VibesSwitch keys the ellipse. */\n.vwin-pill-glass-status {\n animation: vwin-pill-glass-status 7s forwards;\n}\n@keyframes vwin-pill-glass-status {\n 0% { background-color: transparent; animation-timing-function: cubic-bezier(0.3, 0.6, 0.25, 1); }\n 14.3% { background-color: var(--vwin-pill-status); }\n 71.4% { background-color: var(--vwin-pill-status); animation-timing-function: ease-in; }\n 100% { background-color: transparent; }\n}\n.vwin-pill svg {\n position: relative;\n /* The switch's viewBox carries headroom for its status ring; this centres the\n drawn logo (not the svg box) on the bar. */\n top: -8.5px;\n pointer-events: none;\n}\n.vwin-menu-button {\n display: flex;\n align-items: center;\n gap: 8px;\n height: var(--vwin-bar-height);\n padding: 0 16px 0 10px;\n background-color: var(--vwin-red);\n color: var(--vwin-cream);\n flex-shrink: 0;\n}\n.vwin-gear {\n display: flex;\n width: 35px;\n height: 35px;\n transform-origin: 50% 50%;\n}\n.vwin-menu-label {\n font-size: 14px;\n font-weight: bold;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n white-space: nowrap;\n text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n color: var(--vwin-cream);\n opacity: 1;\n}\n@media (hover: hover) {\n .vwin-bar:hover .vwin-gear {\n animation: vwin-wiggle 0.6s ease-in-out infinite;\n }\n}\n.vwin-bar:active .vwin-menu-button {\n animation: vwin-shake 0.3s ease-in-out;\n}\n@keyframes vwin-wiggle {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(-5deg); }\n 75% { transform: rotate(5deg); }\n}\n@keyframes vwin-shake {\n 0%, 100% { transform: translateX(0); }\n 25% { transform: translateX(-3px); }\n 75% { transform: translateX(3px); }\n}\n\n/* The menu: an overlay under the bar and a panel sliding in from the right,\n fixed from under the bar to the viewport bottom (touching the bottom edge\n only while open is fine). The bar stays live above it, so the pill's own\n slide plays and a header tap closes the menu the same way it opened it. */\n.vwin-menu-layer {\n position: fixed;\n top: calc(max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px))) + var(--vwin-bar-height) + 1px);\n left: max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n right: max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px)));\n bottom: var(--vwin-bottom);\n z-index: 45;\n overflow: hidden;\n}\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-menu-layer {\n visibility: hidden;\n pointer-events: none;\n}\n.vwin-overlay {\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.6);\n animation: vwin-fade-in 0.3s ease-out;\n}\n.vwin-menu-panel {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 90%;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n background-color: var(--vwin-menu-bg);\n color: var(--vwin-menu-ink);\n border-top: 8px solid var(--vwin-edge);\n border-bottom: 8px solid var(--vwin-edge);\n box-shadow: -8px 0 0 0 var(--vwin-edge);\n animation: vwin-slide-in 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);\n outline: none;\n overflow: hidden;\n}\n/* Focus lands on the panel itself when the menu opens (so the next Tab reaches\n the first row); that programmatic focus draws no ring. Rows and buttons\n inside keep their own focus-visible rings. */\n.vwin-menu-panel:focus,\n.vwin-menu-panel:focus-visible {\n outline: none;\n}\n.vwin-frame[data-menu-phase=\"closing\"] .vwin-overlay {\n animation: vwin-fade-out 0.3s ease-out forwards;\n}\n.vwin-frame[data-menu-phase=\"closing\"] .vwin-menu-panel {\n animation: vwin-slide-out 0.5s cubic-bezier(0.64, 0, 0.66, 0) forwards;\n}\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-overlay,\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-menu-panel {\n animation: none;\n}\n@keyframes vwin-fade-in { from { opacity: 0; } to { opacity: 1; } }\n@keyframes vwin-fade-out { from { opacity: 1; } to { opacity: 0; } }\n@keyframes vwin-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }\n@keyframes vwin-slide-out { from { transform: translateX(0); } to { transform: translateX(calc(100% + 8px)); } }\n\n@media (prefers-reduced-motion: reduce) {\n .vwin-pill,\n .vwin-frame .vwin-pill {\n --vibes-switch-slide: 0s;\n }\n /* The ring's reduced-motion arm (vibes-oval-fade) skips the drawing sweep:\n full ring at once, hold, fade. The glow mirrors it: the status colour at\n once, held to 71.4%, then eased back to clear. A colour change is not\n motion, and it keeps the \"this is expiring\" meaning. */\n .vwin-pill-glass-status {\n animation-name: vwin-pill-glass-fade;\n }\n @keyframes vwin-pill-glass-fade {\n 0% { background-color: var(--vwin-pill-status); }\n 71.4% { background-color: var(--vwin-pill-status); animation-timing-function: ease-in; }\n 100% { background-color: transparent; }\n }\n .vwin-bar:hover .vwin-gear,\n .vwin-bar:active .vwin-menu-button,\n .vwin-overlay,\n .vwin-menu-panel {\n animation: none !important;\n }\n /* No slide to wait out: a closing menu is simply gone. */\n .vwin-frame[data-menu-phase=\"closing\"] .vwin-menu-layer {\n visibility: hidden;\n }\n}\n";
|
|
1
|
+
export declare const VIBES_WINDOW_CSS = "\n.vwin-scope {\n --vwin-frame: #000;\n --vwin-bar: #fefff1;\n --vwin-line: #2c2c22;\n --vwin-field: #cccdc8;\n --vwin-grid-line: rgba(255, 255, 255, 0.375);\n --vwin-red: #d92a1c;\n --vwin-gear-disc: #231f20;\n --vwin-cream: #fffff0;\n --vwin-edge: #231f20;\n --vwin-menu-bg: #fefff1;\n --vwin-menu-ink: #1a1a1a;\n --vwin-bar-height: 53px;\n /* The black border: 15px on the sides, top and bottom from 768px up (the\n designer comp, #6906). Phones go full bleed (Marcus, 2026-10-07: side\n borders made the page feel glitchy on a phone); the black stays only at\n the top, behind the bar's rounded corners. */\n --vwin-side: 15px;\n --vwin-top: 15px;\n --vwin-bottom: 15px;\n /* The bottom border never sits over the home indicator, except in the iOS\n app on a phone (see the phone tokens). */\n --vwin-bottom-floor: var(--vibes-safe-bottom, env(safe-area-inset-bottom, 0px));\n /* Display headings in the frame are set bold (Chris, 2026-10-07); getTitle\n reads this, so pages outside the frame keep the regular cut. */\n --vibes-home-title-weight: 700;\n}\n/* Phones (Chris, 2026-10-08): a few px of black round the sides and top, and\n a black foundation under the window, so the site sits popped out on top of\n a black base with all the active content above it. The window ends in\n rounded corners 16px above the foundation strip (see .vwin-frame::after);\n in mobile Safari that strip is the whole toolbar area, painted solid black,\n so the address bar floats on black. */\n@media (width < 768px) {\n .vwin-scope {\n --vwin-side: 4px;\n --vwin-top: 4px;\n --vwin-bottom: 16px;\n }\n /* The iOS app has no address bar to float: the bottom edge matches the\n sides (4px) and the window runs over the home-indicator area, its content\n padded to clear the indicator (Marcus, 2026-10-08). */\n .vwin-scope[data-shell=\"native\"] {\n --vwin-bottom: 4px;\n --vwin-bottom-floor: 0px;\n }\n .vwin-scope[data-shell=\"native\"] .vwin-content {\n padding-bottom: var(--vibes-safe-bottom, env(safe-area-inset-bottom, 0px));\n }\n}\n@media (prefers-color-scheme: dark) {\n .vwin-scope:not([data-scheme=\"light\"]) {\n --vwin-line: #83817d;\n --vwin-field: #2a2a2a;\n --vwin-grid-line: rgba(0, 0, 0, 0.275);\n --vwin-edge: #000;\n --vwin-menu-bg: #2a2a2a;\n --vwin-menu-ink: #e0e0e0;\n --vibes-home-title-ink: #fefff1;\n}\n}\n.vwin-scope[data-scheme=\"dark\"] {\n --vwin-line: #83817d;\n --vwin-field: #2a2a2a;\n --vwin-grid-line: rgba(0, 0, 0, 0.275);\n --vwin-edge: #000;\n --vwin-menu-bg: #2a2a2a;\n --vwin-menu-ink: #e0e0e0;\n --vibes-home-title-ink: #fefff1;\n}\n\n/* The page background is the frame's black. Safari paints the strips above\n and below the page (status bar, the room under its toolbar) from it or from\n the fixed black edges, so the site sits on black all round (Chris,\n 2026-10-08: the window resting on a solid black foundation). */\nhtml:has(.vwin-frame),\nbody:has(.vwin-frame) {\n background-color: #000;\n}\n/* An open menu holds the page still behind its overlay. */\nhtml[data-vwin-menu-open] {\n overflow: hidden;\n}\n\n/* The page scrolls on the DOCUMENT, not inside the panel. iOS 26 Safari only\n lets page content show through its floating glass address bar when the\n document scrolls; a frame whose content scrolled in an inner box got solid\n strips there instead. So the frame and panel are in flow, at least the large\n viewport tall (toolbar collapsed; 100vh where lvh is unknown), and nothing\n fixed or sticky touches the bottom edge while the menu is closed: Safari\n colours the strip under its toolbar from such an element (it took the\n panel's grey when the frame was pinned there). */\n.vwin-frame {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-height: 100vh;\n min-height: 100lvh;\n /* The page ends --vwin-bottom above the bottom (15px from 768px up). Phones\n override the whole frame below (it is fixed there). */\n padding: max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px))) max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px))) var(--vwin-bottom)\n max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n background-color: var(--vwin-frame);\n}\n/* No z-index and no isolation on purpose: a page's own full-screen overlays\n (z-50 detail panels and modals) must still rise above the bar (40) and the\n menu (45), as they do outside the frame. */\n.vwin-panel {\n position: relative;\n flex: 1 0 auto;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n /* The fixed bar covers the panel's first 54px at rest; content starts under it. */\n padding-top: calc(var(--vwin-bar-height) + 1px);\n border-radius: 12px;\n overflow: clip;\n background-color: var(--vwin-field);\n}\n/* The black border, fixed over the page edges, so it shows on every side\n while the page scrolls under it: a rounded cut-out the size of the window,\n with black spread out from it. 15px all round from 768px up (the comp,\n #6906); on phones a 4px edge and the black foundation at the bottom (see the\n phone tokens). Above the menu (45) so the menu's ends tuck under the border;\n a page's own z-50 overlays still cover it. It holds still with the chrome\n through the iOS keyboard pan (--vwin-pan). */\n.vwin-frame::before {\n content: \"\";\n position: fixed;\n top: max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px)));\n left: max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n right: max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px)));\n bottom: max(var(--vwin-bottom), var(--vwin-bottom-floor));\n border-radius: 12px;\n box-shadow: 0 0 0 100vmax var(--vwin-frame);\n transform: translateY(var(--vwin-pan, 0px));\n pointer-events: none;\n z-index: 46;\n}\n/* Phones: the black foundation strip, pinned to the bottom edge. A fixed\n element on that edge is what mobile Safari colours the strip under its\n floating toolbar from, so the whole toolbar area turns solid black and the\n address bar floats on it; the window's rounded bottom sits 16px above. In the\n iOS app (no toolbar) it is the home-indicator area. */\n@media (width < 768px) {\n .vwin-frame::after {\n content: \"\";\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n height: max(var(--vwin-bottom), var(--vwin-bottom-floor));\n background-color: var(--vwin-frame);\n transform: translateY(var(--vwin-pan, 0px));\n pointer-events: none;\n z-index: 46;\n }\n}\n\n/* The grid: behind the content, the full height of the panel, whole cells\n only. It scrolls with the page (a fixed grid would touch the bottom edge). */\n.vwin-grid-area {\n position: absolute;\n top: calc(var(--vwin-bar-height) + 1px);\n left: 15px;\n right: 15px;\n bottom: 25px;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n pointer-events: none;\n z-index: 0;\n}\n.vwin-grid {\n flex: none;\n width: 100%;\n height: 100%;\n background-image:\n linear-gradient(to right, var(--vwin-grid-line) 1px, transparent 1px),\n linear-gradient(to bottom, var(--vwin-grid-line) 1px, transparent 1px);\n background-size: 32px 30px;\n background-position: 0 0;\n}\n@supports (width: round(down, 100px, 32px)) {\n .vwin-grid {\n width: calc(round(down, 100% - 1px, 32px) + 1px);\n height: calc(round(down, 100% - 1px, 30px) + 1px);\n }\n}\n/* Phones: the grid runs edge to edge inside the window. A plain strip of field\n beside a whole-cell grid read as a border down each side (Marcus,\n 2026-10-07). Cells start at the left edge, as the iOS launch screen tiles\n them, so the launch hands off to the same grid. */\n@media (width < 768px) {\n .vwin-grid-area {\n left: 0;\n right: 0;\n bottom: 0;\n }\n .vwin-grid {\n width: 100%;\n height: 100%;\n background-position: 0 0;\n }\n}\n\n/* The page, in normal flow under the bar and over the grid. Positioned (after\n the grid) so it paints above it, and so a page that fills the panel\n (absolute inset-0: the auth boot shell, the logged-out view) fills at least\n the viewport under the bar. */\n.vwin-content {\n position: relative;\n flex: 1 0 auto;\n /* The panel runs under the home indicator; the last content clears it. */\n padding-bottom: var(--vibes-safe-bottom, env(safe-area-inset-bottom, 0px));\n box-sizing: border-box;\n}\n\n/* Leaving: a navigation away has started, so the page clears off the grid and\n only the bar and the grid stay until the next page commits. The short delay\n keeps a navigation that commits at once from flickering; the return is\n instant (no transition outside this state). */\n.vwin-frame[data-leaving] .vwin-content {\n opacity: 0;\n transform: translateY(6px);\n pointer-events: none;\n transition:\n opacity 120ms ease-in 40ms,\n transform 120ms ease-in 40ms;\n}\n@media (prefers-reduced-motion: reduce) {\n .vwin-frame[data-leaving] .vwin-content {\n transform: none;\n }\n}\n\n/* Phones: the window is fixed and its content scrolls inside it, the grid\n holding still behind (the #6906 layout). Mobile Safari only paints the strip\n under its floating toolbar solid when the document itself does not scroll;\n then it takes the colour of the black foundation pinned to the bottom edge\n (.vwin-frame::after), and the window rests on black with the address bar\n floating on it (Chris, 2026-10-08). From 768px up the document scrolls. */\n@media (width < 768px) {\n html:has(.vwin-frame),\n body:has(.vwin-frame) {\n height: 100%;\n overflow: hidden;\n }\n .vwin-frame {\n position: fixed;\n inset: 0;\n min-height: 0;\n padding-bottom: max(var(--vwin-bottom), var(--vwin-bottom-floor));\n }\n .vwin-panel {\n flex: 1 1 auto;\n min-height: 0;\n }\n .vwin-content {\n position: absolute;\n top: calc(var(--vwin-bar-height) + 1px);\n left: 0;\n right: 0;\n bottom: 0;\n padding-bottom: 0;\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n}\n\n/* The top chrome: a fixed black strip holding the bar. iOS 26 Safari colours\n the status-bar strip from the fixed element pinned to the top edge; pinned\n there itself, the bar turned it cream. The strip's black also shows in the\n bar's rounded top corners, as the frame's did. */\n.vwin-chrome {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 40;\n box-sizing: border-box;\n padding: max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px))) max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px))) 0 max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n background-color: var(--vwin-frame);\n}\n.vwin-chrome-bar {\n position: relative;\n border-radius: 12px 12px 0 0;\n overflow: hidden;\n}\n\n/* The bar's middle: a page's own control (useWindowBarCenter), above the bar's\n one button so a tap on it never toggles the menu. Empty, it takes no taps. */\n.vwin-bar-center {\n position: absolute;\n top: 0;\n bottom: 1px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 41;\n display: flex;\n align-items: center;\n pointer-events: none;\n}\n.vwin-bar-center > * {\n pointer-events: auto;\n}\n/* The way back out of a full-screen app: the logo's black stadium, with a\n chevron and the MENU button's lettering. */\n.vwin-bar-back {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 34px;\n margin: 0;\n padding: 0 14px 0 9px;\n border: 0;\n border-radius: 999px;\n background-color: var(--vwin-frame);\n color: var(--vwin-cream);\n font: inherit;\n font-size: 13px;\n font-weight: bold;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n white-space: nowrap;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n.vwin-bar-back svg {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n}\n.vwin-bar-back:focus-visible {\n outline: 3px solid var(--vwin-red);\n outline-offset: 2px;\n}\n.vwin-bar-back:active {\n transform: scale(0.96);\n}\n\n/* The bar: one real button, so a tap anywhere on it toggles the menu. */\n.vwin-bar {\n position: relative;\n z-index: 40;\n box-sizing: content-box;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: var(--vwin-bar-height);\n margin: 0;\n padding: 0;\n border: 0;\n border-bottom: 1px solid var(--vwin-line);\n background-color: var(--vwin-bar);\n color: var(--vwin-cream);\n font: inherit;\n text-align: left;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n overflow: hidden;\n}\n.vwin-bar:focus-visible {\n outline: 3px solid var(--vwin-red);\n outline-offset: -3px;\n}\n.vwin-pill {\n display: flex;\n align-items: center;\n height: 100%;\n padding-left: 4px;\n}\n/* The pill's slide runs on the menu's clock (same 0.5s and closing curve), so\n pill and menu read as one physical piece. Opening, its spring is a touch\n softer than the menu's (1.25 vs 1.56): at the menu's full overshoot the\n cream shape poked past the pill's black outline. */\n.vwin-pill {\n --vibes-switch-slide: 0.5s cubic-bezier(0.34, 1.25, 0.64, 1);\n}\n.vwin-frame[data-menu-phase=\"closing\"] .vwin-pill,\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-pill {\n --vibes-switch-slide: 0.5s cubic-bezier(0.64, 0, 0.66, 0);\n}\n/* The status glow behind the pill (#7154 option 5b; made invisible at rest\n by owner 2026-10-30, #8202). It keeps the vibe card corner's .vm-glass shape,\n fitted to the drawn logo at size 54 (the black stadium measures 91.9 x\n 33.6px, its left edge 12px into .vwin-pill and its centre 26.3px down the\n bar) with 3px on every side, the menu's MENU_GEOMETRY.ring, but no obsidian\n paint: the top-left logo sits bare on the bar, and the obsidian glass\n belongs only to the switch docked bottom right. The switch draws no status\n ring here (statusRing={false}); a live status fills this shape instead. */\n.vwin-pill {\n position: relative;\n}\n.vwin-pill-glass {\n position: absolute;\n left: 9px;\n top: 6px;\n width: 98px;\n height: 40px;\n border-radius: 999px;\n background-color: transparent;\n pointer-events: none;\n}\n/* The status cue, on the ring's own clock: VibesSwitch's vibes-oval-trace is\n one 7s pass that draws the ring on by 14.3% (cubic-bezier(0.3, 0.6, 0.25,\n 1)), holds it to 71.4%, then fades it out (ease-in) by 100%. The glow runs\n the same stops: clear to the status colour while the ring would draw, held\n while it would hold, back to clear while it would fade. Replays per status\n because VibesWindowHeader keys the glow on colour + status id, as\n VibesSwitch keys the ellipse. */\n.vwin-pill-glass-status {\n animation: vwin-pill-glass-status 7s forwards;\n}\n@keyframes vwin-pill-glass-status {\n 0% { background-color: transparent; animation-timing-function: cubic-bezier(0.3, 0.6, 0.25, 1); }\n 14.3% { background-color: var(--vwin-pill-status); }\n 71.4% { background-color: var(--vwin-pill-status); animation-timing-function: ease-in; }\n 100% { background-color: transparent; }\n}\n.vwin-pill svg {\n position: relative;\n /* The switch's viewBox carries headroom for its status ring; this centres the\n drawn logo (not the svg box) on the bar. */\n top: -8.5px;\n pointer-events: none;\n}\n.vwin-menu-button {\n display: flex;\n align-items: center;\n gap: 8px;\n height: var(--vwin-bar-height);\n padding: 0 16px 0 10px;\n background-color: var(--vwin-red);\n color: var(--vwin-cream);\n flex-shrink: 0;\n}\n.vwin-gear {\n display: flex;\n width: 35px;\n height: 35px;\n transform-origin: 50% 50%;\n}\n.vwin-menu-label {\n font-size: 14px;\n font-weight: bold;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n white-space: nowrap;\n text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n color: var(--vwin-cream);\n opacity: 1;\n}\n@media (hover: hover) {\n .vwin-bar:hover .vwin-gear {\n animation: vwin-wiggle 0.6s ease-in-out infinite;\n }\n}\n.vwin-bar:active .vwin-menu-button {\n animation: vwin-shake 0.3s ease-in-out;\n}\n@keyframes vwin-wiggle {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(-5deg); }\n 75% { transform: rotate(5deg); }\n}\n@keyframes vwin-shake {\n 0%, 100% { transform: translateX(0); }\n 25% { transform: translateX(-3px); }\n 75% { transform: translateX(3px); }\n}\n\n/* The menu: an overlay under the bar and a panel sliding in from the right,\n fixed from under the bar to the viewport bottom (touching the bottom edge\n only while open is fine). The bar stays live above it, so the pill's own\n slide plays and a header tap closes the menu the same way it opened it. */\n.vwin-menu-layer {\n position: fixed;\n top: calc(max(var(--vwin-top), var(--vibes-safe-top, env(safe-area-inset-top, 0px))) + var(--vwin-bar-height) + 1px);\n left: max(var(--vwin-side), var(--vibes-safe-left, env(safe-area-inset-left, 0px)));\n right: max(var(--vwin-side), var(--vibes-safe-right, env(safe-area-inset-right, 0px)));\n bottom: var(--vwin-bottom);\n z-index: 45;\n overflow: hidden;\n}\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-menu-layer {\n visibility: hidden;\n pointer-events: none;\n}\n.vwin-overlay {\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.6);\n animation: vwin-fade-in 0.3s ease-out;\n}\n.vwin-menu-panel {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 90%;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n background-color: var(--vwin-menu-bg);\n color: var(--vwin-menu-ink);\n border-top: 8px solid var(--vwin-edge);\n border-bottom: 8px solid var(--vwin-edge);\n box-shadow: -8px 0 0 0 var(--vwin-edge);\n animation: vwin-slide-in 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);\n outline: none;\n overflow: hidden;\n}\n/* Focus lands on the panel itself when the menu opens (so the next Tab reaches\n the first row); that programmatic focus draws no ring. Rows and buttons\n inside keep their own focus-visible rings. */\n.vwin-menu-panel:focus,\n.vwin-menu-panel:focus-visible {\n outline: none;\n}\n.vwin-frame[data-menu-phase=\"closing\"] .vwin-overlay {\n animation: vwin-fade-out 0.3s ease-out forwards;\n}\n.vwin-frame[data-menu-phase=\"closing\"] .vwin-menu-panel {\n animation: vwin-slide-out 0.5s cubic-bezier(0.64, 0, 0.66, 0) forwards;\n}\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-overlay,\n.vwin-frame[data-menu-phase=\"closed\"] .vwin-menu-panel {\n animation: none;\n}\n@keyframes vwin-fade-in { from { opacity: 0; } to { opacity: 1; } }\n@keyframes vwin-fade-out { from { opacity: 1; } to { opacity: 0; } }\n@keyframes vwin-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }\n@keyframes vwin-slide-out { from { transform: translateX(0); } to { transform: translateX(calc(100% + 8px)); } }\n\n@media (prefers-reduced-motion: reduce) {\n .vwin-pill,\n .vwin-frame .vwin-pill {\n --vibes-switch-slide: 0s;\n }\n /* The ring's reduced-motion arm (vibes-oval-fade) skips the drawing sweep:\n full ring at once, hold, fade. The glow mirrors it: the status colour at\n once, held to 71.4%, then eased back to clear. A colour change is not\n motion, and it keeps the \"this is expiring\" meaning. */\n .vwin-pill-glass-status {\n animation-name: vwin-pill-glass-fade;\n }\n @keyframes vwin-pill-glass-fade {\n 0% { background-color: var(--vwin-pill-status); }\n 71.4% { background-color: var(--vwin-pill-status); animation-timing-function: ease-in; }\n 100% { background-color: transparent; }\n }\n .vwin-bar:hover .vwin-gear,\n .vwin-bar:active .vwin-menu-button,\n .vwin-overlay,\n .vwin-menu-panel {\n animation: none !important;\n }\n /* No slide to wait out: a closing menu is simply gone. */\n .vwin-frame[data-menu-phase=\"closing\"] .vwin-menu-layer {\n visibility: hidden;\n }\n}\n";
|
|
@@ -285,6 +285,57 @@ html[data-vwin-menu-open] {
|
|
|
285
285
|
overflow: hidden;
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
+
/* The bar's middle: a page's own control (useWindowBarCenter), above the bar's
|
|
289
|
+
one button so a tap on it never toggles the menu. Empty, it takes no taps. */
|
|
290
|
+
.vwin-bar-center {
|
|
291
|
+
position: absolute;
|
|
292
|
+
top: 0;
|
|
293
|
+
bottom: 1px;
|
|
294
|
+
left: 50%;
|
|
295
|
+
transform: translateX(-50%);
|
|
296
|
+
z-index: 41;
|
|
297
|
+
display: flex;
|
|
298
|
+
align-items: center;
|
|
299
|
+
pointer-events: none;
|
|
300
|
+
}
|
|
301
|
+
.vwin-bar-center > * {
|
|
302
|
+
pointer-events: auto;
|
|
303
|
+
}
|
|
304
|
+
/* The way back out of a full-screen app: the logo's black stadium, with a
|
|
305
|
+
chevron and the MENU button's lettering. */
|
|
306
|
+
.vwin-bar-back {
|
|
307
|
+
display: inline-flex;
|
|
308
|
+
align-items: center;
|
|
309
|
+
gap: 4px;
|
|
310
|
+
height: 34px;
|
|
311
|
+
margin: 0;
|
|
312
|
+
padding: 0 14px 0 9px;
|
|
313
|
+
border: 0;
|
|
314
|
+
border-radius: 999px;
|
|
315
|
+
background-color: var(--vwin-frame);
|
|
316
|
+
color: var(--vwin-cream);
|
|
317
|
+
font: inherit;
|
|
318
|
+
font-size: 13px;
|
|
319
|
+
font-weight: bold;
|
|
320
|
+
letter-spacing: 1.5px;
|
|
321
|
+
text-transform: uppercase;
|
|
322
|
+
white-space: nowrap;
|
|
323
|
+
cursor: pointer;
|
|
324
|
+
-webkit-tap-highlight-color: transparent;
|
|
325
|
+
}
|
|
326
|
+
.vwin-bar-back svg {
|
|
327
|
+
width: 18px;
|
|
328
|
+
height: 18px;
|
|
329
|
+
flex-shrink: 0;
|
|
330
|
+
}
|
|
331
|
+
.vwin-bar-back:focus-visible {
|
|
332
|
+
outline: 3px solid var(--vwin-red);
|
|
333
|
+
outline-offset: 2px;
|
|
334
|
+
}
|
|
335
|
+
.vwin-bar-back:active {
|
|
336
|
+
transform: scale(0.96);
|
|
337
|
+
}
|
|
338
|
+
|
|
288
339
|
/* The bar: one real button, so a tap anywhere on it toggles the menu. */
|
|
289
340
|
.vwin-bar {
|
|
290
341
|
position: relative;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VibesWindowFrame.styles.js","sourceRoot":"","sources":["../../jsr/components/VibesWindowFrame.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAgDzG,MAAM,WAAW,GAAG;;;;;;;;CAQnB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;yBAuBP,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;sBAyBnB,gBAAgB;;;;4CAIM,WAAW;;mCAEpB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA+BZ,aAAa,2BAA2B,eAAe;4BAC7D,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BA4BZ,aAAa;gCACX,cAAc;iCACb,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAmF5B,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAqEF,aAAa,2BAA2B,eAAe,6BAA6B,cAAc
|
|
1
|
+
{"version":3,"file":"VibesWindowFrame.styles.js","sourceRoot":"","sources":["../../jsr/components/VibesWindowFrame.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAgDzG,MAAM,WAAW,GAAG;;;;;;;;CAQnB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;yBAuBP,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;sBAyBnB,gBAAgB;;;;4CAIM,WAAW;;mCAEpB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA+BZ,aAAa,2BAA2B,eAAe;4BAC7D,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BA4BZ,aAAa;gCACX,cAAc;iCACb,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAmF5B,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAqEF,aAAa,2BAA2B,eAAe,6BAA6B,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAsMjG,aAAa;gCAChB,cAAc;iCACb,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoF/C,CAAC"}
|
|
@@ -27,13 +27,16 @@ export declare const ACCOUNT_COPY: Readonly<{
|
|
|
27
27
|
orTry: "Or try";
|
|
28
28
|
moreIdeas: "More ideas";
|
|
29
29
|
chooseHandle: "Choose your handle";
|
|
30
|
+
switchTo: "Switch handle";
|
|
31
|
+
allHandles: (n: number) => string;
|
|
30
32
|
}>;
|
|
31
|
-
export declare const ACCOUNT_CARD_CSS = "\n[data-vibe-menu] .vm-hero { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; padding: 4px 0 14px; }\n[data-vibe-menu] .vm-big { font: 700 42px/0.8 var(--font-display); letter-spacing: -0.04em; white-space: nowrap; }\n[data-vibe-menu] .vm-caption { flex: 1; white-space: nowrap; font-size: 12px; line-height: 14px; color: var(--muted); }\n[data-vibe-menu] .vm-who { display: flex; align-items: center; gap: 10px; padding: 0 0 14px; }\n[data-vibe-menu] .vm-avatar { position: relative; overflow: hidden; width: 28px; height: 28px; border-radius: 50%; border: var(--stroke-rule) solid var(--line-card); background: var(--section-account); color: var(--on-account); display: grid; place-items: center; font: 700 12px/1 var(--font-tab); }\n[data-vibe-menu] .vm-handle { font: 700 16px/1 var(--font-display); }\n[data-vibe-menu] .vm-who + [data-guest-handle-note] { margin: -8px 0 14px 38px; }\n[data-vibe-menu] .vm-no-handle { font: 400 16px/1 var(--font-display); color: var(--muted); }\n[data-vibe-menu] .vm-meter { height: var(--size-meter); margin-bottom: var(--space-16); border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-meter); overflow: hidden; }\n[data-vibe-menu] .vm-meter span { display: block; height: 100%; background: var(--section-account); border-right: var(--stroke-rule) solid var(--line-card); }\n[data-vibe-menu] .vm-account .vm-group + .vm-group { margin-top: var(--space-14); }\n[data-vibe-menu] .vm-drill .vm-input + .vm-drill-sec { margin-top: 14px; }\n[data-vibe-menu] .vm-handle-add { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 6px; }\n[data-vibe-menu] .vm-handle-add .vm-input { flex: 1 1 180px; height: 40px; margin: 0; }\n[data-vibe-menu] .vm-acting-head { margin-top: 16px; padding-bottom: 2px; }\n[data-vibe-menu] .vm-acting-line { margin: 0 0 6px; font-size: 13px; color: var(--muted); }\n[data-vibe-menu] .vm-handle-row { display: flex; align-items: center; gap: 12px; width: 100%; height: 42px; }\n[data-vibe-menu] .vm-handle-row + .vm-handle-row { border-top: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-handle-row .vm-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 400; }\n[data-vibe-menu] .vm-handle-row.is-active .vm-label { font-weight: 700; }\n[data-vibe-menu] .vm-handle-row.is-active .vm-initial { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-initial { position: relative; overflow: hidden; }\n[data-vibe-menu] .vm-avatar img, [data-vibe-menu] .vm-initial img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }\n[data-vibe-menu] .vm-check { display: grid; color: var(--ink); }\n[data-vibe-menu] .vm-check .vm-glyph { width: 18px; height: 18px; stroke-width: 3; }\n[data-vibe-menu] .vm-picture { display: flex; padding: 2px 0 8px 40px; }\n[data-vibe-menu] .vm-form-note { margin: 8px 0 0; font-size: 13px; color: var(--ink); }\n@container (max-width: 480px) {\n [data-vibe-menu] .vm-big { font-size: 36px; }\n [data-vibe-menu] .vm-handle-add .vm-input { flex-basis: 100%; }\n}\n";
|
|
33
|
+
export declare const ACCOUNT_CARD_CSS = "\n[data-vibe-menu] .vm-hero { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; padding: 4px 0 14px; }\n[data-vibe-menu] .vm-big { font: 700 42px/0.8 var(--font-display); letter-spacing: -0.04em; white-space: nowrap; }\n[data-vibe-menu] .vm-caption { flex: 1; white-space: nowrap; font-size: 12px; line-height: 14px; color: var(--muted); }\n[data-vibe-menu] .vm-who { display: flex; align-items: center; gap: 10px; padding: 0 0 14px; }\n[data-vibe-menu] .vm-avatar { position: relative; overflow: hidden; width: 28px; height: 28px; border-radius: 50%; border: var(--stroke-rule) solid var(--line-card); background: var(--section-account); color: var(--on-account); display: grid; place-items: center; font: 700 12px/1 var(--font-tab); }\n[data-vibe-menu] .vm-handle { font: 700 16px/1 var(--font-display); }\n[data-vibe-menu] .vm-who + [data-guest-handle-note] { margin: -8px 0 14px 38px; }\n[data-vibe-menu] .vm-no-handle { font: 400 16px/1 var(--font-display); color: var(--muted); }\n[data-vibe-menu] .vm-meter { height: var(--size-meter); margin-bottom: var(--space-16); border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-meter); overflow: hidden; }\n[data-vibe-menu] .vm-meter span { display: block; height: 100%; background: var(--section-account); border-right: var(--stroke-rule) solid var(--line-card); }\n[data-vibe-menu] .vm-account .vm-group + .vm-group { margin-top: var(--space-14); }\n[data-vibe-menu] .vm-drill .vm-input + .vm-drill-sec { margin-top: 14px; }\n[data-vibe-menu] .vm-handle-add { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 6px; }\n[data-vibe-menu] .vm-handle-add .vm-input { flex: 1 1 180px; height: 40px; margin: 0; }\n[data-vibe-menu] .vm-acting-head { margin-top: 16px; padding-bottom: 2px; }\n[data-vibe-menu] .vm-acting-line { margin: 0 0 6px; font-size: 13px; color: var(--muted); }\n[data-vibe-menu] .vm-handle-row { display: flex; align-items: center; gap: 12px; width: 100%; height: 42px; }\n[data-vibe-menu] .vm-handle-row + .vm-handle-row { border-top: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-handle-row .vm-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 400; }\n[data-vibe-menu] .vm-handle-row.is-active .vm-label { font-weight: 700; }\n[data-vibe-menu] .vm-handle-row.is-active .vm-initial { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-initial { position: relative; overflow: hidden; }\n[data-vibe-menu] .vm-avatar img, [data-vibe-menu] .vm-initial img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }\n[data-vibe-menu] .vm-check { display: grid; color: var(--ink); }\n[data-vibe-menu] .vm-check .vm-glyph { width: 18px; height: 18px; stroke-width: 3; }\n[data-vibe-menu] .vm-handle-switch { margin: -6px 0 14px; }\n[data-vibe-menu] .vm-handle-switch-toggle { display: inline-flex; align-items: center; gap: 4px; margin: 0; padding: 4px 0; border: 0; background: none; color: var(--muted); font: 700 11px/1 var(--font-tab); letter-spacing: 0.12em; text-transform: uppercase; cursor: pointer; }\n[data-vibe-menu] .vm-handle-switch-toggle .vm-glyph { width: 14px; height: 14px; transition: transform 120ms ease; }\n[data-vibe-menu] .vm-handle-switch-toggle[aria-expanded=\"true\"] .vm-glyph { transform: rotate(90deg); }\n@media (prefers-reduced-motion: reduce) { [data-vibe-menu] .vm-handle-switch-toggle .vm-glyph { transition: none; } }\n[data-vibe-menu] .vm-handle-switch .vm-handle-row { height: 40px; padding: 0; border: 0; background: none; color: var(--ink); font: inherit; text-align: left; cursor: pointer; }\n[data-vibe-menu] .vm-handle-switch .vm-handle-row:disabled { cursor: default; opacity: 0.6; }\n[data-vibe-menu] .vm-handle-switch .vm-avatar { flex: none; }\n[data-vibe-menu] .vm-picture { display: flex; padding: 2px 0 8px 40px; }\n[data-vibe-menu] .vm-form-note { margin: 8px 0 0; font-size: 13px; color: var(--ink); }\n@container (max-width: 480px) {\n [data-vibe-menu] .vm-big { font-size: 36px; }\n [data-vibe-menu] .vm-handle-add .vm-input { flex-basis: 100%; }\n}\n";
|
|
32
34
|
export interface AccountCardProps {
|
|
33
35
|
readonly viewer: ViewerSlice;
|
|
34
36
|
readonly account: AccountSlice;
|
|
35
37
|
readonly nav: CardNav;
|
|
36
38
|
}
|
|
39
|
+
export declare const SWITCH_INLINE_MAX = 7;
|
|
37
40
|
export declare const NO_CAPTURE = "ph-no-capture";
|
|
38
41
|
export interface HandleAddPickerProps {
|
|
39
42
|
readonly ideas: AccountSlice["handleIdeas"];
|
|
@@ -37,6 +37,8 @@ export const ACCOUNT_COPY = Object.freeze({
|
|
|
37
37
|
orTry: "Or try",
|
|
38
38
|
moreIdeas: "More ideas",
|
|
39
39
|
chooseHandle: "Choose your handle",
|
|
40
|
+
switchTo: "Switch handle",
|
|
41
|
+
allHandles: (n) => `All ${n} handles`,
|
|
40
42
|
});
|
|
41
43
|
export const ACCOUNT_CARD_CSS = `
|
|
42
44
|
[data-vibe-menu] .vm-hero { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; padding: 4px 0 14px; }
|
|
@@ -64,6 +66,14 @@ export const ACCOUNT_CARD_CSS = `
|
|
|
64
66
|
[data-vibe-menu] .vm-avatar img, [data-vibe-menu] .vm-initial img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
|
|
65
67
|
[data-vibe-menu] .vm-check { display: grid; color: var(--ink); }
|
|
66
68
|
[data-vibe-menu] .vm-check .vm-glyph { width: 18px; height: 18px; stroke-width: 3; }
|
|
69
|
+
[data-vibe-menu] .vm-handle-switch { margin: -6px 0 14px; }
|
|
70
|
+
[data-vibe-menu] .vm-handle-switch-toggle { display: inline-flex; align-items: center; gap: 4px; margin: 0; padding: 4px 0; border: 0; background: none; color: var(--muted); font: 700 11px/1 var(--font-tab); letter-spacing: 0.12em; text-transform: uppercase; cursor: pointer; }
|
|
71
|
+
[data-vibe-menu] .vm-handle-switch-toggle .vm-glyph { width: 14px; height: 14px; transition: transform 120ms ease; }
|
|
72
|
+
[data-vibe-menu] .vm-handle-switch-toggle[aria-expanded="true"] .vm-glyph { transform: rotate(90deg); }
|
|
73
|
+
@media (prefers-reduced-motion: reduce) { [data-vibe-menu] .vm-handle-switch-toggle .vm-glyph { transition: none; } }
|
|
74
|
+
[data-vibe-menu] .vm-handle-switch .vm-handle-row { height: 40px; padding: 0; border: 0; background: none; color: var(--ink); font: inherit; text-align: left; cursor: pointer; }
|
|
75
|
+
[data-vibe-menu] .vm-handle-switch .vm-handle-row:disabled { cursor: default; opacity: 0.6; }
|
|
76
|
+
[data-vibe-menu] .vm-handle-switch .vm-avatar { flex: none; }
|
|
67
77
|
[data-vibe-menu] .vm-picture { display: flex; padding: 2px 0 8px 40px; }
|
|
68
78
|
[data-vibe-menu] .vm-form-note { margin: 8px 0 0; font-size: 13px; color: var(--ink); }
|
|
69
79
|
@container (max-width: 480px) {
|
|
@@ -92,6 +102,33 @@ function HandleDisc(props) {
|
|
|
92
102
|
function avatarUrlOf(account, slug) {
|
|
93
103
|
return account.handles.find((h) => h.slug === slug)?.avatarUrl;
|
|
94
104
|
}
|
|
105
|
+
export const SWITCH_INLINE_MAX = 7;
|
|
106
|
+
function HandleSwitchList(props) {
|
|
107
|
+
const { account } = props;
|
|
108
|
+
const [open, setOpen] = useState(false);
|
|
109
|
+
if ((account.guestAsk ?? null) !== null)
|
|
110
|
+
return null;
|
|
111
|
+
const others = account.handles.filter((h) => h.slug !== account.activeHandle);
|
|
112
|
+
if (others.length === 0)
|
|
113
|
+
return null;
|
|
114
|
+
const shown = others.length > SWITCH_INLINE_MAX ? others.slice(0, SWITCH_INLINE_MAX - 1) : others;
|
|
115
|
+
const listId = "vm-handle-switch-list";
|
|
116
|
+
return (React.createElement("div", { className: "vm-handle-switch", "data-handle-switch": "" },
|
|
117
|
+
React.createElement("button", { className: "vm-handle-switch-toggle", type: "button", "aria-expanded": open, "aria-controls": listId, "data-handle-switch-toggle": "", onClick: () => setOpen((v) => !v) },
|
|
118
|
+
ACCOUNT_COPY.switchTo,
|
|
119
|
+
React.createElement(Glyph, { name: "chevron-right" })),
|
|
120
|
+
open ? (React.createElement("div", { id: listId },
|
|
121
|
+
shown.map((h) => (React.createElement("button", { key: h.slug, className: "vm-handle-row", type: "button", "data-handle-switch-to": h.slug, disabled: account.handleBusy, onClick: () => {
|
|
122
|
+
setOpen(false);
|
|
123
|
+
account.onSelectHandle(h.slug);
|
|
124
|
+
} },
|
|
125
|
+
React.createElement(HandleDisc, { className: "vm-avatar", slug: h.slug, avatarUrl: h.avatarUrl }),
|
|
126
|
+
React.createElement("span", { className: `vm-label is-plain ${NO_CAPTURE}` },
|
|
127
|
+
"@",
|
|
128
|
+
h.slug)))),
|
|
129
|
+
shown.length < others.length ? (React.createElement("div", { className: "vm-picture" },
|
|
130
|
+
React.createElement(Chip, { label: ACCOUNT_COPY.allHandles(account.handles.length), ghost: true, onClick: () => props.onDrill({ drill: "handles" }) }))) : null)) : null));
|
|
131
|
+
}
|
|
95
132
|
function CreditsFact(props) {
|
|
96
133
|
const { remaining, included } = props.account.credits;
|
|
97
134
|
if (remaining === null)
|
|
@@ -254,6 +291,7 @@ function AccountBody(props) {
|
|
|
254
291
|
"@",
|
|
255
292
|
active)),
|
|
256
293
|
guestAsk === null ? null : React.createElement(GuestHandleNote, null),
|
|
294
|
+
React.createElement(HandleSwitchList, { account: account, onDrill: nav.onDrill }),
|
|
257
295
|
React.createElement(CreditsFact, { account: account }),
|
|
258
296
|
guestAsk === null ? React.createElement(CreditsPill, { account: account, nav: nav }) : null,
|
|
259
297
|
React.createElement(AccountRows, { account: account, lead: guestAsk === null ? (React.createElement(Row, { lead: "at-sign", label: ACCOUNT_COPY.handles, tail: { kind: "drill", value: `@${active}`, handle: true }, onClick: () => nav.onDrill({ drill: "handles" }) })) : null })));
|
|
@@ -327,6 +365,7 @@ function AccountTabBody(props) {
|
|
|
327
365
|
handle),
|
|
328
366
|
account.onLogout === null ? null : (React.createElement("button", { className: "vm-textbtn", type: "button", "data-item": "logOut", onClick: account.onLogout }, ACCOUNT_COPY.logOut))),
|
|
329
367
|
guestAsk === null ? null : React.createElement(GuestHandleNote, null),
|
|
368
|
+
React.createElement(HandleSwitchList, { account: account, onDrill: nav.onDrill }),
|
|
330
369
|
React.createElement(CreditsFact, { account: account }),
|
|
331
370
|
mainKind === "credits" || mainKind === "guest" ? null : creditsPill),
|
|
332
371
|
React.createElement(MainAction, null, main),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountCard.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/cards/AccountCard.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AccountCard.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/cards/AccountCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ import { Row } from "../parts/Row.js";
|
|
|
15
15
|
import { StopIconButton } from "../parts/StopIconButton.js";
|
|
16
16
|
import { CodeModeWorkspace, WORKSPACE_CODE_TABS, resolveActiveCodeTab } from "./CodeModeWorkspace.js";
|
|
17
17
|
import { ScrollTabRow } from "../parts/ScrollTabRow.js";
|
|
18
|
-
import { CODE_TAB_ROW_CSS, CodeTabRow, codeNavItems, codeNavRowItems, codeTierItems, codeTierLabel, codeTierRowItems, codeTierTab, } from "./CodeTabRow.js";
|
|
18
|
+
import { CODE_TAB_ROW_CSS, CodeTabRow, codeNavItems, steadyCodeNavItems, codeNavRowItems, codeTierItems, codeTierLabel, codeTierRowItems, codeTierTab, } from "./CodeTabRow.js";
|
|
19
19
|
function hasSlot(slot) {
|
|
20
20
|
return slot !== null && slot !== undefined;
|
|
21
21
|
}
|
|
@@ -86,6 +86,7 @@ export function CodeCard(props) {
|
|
|
86
86
|
const focusAfterCodeMode = React.useRef(false);
|
|
87
87
|
const hadPinned = React.useRef(false);
|
|
88
88
|
const pinnedLeftAt = React.useRef(undefined);
|
|
89
|
+
const handoffSawBuild = React.useRef(false);
|
|
89
90
|
React.useLayoutEffect(() => {
|
|
90
91
|
if (focusAfterCodeMode.current && code.codeMode === false && composerField.current !== null) {
|
|
91
92
|
focusAfterCodeMode.current = false;
|
|
@@ -197,7 +198,14 @@ export function CodeCard(props) {
|
|
|
197
198
|
return (item !== "look" && item !== "help") || hasSlot(code.slots[item]);
|
|
198
199
|
});
|
|
199
200
|
const codeModeExits = codeNavItems({ owner, editor, codeModeAllowed }).filter((item) => item === "agentLog" || (item === "look" && hasSlot(code.slots.look)));
|
|
200
|
-
const
|
|
201
|
+
const steady = code.steadyNav === true && editor
|
|
202
|
+
? steadyCodeNavItems({
|
|
203
|
+
editor,
|
|
204
|
+
ready: { agentLog: logLines.length > 0, look: hasSlot(code.slots.look), code: codeModeAllowed },
|
|
205
|
+
})
|
|
206
|
+
: null;
|
|
207
|
+
const rowItems = steady?.items ?? navItems;
|
|
208
|
+
const rowNode = (active) => rowItems.length === 0 ? (React.createElement(React.Fragment, null)) : (React.createElement(CodeTabRow, { items: rowItems, active: active, onPick: (item) => onNavPick(active, item), ...(steady === null ? {} : { disabled: steady.disabled }) }));
|
|
201
209
|
if (codeModeOn && code.tabRow === true) {
|
|
202
210
|
const tierTab = codeTierTab({ codeTab: code.codeTab, disabled: code.disabledCodeTabs, view: nav.view, owner });
|
|
203
211
|
const onTier = (key) => {
|
|
@@ -288,11 +296,17 @@ export function CodeCard(props) {
|
|
|
288
296
|
const working = composer.cap === "Stop" && moment.pinned === null && live?.kind === "progress";
|
|
289
297
|
const firstBuild = working && live?.resting !== true && live?.expected !== undefined;
|
|
290
298
|
const historyLoading = live?.kind === "loading";
|
|
291
|
-
|
|
299
|
+
if (code.firstBuildHandoff !== true)
|
|
300
|
+
handoffSawBuild.current = false;
|
|
301
|
+
else if (firstBuild)
|
|
302
|
+
handoffSawBuild.current = true;
|
|
303
|
+
const handoffHold = code.firstBuildHandoff === true && handoffSawBuild.current === false;
|
|
304
|
+
const showComposer = code.composerHidden !== true && firstBuild === false && historyLoading === false && handoffHold === false;
|
|
292
305
|
const guestBuildNode = editor === true && code.guestBuild === true && working === true && showComposer === false ? (React.createElement("p", { className: "vm-sub vm-guest-build", "data-guest-build-note": "" },
|
|
293
306
|
React.createElement("strong", null, GUEST_BUILD_NOTE.lead),
|
|
294
307
|
" ",
|
|
295
308
|
GUEST_BUILD_NOTE.body)) : null;
|
|
309
|
+
const reserveRow = rowItems.length === 0 && editor === true && logOpens === false && (firstBuild || (handoffHold && moment.pinned === null));
|
|
296
310
|
const mainAction = showComposer ? (composerNode) : working ? (React.createElement(StopIconButton, { disabled: composer.stopDisabled === true, armedAt: latestStopArm(live?.expected?.fromMs, pinnedLeftAt.current), onStop: draft.stop, latch: code.composerHidden !== true })) : null;
|
|
297
311
|
return (React.createElement("div", { className: "vm-code vm-ctab", "data-card": "vibe", "data-tab-row": "", "data-chat-only": code.chatOnly === true ? "" : undefined },
|
|
298
312
|
React.createElement("style", null, CODE_CARD_CSS + CODE_TAB_ROW_CSS + CODE_SUMMARY_LINE_CSS),
|
|
@@ -304,7 +318,7 @@ export function CodeCard(props) {
|
|
|
304
318
|
guestBuildNode,
|
|
305
319
|
React.createElement("div", { className: "vm-ctab-foot" },
|
|
306
320
|
mainAction,
|
|
307
|
-
row)));
|
|
321
|
+
reserveRow ? React.createElement(CodeTabRow, { items: ["agentLog"], active: null, onPick: () => undefined, reserve: true }) : row)));
|
|
308
322
|
}
|
|
309
323
|
if (drill !== null) {
|
|
310
324
|
return (React.createElement("div", { className: "vm-code", "data-card": "vibe" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeCard.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/cards/CodeCard.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeCard.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/cards/CodeCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,13 @@ export declare function codeNavItems(gates: {
|
|
|
9
9
|
readonly editor: boolean;
|
|
10
10
|
readonly codeModeAllowed: boolean;
|
|
11
11
|
}): readonly CodeNavItem[];
|
|
12
|
+
export declare function steadyCodeNavItems(gates: {
|
|
13
|
+
readonly editor: boolean;
|
|
14
|
+
readonly ready: Readonly<Record<"agentLog" | "look" | "code", boolean>>;
|
|
15
|
+
}): {
|
|
16
|
+
readonly items: readonly CodeNavItem[];
|
|
17
|
+
readonly disabled: readonly CodeNavItem[];
|
|
18
|
+
};
|
|
12
19
|
export declare function codeNavRowItems(items: readonly CodeNavItem[]): readonly ScrollTabItem[];
|
|
13
20
|
export type CodeTierKey = "code" | "files" | "data" | "app-settings" | "details" | "ai-requests" | "help";
|
|
14
21
|
export declare function codeTierLabel(key: CodeTierKey): string;
|
|
@@ -33,10 +40,12 @@ export declare function codeTierRowItems(input: {
|
|
|
33
40
|
readonly disabled: readonly CodeTab[];
|
|
34
41
|
readonly editTextOn: boolean | null;
|
|
35
42
|
}): readonly ScrollTabItem[];
|
|
36
|
-
export declare const CODE_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n/* The lines under the box (queue note, hold note, the change box's hint and a\n refused Send's idea) tuck up into the plain card's 16px composer margin with\n -10px. Here the composer has none, so they sit below it instead of over its\n border. */\n[data-vibe-menu] .vm-ctab .vm-queue-note,\n[data-vibe-menu] .vm-ctab .vm-door-line { margin-top: var(--space-6); margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n/* A chat-only first turn: the conversation is the result, so the log takes about\n twice its usual cap, never past 40% of the screen (the request, composer and\n row keep their room; the frame-capped card scrolls nothing). */\n[data-vibe-menu] .vm-ctab[data-chat-only] .vm-log { max-height: max(var(--size-log-max), 40dvh); }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n/* A drill or an opened log taller than the card scrolls the card; the row sticks\n on the band so it stays in view. In flow (no overflow) this changes nothing.\n Code mode's tier layout fills the card instead, so it keeps the row in flow. */\n[data-vibe-menu] .vm-ctab:not([data-tier-mode]) > .vm-cnav {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg);\n}\n/* The Code card's foot (#7382): its main action (composer or Stop) and the row\n stick to the band as ONE block, flush with the card's sides and bottom as the\n row alone was. The composer and its Send/Stop then stay wholly above both\n navigation rows however the card scrolls or eases: the content above slides\n behind the foot instead of the row sliding over the composer. */\n[data-vibe-menu] .vm-ctab-foot {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; flex: none;\n display: flex; flex-direction: column;\n margin: 0 calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n padding: 0 var(--space-16);\n background: var(--card-bg);\n}\n[data-vibe-menu] .vm-ctab-foot > .vm-cnav { margin-bottom: 0; }\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n/* Code mode with the row: the retained workspace sits above this card's\n content, then the composer and one scrolling row, flush. */\n[data-vibe-menu] .vm-ctab[data-tier-mode]:not([data-fill]) { padding-top: var(--space-14); }\n[data-vibe-menu] .vm-ctab[data-tier-mode] .vm-tier-body {\n flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ctab[data-tier-mode] > .vm-srow { margin-bottom: calc(-1 * var(--space-16)); }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n";
|
|
43
|
+
export declare const CODE_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n/* The lines under the box (queue note, hold note, the change box's hint and a\n refused Send's idea) tuck up into the plain card's 16px composer margin with\n -10px. Here the composer has none, so they sit below it instead of over its\n border. */\n[data-vibe-menu] .vm-ctab .vm-queue-note,\n[data-vibe-menu] .vm-ctab .vm-door-line { margin-top: var(--space-6); margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n/* A chat-only first turn: the conversation is the result, so the log takes about\n twice its usual cap, never past 40% of the screen (the request, composer and\n row keep their room; the frame-capped card scrolls nothing). */\n[data-vibe-menu] .vm-ctab[data-chat-only] .vm-log { max-height: max(var(--size-log-max), 40dvh); }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n/* A drill or an opened log taller than the card scrolls the card; the row sticks\n on the band so it stays in view. In flow (no overflow) this changes nothing.\n Code mode's tier layout fills the card instead, so it keeps the row in flow. */\n[data-vibe-menu] .vm-ctab:not([data-tier-mode]) > .vm-cnav {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg);\n}\n/* The Code card's foot (#7382): its main action (composer or Stop) and the row\n stick to the band as ONE block, flush with the card's sides and bottom as the\n row alone was. The composer and its Send/Stop then stay wholly above both\n navigation rows however the card scrolls or eases: the content above slides\n behind the foot instead of the row sliding over the composer. */\n[data-vibe-menu] .vm-ctab-foot {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; flex: none;\n display: flex; flex-direction: column;\n margin: 0 calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n padding: 0 var(--space-16);\n background: var(--card-bg);\n}\n[data-vibe-menu] .vm-ctab-foot > .vm-cnav { margin-bottom: 0; }\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n/* A steady-row item that is not ready yet: in place, grayed out, not pressable. */\n[data-vibe-menu] .vm-cnav button:disabled { opacity: 0.4; cursor: default; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n/* Code mode with the row: the retained workspace sits above this card's\n content, then the composer and one scrolling row, flush. */\n[data-vibe-menu] .vm-ctab[data-tier-mode]:not([data-fill]) { padding-top: var(--space-14); }\n[data-vibe-menu] .vm-ctab[data-tier-mode] .vm-tier-body {\n flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ctab[data-tier-mode] > .vm-srow { margin-bottom: calc(-1 * var(--space-16)); }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n";
|
|
37
44
|
export interface CodeTabRowProps {
|
|
38
45
|
readonly items: readonly CodeNavItem[];
|
|
39
46
|
readonly active: CodeNavItem | null;
|
|
40
47
|
readonly onPick: (item: CodeNavItem) => void;
|
|
48
|
+
readonly reserve?: boolean;
|
|
49
|
+
readonly disabled?: readonly CodeNavItem[];
|
|
41
50
|
}
|
|
42
51
|
export declare function CodeTabRow(props: CodeTabRowProps): React.ReactElement;
|
|
@@ -19,7 +19,7 @@ export function codeNavItems(gates) {
|
|
|
19
19
|
const items = [];
|
|
20
20
|
if (gates.editor)
|
|
21
21
|
items.push("agentLog");
|
|
22
|
-
if (gates.
|
|
22
|
+
if (gates.editor)
|
|
23
23
|
items.push("look");
|
|
24
24
|
if (gates.codeModeAllowed)
|
|
25
25
|
items.push("code");
|
|
@@ -27,6 +27,12 @@ export function codeNavItems(gates) {
|
|
|
27
27
|
items.push("help");
|
|
28
28
|
return items;
|
|
29
29
|
}
|
|
30
|
+
export function steadyCodeNavItems(gates) {
|
|
31
|
+
if (gates.editor === false)
|
|
32
|
+
return { items: [], disabled: [] };
|
|
33
|
+
const items = ["agentLog", "look", "code"];
|
|
34
|
+
return { items, disabled: items.filter((item) => gates.ready[item] === false) };
|
|
35
|
+
}
|
|
30
36
|
export function codeNavRowItems(items) {
|
|
31
37
|
return items.map((key) => ({ key, label: CODE_NAV_TITLES[key], glyph: CODE_NAV_GLYPH[key] }));
|
|
32
38
|
}
|
|
@@ -133,6 +139,8 @@ export const CODE_TAB_ROW_CSS = `
|
|
|
133
139
|
[data-vibe-menu] .vm-ctab-foot > .vm-cnav { margin-bottom: 0; }
|
|
134
140
|
[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }
|
|
135
141
|
[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }
|
|
142
|
+
/* A steady-row item that is not ready yet: in place, grayed out, not pressable. */
|
|
143
|
+
[data-vibe-menu] .vm-cnav button:disabled { opacity: 0.4; cursor: default; }
|
|
136
144
|
[data-vibe-menu] .vm-cnav button[aria-pressed="true"] { background: var(--accent); color: var(--on-accent); }
|
|
137
145
|
[data-vibe-menu] .vm-cnav-circle {
|
|
138
146
|
display: flex; align-items: center; justify-content: center; flex: none;
|
|
@@ -157,9 +165,10 @@ export const CODE_TAB_ROW_CSS = `
|
|
|
157
165
|
}
|
|
158
166
|
`;
|
|
159
167
|
export function CodeTabRow(props) {
|
|
160
|
-
return (React.createElement("nav", { className: "vm-cnav", "aria-label": "Code tools" }, props.items.map((item) => {
|
|
161
|
-
const
|
|
162
|
-
|
|
168
|
+
return (React.createElement("nav", { className: "vm-cnav", "aria-label": "Code tools", "aria-hidden": props.reserve === true ? true : undefined, style: props.reserve === true ? { visibility: "hidden" } : undefined }, props.items.map((item) => {
|
|
169
|
+
const off = props.disabled?.includes(item) === true;
|
|
170
|
+
const pressed = off === false && props.active === item;
|
|
171
|
+
return (React.createElement("button", { key: item, type: "button", "data-item": item, "aria-pressed": pressed, disabled: off, onClick: () => props.onPick(item) },
|
|
163
172
|
React.createElement("span", { className: "vm-cnav-circle", "aria-hidden": "true" },
|
|
164
173
|
React.createElement(Glyph, { name: CODE_NAV_GLYPH[item], className: "" })),
|
|
165
174
|
React.createElement("span", { className: "vm-cnav-label" }, CODE_NAV_TITLES[item])));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeTabRow.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/cards/CodeTabRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,KAAK,EAAkB,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAoBnF,MAAM,eAAe,GAA0C,MAAM,CAAC,MAAM,CAAC;IAC3E,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC,CAAC;AAEH,MAAM,cAAc,GAA6C,MAAM,CAAC,MAAM,CAAC;IAC7E,QAAQ,EAAE,YAAY;IACtB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,aAAa;CACpB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeTabRow.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/cards/CodeTabRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export interface CardTabItem {
|
|
|
9
9
|
readonly href?: string;
|
|
10
10
|
readonly onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
11
11
|
}
|
|
12
|
-
export declare const CARD_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n/* The lines under the box (queue note, hold note, the change box's hint and a\n refused Send's idea) tuck up into the plain card's 16px composer margin with\n -10px. Here the composer has none, so they sit below it instead of over its\n border. */\n[data-vibe-menu] .vm-ctab .vm-queue-note,\n[data-vibe-menu] .vm-ctab .vm-door-line { margin-top: var(--space-6); margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n/* A chat-only first turn: the conversation is the result, so the log takes about\n twice its usual cap, never past 40% of the screen (the request, composer and\n row keep their room; the frame-capped card scrolls nothing). */\n[data-vibe-menu] .vm-ctab[data-chat-only] .vm-log { max-height: max(var(--size-log-max), 40dvh); }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n/* A drill or an opened log taller than the card scrolls the card; the row sticks\n on the band so it stays in view. In flow (no overflow) this changes nothing.\n Code mode's tier layout fills the card instead, so it keeps the row in flow. */\n[data-vibe-menu] .vm-ctab:not([data-tier-mode]) > .vm-cnav {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg);\n}\n/* The Code card's foot (#7382): its main action (composer or Stop) and the row\n stick to the band as ONE block, flush with the card's sides and bottom as the\n row alone was. The composer and its Send/Stop then stay wholly above both\n navigation rows however the card scrolls or eases: the content above slides\n behind the foot instead of the row sliding over the composer. */\n[data-vibe-menu] .vm-ctab-foot {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; flex: none;\n display: flex; flex-direction: column;\n margin: 0 calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n padding: 0 var(--space-16);\n background: var(--card-bg);\n}\n[data-vibe-menu] .vm-ctab-foot > .vm-cnav { margin-bottom: 0; }\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n/* Code mode with the row: the retained workspace sits above this card's\n content, then the composer and one scrolling row, flush. */\n[data-vibe-menu] .vm-ctab[data-tier-mode]:not([data-fill]) { padding-top: var(--space-14); }\n[data-vibe-menu] .vm-ctab[data-tier-mode] .vm-tier-body {\n flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ctab[data-tier-mode] > .vm-srow { margin-bottom: calc(-1 * var(--space-16)); }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n\n[data-vibe-menu] .vm-cnav > a {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink); text-decoration: none;\n}\n[data-vibe-menu] .vm-cnav > * + a,\n[data-vibe-menu] .vm-cnav > a + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav > a:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-xtab[data-row-drill] .vm-back { display: none; }\n[data-vibe-menu] .vm-xtab .vm-drill > .vm-subhead:first-child { margin-top: 0; }\n/* The hierarchy (owner 2026-10-13), bottom up: the strip, this row, the card's\n ONE main action, then the stretch. The two zones are layout-free wrappers, so\n each card keeps its own spacing; the main action sits on the row's own top\n margin, as Code's composer does. */\n[data-vibe-menu] .vm-xtab .vm-stretch,\n[data-vibe-menu] .vm-xtab .vm-main { display: contents; }\n[data-vibe-menu] .vm-xtab .vm-main > :last-child { margin-bottom: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-subhead:first-child { margin-top: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group.is-flush { border-bottom: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group:last-child { margin-bottom: var(--space-14); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group + * { margin-top: var(--space-14); }\n";
|
|
12
|
+
export declare const CARD_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n/* The lines under the box (queue note, hold note, the change box's hint and a\n refused Send's idea) tuck up into the plain card's 16px composer margin with\n -10px. Here the composer has none, so they sit below it instead of over its\n border. */\n[data-vibe-menu] .vm-ctab .vm-queue-note,\n[data-vibe-menu] .vm-ctab .vm-door-line { margin-top: var(--space-6); margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n/* A chat-only first turn: the conversation is the result, so the log takes about\n twice its usual cap, never past 40% of the screen (the request, composer and\n row keep their room; the frame-capped card scrolls nothing). */\n[data-vibe-menu] .vm-ctab[data-chat-only] .vm-log { max-height: max(var(--size-log-max), 40dvh); }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n/* A drill or an opened log taller than the card scrolls the card; the row sticks\n on the band so it stays in view. In flow (no overflow) this changes nothing.\n Code mode's tier layout fills the card instead, so it keeps the row in flow. */\n[data-vibe-menu] .vm-ctab:not([data-tier-mode]) > .vm-cnav {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg);\n}\n/* The Code card's foot (#7382): its main action (composer or Stop) and the row\n stick to the band as ONE block, flush with the card's sides and bottom as the\n row alone was. The composer and its Send/Stop then stay wholly above both\n navigation rows however the card scrolls or eases: the content above slides\n behind the foot instead of the row sliding over the composer. */\n[data-vibe-menu] .vm-ctab-foot {\n position: sticky; bottom: var(--vm-band, 0px); z-index: 1; flex: none;\n display: flex; flex-direction: column;\n margin: 0 calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n padding: 0 var(--space-16);\n background: var(--card-bg);\n}\n[data-vibe-menu] .vm-ctab-foot > .vm-cnav { margin-bottom: 0; }\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n/* A steady-row item that is not ready yet: in place, grayed out, not pressable. */\n[data-vibe-menu] .vm-cnav button:disabled { opacity: 0.4; cursor: default; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n/* Code mode with the row: the retained workspace sits above this card's\n content, then the composer and one scrolling row, flush. */\n[data-vibe-menu] .vm-ctab[data-tier-mode]:not([data-fill]) { padding-top: var(--space-14); }\n[data-vibe-menu] .vm-ctab[data-tier-mode] .vm-tier-body {\n flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ctab[data-tier-mode] > .vm-srow { margin-bottom: calc(-1 * var(--space-16)); }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n\n[data-vibe-menu] .vm-cnav > a {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink); text-decoration: none;\n}\n[data-vibe-menu] .vm-cnav > * + a,\n[data-vibe-menu] .vm-cnav > a + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav > a:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-xtab[data-row-drill] .vm-back { display: none; }\n[data-vibe-menu] .vm-xtab .vm-drill > .vm-subhead:first-child { margin-top: 0; }\n/* The hierarchy (owner 2026-10-13), bottom up: the strip, this row, the card's\n ONE main action, then the stretch. The two zones are layout-free wrappers, so\n each card keeps its own spacing; the main action sits on the row's own top\n margin, as Code's composer does. */\n[data-vibe-menu] .vm-xtab .vm-stretch,\n[data-vibe-menu] .vm-xtab .vm-main { display: contents; }\n[data-vibe-menu] .vm-xtab .vm-main > :last-child { margin-bottom: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-subhead:first-child { margin-top: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group.is-flush { border-bottom: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group:last-child { margin-bottom: var(--space-14); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group + * { margin-top: var(--space-14); }\n";
|
|
13
13
|
export interface CardTabRowProps {
|
|
14
14
|
readonly label: string;
|
|
15
15
|
readonly items: readonly CardTabItem[];
|
|
@@ -77,6 +77,7 @@ export interface CodeSlice {
|
|
|
77
77
|
readonly sentTurnLive?: boolean;
|
|
78
78
|
readonly promptContent?: ReactNode;
|
|
79
79
|
readonly composerHidden?: boolean;
|
|
80
|
+
readonly steadyNav?: boolean;
|
|
80
81
|
readonly chatOnly?: boolean;
|
|
81
82
|
composer: ComposerSlice;
|
|
82
83
|
moments: readonly MomentItem[];
|
|
@@ -106,6 +107,7 @@ export interface CodeSlice {
|
|
|
106
107
|
readonly editText?: EditTextSlice | null;
|
|
107
108
|
readonly keepApp?: KeepAppSlice | null;
|
|
108
109
|
readonly guestBuild?: boolean;
|
|
110
|
+
readonly firstBuildHandoff?: boolean;
|
|
109
111
|
readonly tabRow?: boolean;
|
|
110
112
|
readonly latestSummary?: string;
|
|
111
113
|
readonly historyLoading?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/slices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/slices.ts"],"names":[],"mappings":"AA2eA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,UAAU,EAAE,qDAAqD;IACjE,eAAe,EAAE,sDAAsD;CAC/D,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
export declare const VIBE_MENU_LIGHT_VARS = "\n color-scheme: light;\n --section-home: oklch(76.02% 0.1832 146.61);\n --section-account: oklch(57.46% 0.2126 29.55);\n --section-code: oklch(89.78% 0.1857 98.22);\n --section-share: oklch(64.39% 0.1304 231.41);\n --vibes-black: #000000;\n --vibes-cream: #fffff0;\n --menu-ink: #1a1a1a;\n --card-bg: var(--vibes-cream);\n --ink: #111111;\n --muted: #555555;\n --line: #111111;\n --line-card: #111111;\n --line-hairline: #1111112e;\n --placeholder: var(--muted);\n --suggest-border: #11111173;\n --share-tint: #009ace1f;\n --share-tint-strong: #009ace40;\n --on-home: var(--menu-ink);\n --on-account: var(--vibes-cream);\n --on-code: var(--menu-ink);\n --on-share: var(--menu-ink);\n --badge: var(--section-account);\n --on-badge: var(--vibes-cream);\n --cancel-cap: #f3d6d2;\n --on-cancel-cap: #9c2318;\n --obsidian-fill: rgba(6, 9, 10, 0.94);\n --obsidian-edge: rgba(255, 255, 255, 0.17);\n --obsidian-highlight: rgba(255, 255, 255, 0.32);\n --obsidian-rim: rgba(255, 255, 255, 0.1);\n --font-display: \"Alte Haas Grotesk\", Inter, sans-serif;\n --font-tab: Inter, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --space-9: 9px;\n --space-2: 2px;\n --space-4: 4px;\n --space-6: 6px;\n --space-8: 8px;\n --space-10: 10px;\n --space-12: 12px;\n --space-14: 14px;\n --space-16: 16px;\n --space-18: 18px;\n --space-24: 24px;\n --radius-card: 16px;\n --radius-full: 999px;\n --radius-bar-end: 25px;\n --radius-access-line: 24px;\n --radius-input: 22px;\n --radius-done: 21px;\n --radius-copy: 18px;\n --radius-chip: 14px;\n --radius-moment: 12px;\n --radius-switch: 10px;\n --radius-meter: 7px;\n --obsidian-shadow: 0 2px 5px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.16), inset 0 -1px 0 rgba(255, 255, 255, 0.05), inset 0 0 12px rgba(255, 255, 255, 0.02);\n --swatch-selected: 0 0 0 2px #fffff0, 0 0 0 4px #111111;\n --stroke-rule: 2px;\n --stroke-hairline: 1px;\n --stroke-mini: 1.5px;\n --stroke-focus: 3px;\n --stroke-glyph: 2.4px;\n --size-icon-circle: 28px;\n --size-icon-circle-phone: 22px;\n --size-glyph: 14px;\n --size-glyph-cta: 20px;\n --size-bar: 50px;\n --size-tab: 176px;\n --size-home-extra: 14px;\n --size-bar-end: 63px;\n --size-pill-w: 120px;\n --size-pill-h: 44px;\n --size-ring: 3px;\n --size-edge: 24px;\n --size-edge-phone: 16px;\n --size-pill-flat-inset: 19px;\n --size-band: 8px;\n --size-row: 46px;\n --size-row-compact: 42px;\n --size-chip: 28px;\n --size-copy: 36px;\n --size-input: 44px;\n --size-composer: 48px;\n --size-access-line: 48px;\n --size-segment: 32px;\n --size-segment-mini: 24px;\n --size-switch-w: 36px;\n --size-meter: 14px;\n --size-card-max: 480px;\n --size-card-max-phone: 560px;\n --size-log-max: 160px;\n --size-log-peek: 120px;\n --size-code-mode-max-w: 1200px;\n --opacity-tab-inactive: 0.73;\n --opacity-row-disabled: 0.35;\n --provider-disc: #ffffff;\n --provider-ink: #111111;";
|
|
3
3
|
export declare const VIBE_MENU_DARK_VARS = "\n color-scheme: dark;\n --card-bg: #1a1a1a;\n --ink: #e0e0e0;\n --muted: #a3a3a3;\n --line-card: #e0e0e0;\n --line-hairline: #e0e0e02e;\n --suggest-border: #e0e0e073;\n --cancel-cap: #4a2420;\n --on-cancel-cap: #f1b5ad;\n --swatch-selected: 0 0 0 2px #1a1a1a, 0 0 0 4px #e0e0e0;";
|
|
4
|
-
export declare const VIBE_MENU_CSS = "\n/* ---------- tokens (tokens.json), light, then both dark arms ----------\n Detached layers (portalled out of the menu root) carry\n data-vibe-menu-detached, so every token block lists them too. */\n[data-vibe-menu],\n[data-vibe-menu-detached] {\n color-scheme: light;\n --section-home: oklch(76.02% 0.1832 146.61);\n --section-account: oklch(57.46% 0.2126 29.55);\n --section-code: oklch(89.78% 0.1857 98.22);\n --section-share: oklch(64.39% 0.1304 231.41);\n --vibes-black: #000000;\n --vibes-cream: #fffff0;\n --menu-ink: #1a1a1a;\n --card-bg: var(--vibes-cream);\n --ink: #111111;\n --muted: #555555;\n --line: #111111;\n --line-card: #111111;\n --line-hairline: #1111112e;\n --placeholder: var(--muted);\n --suggest-border: #11111173;\n --share-tint: #009ace1f;\n --share-tint-strong: #009ace40;\n --on-home: var(--menu-ink);\n --on-account: var(--vibes-cream);\n --on-code: var(--menu-ink);\n --on-share: var(--menu-ink);\n --badge: var(--section-account);\n --on-badge: var(--vibes-cream);\n --cancel-cap: #f3d6d2;\n --on-cancel-cap: #9c2318;\n --obsidian-fill: rgba(6, 9, 10, 0.94);\n --obsidian-edge: rgba(255, 255, 255, 0.17);\n --obsidian-highlight: rgba(255, 255, 255, 0.32);\n --obsidian-rim: rgba(255, 255, 255, 0.1);\n --font-display: \"Alte Haas Grotesk\", Inter, sans-serif;\n --font-tab: Inter, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --space-9: 9px;\n --space-2: 2px;\n --space-4: 4px;\n --space-6: 6px;\n --space-8: 8px;\n --space-10: 10px;\n --space-12: 12px;\n --space-14: 14px;\n --space-16: 16px;\n --space-18: 18px;\n --space-24: 24px;\n --radius-card: 16px;\n --radius-full: 999px;\n --radius-bar-end: 25px;\n --radius-access-line: 24px;\n --radius-input: 22px;\n --radius-done: 21px;\n --radius-copy: 18px;\n --radius-chip: 14px;\n --radius-moment: 12px;\n --radius-switch: 10px;\n --radius-meter: 7px;\n --obsidian-shadow: 0 2px 5px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.16), inset 0 -1px 0 rgba(255, 255, 255, 0.05), inset 0 0 12px rgba(255, 255, 255, 0.02);\n --swatch-selected: 0 0 0 2px #fffff0, 0 0 0 4px #111111;\n --stroke-rule: 2px;\n --stroke-hairline: 1px;\n --stroke-mini: 1.5px;\n --stroke-focus: 3px;\n --stroke-glyph: 2.4px;\n --size-icon-circle: 28px;\n --size-icon-circle-phone: 22px;\n --size-glyph: 14px;\n --size-glyph-cta: 20px;\n --size-bar: 50px;\n --size-tab: 176px;\n --size-home-extra: 14px;\n --size-bar-end: 63px;\n --size-pill-w: 120px;\n --size-pill-h: 44px;\n --size-ring: 3px;\n --size-edge: 24px;\n --size-edge-phone: 16px;\n --size-pill-flat-inset: 19px;\n --size-band: 8px;\n --size-row: 46px;\n --size-row-compact: 42px;\n --size-chip: 28px;\n --size-copy: 36px;\n --size-input: 44px;\n --size-composer: 48px;\n --size-access-line: 48px;\n --size-segment: 32px;\n --size-segment-mini: 24px;\n --size-switch-w: 36px;\n --size-meter: 14px;\n --size-card-max: 480px;\n --size-card-max-phone: 560px;\n --size-log-max: 160px;\n --size-log-peek: 120px;\n --size-code-mode-max-w: 1200px;\n --opacity-tab-inactive: 0.73;\n --opacity-row-disabled: 0.35;\n --provider-disc: #ffffff;\n --provider-ink: #111111;\n}\n@media (prefers-color-scheme: dark) {\n [data-vibe-menu],\n [data-vibe-menu-detached] {\n color-scheme: dark;\n --card-bg: #1a1a1a;\n --ink: #e0e0e0;\n --muted: #a3a3a3;\n --line-card: #e0e0e0;\n --line-hairline: #e0e0e02e;\n --suggest-border: #e0e0e073;\n --cancel-cap: #4a2420;\n --on-cancel-cap: #f1b5ad;\n --swatch-selected: 0 0 0 2px #1a1a1a, 0 0 0 4px #e0e0e0;\n }\n}\n.dark [data-vibe-menu],\n.dark [data-vibe-menu-detached] {\n color-scheme: dark;\n --card-bg: #1a1a1a;\n --ink: #e0e0e0;\n --muted: #a3a3a3;\n --line-card: #e0e0e0;\n --line-hairline: #e0e0e02e;\n --suggest-border: #e0e0e073;\n --cancel-cap: #4a2420;\n --on-cancel-cap: #f1b5ad;\n --swatch-selected: 0 0 0 2px #1a1a1a, 0 0 0 4px #e0e0e0;\n}\n\n/* ---------- the root: the phone container ---------- */\n[data-vibe-menu] {\n container-name: vibe-menu;\n container-type: inline-size;\n color: var(--ink);\n font-family: var(--font-display);\n}\n\n/* Scrollbars (smoke F15): thin, in the menu's hairline, both themes, never the\n native dark bar inside the cream card. The colour is set on the root AND\n every descendant, for every scroller the menu hosts (drills, the Embed box,\n injected panels): the app's global sheet sets scrollbar-color on *, which\n beats a colour only inherited from the root. The width rule has zero\n specificity so a part that hides its bar (the Code mode tab strip) still\n wins. The webkit arm is for engines without the standard properties; Chrome\n ignores it once they are set. */\n[data-vibe-menu],\n[data-vibe-menu] *,\n[data-vibe-menu-detached],\n[data-vibe-menu-detached] * {\n scrollbar-color: var(--line-hairline) transparent;\n}\n:where([data-vibe-menu]),\n:where([data-vibe-menu]) :where(*) {\n scrollbar-width: thin;\n}\n:where([data-vibe-menu]) ::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n background: transparent;\n}\n:where([data-vibe-menu]) ::-webkit-scrollbar-thumb {\n border-radius: var(--radius-full);\n background: var(--line-hairline);\n}\n\n/* A section is set by data-section on any ancestor (or the root), using the\n code keys: home | settings (Account) | vibe (Code) | share. It sets --accent\n (the section colour) and --on-accent (its label colour). */\n[data-vibe-menu][data-section=\"home\"],\n[data-vibe-menu] [data-section=\"home\"] {\n --accent: var(--section-home);\n --on-accent: var(--on-home);\n}\n[data-vibe-menu][data-section=\"settings\"],\n[data-vibe-menu] [data-section=\"settings\"] {\n --accent: var(--section-account);\n --on-accent: var(--on-account);\n}\n[data-vibe-menu][data-section=\"vibe\"],\n[data-vibe-menu] [data-section=\"vibe\"] {\n --accent: var(--section-code);\n --on-accent: var(--on-code);\n}\n[data-vibe-menu][data-section=\"share\"],\n[data-vibe-menu] [data-section=\"share\"] {\n --accent: var(--section-share);\n --on-accent: var(--on-share);\n}\n\n[data-vibe-menu],\n[data-vibe-menu] * {\n box-sizing: border-box;\n}\n/* the card's surface and side padding, so rows can bleed edge to edge */\n[data-vibe-menu] .vm-card-body {\n position: relative;\n padding: var(--space-14) var(--space-16) var(--space-16);\n background: var(--card-bg);\n color: var(--ink);\n font: 400 14px/20px var(--font-display);\n}\n[data-vibe-menu] .vm-card-body.is-framed {\n border: var(--stroke-rule) solid var(--line);\n border-radius: var(--radius-card) var(--radius-card) 0 0;\n overflow: hidden;\n}\n\n/* ---------- shared ---------- */\n/* Zero specificity: every vm-* rule wins over it, and so does any utility\n class on content a host injects into the card (slots). */\n:where([data-vibe-menu]) :where(button) {\n font: inherit;\n color: inherit;\n background: none;\n border: 0;\n padding: 0;\n cursor: pointer;\n text-align: left;\n touch-action: manipulation;\n}\n[data-vibe-menu] .vm-glyph {\n width: var(--size-glyph);\n height: var(--size-glyph);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--stroke-glyph);\n stroke-linecap: round;\n stroke-linejoin: round;\n flex: none;\n}\n[data-vibe-menu] .vm-label,\n[data-vibe-menu] .vm-seg button,\n[data-vibe-menu] .vm-chip {\n font: 700 14px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n[data-vibe-menu] .vm-label.is-plain {\n font: 700 16px/1.1 var(--font-display);\n letter-spacing: 0;\n text-transform: none;\n}\n[data-vibe-menu] .vm-kicker,\n[data-vibe-menu] .vm-subhead {\n margin: 0 0 var(--space-8);\n font: 700 10.5px/1.3 var(--font-tab);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-subhead {\n margin: var(--space-16) 0 0;\n padding-bottom: var(--space-8);\n}\n[data-vibe-menu] .vm-sub {\n margin: var(--space-8) 0 var(--space-14);\n font-size: 13px;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-app-name {\n white-space: nowrap;\n}\n/* ---------- SectionStrip: the bar ---------- */\n[data-vibe-menu] .vm-menu {\n position: relative;\n}\n[data-vibe-menu] .vm-strip {\n position: relative;\n width: calc(var(--size-tab) * 4 + var(--size-home-extra) + var(--size-bar-end) + 2px);\n height: var(--size-bar);\n}\n[data-vibe-menu] .vm-strip-slide {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: flex-end;\n border: var(--stroke-rule) solid var(--line);\n border-right: 0;\n border-radius: var(--bar-tl, var(--radius-bar-end)) 0 0 var(--radius-bar-end);\n overflow: hidden;\n background: var(--card-bg);\n /* #7329: the bar under the switch belongs to no tab's box. */\n padding-right: var(--size-bar-end);\n}\n[data-vibe-menu] .vm-tab {\n position: relative;\n width: var(--size-tab);\n flex: none;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n border: 0;\n padding: 0 0 0 var(--space-9);\n cursor: pointer;\n background: var(--accent);\n}\n[data-vibe-menu] .vm-tab-circle {\n width: var(--size-icon-circle);\n height: var(--size-icon-circle);\n border-radius: 50%;\n background: var(--menu-ink);\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n}\n[data-vibe-menu] .vm-tab svg {\n width: calc(var(--size-icon-circle) / 2);\n height: calc(var(--size-icon-circle) / 2);\n fill: none;\n stroke: var(--vibes-cream);\n stroke-width: 2.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n flex: none;\n}\n[data-vibe-menu] .vm-tab-label {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 0 0 1.9px;\n font-family: var(--font-tab);\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 1.9px;\n text-transform: uppercase;\n white-space: nowrap;\n pointer-events: none;\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-tab[data-section=\"home\"] {\n width: calc(var(--size-tab) + var(--size-home-extra));\n padding-left: calc(var(--space-9) + var(--size-home-extra) / 2);\n}\n[data-vibe-menu] .vm-tab[data-section=\"home\"] .vm-tab-label {\n left: calc(var(--size-home-extra) / 2);\n}\n/* #7329: Share's box ends where the switch begins; its colour runs on under\n the pill as a child painted beyond the box. */\n[data-vibe-menu] .vm-tab-run {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 100%;\n width: var(--size-bar-end);\n background: inherit;\n}\n[data-vibe-menu] .vm-tab:focus-visible {\n outline: var(--stroke-focus) solid var(--line);\n outline-offset: -3px;\n}\n/* Port change (smoke F5): the DS inset line ring vanished on the black pill\n and drew square corners. The pill's ring is cream, sits in the obsidian\n glass's 3px rim (offset 0), and follows the stadium (the pill's radius). */\n[data-vibe-menu] .vm-pill:focus-visible {\n outline: var(--stroke-focus) solid var(--vibes-cream);\n outline-offset: 0;\n}\n[data-vibe-menu] .vm-menu.has-card .vm-tab:not(.is-active) {\n opacity: var(--opacity-tab-inactive);\n}\n[data-vibe-menu] .vm-badge {\n position: absolute;\n top: -4px;\n right: 6px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n border-radius: var(--radius-full);\n background: var(--badge);\n color: var(--on-badge);\n font: 700 11px/18px var(--font-display);\n text-align: center;\n}\n/* the bar sits against the pill: it runs half the glass under it */\n[data-vibe-menu] .vm-bar-anchor {\n position: relative;\n height: var(--size-bar);\n}\n[data-vibe-menu] .vm-bar-anchor .vm-strip {\n position: absolute;\n left: 0;\n bottom: 0;\n}\n[data-vibe-menu] .vm-bar-anchor .vm-glass {\n position: absolute;\n right: 0;\n bottom: 0;\n}\n/* phones: the bar spans the width; tabs sized to their content, icon above label */\n[data-vibe-menu] .vm-strip.is-phone {\n width: 100%;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab {\n width: auto;\n flex: 1 1 auto;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2);\n min-width: 0;\n padding: 4px 2px;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab-circle {\n width: var(--size-icon-circle-phone);\n height: var(--size-icon-circle-phone);\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab svg {\n width: 12px;\n height: 12px;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab[data-section=\"home\"] {\n padding: 4px 2px 4px calc(2px + var(--size-home-extra) * 0.7);\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab[data-section=\"share\"] {\n flex-grow: 1;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab-label {\n position: static;\n display: block;\n font-size: 9.6px;\n letter-spacing: 1px;\n padding: 0 0 0 1px;\n}\n\n/* ---------- VibesSwitch: the pill in its obsidian glass ---------- */\n[data-vibe-menu] .vm-glass {\n position: relative;\n width: calc(var(--size-pill-w) + 2 * var(--size-ring));\n height: calc(var(--size-pill-h) + 2 * var(--size-ring));\n border-radius: var(--radius-full);\n flex: none;\n background:\n linear-gradient(to right, transparent, var(--obsidian-highlight), transparent) top / 100% 1px no-repeat,\n linear-gradient(to bottom, var(--obsidian-highlight), transparent, var(--obsidian-edge)) left / 1px 100% no-repeat,\n var(--obsidian-fill);\n box-shadow: var(--obsidian-shadow);\n}\n[data-vibe-menu] .vm-pill {\n position: absolute;\n left: var(--size-ring);\n top: var(--size-ring);\n width: var(--size-pill-w);\n height: var(--size-pill-h);\n padding: 0;\n border: 0;\n border-radius: var(--radius-full);\n background: none;\n cursor: pointer;\n}\n/* Touching, holding or dragging on the switch never selects text, raises the\n iOS callout and magnifier, or drags an image (owner 2026-10-16). The letters\n are paths drawn twice, the second copy clipped to the knob: both sit under\n .vm-pill, so the descendant rule covers them. */\n[data-vibe-menu] .vm-glass,\n[data-vibe-menu] .vm-pill,\n[data-vibe-menu] .vm-pill * {\n -webkit-user-select: none;\n user-select: none;\n -webkit-touch-callout: none;\n}\n/* A held press slides the knob 3/4 of the way and waits (owner 2026-10-16).\n An overshooting spring would carry it past 3/4, so the held leg eases out\n with no overshoot; the release finishes on the host's own curve. */\n[data-vibe-menu] .vm-pill[data-progress=\"0.75\"] {\n --vibes-switch-slide: 0.4s cubic-bezier(0.22, 1, 0.36, 1);\n}\n/* Reduced motion: the switch jumps between poses. Its paths carry inline\n transitions (the knob's d and 3px nudge, the letters' fills and on-knob clip), so\n only an !important rule here stops every leg, not just the d slide. */\n@media (prefers-reduced-motion: reduce) {\n [data-vibe-menu] .vm-pill {\n --vibes-switch-slide: 0s;\n }\n [data-vibe-menu] .vm-pill svg path {\n transition: none !important;\n }\n}\n[data-vibe-menu] .vm-switch-art {\n width: 100%;\n height: 100%;\n display: block;\n}\n[data-vibe-menu] .vm-pill .vm-badge {\n top: -6px;\n right: 4px;\n}\n/* #7079: the guest maker's save-time ask: a dot, not a count. */\n[data-vibe-menu] .vm-badge.is-dot {\n min-width: 10px;\n width: 10px;\n height: 10px;\n padding: 0;\n}\n[data-vibe-menu] .vm-chiclet {\n display: inline-block;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n background: var(--section-code);\n /* Port change: bundle.css writes #111111 (ink); text on a section colour is\n menu-ink (Global Constraints), which --on-code resolves to in both themes. */\n color: var(--on-code);\n font: 700 11px/18px var(--font-display);\n letter-spacing: 0.06em;\n}\n/* #4291. The chiclet's shape, so the two read as one row \u2014 but in the badge\n colour (the identity lane) so elevation never looks like a publish state. */\n[data-vibe-menu] .vm-admin-badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n background: var(--badge);\n color: var(--on-badge);\n font: 700 11px/18px var(--font-display);\n letter-spacing: 0.06em;\n}\n\n/* ---------- MenuCard: the card, its band and the folder-tab join, drawn once ---------- */\n[data-vibe-menu] .vm-frame {\n position: relative;\n}\n[data-vibe-menu] .vm-frame .vm-card {\n position: absolute;\n left: 0;\n top: 0;\n background: var(--card-bg);\n color: var(--ink);\n overflow: hidden;\n border-radius: var(--radius-card) var(--radius-card) 0 0;\n}\n[data-vibe-menu] .vm-frame .vm-card .vm-card-body {\n padding-bottom: calc(var(--space-16) + var(--size-band));\n}\n[data-vibe-menu] .vm-outline {\n position: absolute;\n left: 0;\n top: 0;\n overflow: visible;\n pointer-events: none;\n}\n[data-vibe-menu] .vm-outline .vm-band,\n[data-vibe-menu] .vm-outline .vm-cover {\n fill: var(--accent);\n}\n[data-vibe-menu] .vm-outline .vm-edge {\n fill: none;\n stroke: var(--line);\n stroke-width: 2;\n stroke-linejoin: miter;\n}\n\n/* ---------- ActionPill: the card's one main action ---------- */\n[data-vibe-menu] .vm-ask {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-12);\n width: 100%;\n padding: var(--space-14) var(--space-18);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n background: var(--accent);\n color: var(--on-accent);\n font: 700 21px/1 var(--font-display);\n letter-spacing: -0.02em;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-ask.is-solo {\n margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ask .vm-glyph {\n width: var(--size-glyph-cta);\n height: var(--size-glyph-cta);\n transition: transform 160ms cubic-bezier(0.22, 1, 0.36, 1);\n}\n[data-vibe-menu] .vm-ask:hover .vm-glyph {\n transform: translateX(4px);\n}\n[data-vibe-menu] .vm-ask.is-phone {\n font-size: 18px;\n}\n[data-vibe-menu] .vm-sub:has(.vm-copy) {\n display: flex;\n align-items: center;\n gap: var(--space-8);\n}\n[data-vibe-menu] .vm-sub:has(.vm-copy) > span {\n flex: 1;\n}\n\n/* ---------- Chip ---------- */\n[data-vibe-menu] .vm-chip {\n height: var(--size-chip);\n padding: 0 var(--space-12);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-chip);\n background: var(--accent);\n color: var(--on-accent);\n font-size: 11px;\n flex: none;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-chip.is-ghost {\n background: transparent;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-chip.is-name {\n font: 700 14px/1 var(--font-display);\n letter-spacing: 0;\n text-transform: none;\n}\n[data-vibe-menu] .vm-chip.vm-copy {\n height: var(--size-copy);\n padding: 0 var(--space-14);\n border-radius: var(--radius-copy);\n flex-shrink: 0;\n align-self: center;\n white-space: nowrap;\n}\n[data-vibe-menu] .vm-suggestions {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-6);\n}\n/* Port change (smoke F9): codegen writes long chips, so a chip wraps inside\n the card (DS \"text that can outgrow its track wraps\") instead of running\n past its edge; a one-line chip keeps the 28px chip height. */\n[data-vibe-menu] .vm-suggest {\n min-height: var(--size-chip);\n max-width: 100%;\n min-width: 0;\n padding: var(--space-2) var(--space-12);\n text-align: left;\n overflow-wrap: anywhere;\n border: var(--stroke-mini) solid var(--suggest-border);\n border-radius: var(--radius-chip);\n background: none;\n color: var(--ink);\n font: 400 13px/20px var(--font-display);\n cursor: pointer;\n}\n[data-vibe-menu] .vm-suggest:hover,\n[data-vibe-menu] .vm-suggest.is-hover,\n[data-vibe-menu] .vm-suggest[aria-busy=\"true\"] {\n border-color: var(--line-card);\n background: color-mix(in srgb, var(--accent) 35%, transparent);\n}\n/* A pressed chip holds the row while its answer is on the way (a lookup, a\n fork): it stays lit, and the row takes no second press. */\n[data-vibe-menu] .vm-suggest:disabled {\n cursor: default;\n}\n[data-vibe-menu] .vm-suggest:disabled:not([aria-busy=\"true\"]) {\n opacity: 0.5;\n}\n/* The pressed one is disabled too (the row takes no second press), so it\n must outrank the app's global button:disabled dim (theme/global-styles.ts). */\n[data-vibe-menu] .vm-suggest[aria-busy=\"true\"] {\n opacity: 1;\n}\n/* The same hold on the inline links at the end of the chat: the pressed link\n keeps its lit underline, the others read as disabled (dimmed above). */\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest[aria-busy=\"true\"] {\n text-decoration-color: currentColor;\n}\n/* The gold option (#6768): the one capability the agent offered, a chip in the\n same row and the same order as the others. It wears the lit state the others\n take on hover, a full-ink outline and a filled star before the label, so it\n reads as the offer without a second colour on the card. */\n[data-vibe-menu] .vm-suggest.is-gold {\n display: inline-flex;\n align-items: center;\n gap: var(--space-6);\n border-color: var(--line-card);\n background: color-mix(in srgb, var(--accent) 35%, transparent);\n}\n[data-vibe-menu] .vm-suggest.is-gold .vm-glyph {\n flex: none;\n fill: currentColor;\n}\n[data-vibe-menu] .vm-picks {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-6);\n}\n\n/* ---------- Composer: the logo pill's shape, 48px tall (owner pick B, 2026-10-26:\n near the switch's 44px curve with a full 44px cap) ---------- */\n[data-vibe-menu] .vm-composer {\n display: flex;\n align-items: stretch;\n min-height: var(--size-composer);\n margin-bottom: var(--space-16);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n overflow: hidden;\n background: var(--card-bg);\n}\n[data-vibe-menu] .vm-composer:focus-within,\n[data-vibe-menu] .vm-composer.is-focus {\n box-shadow: 0 0 0 3px var(--accent);\n}\n[data-vibe-menu] .vm-composer textarea {\n flex: 1;\n min-width: 0;\n align-self: center;\n margin: 0 var(--space-12) 0 2px;\n padding: 0;\n resize: none;\n border: 0;\n outline: 0;\n background: transparent;\n color: var(--ink);\n font: 700 16px/1.2 var(--font-display);\n letter-spacing: -0.02em;\n field-sizing: content;\n max-height: 2.4em;\n}\n[data-vibe-menu] .vm-composer textarea::placeholder {\n color: var(--placeholder);\n}\n[data-vibe-menu] .vm-composer .vm-attach {\n order: -1;\n width: var(--size-copy);\n height: var(--size-copy);\n margin-left: var(--space-10);\n align-self: center;\n border-radius: 50%;\n display: grid;\n place-items: center;\n flex: none;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-composer .vm-attach:hover {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-composer .vm-glyph {\n width: 16px;\n height: 16px;\n}\n[data-vibe-menu] .vm-cap {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(--space-24) 0 20px;\n border-left: var(--stroke-rule) solid var(--line-card);\n background: var(--section-code);\n color: var(--on-code);\n font: 700 13px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n white-space: nowrap;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-cap:hover {\n background: color-mix(in oklch, var(--section-code), var(--menu-ink) 10%);\n}\n[data-vibe-menu] .vm-composer.is-building .vm-cap[data-send],\n[data-vibe-menu] .vm-composer.is-building:has(textarea:not(:placeholder-shown)) .vm-cap[data-stop] {\n display: none;\n}\n[data-vibe-menu] .vm-composer.is-building:has(textarea:not(:placeholder-shown)) .vm-cap[data-send] {\n display: flex;\n}\n/* Rewrite mode (the settings tab's sharing rewrite): no attach button, so the\n field takes the attach's inset; a dim red X cap sits left of the action cap. */\n[data-vibe-menu] .vm-composer.is-rewrite {\n position: relative;\n}\n[data-vibe-menu] .vm-composer.is-rewrite textarea {\n margin-left: var(--space-24);\n}\n[data-vibe-menu] .vm-cap[data-cancel] {\n padding: 0 var(--space-16);\n background: var(--cancel-cap);\n color: var(--on-cancel-cap);\n}\n[data-vibe-menu] .vm-cap[data-cancel]:hover {\n background: color-mix(in oklch, var(--cancel-cap), var(--on-cancel-cap) 12%);\n}\n[data-vibe-menu] .vm-rewrite-shimmer {\n position: absolute;\n left: var(--space-24);\n top: 50%;\n width: 28%;\n height: var(--space-12);\n margin-top: calc(var(--space-12) / -2);\n border-radius: var(--radius-full);\n background: var(--placeholder);\n opacity: 0.3;\n pointer-events: none;\n animation: vm-rewrite-shimmer 1.4s ease-in-out infinite;\n}\n@keyframes vm-rewrite-shimmer {\n 50% {\n opacity: 0.12;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n [data-vibe-menu] .vm-rewrite-shimmer {\n animation: none;\n }\n}\n[data-vibe-menu] .vm-queue-note {\n display: none;\n margin: -10px 0 12px 18px;\n font-size: 12px;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-composer:has(textarea:not(:placeholder-shown)) + .vm-queue-note {\n display: block;\n}\n/* The change box's hint (#7803 #7878): one quiet line under the box while the\n person types, in the queue note's muted voice, whose button is the second door. */\n[data-vibe-menu] .vm-door-line {\n margin: -10px 0 12px 18px;\n font-size: 12px;\n line-height: 18px;\n color: var(--muted);\n}\n/* A refused empty Send's idea (#7916): one idea, one row, ellipsized. */\n[data-vibe-menu] .vm-door-line[data-refused-send-idea] {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n[data-vibe-menu] .vm-door-line .vm-door {\n all: unset;\n cursor: pointer;\n color: var(--ink);\n text-decoration: underline;\n text-underline-offset: 2px;\n text-decoration-color: var(--muted);\n}\n[data-vibe-menu] .vm-door-line .vm-door:focus-visible {\n outline: 2px solid var(--ink);\n outline-offset: 2px;\n border-radius: 2px;\n}\n[data-vibe-menu] .vm-composer.is-phone textarea {\n margin-right: var(--space-6);\n font-size: 16px;\n}\n[data-vibe-menu] .vm-composer.is-phone .vm-attach {\n margin-left: 4px;\n width: 28px;\n}\n[data-vibe-menu] .vm-composer.is-phone .vm-cap {\n padding: 0 var(--space-18) 0 var(--space-14);\n}\n\n/* ---------- Row: the bar's tab grammar inside the card ---------- */\n[data-vibe-menu] .vm-group {\n border-top: var(--stroke-rule) solid var(--line-card);\n margin: 0 calc(-1 * var(--space-16));\n}\n[data-vibe-menu] .vm-group.is-flush {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-row {\n display: flex;\n align-items: center;\n gap: var(--space-12);\n width: 100%;\n height: var(--size-row);\n padding: 0 var(--space-16);\n}\n[data-vibe-menu] .vm-row.is-compact {\n height: var(--size-row-compact);\n}\n[data-vibe-menu] .vm-row + .vm-row {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-row .vm-label {\n flex: 1;\n}\n[data-vibe-menu] .vm-dot {\n width: var(--size-icon-circle);\n height: var(--size-icon-circle);\n border-radius: 50%;\n background: var(--ink);\n color: var(--card-bg);\n display: grid;\n place-items: center;\n flex: none;\n}\n[data-vibe-menu] button.vm-row:hover .vm-dot:not(.vm-app),\n[data-vibe-menu] .vm-row.is-hover .vm-dot:not(.vm-app) {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-row.is-quiet .vm-dot {\n background: transparent;\n color: var(--ink);\n box-shadow: inset 0 0 0 2px var(--line-card);\n}\n[data-vibe-menu] .vm-row[aria-disabled=\"true\"] {\n opacity: 0.35;\n cursor: default;\n}\n[data-vibe-menu] .vm-row[aria-disabled=\"true\"] .vm-dot {\n background: var(--ink) !important;\n color: var(--card-bg) !important;\n}\n[data-vibe-menu] .vm-app,\n[data-vibe-menu] .vm-initial {\n font: 700 12px/1 var(--font-tab);\n box-shadow: inset 0 0 0 2px var(--line-card);\n}\n[data-vibe-menu] .vm-app {\n background: var(--app);\n color: var(--menu-ink);\n}\n[data-vibe-menu] .vm-initial {\n background: transparent;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-chev {\n display: grid;\n color: var(--muted);\n transition: transform 160ms cubic-bezier(0.22, 1, 0.36, 1);\n}\n[data-vibe-menu] .vm-chev.is-open {\n transform: rotate(90deg);\n}\n[data-vibe-menu] .vm-count {\n font: 700 12px/1 var(--font-tab);\n letter-spacing: 0.08em;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-count.is-handle {\n max-width: 45%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n[data-vibe-menu] .vm-switch {\n position: relative;\n width: var(--size-switch-w);\n height: 20px;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-switch);\n flex: none;\n}\n[data-vibe-menu] .vm-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--ink);\n}\n[data-vibe-menu] .vm-switch.is-on {\n background: var(--accent);\n}\n[data-vibe-menu] .vm-switch.is-on::after {\n left: 18px;\n}\n\n/* ---------- BackRow and DoneButton: a drill-in's frame ---------- */\n[data-vibe-menu] .vm-back {\n display: flex;\n align-items: center;\n gap: var(--space-12);\n width: calc(100% + 2 * var(--space-16));\n height: var(--size-row-compact);\n margin: 0 calc(-1 * var(--space-16));\n padding: 0 var(--space-16);\n border-top: var(--stroke-rule) solid var(--line-card);\n border-bottom: var(--stroke-hairline) solid var(--line-hairline);\n}\n/* A drill that replaces the whole card body (Share, Account) sits on the card's\n top edge, which the outline already draws: no rule, and it takes the body's\n top padding so no empty band shows above it (cards-hero.css .card-title + .h-back). */\n[data-vibe-menu] .vm-back.is-top {\n margin-top: calc(-1 * var(--space-14));\n border-top: 0;\n}\n[data-vibe-menu] .vm-back .vm-label {\n flex: none;\n}\n[data-vibe-menu] .vm-back-name {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: 400 16px/1.1 var(--font-display);\n color: var(--muted);\n}\n[data-vibe-menu] .vm-back:hover .vm-dot,\n[data-vibe-menu] .vm-back.is-hover .vm-dot {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-drill {\n padding-top: var(--space-14);\n}\n[data-vibe-menu] .vm-drill-sec + .vm-drill-sec {\n margin-top: var(--space-14);\n}\n[data-vibe-menu] .vm-drill-line {\n margin: 0 0 var(--space-14);\n font: 700 18px/1.25 var(--font-display);\n letter-spacing: -0.01em;\n}\n[data-vibe-menu] .vm-done {\n display: block;\n width: 100%;\n height: var(--size-row-compact);\n margin-top: var(--space-16);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-done);\n background: var(--accent);\n color: var(--on-accent);\n text-align: center;\n font: 700 14px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-textbtn {\n display: block;\n width: 100%;\n height: 40px;\n margin-top: var(--space-4);\n text-align: center;\n font: 700 12px/1 var(--font-tab);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-textbtn:hover {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-faq {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-12);\n width: 100%;\n padding: var(--space-12) 0;\n font: 400 16px/1.3 var(--font-display);\n}\n[data-vibe-menu] .vm-faq + .vm-faq {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n\n/* ---------- MomentLine: the current moment ---------- */\n[data-vibe-menu] .vm-moments {\n display: flex;\n flex-direction: column;\n gap: var(--space-8);\n}\n[data-vibe-menu] .vm-moment {\n margin: 0;\n font: 400 16px/1.3 var(--font-display);\n color: var(--ink);\n}\n[data-vibe-menu] .vm-moment.is-pinned {\n padding: var(--space-10) var(--space-12) var(--space-12) var(--space-14);\n border: var(--stroke-rule) solid var(--line-card);\n border-left: var(--size-band) solid var(--accent);\n border-radius: var(--radius-moment);\n}\n/* A primary pinned item's main action (#7782): the full-width pill, then its quiet second ways. */\n[data-vibe-menu] .vm-moment.is-pinned > .vm-ask + .vm-moment-actions {\n margin-top: var(--space-10);\n}\n[data-vibe-menu] .vm-moment-actions:empty {\n display: none;\n}\n[data-vibe-menu] .vm-moment-text {\n margin: 0 0 var(--space-10);\n text-wrap: pretty;\n}\n/* A pinned heads-up (#6816): the summary line's muted voice, its action a text link. */\n[data-vibe-menu] .vm-moment.is-quiet {\n padding: 0 var(--space-2);\n font-size: 14px;\n color: var(--muted);\n text-wrap: pretty;\n}\n[data-vibe-menu] button.vm-moment-link {\n margin: 0;\n padding: 0;\n border: 0;\n background: none;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-moment-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-6);\n}\n[data-vibe-menu] .vm-moment-hint {\n font-size: 12px;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-moment.is-progress,\n[data-vibe-menu] .vm-moment.is-summary {\n display: flex;\n align-items: center;\n gap: var(--space-10);\n padding: 0 var(--space-2);\n}\n[data-vibe-menu] .vm-moment.is-summary {\n color: var(--muted);\n}\n[data-vibe-menu] .vm-moment.is-expander {\n width: 100%;\n gap: var(--space-8);\n}\n[data-vibe-menu] .vm-moment.is-expander:hover {\n color: var(--ink);\n}\n/* The live line's link (the first build's real address, #6451 S9c): pointer\n events back on, since the layer takes no hits of its own. */\n[data-vibe-menu] .vm-moment-link {\n display: inline-block;\n margin: 0 var(--space-2);\n font: 400 14px/1.3 var(--font-display);\n color: var(--ink);\n text-decoration: underline;\n text-underline-offset: 3px;\n overflow-wrap: anywhere;\n pointer-events: auto;\n}\n[data-vibe-menu] .vm-live .vm-chev {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-log-clip {\n overflow: hidden;\n}\n/* Port addition (RULINGS R1): the log clip is always rendered (RECONCILE \u00A75c),\n so the base stylesheet owns its shut and open states. The shell's per-frame\n tween (T11) writes an inline height, which overrides these during motion.\n C's VIBE_MENU_SHELL_CSS does not repeat them. */\n[data-vibe-menu] .vm-log-clip[data-open=\"false\"] {\n height: 0;\n overflow: hidden;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"true\"] {\n height: auto;\n /* Known adjustment (plan header): room for .vm-log's own 160px cap plus its\n 8px margin-top and two hairline borders, so the clip never scrolls on top\n of the log. */\n max-height: calc(var(--size-log-max, 160px) + var(--space-8) + 2 * var(--stroke-hairline));\n overflow: auto;\n /* Smoke F15: the shell's height tween makes the clip overflow for a moment;\n .vm-log scrolls itself, so the clip never shows a bar. */\n scrollbar-width: none;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"true\"]::-webkit-scrollbar {\n display: none;\n}\n/* The peek (owner 2026-10-16): a send opens the fold about two lines high, the\n person's own words its last visible line, before the composer has cleared.\n The triangle stays folded; the peek is an invite (a tap, a wheel or a swipe in\n it opens the full log, MomentLine). Its column is bottom-aligned so the\n overflow falls off the top, and its inner scrollers cap at the same height\n so their bottom pin shows the newest line. Never part of the open\n [data-history] flex chain below. */\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] {\n height: auto;\n max-height: var(--size-log-peek);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n cursor: pointer;\n -webkit-mask-image: linear-gradient(to bottom, transparent, var(--ink) 14px);\n mask-image: linear-gradient(to bottom, transparent, var(--ink) 14px);\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] > * {\n flex: none;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] .vm-log,\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] .vm-agent-history {\n max-height: var(--size-log-peek);\n overflow-y: hidden;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] .vm-suggestions {\n display: none;\n}\n/* The fold over the full chat (slots.agentLog): the history caps and scrolls\n itself (AgentLogHistory's compact box), so the clip drops the flat log's cap. */\n[data-vibe-menu] .vm-log-clip[data-open=\"true\"][data-history] {\n max-height: none;\n overflow: hidden;\n}\n[data-vibe-menu] .vm-log-history {\n margin-top: var(--space-8);\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n border-bottom: var(--stroke-hairline) solid var(--line-hairline);\n}\n/* One scroller: the tab-row card with the full chat open. The history's own\n cap (AgentLogHistory's compact box) knows nothing of what else the card\n holds, and the first build's request headline can take a third of it: the\n card then overflowed and scrolled too, the composer slid under the row, and\n the chat's end was out of reach. Here the card is a column whose fold gives\n up exactly what the card lacks, so the history scrolls and the card never\n does. Everything else in the card keeps its own height. */\n[data-vibe-menu] .vm-card:has(.vm-ctab .vm-log-clip[data-open=\"true\"][data-history]) {\n display: flex;\n flex-direction: column;\n}\n[data-vibe-menu] .vm-card:has(.vm-ctab .vm-log-clip[data-open=\"true\"][data-history])::before {\n flex: none;\n}\n[data-vibe-menu] .vm-card:has(.vm-ctab .vm-log-clip[data-open=\"true\"][data-history]) .vm-card-body,\n[data-vibe-menu] .vm-ctab:has(.vm-log-clip[data-open=\"true\"][data-history]),\n[data-vibe-menu] .vm-ctab .vm-moments:has(.vm-log-clip[data-open=\"true\"][data-history]),\n[data-vibe-menu] .vm-ctab .vm-live:has(.vm-log-clip[data-open=\"true\"][data-history]),\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"][data-history],\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"][data-history] .vm-log-history {\n display: flex;\n flex-direction: column;\n flex: 0 1 auto;\n min-height: 0;\n}\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"][data-history] .vm-log-history > * {\n min-height: 0;\n}\n[data-vibe-menu] .vm-ctab:has(.vm-log-clip[data-open=\"true\"][data-history]) > :not(.vm-moments),\n[data-vibe-menu] .vm-ctab .vm-live:has(.vm-log-clip[data-open=\"true\"][data-history]) > :not(.vm-log-clip) {\n flex-shrink: 0;\n}\n[data-vibe-menu] .vm-agent-history-tail {\n padding: var(--space-10) 4px var(--space-14) var(--space-24);\n}\n/* Suggestions at the end of the chat: wrapped inline links, not chips. */\n[data-vibe-menu] .vm-suggestions.is-inline {\n gap: var(--space-6) var(--space-14);\n margin-bottom: 0;\n}\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest {\n min-height: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n background: none;\n text-decoration: underline;\n text-decoration-color: var(--suggest-border);\n text-decoration-thickness: 1px;\n text-underline-offset: 3px;\n}\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest:hover,\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest.is-hover,\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest.is-gold {\n background: none;\n text-decoration-color: currentColor;\n}\n[data-vibe-menu] .vm-log {\n max-height: var(--size-log-max);\n overflow-y: auto;\n overscroll-behavior: contain;\n display: flex;\n flex-direction: column;\n gap: var(--space-6);\n margin-top: var(--space-8);\n padding: var(--space-10) 4px var(--space-10) var(--space-24);\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n border-bottom: var(--stroke-hairline) solid var(--line-hairline);\n font-size: 13.5px;\n line-height: 1.35;\n}\n[data-vibe-menu] .vm-log-line {\n margin: 0;\n}\n[data-vibe-menu] .vm-log-line:first-child {\n margin-top: auto;\n}\n[data-vibe-menu] .vm-log-line b {\n font: 700 10px/1 var(--font-tab);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--muted);\n margin-right: 4px;\n}\n\n/* ---------- AccessToggle: Restricted | Public and its line ---------- */\n[data-vibe-menu] .vm-access {\n display: flex;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n overflow: hidden;\n}\n[data-vibe-menu] .vm-access button {\n flex: 1;\n height: var(--size-bar);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-10);\n text-align: center;\n font: 700 24px/1 var(--font-display);\n letter-spacing: -0.02em;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-access button + button {\n border-left: var(--stroke-rule) solid var(--line-card);\n}\n[data-vibe-menu] .vm-access button.is-active {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-access button:not(.is-active):hover {\n background: color-mix(in srgb, var(--accent) 20%, transparent);\n}\n/* Settings still loading (preflight ruling P14): dimmed and inert. */\n[data-vibe-menu] .vm-access[aria-disabled=\"true\"] {\n opacity: var(--opacity-row-disabled);\n}\n[data-vibe-menu] .vm-access[aria-disabled=\"true\"] button {\n cursor: default;\n}\n[data-vibe-menu] .vm-access[aria-disabled=\"true\"] button:not(.is-active):hover {\n background: transparent;\n}\n[data-vibe-menu] .vm-access-line {\n display: flex;\n align-items: center;\n gap: var(--space-10);\n min-height: var(--size-access-line);\n margin: var(--space-10) 0 var(--space-12);\n padding: var(--space-6) var(--space-6) var(--space-6) var(--space-14);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-access-line);\n background: var(--share-tint);\n font-size: 16.5px;\n line-height: 1.25;\n}\n[data-vibe-menu] .vm-access-line > span {\n flex: 1;\n min-width: 0;\n}\n[data-vibe-menu] .vm-access-line .vm-glyph {\n width: 16px;\n height: 16px;\n}\n[data-vibe-menu] .vm-publish {\n display: flex;\n align-items: center;\n gap: var(--space-8);\n padding: 5px 5px 5px var(--space-10);\n border: var(--stroke-rule) solid var(--line-card);\n border-left: var(--size-band) solid var(--accent);\n border-radius: var(--radius-moment);\n}\n[data-vibe-menu] .vm-publish b {\n font: 700 11px/1 var(--font-tab);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n}\n[data-vibe-menu] .vm-publish span {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n line-height: 1.25;\n color: var(--muted);\n}\n\n/* ---------- GrantControls ---------- */\n[data-vibe-menu] .vm-seg {\n display: flex;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n overflow: hidden;\n}\n[data-vibe-menu] .vm-seg button {\n flex: 1;\n height: var(--size-segment);\n text-align: center;\n font-size: 11px;\n}\n[data-vibe-menu] .vm-seg button + button {\n border-left: var(--stroke-rule) solid var(--line-card);\n}\n[data-vibe-menu] .vm-seg button.is-active {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-seg.is-mini {\n margin: 0;\n border-width: var(--stroke-mini);\n}\n[data-vibe-menu] .vm-seg.is-mini button {\n flex: none;\n height: var(--size-segment-mini);\n padding: 0 var(--space-8);\n font-size: 10px;\n}\n[data-vibe-menu] .vm-seg.is-mini button + button {\n border-left-width: var(--stroke-mini);\n}\n[data-vibe-menu] .vm-grants {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-6) var(--space-12);\n}\n[data-vibe-menu] .vm-grant-ctl {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n[data-vibe-menu] .vm-grant-name {\n font: 700 10px/1 var(--font-tab);\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-grant-fixed {\n font: 700 10px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--ink);\n}\n\n/* ---------- MemberRow ---------- */\n[data-vibe-menu] .vm-input {\n width: 100%;\n height: var(--size-input);\n margin-bottom: var(--space-14);\n padding: 0 var(--space-18);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-input);\n background: transparent;\n color: var(--ink);\n font: inherit;\n}\n[data-vibe-menu] .vm-members-head {\n margin-top: 0;\n padding: 2px 0 var(--space-8);\n}\n[data-vibe-menu] .vm-members-head + .vm-input {\n height: 40px;\n margin-bottom: var(--space-8);\n}\n[data-vibe-menu] .vm-person {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-8) var(--space-12);\n padding: var(--space-6) 0;\n}\n[data-vibe-menu] .vm-person + .vm-person {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-person .vm-label {\n flex: 1;\n min-width: 0;\n}\n[data-vibe-menu] .vm-request {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-8) var(--space-12);\n margin-bottom: 2px;\n padding: var(--space-10) var(--space-12);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-card);\n background: var(--share-tint-strong);\n}\n[data-vibe-menu] .vm-request-top {\n flex: 1 0 auto;\n}\n[data-vibe-menu] .vm-request-actions {\n display: flex;\n gap: var(--space-6);\n margin-left: auto;\n}\n[data-vibe-menu] .vm-who-block > .vm-row {\n width: calc(100% + 2 * var(--space-16));\n margin: 2px calc(-1 * var(--space-16)) 0;\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-narrow .vm-person .vm-grants,\n[data-vibe-menu] .vm-narrow .vm-request-top {\n flex-basis: 100%;\n}\n[data-vibe-menu] .vm-narrow .vm-person .vm-grants,\n[data-vibe-menu] .vm-narrow .vm-request .vm-grants {\n column-gap: var(--space-10);\n}\n/* stacking, as the prototype: card < bar < outline < glass and pill */\n[data-vibe-menu] .vm-frame .vm-card {\n z-index: 1;\n}\n[data-vibe-menu] .vm-frame .vm-strip {\n z-index: 2;\n}\n[data-vibe-menu] .vm-frame .vm-outline {\n z-index: 3;\n}\n[data-vibe-menu] .vm-frame .vm-glass {\n z-index: 4;\n}\n[data-vibe-menu] .vm-refresh {\n display: grid;\n place-items: center;\n width: var(--size-icon-circle);\n height: var(--size-icon-circle);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: 50%;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-refresh:hover {\n background: var(--accent);\n color: var(--on-accent);\n}\n\n/* ---------- port additions: not in bundle.css ---------- */\n/* Sign-in providers (the inline sign-up drill): each brand's own mark on a\n white disc, so the logo reads the way its owner draws it on any card theme. */\n[data-vibe-menu] .vm-providers {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-14);\n margin-bottom: var(--space-4);\n}\n[data-vibe-menu] .vm-provider {\n position: relative;\n display: grid;\n place-items: center;\n width: 48px;\n height: 48px;\n padding: 0;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: 50%;\n background: var(--provider-disc);\n color: var(--provider-ink);\n cursor: pointer;\n flex: none;\n}\n[data-vibe-menu] .vm-provider svg {\n width: 22px;\n height: 22px;\n}\n[data-vibe-menu] .vm-provider[aria-disabled=\"true\"] {\n opacity: var(--opacity-row-disabled);\n cursor: default;\n}\n[data-vibe-menu] .vm-provider.is-pending {\n opacity: 1;\n animation: vm-provider-pulse 1.2s ease-in-out infinite;\n}\n[data-vibe-menu] .vm-provider-tag {\n position: absolute;\n top: -8px;\n left: 50%;\n transform: translateX(-50%);\n padding: 1px 6px;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n background: var(--accent);\n color: var(--on-accent);\n font-size: 8px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n white-space: nowrap;\n}\n[data-vibe-menu] .vm-provider-status {\n display: flex;\n align-items: center;\n gap: var(--space-16);\n margin: var(--space-4) 0 var(--space-14) var(--space-4);\n}\n[data-vibe-menu] .vm-provider-status > div {\n min-width: 0;\n}\n/* The way back out of a provider that is opening: BackRow's dot and label,\n inline in the drill body rather than across the card's top edge. */\n[data-vibe-menu] .vm-back.is-inline {\n width: auto;\n height: var(--size-icon-circle);\n margin: 0;\n padding: 0;\n border: 0;\n background: none;\n color: var(--ink);\n cursor: pointer;\n}\n[data-vibe-menu] .vm-provider-status .vm-sub {\n margin: 0;\n}\n@keyframes vm-provider-pulse {\n 50% {\n box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 30%, transparent);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n [data-vibe-menu] .vm-provider.is-pending {\n animation: none;\n }\n}\n/* Rows and the action pill can be links (Home's rows, the credits action). */\n[data-vibe-menu] :where(a.vm-row, a.vm-ask) {\n color: inherit;\n text-decoration: none;\n}\n[data-vibe-menu] a.vm-row:hover .vm-dot:not(.vm-app) {\n background: var(--accent);\n color: var(--on-accent);\n}\n/* A member's name drills into that member (spec \u00A78). */\n[data-vibe-menu] .vm-person button.vm-label {\n text-align: left;\n}\n[data-vibe-menu] .vm-chip[aria-disabled=\"true\"],\n[data-vibe-menu] .vm-cap:disabled,\n[data-vibe-menu] .vm-composer .vm-attach:disabled {\n opacity: var(--opacity-row-disabled);\n cursor: default;\n}\n/* Staged attachments above the composer: name chips, no emoji. */\n[data-vibe-menu] .vm-attachments {\n margin-bottom: var(--space-8);\n}\n[data-vibe-menu] .vm-attachments .vm-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--space-6);\n max-width: 220px;\n}\n[data-vibe-menu] .vm-attachments .vm-chip > span:last-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-vibe-menu] .vm-attachments .vm-chip[data-status=\"error\"] {\n border-color: var(--section-account);\n}\n/* The one left-out sentence after a pick past the cap (#7622): the queue\n note's voice, tucked under the chips it talks about. */\n[data-vibe-menu] .vm-attach-note {\n margin: -2px 0 10px 4px;\n font-size: 12px;\n line-height: 1.4;\n color: var(--muted);\n}\n/* A suggestion's fast-path marks (RULINGS O4, production #2917 decorateChip).\n Siblings of .vm-suggest, since a button can't nest a button. The owner's\n toggle (FastPathToggle) is outline when not blessed, filled when blessed\n (aria-pressed); the badges are the marks every viewer sees. */\n[data-vibe-menu] .vm-suggest-item {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n max-width: 100%;\n min-width: 0;\n}\n[data-vibe-menu] .vm-suggest-item > * {\n flex: none;\n}\n[data-vibe-menu] .vm-suggest-item > .vm-suggest {\n flex: 0 1 auto;\n}\n[data-vibe-menu] .vm-suggest-shield {\n width: var(--size-chip);\n height: var(--size-chip);\n display: inline-grid;\n place-items: center;\n border-radius: var(--radius-full);\n background: none;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-suggest-shield:hover {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-suggest-shield[aria-pressed=\"true\"] {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-suggest-shield[aria-pressed=\"true\"] .vm-glyph {\n fill: currentColor;\n}\n/* The non-interactive marks every viewer sees (production ChipShieldBadge,\n ChipJumpBadge): a filled shield (\"stays in this app\", server-authoritative)\n or an arrow (\"opens another app\"). Never both on one chip. */\n[data-vibe-menu] .vm-suggest-badge {\n width: var(--size-chip);\n height: var(--size-chip);\n display: inline-grid;\n place-items: center;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-suggest-badge.is-shield .vm-glyph {\n fill: currentColor;\n}\n[data-vibe-menu] .vm-suggest-badge.is-jump {\n color: var(--muted);\n}\n\n/* ---------- phones (cards-hero.css): the menu's width, not the viewport ---------- */\n@container vibe-menu (max-width: 480px) {\n [data-vibe-menu] .vm-ask {\n font-size: 18px;\n }\n /* the field keeps 16px (iOS zooms smaller fields); attach slims instead */\n [data-vibe-menu] .vm-composer textarea {\n margin-right: var(--space-6);\n font-size: 16px;\n }\n [data-vibe-menu] .vm-composer .vm-attach {\n margin-left: 4px;\n width: 28px;\n }\n [data-vibe-menu] .vm-cap {\n padding: 0 var(--space-18) 0 var(--space-14);\n }\n [data-vibe-menu] .vm-access button {\n font-size: 21px;\n }\n /* the access line keeps its sentence to two lines beside the chip */\n [data-vibe-menu] .vm-access-line {\n padding-left: 12px;\n gap: 8px;\n font-size: 15.5px;\n }\n [data-vibe-menu] .vm-access-line .vm-chip.vm-copy {\n padding: 0 10px;\n }\n /* Data and Code drop under the handle on one line (two on the narrowest) */\n [data-vibe-menu] .vm-person .vm-grants {\n flex-basis: 100%;\n column-gap: var(--space-10);\n }\n [data-vibe-menu] .vm-request .vm-grants {\n column-gap: var(--space-10);\n }\n [data-vibe-menu] .vm-request-top {\n flex-basis: 100%;\n }\n [data-vibe-menu] .vm-input {\n font-size: 16px;\n }\n}\n@container vibe-menu (max-width: 359px) {\n [data-vibe-menu] .vm-access button {\n font-size: 19px;\n }\n /* the line drops its icon here: the enclosure already marks it */\n [data-vibe-menu] .vm-access-line > .vm-glyph {\n display: none;\n }\n [data-vibe-menu] .vm-access-line {\n margin: 8px 0 10px;\n font-size: 14.5px;\n }\n [data-vibe-menu] .vm-access-line .vm-chip.vm-copy {\n padding: 0 8px;\n }\n /* the cap and attach slim so the field keeps room (REMIX THIS stays one line) */\n [data-vibe-menu] .vm-cap {\n padding: 0 13px 0 10px;\n letter-spacing: 0.05em;\n }\n [data-vibe-menu] .vm-composer .vm-attach {\n margin-left: 3px;\n width: 24px;\n }\n /* 16px, not the prototype's 14px: no text field under 16px on phones (spec \u00A74.5) */\n [data-vibe-menu] .vm-composer textarea {\n margin: 0 4px 0 0;\n font-size: 16px;\n }\n [data-vibe-menu] .vm-chip.vm-copy {\n padding: 0 10px;\n letter-spacing: 0.06em;\n }\n}\n";
|
|
4
|
+
export declare const VIBE_MENU_CSS = "\n/* ---------- tokens (tokens.json), light, then both dark arms ----------\n Detached layers (portalled out of the menu root) carry\n data-vibe-menu-detached, so every token block lists them too. */\n[data-vibe-menu],\n[data-vibe-menu-detached] {\n color-scheme: light;\n --section-home: oklch(76.02% 0.1832 146.61);\n --section-account: oklch(57.46% 0.2126 29.55);\n --section-code: oklch(89.78% 0.1857 98.22);\n --section-share: oklch(64.39% 0.1304 231.41);\n --vibes-black: #000000;\n --vibes-cream: #fffff0;\n --menu-ink: #1a1a1a;\n --card-bg: var(--vibes-cream);\n --ink: #111111;\n --muted: #555555;\n --line: #111111;\n --line-card: #111111;\n --line-hairline: #1111112e;\n --placeholder: var(--muted);\n --suggest-border: #11111173;\n --share-tint: #009ace1f;\n --share-tint-strong: #009ace40;\n --on-home: var(--menu-ink);\n --on-account: var(--vibes-cream);\n --on-code: var(--menu-ink);\n --on-share: var(--menu-ink);\n --badge: var(--section-account);\n --on-badge: var(--vibes-cream);\n --cancel-cap: #f3d6d2;\n --on-cancel-cap: #9c2318;\n --obsidian-fill: rgba(6, 9, 10, 0.94);\n --obsidian-edge: rgba(255, 255, 255, 0.17);\n --obsidian-highlight: rgba(255, 255, 255, 0.32);\n --obsidian-rim: rgba(255, 255, 255, 0.1);\n --font-display: \"Alte Haas Grotesk\", Inter, sans-serif;\n --font-tab: Inter, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --space-9: 9px;\n --space-2: 2px;\n --space-4: 4px;\n --space-6: 6px;\n --space-8: 8px;\n --space-10: 10px;\n --space-12: 12px;\n --space-14: 14px;\n --space-16: 16px;\n --space-18: 18px;\n --space-24: 24px;\n --radius-card: 16px;\n --radius-full: 999px;\n --radius-bar-end: 25px;\n --radius-access-line: 24px;\n --radius-input: 22px;\n --radius-done: 21px;\n --radius-copy: 18px;\n --radius-chip: 14px;\n --radius-moment: 12px;\n --radius-switch: 10px;\n --radius-meter: 7px;\n --obsidian-shadow: 0 2px 5px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.16), inset 0 -1px 0 rgba(255, 255, 255, 0.05), inset 0 0 12px rgba(255, 255, 255, 0.02);\n --swatch-selected: 0 0 0 2px #fffff0, 0 0 0 4px #111111;\n --stroke-rule: 2px;\n --stroke-hairline: 1px;\n --stroke-mini: 1.5px;\n --stroke-focus: 3px;\n --stroke-glyph: 2.4px;\n --size-icon-circle: 28px;\n --size-icon-circle-phone: 22px;\n --size-glyph: 14px;\n --size-glyph-cta: 20px;\n --size-bar: 50px;\n --size-tab: 176px;\n --size-home-extra: 14px;\n --size-bar-end: 63px;\n --size-pill-w: 120px;\n --size-pill-h: 44px;\n --size-ring: 3px;\n --size-edge: 24px;\n --size-edge-phone: 16px;\n --size-pill-flat-inset: 19px;\n --size-band: 8px;\n --size-row: 46px;\n --size-row-compact: 42px;\n --size-chip: 28px;\n --size-copy: 36px;\n --size-input: 44px;\n --size-composer: 48px;\n --size-access-line: 48px;\n --size-segment: 32px;\n --size-segment-mini: 24px;\n --size-switch-w: 36px;\n --size-meter: 14px;\n --size-card-max: 480px;\n --size-card-max-phone: 560px;\n --size-log-max: 160px;\n --size-log-peek: 120px;\n --size-code-mode-max-w: 1200px;\n --opacity-tab-inactive: 0.73;\n --opacity-row-disabled: 0.35;\n --provider-disc: #ffffff;\n --provider-ink: #111111;\n}\n@media (prefers-color-scheme: dark) {\n [data-vibe-menu],\n [data-vibe-menu-detached] {\n color-scheme: dark;\n --card-bg: #1a1a1a;\n --ink: #e0e0e0;\n --muted: #a3a3a3;\n --line-card: #e0e0e0;\n --line-hairline: #e0e0e02e;\n --suggest-border: #e0e0e073;\n --cancel-cap: #4a2420;\n --on-cancel-cap: #f1b5ad;\n --swatch-selected: 0 0 0 2px #1a1a1a, 0 0 0 4px #e0e0e0;\n }\n}\n.dark [data-vibe-menu],\n.dark [data-vibe-menu-detached] {\n color-scheme: dark;\n --card-bg: #1a1a1a;\n --ink: #e0e0e0;\n --muted: #a3a3a3;\n --line-card: #e0e0e0;\n --line-hairline: #e0e0e02e;\n --suggest-border: #e0e0e073;\n --cancel-cap: #4a2420;\n --on-cancel-cap: #f1b5ad;\n --swatch-selected: 0 0 0 2px #1a1a1a, 0 0 0 4px #e0e0e0;\n}\n\n/* ---------- the root: the phone container ---------- */\n[data-vibe-menu] {\n container-name: vibe-menu;\n container-type: inline-size;\n color: var(--ink);\n font-family: var(--font-display);\n}\n\n/* Scrollbars (smoke F15): thin, in the menu's hairline, both themes, never the\n native dark bar inside the cream card. The colour is set on the root AND\n every descendant, for every scroller the menu hosts (drills, the Embed box,\n injected panels): the app's global sheet sets scrollbar-color on *, which\n beats a colour only inherited from the root. The width rule has zero\n specificity so a part that hides its bar (the Code mode tab strip) still\n wins. The webkit arm is for engines without the standard properties; Chrome\n ignores it once they are set. */\n[data-vibe-menu],\n[data-vibe-menu] *,\n[data-vibe-menu-detached],\n[data-vibe-menu-detached] * {\n scrollbar-color: var(--line-hairline) transparent;\n}\n:where([data-vibe-menu]),\n:where([data-vibe-menu]) :where(*) {\n scrollbar-width: thin;\n}\n:where([data-vibe-menu]) ::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n background: transparent;\n}\n:where([data-vibe-menu]) ::-webkit-scrollbar-thumb {\n border-radius: var(--radius-full);\n background: var(--line-hairline);\n}\n\n/* A section is set by data-section on any ancestor (or the root), using the\n code keys: home | settings (Account) | vibe (Code) | share. It sets --accent\n (the section colour) and --on-accent (its label colour). */\n[data-vibe-menu][data-section=\"home\"],\n[data-vibe-menu] [data-section=\"home\"] {\n --accent: var(--section-home);\n --on-accent: var(--on-home);\n}\n[data-vibe-menu][data-section=\"settings\"],\n[data-vibe-menu] [data-section=\"settings\"] {\n --accent: var(--section-account);\n --on-accent: var(--on-account);\n}\n[data-vibe-menu][data-section=\"vibe\"],\n[data-vibe-menu] [data-section=\"vibe\"] {\n --accent: var(--section-code);\n --on-accent: var(--on-code);\n}\n[data-vibe-menu][data-section=\"share\"],\n[data-vibe-menu] [data-section=\"share\"] {\n --accent: var(--section-share);\n --on-accent: var(--on-share);\n}\n\n[data-vibe-menu],\n[data-vibe-menu] * {\n box-sizing: border-box;\n}\n/* the card's surface and side padding, so rows can bleed edge to edge */\n[data-vibe-menu] .vm-card-body {\n position: relative;\n padding: var(--space-14) var(--space-16) var(--space-16);\n background: var(--card-bg);\n color: var(--ink);\n font: 400 14px/20px var(--font-display);\n}\n[data-vibe-menu] .vm-card-body.is-framed {\n border: var(--stroke-rule) solid var(--line);\n border-radius: var(--radius-card) var(--radius-card) 0 0;\n overflow: hidden;\n}\n\n/* ---------- shared ---------- */\n/* Zero specificity: every vm-* rule wins over it, and so does any utility\n class on content a host injects into the card (slots). */\n:where([data-vibe-menu]) :where(button) {\n font: inherit;\n color: inherit;\n background: none;\n border: 0;\n padding: 0;\n cursor: pointer;\n text-align: left;\n touch-action: manipulation;\n}\n[data-vibe-menu] .vm-glyph {\n width: var(--size-glyph);\n height: var(--size-glyph);\n fill: none;\n stroke: currentColor;\n stroke-width: var(--stroke-glyph);\n stroke-linecap: round;\n stroke-linejoin: round;\n flex: none;\n}\n[data-vibe-menu] .vm-label,\n[data-vibe-menu] .vm-seg button,\n[data-vibe-menu] .vm-chip {\n font: 700 14px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n[data-vibe-menu] .vm-label.is-plain {\n font: 700 16px/1.1 var(--font-display);\n letter-spacing: 0;\n text-transform: none;\n}\n[data-vibe-menu] .vm-kicker,\n[data-vibe-menu] .vm-subhead {\n margin: 0 0 var(--space-8);\n font: 700 10.5px/1.3 var(--font-tab);\n letter-spacing: 0.14em;\n text-transform: uppercase;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-subhead {\n margin: var(--space-16) 0 0;\n padding-bottom: var(--space-8);\n}\n[data-vibe-menu] .vm-sub {\n margin: var(--space-8) 0 var(--space-14);\n font-size: 13px;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-app-name {\n white-space: nowrap;\n}\n/* ---------- SectionStrip: the bar ---------- */\n[data-vibe-menu] .vm-menu {\n position: relative;\n}\n[data-vibe-menu] .vm-strip {\n position: relative;\n width: calc(var(--size-tab) * 4 + var(--size-home-extra) + var(--size-bar-end) + 2px);\n height: var(--size-bar);\n}\n[data-vibe-menu] .vm-strip-slide {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: flex-end;\n border: var(--stroke-rule) solid var(--line);\n border-right: 0;\n border-radius: var(--bar-tl, var(--radius-bar-end)) 0 0 var(--radius-bar-end);\n overflow: hidden;\n background: var(--card-bg);\n /* #7329: the bar under the switch belongs to no tab's box. */\n padding-right: var(--size-bar-end);\n}\n[data-vibe-menu] .vm-tab {\n position: relative;\n width: var(--size-tab);\n flex: none;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n border: 0;\n padding: 0 0 0 var(--space-9);\n cursor: pointer;\n background: var(--accent);\n}\n[data-vibe-menu] .vm-tab-circle {\n width: var(--size-icon-circle);\n height: var(--size-icon-circle);\n border-radius: 50%;\n background: var(--menu-ink);\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n}\n[data-vibe-menu] .vm-tab svg {\n width: calc(var(--size-icon-circle) / 2);\n height: calc(var(--size-icon-circle) / 2);\n fill: none;\n stroke: var(--vibes-cream);\n stroke-width: 2.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n flex: none;\n}\n[data-vibe-menu] .vm-tab-label {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 0 0 1.9px;\n font-family: var(--font-tab);\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 1.9px;\n text-transform: uppercase;\n white-space: nowrap;\n pointer-events: none;\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-tab[data-section=\"home\"] {\n width: calc(var(--size-tab) + var(--size-home-extra));\n padding-left: calc(var(--space-9) + var(--size-home-extra) / 2);\n}\n[data-vibe-menu] .vm-tab[data-section=\"home\"] .vm-tab-label {\n left: calc(var(--size-home-extra) / 2);\n}\n/* #7329: Share's box ends where the switch begins; its colour runs on under\n the pill as a child painted beyond the box. */\n[data-vibe-menu] .vm-tab-run {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 100%;\n width: var(--size-bar-end);\n background: inherit;\n}\n[data-vibe-menu] .vm-tab:focus-visible {\n outline: var(--stroke-focus) solid var(--line);\n outline-offset: -3px;\n}\n/* Port change (smoke F5): the DS inset line ring vanished on the black pill\n and drew square corners. The pill's ring is cream, sits in the obsidian\n glass's 3px rim (offset 0), and follows the stadium (the pill's radius). */\n[data-vibe-menu] .vm-pill:focus-visible {\n outline: var(--stroke-focus) solid var(--vibes-cream);\n outline-offset: 0;\n}\n[data-vibe-menu] .vm-menu.has-card .vm-tab:not(.is-active) {\n opacity: var(--opacity-tab-inactive);\n}\n[data-vibe-menu] .vm-badge {\n position: absolute;\n top: -4px;\n right: 6px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n border-radius: var(--radius-full);\n background: var(--badge);\n color: var(--on-badge);\n font: 700 11px/18px var(--font-display);\n text-align: center;\n}\n/* the bar sits against the pill: it runs half the glass under it */\n[data-vibe-menu] .vm-bar-anchor {\n position: relative;\n height: var(--size-bar);\n}\n[data-vibe-menu] .vm-bar-anchor .vm-strip {\n position: absolute;\n left: 0;\n bottom: 0;\n}\n[data-vibe-menu] .vm-bar-anchor .vm-glass {\n position: absolute;\n right: 0;\n bottom: 0;\n}\n/* phones: the bar spans the width; tabs sized to their content, icon above label */\n[data-vibe-menu] .vm-strip.is-phone {\n width: 100%;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab {\n width: auto;\n flex: 1 1 auto;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-2);\n min-width: 0;\n padding: 4px 2px;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab-circle {\n width: var(--size-icon-circle-phone);\n height: var(--size-icon-circle-phone);\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab svg {\n width: 12px;\n height: 12px;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab[data-section=\"home\"] {\n padding: 4px 2px 4px calc(2px + var(--size-home-extra) * 0.7);\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab[data-section=\"share\"] {\n flex-grow: 1;\n}\n[data-vibe-menu] .vm-strip.is-phone .vm-tab-label {\n position: static;\n display: block;\n font-size: 9.6px;\n letter-spacing: 1px;\n padding: 0 0 0 1px;\n}\n\n/* ---------- VibesSwitch: the pill in its obsidian glass ---------- */\n[data-vibe-menu] .vm-glass {\n position: relative;\n width: calc(var(--size-pill-w) + 2 * var(--size-ring));\n height: calc(var(--size-pill-h) + 2 * var(--size-ring));\n border-radius: var(--radius-full);\n flex: none;\n background:\n linear-gradient(to right, transparent, var(--obsidian-highlight), transparent) top / 100% 1px no-repeat,\n linear-gradient(to bottom, var(--obsidian-highlight), transparent, var(--obsidian-edge)) left / 1px 100% no-repeat,\n var(--obsidian-fill);\n box-shadow: var(--obsidian-shadow);\n}\n[data-vibe-menu] .vm-pill {\n position: absolute;\n left: var(--size-ring);\n top: var(--size-ring);\n width: var(--size-pill-w);\n height: var(--size-pill-h);\n padding: 0;\n border: 0;\n border-radius: var(--radius-full);\n background: none;\n cursor: pointer;\n}\n/* Touching, holding or dragging on the switch never selects text, raises the\n iOS callout and magnifier, or drags an image (owner 2026-10-16). The letters\n are paths drawn twice, the second copy clipped to the knob: both sit under\n .vm-pill, so the descendant rule covers them. */\n[data-vibe-menu] .vm-glass,\n[data-vibe-menu] .vm-pill,\n[data-vibe-menu] .vm-pill * {\n -webkit-user-select: none;\n user-select: none;\n -webkit-touch-callout: none;\n}\n/* A held press slides the knob 3/4 of the way and waits (owner 2026-10-16).\n An overshooting spring would carry it past 3/4, so the held leg eases out\n with no overshoot; the release finishes on the host's own curve. */\n[data-vibe-menu] .vm-pill[data-progress=\"0.75\"] {\n --vibes-switch-slide: 0.4s cubic-bezier(0.22, 1, 0.36, 1);\n}\n/* Reduced motion: the switch jumps between poses. Its paths carry inline\n transitions (the knob's d and 3px nudge, the letters' fills and on-knob clip), so\n only an !important rule here stops every leg, not just the d slide. */\n@media (prefers-reduced-motion: reduce) {\n [data-vibe-menu] .vm-pill {\n --vibes-switch-slide: 0s;\n }\n [data-vibe-menu] .vm-pill svg path {\n transition: none !important;\n }\n}\n[data-vibe-menu] .vm-switch-art {\n width: 100%;\n height: 100%;\n display: block;\n}\n[data-vibe-menu] .vm-pill .vm-badge {\n top: -6px;\n right: 4px;\n}\n/* #7079: the guest maker's save-time ask: a dot, not a count. */\n[data-vibe-menu] .vm-badge.is-dot {\n min-width: 10px;\n width: 10px;\n height: 10px;\n padding: 0;\n}\n[data-vibe-menu] .vm-chiclet {\n display: inline-block;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n background: var(--section-code);\n /* Port change: bundle.css writes #111111 (ink); text on a section colour is\n menu-ink (Global Constraints), which --on-code resolves to in both themes. */\n color: var(--on-code);\n font: 700 11px/18px var(--font-display);\n letter-spacing: 0.06em;\n}\n/* #4291. The chiclet's shape, so the two read as one row \u2014 but in the badge\n colour (the identity lane) so elevation never looks like a publish state. */\n[data-vibe-menu] .vm-admin-badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: var(--radius-full);\n background: var(--badge);\n color: var(--on-badge);\n font: 700 11px/18px var(--font-display);\n letter-spacing: 0.06em;\n}\n\n/* ---------- MenuCard: the card, its band and the folder-tab join, drawn once ---------- */\n[data-vibe-menu] .vm-frame {\n position: relative;\n}\n[data-vibe-menu] .vm-frame .vm-card {\n position: absolute;\n left: 0;\n top: 0;\n background: var(--card-bg);\n color: var(--ink);\n overflow: hidden;\n border-radius: var(--radius-card) var(--radius-card) 0 0;\n}\n[data-vibe-menu] .vm-frame .vm-card .vm-card-body {\n padding-bottom: calc(var(--space-16) + var(--size-band));\n}\n[data-vibe-menu] .vm-outline {\n position: absolute;\n left: 0;\n top: 0;\n overflow: visible;\n pointer-events: none;\n}\n[data-vibe-menu] .vm-outline .vm-band,\n[data-vibe-menu] .vm-outline .vm-cover {\n fill: var(--accent);\n}\n[data-vibe-menu] .vm-outline .vm-edge {\n fill: none;\n stroke: var(--line);\n stroke-width: 2;\n stroke-linejoin: miter;\n}\n\n/* ---------- ActionPill: the card's one main action ---------- */\n[data-vibe-menu] .vm-ask {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-12);\n width: 100%;\n padding: var(--space-14) var(--space-18);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n background: var(--accent);\n color: var(--on-accent);\n font: 700 21px/1 var(--font-display);\n letter-spacing: -0.02em;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-ask.is-solo {\n margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ask .vm-glyph {\n width: var(--size-glyph-cta);\n height: var(--size-glyph-cta);\n transition: transform 160ms cubic-bezier(0.22, 1, 0.36, 1);\n}\n[data-vibe-menu] .vm-ask:hover .vm-glyph {\n transform: translateX(4px);\n}\n[data-vibe-menu] .vm-ask.is-phone {\n font-size: 18px;\n}\n[data-vibe-menu] .vm-sub:has(.vm-copy) {\n display: flex;\n align-items: center;\n gap: var(--space-8);\n}\n[data-vibe-menu] .vm-sub:has(.vm-copy) > span {\n flex: 1;\n}\n\n/* ---------- Chip ---------- */\n[data-vibe-menu] .vm-chip {\n height: var(--size-chip);\n padding: 0 var(--space-12);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-chip);\n background: var(--accent);\n color: var(--on-accent);\n font-size: 11px;\n flex: none;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-chip.is-ghost {\n background: transparent;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-chip.is-name {\n font: 700 14px/1 var(--font-display);\n letter-spacing: 0;\n text-transform: none;\n}\n[data-vibe-menu] .vm-chip.vm-copy {\n height: var(--size-copy);\n padding: 0 var(--space-14);\n border-radius: var(--radius-copy);\n flex-shrink: 0;\n align-self: center;\n white-space: nowrap;\n}\n[data-vibe-menu] .vm-suggestions {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-6);\n}\n/* Port change (smoke F9): codegen writes long chips, so a chip wraps inside\n the card (DS \"text that can outgrow its track wraps\") instead of running\n past its edge; a one-line chip keeps the 28px chip height. */\n[data-vibe-menu] .vm-suggest {\n min-height: var(--size-chip);\n max-width: 100%;\n min-width: 0;\n padding: var(--space-2) var(--space-12);\n text-align: left;\n overflow-wrap: anywhere;\n border: var(--stroke-mini) solid var(--suggest-border);\n border-radius: var(--radius-chip);\n background: none;\n color: var(--ink);\n font: 400 13px/20px var(--font-display);\n cursor: pointer;\n}\n[data-vibe-menu] .vm-suggest:hover,\n[data-vibe-menu] .vm-suggest.is-hover,\n[data-vibe-menu] .vm-suggest[aria-busy=\"true\"] {\n border-color: var(--line-card);\n background: color-mix(in srgb, var(--accent) 35%, transparent);\n}\n/* A pressed chip holds the row while its answer is on the way (a lookup, a\n fork): it stays lit, and the row takes no second press. */\n[data-vibe-menu] .vm-suggest:disabled {\n cursor: default;\n}\n[data-vibe-menu] .vm-suggest:disabled:not([aria-busy=\"true\"]) {\n opacity: 0.5;\n}\n/* The pressed one is disabled too (the row takes no second press), so it\n must outrank the app's global button:disabled dim (theme/global-styles.ts). */\n[data-vibe-menu] .vm-suggest[aria-busy=\"true\"] {\n opacity: 1;\n}\n/* The same hold on the inline links at the end of the chat: the pressed link\n keeps its lit underline, the others read as disabled (dimmed above). */\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest[aria-busy=\"true\"] {\n text-decoration-color: currentColor;\n}\n/* The gold option (#6768): the one capability the agent offered, a chip in the\n same row and the same order as the others. It wears the lit state the others\n take on hover, a full-ink outline and a filled star before the label, so it\n reads as the offer without a second colour on the card. */\n[data-vibe-menu] .vm-suggest.is-gold {\n display: inline-flex;\n align-items: center;\n gap: var(--space-6);\n border-color: var(--line-card);\n background: color-mix(in srgb, var(--accent) 35%, transparent);\n}\n[data-vibe-menu] .vm-suggest.is-gold .vm-glyph {\n flex: none;\n fill: currentColor;\n}\n[data-vibe-menu] .vm-picks {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-6);\n}\n\n/* ---------- Composer: the logo pill's shape, 48px tall (owner pick B, 2026-10-26:\n near the switch's 44px curve with a full 44px cap) ---------- */\n[data-vibe-menu] .vm-composer {\n display: flex;\n align-items: stretch;\n min-height: var(--size-composer);\n margin-bottom: var(--space-16);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n overflow: hidden;\n background: var(--card-bg);\n}\n[data-vibe-menu] .vm-composer:focus-within,\n[data-vibe-menu] .vm-composer.is-focus {\n box-shadow: 0 0 0 3px var(--accent);\n}\n[data-vibe-menu] .vm-composer textarea {\n flex: 1;\n min-width: 0;\n align-self: center;\n margin: 0 var(--space-12) 0 2px;\n padding: 0;\n resize: none;\n border: 0;\n outline: 0;\n background: transparent;\n color: var(--ink);\n font: 700 16px/1.2 var(--font-display);\n letter-spacing: -0.02em;\n field-sizing: content;\n max-height: 2.4em;\n}\n[data-vibe-menu] .vm-composer textarea::placeholder {\n color: var(--placeholder);\n}\n[data-vibe-menu] .vm-composer .vm-attach {\n order: -1;\n width: var(--size-copy);\n height: var(--size-copy);\n margin-left: var(--space-10);\n align-self: center;\n border-radius: 50%;\n display: grid;\n place-items: center;\n flex: none;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-composer .vm-attach:hover {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-composer .vm-glyph {\n width: 16px;\n height: 16px;\n}\n[data-vibe-menu] .vm-cap {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(--space-24) 0 20px;\n border-left: var(--stroke-rule) solid var(--line-card);\n background: var(--section-code);\n color: var(--on-code);\n font: 700 13px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n white-space: nowrap;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-cap:hover {\n background: color-mix(in oklch, var(--section-code), var(--menu-ink) 10%);\n}\n[data-vibe-menu] .vm-composer.is-building .vm-cap[data-send],\n[data-vibe-menu] .vm-composer.is-building:has(textarea:not(:placeholder-shown)) .vm-cap[data-stop] {\n display: none;\n}\n[data-vibe-menu] .vm-composer.is-building:has(textarea:not(:placeholder-shown)) .vm-cap[data-send] {\n display: flex;\n}\n/* Rewrite mode (the settings tab's sharing rewrite): no attach button, so the\n field takes the attach's inset; a dim red X cap sits left of the action cap. */\n[data-vibe-menu] .vm-composer.is-rewrite {\n position: relative;\n}\n[data-vibe-menu] .vm-composer.is-rewrite textarea {\n margin-left: var(--space-24);\n}\n[data-vibe-menu] .vm-cap[data-cancel] {\n padding: 0 var(--space-16);\n background: var(--cancel-cap);\n color: var(--on-cancel-cap);\n}\n[data-vibe-menu] .vm-cap[data-cancel]:hover {\n background: color-mix(in oklch, var(--cancel-cap), var(--on-cancel-cap) 12%);\n}\n[data-vibe-menu] .vm-rewrite-shimmer {\n position: absolute;\n left: var(--space-24);\n top: 50%;\n width: 28%;\n height: var(--space-12);\n margin-top: calc(var(--space-12) / -2);\n border-radius: var(--radius-full);\n background: var(--placeholder);\n opacity: 0.3;\n pointer-events: none;\n animation: vm-rewrite-shimmer 1.4s ease-in-out infinite;\n}\n@keyframes vm-rewrite-shimmer {\n 50% {\n opacity: 0.12;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n [data-vibe-menu] .vm-rewrite-shimmer {\n animation: none;\n }\n}\n[data-vibe-menu] .vm-queue-note {\n display: none;\n margin: -10px 0 12px 18px;\n font-size: 12px;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-composer:has(textarea:not(:placeholder-shown)) + .vm-queue-note {\n display: block;\n}\n/* The change box's hint (#7803 #7878): one quiet line under the box while the\n person types, in the queue note's muted voice, whose button is the second door. */\n[data-vibe-menu] .vm-door-line {\n margin: -10px 0 12px 18px;\n font-size: 12px;\n line-height: 18px;\n color: var(--muted);\n}\n/* A refused empty Send's idea (#7916): one idea, one row, ellipsized. */\n[data-vibe-menu] .vm-door-line[data-refused-send-idea] {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n[data-vibe-menu] .vm-door-line .vm-door {\n all: unset;\n cursor: pointer;\n color: var(--ink);\n text-decoration: underline;\n text-underline-offset: 2px;\n text-decoration-color: var(--muted);\n}\n/* The idea's button is one unbreakable inline box, so on a phone the whole\n button overflowed the line and became its \"\u2026\" (#8646). Bounded to the room\n after \"Try:\", it ellipsizes its own tail and the idea stays readable. */\n[data-vibe-menu] .vm-door-line[data-refused-send-idea] .vm-door {\n display: inline-block;\n max-width: calc(100% - 3em);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: bottom;\n}\n[data-vibe-menu] .vm-door-line .vm-door:focus-visible {\n outline: 2px solid var(--ink);\n outline-offset: 2px;\n border-radius: 2px;\n}\n[data-vibe-menu] .vm-composer.is-phone textarea {\n margin-right: var(--space-6);\n font-size: 16px;\n}\n[data-vibe-menu] .vm-composer.is-phone .vm-attach {\n margin-left: 4px;\n width: 28px;\n}\n[data-vibe-menu] .vm-composer.is-phone .vm-cap {\n padding: 0 var(--space-18) 0 var(--space-14);\n}\n\n/* ---------- Row: the bar's tab grammar inside the card ---------- */\n[data-vibe-menu] .vm-group {\n border-top: var(--stroke-rule) solid var(--line-card);\n margin: 0 calc(-1 * var(--space-16));\n}\n[data-vibe-menu] .vm-group.is-flush {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-row {\n display: flex;\n align-items: center;\n gap: var(--space-12);\n width: 100%;\n height: var(--size-row);\n padding: 0 var(--space-16);\n}\n[data-vibe-menu] .vm-row.is-compact {\n height: var(--size-row-compact);\n}\n[data-vibe-menu] .vm-row + .vm-row {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-row .vm-label {\n flex: 1;\n}\n[data-vibe-menu] .vm-dot {\n width: var(--size-icon-circle);\n height: var(--size-icon-circle);\n border-radius: 50%;\n background: var(--ink);\n color: var(--card-bg);\n display: grid;\n place-items: center;\n flex: none;\n}\n[data-vibe-menu] button.vm-row:hover .vm-dot:not(.vm-app),\n[data-vibe-menu] .vm-row.is-hover .vm-dot:not(.vm-app) {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-row.is-quiet .vm-dot {\n background: transparent;\n color: var(--ink);\n box-shadow: inset 0 0 0 2px var(--line-card);\n}\n[data-vibe-menu] .vm-row[aria-disabled=\"true\"] {\n opacity: 0.35;\n cursor: default;\n}\n[data-vibe-menu] .vm-row[aria-disabled=\"true\"] .vm-dot {\n background: var(--ink) !important;\n color: var(--card-bg) !important;\n}\n[data-vibe-menu] .vm-app,\n[data-vibe-menu] .vm-initial {\n font: 700 12px/1 var(--font-tab);\n box-shadow: inset 0 0 0 2px var(--line-card);\n}\n[data-vibe-menu] .vm-app {\n background: var(--app);\n color: var(--menu-ink);\n}\n[data-vibe-menu] .vm-initial {\n background: transparent;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-chev {\n display: grid;\n color: var(--muted);\n transition: transform 160ms cubic-bezier(0.22, 1, 0.36, 1);\n}\n[data-vibe-menu] .vm-chev.is-open {\n transform: rotate(90deg);\n}\n[data-vibe-menu] .vm-count {\n font: 700 12px/1 var(--font-tab);\n letter-spacing: 0.08em;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-count.is-handle {\n max-width: 45%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n[data-vibe-menu] .vm-switch {\n position: relative;\n width: var(--size-switch-w);\n height: 20px;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-switch);\n flex: none;\n}\n[data-vibe-menu] .vm-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--ink);\n}\n[data-vibe-menu] .vm-switch.is-on {\n background: var(--accent);\n}\n[data-vibe-menu] .vm-switch.is-on::after {\n left: 18px;\n}\n\n/* ---------- BackRow and DoneButton: a drill-in's frame ---------- */\n[data-vibe-menu] .vm-back {\n display: flex;\n align-items: center;\n gap: var(--space-12);\n width: calc(100% + 2 * var(--space-16));\n height: var(--size-row-compact);\n margin: 0 calc(-1 * var(--space-16));\n padding: 0 var(--space-16);\n border-top: var(--stroke-rule) solid var(--line-card);\n border-bottom: var(--stroke-hairline) solid var(--line-hairline);\n}\n/* A drill that replaces the whole card body (Share, Account) sits on the card's\n top edge, which the outline already draws: no rule, and it takes the body's\n top padding so no empty band shows above it (cards-hero.css .card-title + .h-back). */\n[data-vibe-menu] .vm-back.is-top {\n margin-top: calc(-1 * var(--space-14));\n border-top: 0;\n}\n[data-vibe-menu] .vm-back .vm-label {\n flex: none;\n}\n[data-vibe-menu] .vm-back-name {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: 400 16px/1.1 var(--font-display);\n color: var(--muted);\n}\n[data-vibe-menu] .vm-back:hover .vm-dot,\n[data-vibe-menu] .vm-back.is-hover .vm-dot {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-drill {\n padding-top: var(--space-14);\n}\n[data-vibe-menu] .vm-drill-sec + .vm-drill-sec {\n margin-top: var(--space-14);\n}\n[data-vibe-menu] .vm-drill-line {\n margin: 0 0 var(--space-14);\n font: 700 18px/1.25 var(--font-display);\n letter-spacing: -0.01em;\n}\n[data-vibe-menu] .vm-done {\n display: block;\n width: 100%;\n height: var(--size-row-compact);\n margin-top: var(--space-16);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-done);\n background: var(--accent);\n color: var(--on-accent);\n text-align: center;\n font: 700 14px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-textbtn {\n display: block;\n width: 100%;\n height: 40px;\n margin-top: var(--space-4);\n text-align: center;\n font: 700 12px/1 var(--font-tab);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-textbtn:hover {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-faq {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-12);\n width: 100%;\n padding: var(--space-12) 0;\n font: 400 16px/1.3 var(--font-display);\n}\n[data-vibe-menu] .vm-faq + .vm-faq {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n\n/* ---------- MomentLine: the current moment ---------- */\n[data-vibe-menu] .vm-moments {\n display: flex;\n flex-direction: column;\n gap: var(--space-8);\n}\n[data-vibe-menu] .vm-moment {\n margin: 0;\n font: 400 16px/1.3 var(--font-display);\n color: var(--ink);\n}\n[data-vibe-menu] .vm-moment.is-pinned {\n padding: var(--space-10) var(--space-12) var(--space-12) var(--space-14);\n border: var(--stroke-rule) solid var(--line-card);\n border-left: var(--size-band) solid var(--accent);\n border-radius: var(--radius-moment);\n}\n/* A primary pinned item's main action (#7782): the full-width pill, then its quiet second ways. */\n[data-vibe-menu] .vm-moment.is-pinned > .vm-ask + .vm-moment-actions {\n margin-top: var(--space-10);\n}\n[data-vibe-menu] .vm-moment-actions:empty {\n display: none;\n}\n[data-vibe-menu] .vm-moment-text {\n margin: 0 0 var(--space-10);\n text-wrap: pretty;\n}\n/* A pinned heads-up (#6816): the summary line's muted voice, its action a text link. */\n[data-vibe-menu] .vm-moment.is-quiet {\n padding: 0 var(--space-2);\n font-size: 14px;\n color: var(--muted);\n text-wrap: pretty;\n}\n[data-vibe-menu] button.vm-moment-link {\n margin: 0;\n padding: 0;\n border: 0;\n background: none;\n cursor: pointer;\n}\n[data-vibe-menu] .vm-moment-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-6);\n}\n[data-vibe-menu] .vm-moment-hint {\n font-size: 12px;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-moment.is-progress,\n[data-vibe-menu] .vm-moment.is-summary {\n display: flex;\n align-items: center;\n gap: var(--space-10);\n padding: 0 var(--space-2);\n}\n[data-vibe-menu] .vm-moment.is-summary {\n color: var(--muted);\n}\n[data-vibe-menu] .vm-moment.is-expander {\n width: 100%;\n gap: var(--space-8);\n}\n[data-vibe-menu] .vm-moment.is-expander:hover {\n color: var(--ink);\n}\n/* The live line's link (the first build's real address, #6451 S9c): pointer\n events back on, since the layer takes no hits of its own. */\n[data-vibe-menu] .vm-moment-link {\n display: inline-block;\n margin: 0 var(--space-2);\n font: 400 14px/1.3 var(--font-display);\n color: var(--ink);\n text-decoration: underline;\n text-underline-offset: 3px;\n overflow-wrap: anywhere;\n pointer-events: auto;\n}\n[data-vibe-menu] .vm-live .vm-chev {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-log-clip {\n overflow: hidden;\n}\n/* Port addition (RULINGS R1): the log clip is always rendered (RECONCILE \u00A75c),\n so the base stylesheet owns its shut and open states. The shell's per-frame\n tween (T11) writes an inline height, which overrides these during motion.\n C's VIBE_MENU_SHELL_CSS does not repeat them. */\n[data-vibe-menu] .vm-log-clip[data-open=\"false\"] {\n height: 0;\n overflow: hidden;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"true\"] {\n height: auto;\n /* Known adjustment (plan header): room for .vm-log's own 160px cap plus its\n 8px margin-top and two hairline borders, so the clip never scrolls on top\n of the log. */\n max-height: calc(var(--size-log-max, 160px) + var(--space-8) + 2 * var(--stroke-hairline));\n overflow: auto;\n /* Smoke F15: the shell's height tween makes the clip overflow for a moment;\n .vm-log scrolls itself, so the clip never shows a bar. */\n scrollbar-width: none;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"true\"]::-webkit-scrollbar {\n display: none;\n}\n/* The peek (owner 2026-10-16): a send opens the fold about two lines high, the\n person's own words its last visible line, before the composer has cleared.\n The triangle stays folded; the peek is an invite (a tap, a wheel or a swipe in\n it opens the full log, MomentLine). Its column is bottom-aligned so the\n overflow falls off the top, and its inner scrollers cap at the same height\n so their bottom pin shows the newest line. Never part of the open\n [data-history] flex chain below. */\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] {\n height: auto;\n max-height: var(--size-log-peek);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n cursor: pointer;\n -webkit-mask-image: linear-gradient(to bottom, transparent, var(--ink) 14px);\n mask-image: linear-gradient(to bottom, transparent, var(--ink) 14px);\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] > * {\n flex: none;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] .vm-log,\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] .vm-agent-history {\n max-height: var(--size-log-peek);\n overflow-y: hidden;\n}\n[data-vibe-menu] .vm-log-clip[data-open=\"peek\"] .vm-suggestions {\n display: none;\n}\n/* The fold over the full chat (slots.agentLog): the history caps and scrolls\n itself (AgentLogHistory's compact box), so the clip drops the flat log's cap. */\n[data-vibe-menu] .vm-log-clip[data-open=\"true\"][data-history] {\n max-height: none;\n overflow: hidden;\n}\n[data-vibe-menu] .vm-log-history {\n margin-top: var(--space-8);\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n border-bottom: var(--stroke-hairline) solid var(--line-hairline);\n}\n/* One scroller: the tab-row card with the full chat open. The history's own\n cap (AgentLogHistory's compact box) knows nothing of what else the card\n holds, and the first build's request headline can take a third of it: the\n card then overflowed and scrolled too, the composer slid under the row, and\n the chat's end was out of reach. Here the card is a column whose fold gives\n up exactly what the card lacks, so the history scrolls and the card never\n does. Everything else in the card keeps its own height. */\n[data-vibe-menu] .vm-card:has(.vm-ctab .vm-log-clip[data-open=\"true\"][data-history]) {\n display: flex;\n flex-direction: column;\n}\n[data-vibe-menu] .vm-card:has(.vm-ctab .vm-log-clip[data-open=\"true\"][data-history])::before {\n flex: none;\n}\n[data-vibe-menu] .vm-card:has(.vm-ctab .vm-log-clip[data-open=\"true\"][data-history]) .vm-card-body,\n[data-vibe-menu] .vm-ctab:has(.vm-log-clip[data-open=\"true\"][data-history]),\n[data-vibe-menu] .vm-ctab .vm-moments:has(.vm-log-clip[data-open=\"true\"][data-history]),\n[data-vibe-menu] .vm-ctab .vm-live:has(.vm-log-clip[data-open=\"true\"][data-history]),\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"][data-history],\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"][data-history] .vm-log-history {\n display: flex;\n flex-direction: column;\n flex: 0 1 auto;\n min-height: 0;\n}\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"][data-history] .vm-log-history > * {\n min-height: 0;\n}\n[data-vibe-menu] .vm-ctab:has(.vm-log-clip[data-open=\"true\"][data-history]) > :not(.vm-moments),\n[data-vibe-menu] .vm-ctab .vm-live:has(.vm-log-clip[data-open=\"true\"][data-history]) > :not(.vm-log-clip) {\n flex-shrink: 0;\n}\n[data-vibe-menu] .vm-agent-history-tail {\n padding: var(--space-10) 4px var(--space-14) var(--space-24);\n}\n/* Suggestions at the end of the chat: wrapped inline links, not chips. */\n[data-vibe-menu] .vm-suggestions.is-inline {\n gap: var(--space-6) var(--space-14);\n margin-bottom: 0;\n}\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest {\n min-height: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n background: none;\n text-decoration: underline;\n text-decoration-color: var(--suggest-border);\n text-decoration-thickness: 1px;\n text-underline-offset: 3px;\n}\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest:hover,\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest.is-hover,\n[data-vibe-menu] .vm-suggestions.is-inline .vm-suggest.is-gold {\n background: none;\n text-decoration-color: currentColor;\n}\n[data-vibe-menu] .vm-log {\n max-height: var(--size-log-max);\n overflow-y: auto;\n overscroll-behavior: contain;\n display: flex;\n flex-direction: column;\n gap: var(--space-6);\n margin-top: var(--space-8);\n padding: var(--space-10) 4px var(--space-10) var(--space-24);\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n border-bottom: var(--stroke-hairline) solid var(--line-hairline);\n font-size: 13.5px;\n line-height: 1.35;\n}\n[data-vibe-menu] .vm-log-line {\n margin: 0;\n}\n[data-vibe-menu] .vm-log-line:first-child {\n margin-top: auto;\n}\n[data-vibe-menu] .vm-log-line b {\n font: 700 10px/1 var(--font-tab);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--muted);\n margin-right: 4px;\n}\n\n/* ---------- AccessToggle: Restricted | Public and its line ---------- */\n[data-vibe-menu] .vm-access {\n display: flex;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n overflow: hidden;\n}\n[data-vibe-menu] .vm-access button {\n flex: 1;\n height: var(--size-bar);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-10);\n text-align: center;\n font: 700 24px/1 var(--font-display);\n letter-spacing: -0.02em;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-access button + button {\n border-left: var(--stroke-rule) solid var(--line-card);\n}\n[data-vibe-menu] .vm-access button.is-active {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-access button:not(.is-active):hover {\n background: color-mix(in srgb, var(--accent) 20%, transparent);\n}\n/* Settings still loading (preflight ruling P14): dimmed and inert. */\n[data-vibe-menu] .vm-access[aria-disabled=\"true\"] {\n opacity: var(--opacity-row-disabled);\n}\n[data-vibe-menu] .vm-access[aria-disabled=\"true\"] button {\n cursor: default;\n}\n[data-vibe-menu] .vm-access[aria-disabled=\"true\"] button:not(.is-active):hover {\n background: transparent;\n}\n[data-vibe-menu] .vm-access-line {\n display: flex;\n align-items: center;\n gap: var(--space-10);\n min-height: var(--size-access-line);\n margin: var(--space-10) 0 var(--space-12);\n padding: var(--space-6) var(--space-6) var(--space-6) var(--space-14);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-access-line);\n background: var(--share-tint);\n font-size: 16.5px;\n line-height: 1.25;\n}\n[data-vibe-menu] .vm-access-line > span {\n flex: 1;\n min-width: 0;\n}\n[data-vibe-menu] .vm-access-line .vm-glyph {\n width: 16px;\n height: 16px;\n}\n[data-vibe-menu] .vm-publish {\n display: flex;\n align-items: center;\n gap: var(--space-8);\n padding: 5px 5px 5px var(--space-10);\n border: var(--stroke-rule) solid var(--line-card);\n border-left: var(--size-band) solid var(--accent);\n border-radius: var(--radius-moment);\n}\n[data-vibe-menu] .vm-publish b {\n font: 700 11px/1 var(--font-tab);\n letter-spacing: 0.1em;\n text-transform: uppercase;\n}\n[data-vibe-menu] .vm-publish span {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n line-height: 1.25;\n color: var(--muted);\n}\n\n/* ---------- GrantControls ---------- */\n[data-vibe-menu] .vm-seg {\n display: flex;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n overflow: hidden;\n}\n[data-vibe-menu] .vm-seg button {\n flex: 1;\n height: var(--size-segment);\n text-align: center;\n font-size: 11px;\n}\n[data-vibe-menu] .vm-seg button + button {\n border-left: var(--stroke-rule) solid var(--line-card);\n}\n[data-vibe-menu] .vm-seg button.is-active {\n background: var(--accent);\n color: var(--on-accent);\n}\n[data-vibe-menu] .vm-seg.is-mini {\n margin: 0;\n border-width: var(--stroke-mini);\n}\n[data-vibe-menu] .vm-seg.is-mini button {\n flex: none;\n height: var(--size-segment-mini);\n padding: 0 var(--space-8);\n font-size: 10px;\n}\n[data-vibe-menu] .vm-seg.is-mini button + button {\n border-left-width: var(--stroke-mini);\n}\n[data-vibe-menu] .vm-grants {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-6) var(--space-12);\n}\n[data-vibe-menu] .vm-grant-ctl {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n[data-vibe-menu] .vm-grant-name {\n font: 700 10px/1 var(--font-tab);\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-grant-fixed {\n font: 700 10px/1 var(--font-tab);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--ink);\n}\n\n/* ---------- MemberRow ---------- */\n[data-vibe-menu] .vm-input {\n width: 100%;\n height: var(--size-input);\n margin-bottom: var(--space-14);\n padding: 0 var(--space-18);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-input);\n background: transparent;\n color: var(--ink);\n font: inherit;\n}\n[data-vibe-menu] .vm-members-head {\n margin-top: 0;\n padding: 2px 0 var(--space-8);\n}\n[data-vibe-menu] .vm-members-head + .vm-input {\n height: 40px;\n margin-bottom: var(--space-8);\n}\n[data-vibe-menu] .vm-person {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-8) var(--space-12);\n padding: var(--space-6) 0;\n}\n[data-vibe-menu] .vm-person + .vm-person {\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-person .vm-label {\n flex: 1;\n min-width: 0;\n}\n[data-vibe-menu] .vm-request {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-8) var(--space-12);\n margin-bottom: 2px;\n padding: var(--space-10) var(--space-12);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-card);\n background: var(--share-tint-strong);\n}\n[data-vibe-menu] .vm-request-top {\n flex: 1 0 auto;\n}\n[data-vibe-menu] .vm-request-actions {\n display: flex;\n gap: var(--space-6);\n margin-left: auto;\n}\n[data-vibe-menu] .vm-who-block > .vm-row {\n width: calc(100% + 2 * var(--space-16));\n margin: 2px calc(-1 * var(--space-16)) 0;\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-narrow .vm-person .vm-grants,\n[data-vibe-menu] .vm-narrow .vm-request-top {\n flex-basis: 100%;\n}\n[data-vibe-menu] .vm-narrow .vm-person .vm-grants,\n[data-vibe-menu] .vm-narrow .vm-request .vm-grants {\n column-gap: var(--space-10);\n}\n/* stacking, as the prototype: card < bar < outline < glass and pill */\n[data-vibe-menu] .vm-frame .vm-card {\n z-index: 1;\n}\n[data-vibe-menu] .vm-frame .vm-strip {\n z-index: 2;\n}\n[data-vibe-menu] .vm-frame .vm-outline {\n z-index: 3;\n}\n[data-vibe-menu] .vm-frame .vm-glass {\n z-index: 4;\n}\n[data-vibe-menu] .vm-refresh {\n display: grid;\n place-items: center;\n width: var(--size-icon-circle);\n height: var(--size-icon-circle);\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: 50%;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-refresh:hover {\n background: var(--accent);\n color: var(--on-accent);\n}\n\n/* ---------- port additions: not in bundle.css ---------- */\n/* Sign-in providers (the inline sign-up drill): each brand's own mark on a\n white disc, so the logo reads the way its owner draws it on any card theme. */\n[data-vibe-menu] .vm-providers {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-14);\n margin-bottom: var(--space-4);\n}\n[data-vibe-menu] .vm-provider {\n position: relative;\n display: grid;\n place-items: center;\n width: 48px;\n height: 48px;\n padding: 0;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: 50%;\n background: var(--provider-disc);\n color: var(--provider-ink);\n cursor: pointer;\n flex: none;\n}\n[data-vibe-menu] .vm-provider svg {\n width: 22px;\n height: 22px;\n}\n[data-vibe-menu] .vm-provider[aria-disabled=\"true\"] {\n opacity: var(--opacity-row-disabled);\n cursor: default;\n}\n[data-vibe-menu] .vm-provider.is-pending {\n opacity: 1;\n animation: vm-provider-pulse 1.2s ease-in-out infinite;\n}\n[data-vibe-menu] .vm-provider-tag {\n position: absolute;\n top: -8px;\n left: 50%;\n transform: translateX(-50%);\n padding: 1px 6px;\n border: var(--stroke-rule) solid var(--line-card);\n border-radius: var(--radius-full);\n background: var(--accent);\n color: var(--on-accent);\n font-size: 8px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n white-space: nowrap;\n}\n[data-vibe-menu] .vm-provider-status {\n display: flex;\n align-items: center;\n gap: var(--space-16);\n margin: var(--space-4) 0 var(--space-14) var(--space-4);\n}\n[data-vibe-menu] .vm-provider-status > div {\n min-width: 0;\n}\n/* The way back out of a provider that is opening: BackRow's dot and label,\n inline in the drill body rather than across the card's top edge. */\n[data-vibe-menu] .vm-back.is-inline {\n width: auto;\n height: var(--size-icon-circle);\n margin: 0;\n padding: 0;\n border: 0;\n background: none;\n color: var(--ink);\n cursor: pointer;\n}\n[data-vibe-menu] .vm-provider-status .vm-sub {\n margin: 0;\n}\n@keyframes vm-provider-pulse {\n 50% {\n box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 30%, transparent);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n [data-vibe-menu] .vm-provider.is-pending {\n animation: none;\n }\n}\n/* Rows and the action pill can be links (Home's rows, the credits action). */\n[data-vibe-menu] :where(a.vm-row, a.vm-ask) {\n color: inherit;\n text-decoration: none;\n}\n[data-vibe-menu] a.vm-row:hover .vm-dot:not(.vm-app) {\n background: var(--accent);\n color: var(--on-accent);\n}\n/* A member's name drills into that member (spec \u00A78). */\n[data-vibe-menu] .vm-person button.vm-label {\n text-align: left;\n}\n[data-vibe-menu] .vm-chip[aria-disabled=\"true\"],\n[data-vibe-menu] .vm-cap:disabled,\n[data-vibe-menu] .vm-composer .vm-attach:disabled {\n opacity: var(--opacity-row-disabled);\n cursor: default;\n}\n/* Staged attachments above the composer: name chips, no emoji. */\n[data-vibe-menu] .vm-attachments {\n margin-bottom: var(--space-8);\n}\n[data-vibe-menu] .vm-attachments .vm-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--space-6);\n max-width: 220px;\n}\n[data-vibe-menu] .vm-attachments .vm-chip > span:last-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-vibe-menu] .vm-attachments .vm-chip[data-status=\"error\"] {\n border-color: var(--section-account);\n}\n/* The one left-out sentence after a pick past the cap (#7622): the queue\n note's voice, tucked under the chips it talks about. */\n[data-vibe-menu] .vm-attach-note {\n margin: -2px 0 10px 4px;\n font-size: 12px;\n line-height: 1.4;\n color: var(--muted);\n}\n/* A suggestion's fast-path marks (RULINGS O4, production #2917 decorateChip).\n Siblings of .vm-suggest, since a button can't nest a button. The owner's\n toggle (FastPathToggle) is outline when not blessed, filled when blessed\n (aria-pressed); the badges are the marks every viewer sees. */\n[data-vibe-menu] .vm-suggest-item {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n max-width: 100%;\n min-width: 0;\n}\n[data-vibe-menu] .vm-suggest-item > * {\n flex: none;\n}\n[data-vibe-menu] .vm-suggest-item > .vm-suggest {\n flex: 0 1 auto;\n}\n[data-vibe-menu] .vm-suggest-shield {\n width: var(--size-chip);\n height: var(--size-chip);\n display: inline-grid;\n place-items: center;\n border-radius: var(--radius-full);\n background: none;\n color: var(--muted);\n}\n[data-vibe-menu] .vm-suggest-shield:hover {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-suggest-shield[aria-pressed=\"true\"] {\n color: var(--ink);\n}\n[data-vibe-menu] .vm-suggest-shield[aria-pressed=\"true\"] .vm-glyph {\n fill: currentColor;\n}\n/* The non-interactive marks every viewer sees (production ChipShieldBadge,\n ChipJumpBadge): a filled shield (\"stays in this app\", server-authoritative)\n or an arrow (\"opens another app\"). Never both on one chip. */\n[data-vibe-menu] .vm-suggest-badge {\n width: var(--size-chip);\n height: var(--size-chip);\n display: inline-grid;\n place-items: center;\n color: var(--ink);\n}\n[data-vibe-menu] .vm-suggest-badge.is-shield .vm-glyph {\n fill: currentColor;\n}\n[data-vibe-menu] .vm-suggest-badge.is-jump {\n color: var(--muted);\n}\n\n/* ---------- phones (cards-hero.css): the menu's width, not the viewport ---------- */\n@container vibe-menu (max-width: 480px) {\n [data-vibe-menu] .vm-ask {\n font-size: 18px;\n }\n /* the field keeps 16px (iOS zooms smaller fields); attach slims instead */\n [data-vibe-menu] .vm-composer textarea {\n margin-right: var(--space-6);\n font-size: 16px;\n }\n [data-vibe-menu] .vm-composer .vm-attach {\n margin-left: 4px;\n width: 28px;\n }\n [data-vibe-menu] .vm-cap {\n padding: 0 var(--space-18) 0 var(--space-14);\n }\n [data-vibe-menu] .vm-access button {\n font-size: 21px;\n }\n /* the access line keeps its sentence to two lines beside the chip */\n [data-vibe-menu] .vm-access-line {\n padding-left: 12px;\n gap: 8px;\n font-size: 15.5px;\n }\n [data-vibe-menu] .vm-access-line .vm-chip.vm-copy {\n padding: 0 10px;\n }\n /* Data and Code drop under the handle on one line (two on the narrowest) */\n [data-vibe-menu] .vm-person .vm-grants {\n flex-basis: 100%;\n column-gap: var(--space-10);\n }\n [data-vibe-menu] .vm-request .vm-grants {\n column-gap: var(--space-10);\n }\n [data-vibe-menu] .vm-request-top {\n flex-basis: 100%;\n }\n [data-vibe-menu] .vm-input {\n font-size: 16px;\n }\n}\n@container vibe-menu (max-width: 359px) {\n [data-vibe-menu] .vm-access button {\n font-size: 19px;\n }\n /* the line drops its icon here: the enclosure already marks it */\n [data-vibe-menu] .vm-access-line > .vm-glyph {\n display: none;\n }\n [data-vibe-menu] .vm-access-line {\n margin: 8px 0 10px;\n font-size: 14.5px;\n }\n [data-vibe-menu] .vm-access-line .vm-chip.vm-copy {\n padding: 0 8px;\n }\n /* the cap and attach slim so the field keeps room (REMIX THIS stays one line) */\n [data-vibe-menu] .vm-cap {\n padding: 0 13px 0 10px;\n letter-spacing: 0.05em;\n }\n [data-vibe-menu] .vm-composer .vm-attach {\n margin-left: 3px;\n width: 24px;\n }\n /* 16px, not the prototype's 14px: no text field under 16px on phones (spec \u00A74.5) */\n [data-vibe-menu] .vm-composer textarea {\n margin: 0 4px 0 0;\n font-size: 16px;\n }\n [data-vibe-menu] .vm-chip.vm-copy {\n padding: 0 10px;\n letter-spacing: 0.06em;\n }\n}\n";
|
|
5
5
|
export declare function VibeMenuStyles(): React.ReactElement;
|
|
@@ -834,6 +834,17 @@ export const VIBE_MENU_CSS = `
|
|
|
834
834
|
text-underline-offset: 2px;
|
|
835
835
|
text-decoration-color: var(--muted);
|
|
836
836
|
}
|
|
837
|
+
/* The idea's button is one unbreakable inline box, so on a phone the whole
|
|
838
|
+
button overflowed the line and became its "…" (#8646). Bounded to the room
|
|
839
|
+
after "Try:", it ellipsizes its own tail and the idea stays readable. */
|
|
840
|
+
[data-vibe-menu] .vm-door-line[data-refused-send-idea] .vm-door {
|
|
841
|
+
display: inline-block;
|
|
842
|
+
max-width: calc(100% - 3em);
|
|
843
|
+
overflow: hidden;
|
|
844
|
+
text-overflow: ellipsis;
|
|
845
|
+
white-space: nowrap;
|
|
846
|
+
vertical-align: bottom;
|
|
847
|
+
}
|
|
837
848
|
[data-vibe-menu] .vm-door-line .vm-door:focus-visible {
|
|
838
849
|
outline: 2px solid var(--ink);
|
|
839
850
|
outline-offset: 2px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vibe-menu.styles.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/vibe-menu.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAiC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA2Ff,WAAW;;;;;2BAKL,CAAC;AAE5B,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;2DAUwB,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;6BAKA,oBAAoB;;;;+BAIlB,mBAAmB;;;;mCAIf,mBAAmB
|
|
1
|
+
{"version":3,"file":"vibe-menu.styles.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/vibe-menu.styles.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibes.diy/base",
|
|
3
|
-
"version": "14.3.
|
|
3
|
+
"version": "14.3.277",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@adviser/cement": "~0.5.34",
|
|
12
12
|
"@emotion/css": "~11.13.5",
|
|
13
|
-
"@vibes.diy/api-types": "14.3.
|
|
14
|
-
"@vibes.diy/use-vibes-types": "14.3.
|
|
15
|
-
"@vibes.diy/vibe-runtime": "14.3.
|
|
16
|
-
"@vibes.diy/vibe-types": "14.3.
|
|
17
|
-
"arktype": "~2.2.
|
|
18
|
-
"officeparser": "~8.
|
|
13
|
+
"@vibes.diy/api-types": "14.3.277",
|
|
14
|
+
"@vibes.diy/use-vibes-types": "14.3.277",
|
|
15
|
+
"@vibes.diy/vibe-runtime": "14.3.277",
|
|
16
|
+
"@vibes.diy/vibe-types": "14.3.277",
|
|
17
|
+
"arktype": "~2.2.9",
|
|
18
|
+
"officeparser": "~8.5.0",
|
|
19
19
|
"qrcode-generator": "~2.0.4",
|
|
20
20
|
"react": "~19.2.9"
|
|
21
21
|
},
|