# AppShell

> The product frame every Nasaq app uses - resizable, collapsible sidebar at the inline start, sticky header, main area, mobile sheet, and the command registry.

Source: https://docs.nasaqui.com/components/app-shell

## Install

```bash
npx shadcn@latest add https://docs.nasaqui.com/r/app-shell.json
```

The frame every product re-solved: a sidebar at the inline start, a sticky header, and the page.
`AppShell` also owns three things you would otherwise wire by hand:

- **Sidebar state.** It collapses to an icon rail, can be dragged to resize, remembers both in
  `localStorage`, and moves into a sheet below the `md` breakpoint (48rem).
- **The command registry.** It renders a `CommandProvider`, so `useRegisterCommands` and
  `<CommandPalette />` work anywhere inside it with no extra setup.
- **Shared open state** for the palette, so `SearchTrigger` can open it.

The sidebar is built from small parts (`Sidebar`, `SidebarGroup`, `SidebarItem`, `SidebarNest`…) that
know whether they are on the collapsed rail and adapt: labels hide, tooltips and accessible names appear.

Two frames, one component:

- **Sidebar navigation** (pass `sidebar`). Add `variant="inset"` to put the page on its own rounded
  panel, inset from the sidebar's surface, and `SidebarStatus` for the "All systems normal" line
  above the user.
- **Top navigation** (leave `sidebar` out). The header carries the path as `AppBreadcrumbs` with
  ⇅ switchers and tags (organisation / project / environment), `AppNav` puts section tabs under it,
  and `AppFooter` closes the page. Good for apps whose sections fit in one row.

Both share `AppPageHeader`: the page's big title, a line under it, and its controls (a time range,
filters, the main action) at the inline end.

## When to use

- The root layout of any product with more than one screen.
- You need a collapsible sidebar with workspace switcher, search, navigation and user menu.
- A few sections under one resource (a project, a server, a site): top navigation with a path and tabs.

## When not to use

- A single-purpose page, marketing site or auth screen: use plain layout primitives.
- Switching between products: use [`ProductSwitcher`](https://docs.nasaqui.com/components/product-switcher) inside the shell.
- Letting users reorder or hide sidebar items: add [`sidebar-layout`](https://docs.nasaqui.com/components/sidebar-layout) on top.
- Hand-rolling a second sidebar nested in the page: the shell supports one.

## Import

```tsx
import {
  AppShell, AppHeader, AppMain, SidebarTrigger,
  Sidebar, SidebarBrand, SidebarHeader, SidebarContent, SidebarFooter,
  SidebarGroup, SidebarItem, SidebarNest, SidebarSubItem,
} from "@fadymondy/nasaq/web";
// inside this monorepo: "@nasaq/web"
```

## Quick start

```tsx
import {
  AppHeader,
  AppMain,
  AppShell,
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbList,
  BreadcrumbPage,
  Sidebar,
  SidebarBrand,
  SidebarContent,
  SidebarGroup,
  SidebarHeader,
  SidebarItem,
  SidebarTrigger,
} from "@fadymondy/nasaq/web";
import { Inbox, LayoutDashboard } from "lucide-react";

function AppSidebar() {
  return (
    <Sidebar>
      <SidebarHeader>
        <SidebarBrand href="/" />
      </SidebarHeader>
      <SidebarContent>
        <SidebarGroup>
          <SidebarItem href="/" icon={<LayoutDashboard />} active>
            Dashboard
          </SidebarItem>
          <SidebarItem href="/inbox" icon={<Inbox />} trailing="12">
            Inbox
          </SidebarItem>
        </SidebarGroup>
      </SidebarContent>
    </Sidebar>
  );
}

export function Layout({ children }: { children: React.ReactNode }) {
  return (
    <AppShell sidebar={<AppSidebar />}>
      <AppHeader>
        <SidebarTrigger />
        <Breadcrumb>
          <BreadcrumbList>
            <BreadcrumbItem>
              <BreadcrumbPage>Dashboard</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>
      </AppHeader>
      <AppMain>{children}</AppMain>
    </AppShell>
  );
}
```

`AppShell` must sit inside `NasaqProvider` (it reads the locale). `SidebarItem` renders a native `<a>`
and has no `render` prop, so drive client-side routing through `href` and `onClick`.

## Anatomy

```
AppShell                          data-slot="app-shell"      (flex row, min-h of 100dvh minus `--nasaq-shell-offset`)
├─ aside                          data-slot="app-sidebar"    data-collapsed, data-resizing; md+ only
│  ├─ your `sidebar` node         (SidebarRailContext = collapsed)
│  └─ resize handle               data-slot="sidebar-resize-handle" role="separator"
├─ mobile sheet (Dialog)          data-slot="app-shell-sheet"   below md, opened by SidebarTrigger / ⌘B
│  └─ your `sidebar` node         (never collapsed inside the sheet)
└─ column                         (children; inside app-shell-panel when variant="inset")
   ├─ AppHeader                   data-slot="app-header"
   │  ├─ SidebarTrigger first     (sidebar frame)
   │  └─ AppBreadcrumbs           data-slot="app-breadcrumbs"  (top frame) <nav> > <ol>
   │     └─ AppCrumb              data-slot="app-crumb"        icon, name, tag, ⇅ switcher
   ├─ AppNav                      data-slot="app-nav"          (top frame) section tabs, md and up
   │  ├─ bottom bar               data-slot="app-nav-bar"      below md; fixed, first mobileItems
   │  │  └─ More                  data-slot="app-nav-more"     opens a Drawer with the rest
   │  └─ AppNavItem               data-slot="app-nav-item"     <a>, aria-current when active
   ├─ AppMain                     data-slot="app-main"
   │  └─ AppPageHeader            data-slot="app-page-header"  h1, description, actions
   └─ AppFooter                   data-slot="app-footer"       (top frame) start + AppFooterLink[]

Root attributes: data-navigation="sidebar" | "top", data-variant="plain" | "inset".

Sidebar                           data-slot="sidebar"        <nav>, data-collapsed
├─ SidebarHeader                  data-slot="sidebar-header"  logo, workspace switcher, search trigger
│  └─ SidebarBrand                data-slot="sidebar-brand"   the product logo, a link home
├─ SidebarContent                 data-slot="sidebar-content" scrolls; header and footer stay put
│  └─ SidebarGroup                data-slot="sidebar-group"   label, action, collapsible
│     ├─ SidebarItem              data-slot="sidebar-item"    <a>, aria-current when active
│     └─ SidebarNest              data-slot="sidebar-nest"    parent + SidebarSubItem[]
│        └─ SidebarSubItem        data-slot="sidebar-sub-item"
└─ SidebarFooter                  data-slot="sidebar-footer"  support, docs, SidebarStatus, user menu
   └─ SidebarStatus               data-slot="sidebar-status"  data-tone; a dot on the rail
```

## API

### `AppShell`

Extends `ComponentProps<"div">` (extra props land on the root element).

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `sidebar?` | `ReactNode` | none | Rendered as a column at md+ and inside a sheet below md. Usually a `<Sidebar>`. It is mounted once per surface, so keep it cheap and idempotent. Leave it out for top navigation: no aside, no sheet, and `SidebarTrigger` has nothing to toggle, so don't render one. |
| `variant?` | `"plain" \| "inset"` | `"plain"` | `"inset"` puts the page on a rounded, bordered panel inset from the sidebar's surface (md+). Below md it is plain. Only meaningful with a `sidebar`. |
| `defaultCollapsed?` | `boolean` | `false` | Initial rail state when uncontrolled. A saved choice in `localStorage` wins after mount. |
| `collapsed?` | `boolean` | none | Controlled rail state. When set, nothing is persisted; you own storage. |
| `onCollapsedChange?` | `(collapsed: boolean) => void` | none | Called on toggle, ⌘B and drag-to-rail. |
| `resizable?` | `boolean` | `true` | Shows the drag handle (desktop). |
| `defaultWidth?` | `number` | `256` | Sidebar width in px. The user's width is remembered. |
| `minWidth?` | `number` | `208` | Lower clamp. Dragging about 28px below it snaps to the rail. |
| `maxWidth?` | `number` | `420` | Upper clamp. |
| `resizeLabel?` | `string` | "Resize sidebar" / "تغيير عرض الشريط الجانبي" | Accessible name of the resize handle. Localise it if you are not on `en`/`ar`. |
| `offset?` | `number | string` | `0` | Height taken from above the shell, such as an Electron title bar (number = px, string = any CSS length). Sets `--nasaq-shell-offset`, which the shell subtracts from its `100dvh` and the sidebar sticks below; you can also set that CSS variable yourself. The sticky `AppHeader` stays at the top of its scroll container. |
| `className?` | `string` | none | Classes for the root. |

### `SidebarTrigger`

Extends `ComponentProps<typeof Button>` plus:

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `label?` | `string` | "Toggle sidebar" / "إظهار/إخفاء الشريط الجانبي" | The button's `aria-label` and tooltip. Localised by provider locale; override to customise. |

Collapses/expands the rail on desktop and opens the sheet on mobile. Place it first in `AppHeader`.
`aria-expanded` reflects the rail on desktop (md+) and the mobile sheet below md.

### `AppHeader`, `AppMain`

`AppHeader` is `ComponentProps<"header">` (sticky, 48px, blurred background). `AppMain` is
`ComponentProps<"main">` (`flex-1`, page padding). Neither has its own props.

### `SidebarBrand`

The product logo at the top of the sidebar: a link (default `href="/"`) that shows the brand's `ProductLogo` (mark and
name) when the sidebar is expanded and only its `ProductMark` when it is collapsed, with the name as its label and
tooltip. Put it first in `SidebarHeader`. Every `a` prop, plus:

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `brand` | `string` | the provider's brand | Which brand's logo to show. |
| `logo` | `ReactNode` | `<ProductLogo />` | What shows when expanded, e.g. your own lockup or the logo with an environment badge. |
| `mark` | `ReactNode` | `<ProductMark />` | What shows when collapsed to the rail. |
| `label` | `string` | the brand's name | The link's name and tooltip while only the mark shows. Set it when you pass a custom `logo` or `brand`. |

Keep the official mark as it is: do not recolour, mirror or redraw it.

### `Sidebar`, `SidebarHeader`, `SidebarContent`, `SidebarFooter`

Plain wrappers over `nav` / `div` / `div` / `div`. `Sidebar` is a `<nav>` with a default
`aria-label` of "Main" / "الرئيسية" (by locale); pass `aria-label` to override, especially with more than one `nav`.

`Sidebar` has one prop of its own:

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `icons?` | `"always" \| "mobile"` | `"always"` | `mobile` hides the icons of `SidebarItem` and `SidebarNest` on the desktop column, for a quieter text-only list. They stay in the phone sheet, and on the collapsed rail, where the icon is all there is. Still give every item an icon. |

`SidebarContent` is the only part that scrolls. `SidebarHeader` and `SidebarFooter` never shrink, so on a
short window the nav scrolls between them and never runs under the account menu. Put everything that can
grow (groups, apps, projects) inside `SidebarContent`.

### `SidebarGroup`

Extends `Omit<ComponentProps<"div">, "title">`.

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `label?` | `ReactNode` | none | Group heading. Hidden on the rail. |
| `action?` | `ReactNode` | none | Icon button at the inline end of the label. Hidden on the rail. |
| `collapsible?` | `boolean` | `false` | Lets the user fold the group by its label. Not collapsible on the rail. |
| `defaultOpen?` | `boolean` | `true` | Initial state when `collapsible`. |

### `SidebarGroupAction`

`ComponentProps<typeof Button>` with ghost/icon-sm defaults. For a "+" beside a group label. Give it an `aria-label`.

### `SidebarItem`

Extends `ComponentProps<"a">`.

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `active?` | `boolean` | `false` | Sets `aria-current="page"`, the selected background and a stronger weight. |
| `icon?` | `ReactNode` | none | Leading icon (16px). |
| `trailing?` | `ReactNode` | none | Count or status at the inline end. Hidden on the rail. |
| `tooltip?` | `string` | children if a string | Tooltip and `aria-label` on the rail. **Set it when `children` is not a string**; otherwise the rail item falls back to the `aria-label` prop you pass, and has no name if there is none. |
| `render?` | `ReactElement \| (props) => ReactElement` | `<a>` | Render another element in place of the `<a>`, so a router link keeps client-side navigation: `render={<Link href="/orders" />}` (Next.js) or `render={(props) => <NavLink {...props} to="/orders" />}` (react-router). Nasaq merges its classes, `aria-current`, `data-slot` and children into it. |

### `SidebarNest`

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `label` | `string` | required | Parent row text; on the rail, the icon's accessible name and the flyout title. |
| `icon?` | `ReactNode` | none | Leading icon. |
| `active?` | `boolean` | `false` | A child is the current page. Also opens it initially. |
| `defaultOpen?` | `boolean` | `false` | Initial expanded state. |
| `children` | `ReactNode` | required | `SidebarSubItem` elements. |

On the collapsed rail there is no room to expand in place, so hovering or clicking the icon opens a
flyout (`data-slot="sidebar-nest-flyout"`) at the inline end with the label as its title and the
sub-items below it. Choosing a sub-item closes it; `Esc` returns focus to the icon.

### `SidebarSubItem`

`ComponentProps<"a"> & { active?: boolean }`. `active` sets `aria-current="page"` and the selected background.

### `SidebarExpandedOnly`

`({ children }: { children: ReactNode }) => ReactElement | null`: renders children only when the sidebar is
expanded (always in the mobile sheet). Use it for text-only rows such as a storage meter.

### `SidebarStatus`

The service status line at the foot of the sidebar, usually a link to your status page. Extends
`Omit<ComponentProps<"a">, "children">`.

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `tone?` | `"success" \| "warning" \| "danger" \| "info"` | `"success"` | The dot's colour. Anything but success pulses (not under reduced motion). |
| `children` | `string` | required | The status in words, e.g. "All systems normal". On the rail only the dot shows, and this becomes its tooltip and accessible name. |

The words carry the meaning; the dot is decoration (`aria-hidden`). Never ship a dot without text.

### `AppBreadcrumbs`, `AppCrumb`

The path for top navigation: organisation / project / environment, each with its own switcher.
`AppBreadcrumbs` is `ComponentProps<"nav">` with a default `aria-label` of "Breadcrumb" / "المسار";
it renders an `<ol>` with "/" separators. Below md only the last crumb shows.

`AppCrumb`:

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `children` | `ReactNode` | required | The name. |
| `icon?` | `ReactNode` | none | An avatar, mark or icon before the name. |
| `tag?` | `ReactNode` | none | A short uppercase badge after the name: the plan ("Free"), the environment ("Production"). |
| `tagVariant?` | `Badge` variant | `"outline"` | E.g. `"warning"` for production. |
| `href?` | `string` | none | Links the name. Ignored when `current`. |
| `current?` | `boolean` | `false` | The last step: not a link, `aria-current="page"`. |
| `menu?` | `ReactNode` | none | `DropdownMenuItem`s for the ⇅ switcher beside the name. No `menu`, no switcher. |
| `menuLabel?` | `string` | "Switch {name}" / "تبديل {name}" | The switcher's accessible name. Set it when `children` is not a string. |
| `className?` | `string` | none | Classes for the crumb. |

For the sidebar frame, keep using [`Breadcrumb`](https://docs.nasaqui.com/components/breadcrumb) and
[`WorkspaceSwitcher`](https://docs.nasaqui.com/components/workspace-switcher); `AppCrumb` is for the header path.

### `AppNav`, `AppNavItem`

Section tabs under the header. Place `AppNav` right after `AppHeader`. From md up it is a row of tabs
that scrolls sideways when it doesn't fit.

**Below md it becomes a bottom tab bar** within thumb reach, with an icon over a label. The first
`mobileItems` items sit on the bar, and the rest open from **More** in a bottom `Drawer`. Choosing a
link closes the drawer. When the current page is in the drawer, More shows as active. The shell pads
its bottom on phones so the bar never covers the page or the `AppFooter`, and the bar respects the
safe-area inset.

`AppNav` extends `ComponentProps<"nav">`:

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `mobileItems?` | `number` | `4` | How many items fit on the phone bar. With exactly one more item than this, all of them show and there is no More. |
| `moreLabel?` | `string` | "More" / "المزيد" | Label and drawer title of the overflow button. |
| `icons?` | `"always" \| "mobile"` | `"always"` | `mobile` makes the desktop tabs text-only; the phone bar and its drawer keep the icons. |
| `aria-label?` | `string` | "Sections" / "الأقسام" | Names both the tab row and the bottom bar. |

`AppNavItem` extends `ComponentProps<"a">`:

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `active?` | `boolean` | `false` | `aria-current="page"`, stronger text and a solid underline (never colour alone). |
| `icon?` | `ReactNode` | none | Leading icon: 16px in the tab row, 20px on the phone bar and in the drawer. **Give every item one**, because the bottom bar relies on it. |
| `trailing?` | `ReactNode` | none | A count or a `Badge` ("New") after the label. On the phone bar it becomes a dot on the icon; in the drawer it shows in full. |

These are links, not ARIA tabs: each one is a page. For tabs that swap content in place, use `Tabs`.

### `AppPageHeader`

The page's title row. Extends `Omit<ComponentProps<"div">, "title">`.

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `title` | `ReactNode` | required | Rendered as the page's `<h1>`. One per page. |
| `description?` | `ReactNode` | none | A line under the title: the URL, the owner, a count. |
| `icon?` | `ReactNode` | none | An avatar or mark before the title. |
| `actions?` | `ReactNode` | none | Controls at the inline end: a time range (`ToggleGroup`), filters, then the one primary action last. Wraps under the title on narrow screens. |

### `AppFooter`, `AppFooterLink`

The quiet last row of a top-navigation app. `AppFooter` is `ComponentProps<"footer">` plus
`start?: ReactNode` (copyright or status, at the inline start); its children are the links, at the
inline end. `AppFooterLink` is a styled `<a>`. Don't use it with the sidebar frame: the sidebar
footer already holds support, docs and status.

### Hooks and constants

| Export | Signature | Description |
| --- | --- | --- |
| `useAppShell` | `() => { collapsed; setCollapsed(c); mobileOpen; setMobileOpen(o); toggleSidebar(); commandOpen; setCommandOpen(o) }` | Shell state. Throws outside `<AppShell>`. |
| `useOptionalAppShell` | `() => ShellContextValue \| null` | Same, but `null` outside a shell. Use in components that also work standalone. |
| `useSidebarCollapsed` | `() => boolean` | `true` only for the desktop rail; always `false` in the mobile sheet. Use it in custom sidebar parts. |
| `SIDEBAR_STORAGE_KEY` | `"nasaq-sidebar"` | `localStorage` key for `"collapsed"` / `"expanded"`. |
| `SIDEBAR_WIDTH_KEY` | `"nasaq-sidebar-width"` | `localStorage` key for the width in px. |

`setCollapsed` in `useAppShell` persists only when `collapsed` is not controlled.

## Examples

### Full sidebar: workspace, search, nav, user

```tsx
import {
  AppShell, DropdownMenuItem, Sidebar, SidebarBrand, SidebarContent, SidebarFooter, SidebarGroup, SidebarHeader,
  SidebarItem, SidebarNest, SidebarSubItem, SearchTrigger, UserMenu, WorkspaceSwitcher,
} from "@fadymondy/nasaq/web";
import { FolderKanban, Inbox, Settings } from "lucide-react";
import { useState } from "react";

const workspaces = [
  { id: "3x1", name: "3x1", description: "Pro · 12 members" },
  { id: "personal", name: "Fady Mondy", description: "Personal" },
];

function AppSidebar() {
  const [workspace, setWorkspace] = useState("3x1");
  return (
    <Sidebar aria-label="Main">
      <SidebarHeader>
        <SidebarBrand href="/" />
        <WorkspaceSwitcher workspaces={workspaces} value={workspace} onValueChange={setWorkspace} />
        <SearchTrigger />
      </SidebarHeader>
      <SidebarContent>
        <SidebarGroup>
          <SidebarItem href="/inbox" icon={<Inbox />} trailing="12">Inbox</SidebarItem>
          <SidebarNest label="Projects" icon={<FolderKanban />} active>
            <SidebarSubItem href="/projects">All projects</SidebarSubItem>
            <SidebarSubItem href="/projects/active" active>Active</SidebarSubItem>
          </SidebarNest>
        </SidebarGroup>
      </SidebarContent>
      <SidebarFooter>
        <UserMenu user={{ name: "Fady Mondy", email: "hello@example.com" }} onSignOut={() => {}}>
          <DropdownMenuItem><Settings />Settings</DropdownMenuItem>
        </UserMenu>
      </SidebarFooter>
    </Sidebar>
  );
}

export const Root = ({ children }: { children: React.ReactNode }) => <AppShell sidebar={<AppSidebar />}>{children}</AppShell>;
```

### Controlled rail (your own persistence)

```tsx
import { AppShell } from "@fadymondy/nasaq/web";
import { useState } from "react";

export function Root({ sidebar, children }: { sidebar: React.ReactNode; children: React.ReactNode }) {
  const [collapsed, setCollapsed] = useState(true);
  return (
    <AppShell sidebar={sidebar} collapsed={collapsed} onCollapsedChange={setCollapsed} resizable={false}>
      {children}
    </AppShell>
  );
}
```

### Custom part that reacts to the rail

```tsx
import { SidebarExpandedOnly, useSidebarCollapsed } from "@fadymondy/nasaq/web";

export function StorageMeter() {
  const collapsed = useSidebarCollapsed();
  return (
    <SidebarExpandedOnly>
      <p className="px-2 text-caption text-muted-foreground" data-rail={collapsed}>
        4.2 GB of 10 GB
      </p>
    </SidebarExpandedOnly>
  );
}
```

### Arabic copy

```tsx
import { AppShell, SidebarItem, Sidebar, SidebarTrigger, AppHeader } from "@fadymondy/nasaq/web";
import { Inbox } from "lucide-react";

export const Ar = () => (
  <AppShell sidebar={<Sidebar aria-label="التنقل الرئيسي"><SidebarItem href="#" icon={<Inbox />} tooltip="الوارد">الوارد</SidebarItem></Sidebar>} resizeLabel="تغيير عرض الشريط الجانبي">
    <AppHeader>
      <SidebarTrigger label="إظهار/إخفاء الشريط الجانبي" />
    </AppHeader>
  </AppShell>
);
```

### Inset panel with support, docs and status

```tsx
<AppShell
  variant="inset"
  sidebar={
    <Sidebar>
      {/* SidebarHeader, SidebarContent… */}
      <SidebarFooter>
        <SidebarItem href="/support" icon={<LifeBuoy />}>Support</SidebarItem>
        <SidebarItem href="/docs" icon={<BookOpen />}>Documentation</SidebarItem>
        <SidebarStatus href="https://status.example.com">All systems normal</SidebarStatus>
        <UserMenu user={user} onSignOut={signOut} />
      </SidebarFooter>
    </Sidebar>
  }
>
  <AppHeader>
    <SidebarTrigger />
  </AppHeader>
  <AppMain>{children}</AppMain>
</AppShell>
```

### Top navigation: path, tabs, title row, footer

```tsx
<AppShell>
  <AppHeader className="gap-3">
    <a href="/" aria-label="Home"><ProductMark size={22} title="" /></a>
    <AppBreadcrumbs>
      <AppCrumb href="/acme" icon={<Avatar name="Acme" size="xs" />} tag="Free"
        menu={orgs.map((o) => <DropdownMenuItem key={o.id}>{o.name}</DropdownMenuItem>)}>
        Acme
      </AppCrumb>
      <AppCrumb href="/acme/shop" menu={projectItems}>shop</AppCrumb>
      <AppCrumb current icon={<GitBranch />} tag="Production" tagVariant="warning" menu={branchItems}>
        main
      </AppCrumb>
    </AppBreadcrumbs>
    <div className="ms-auto flex items-center gap-2">
      <SearchTrigger className="hidden w-52 lg:flex" />
      <SearchTrigger variant="icon" className="lg:hidden" />
      <UserMenu variant="avatar" user={user} onSignOut={signOut} />
    </div>
  </AppHeader>
  <AppNav>
    {/* Phones: Overview…Logs on the bottom bar, Usage and Settings under More. */}
    <AppNavItem href="/acme/shop" icon={<LayoutGrid />} active>Overview</AppNavItem>
    <AppNavItem href="/acme/shop/deployments" icon={<CloudUpload />}>Deployments</AppNavItem>
    <AppNavItem href="/acme/shop/resources" icon={<Server />}>Resources</AppNavItem>
    <AppNavItem href="/acme/shop/logs" icon={<ScrollText />} trailing={<Badge variant="accent">New</Badge>}>Logs</AppNavItem>
    <AppNavItem href="/acme/shop/usage" icon={<ChartColumn />}>Usage</AppNavItem>
    <AppNavItem href="/acme/shop/settings" icon={<Settings />}>Settings</AppNavItem>
  </AppNav>
  <AppMain>
    <div className="mx-auto flex max-w-5xl flex-col gap-6">
      <AppPageHeader
        title="shop"
        description={<bdi dir="ltr">shop.example.com</bdi>}
        actions={
          <>
            <ToggleGroup value={range} onValueChange={setRange} aria-label="Range">…</ToggleGroup>
            <Button variant="primary" size="sm">Deploy</Button>
          </>
        }
      />
      {children}
    </div>
  </AppMain>
  <AppFooter start="© 2026 Acme">
    <AppFooterLink href="/status">Status</AppFooterLink>
    <AppFooterLink href="/docs">Docs</AppFooterLink>
  </AppFooter>
</AppShell>
```

An empty page in either frame: one `EmptyState` with an icon, one sentence and one button.

## Accessibility

| Key | Action |
| --- | --- |
| `⌘B` / `Ctrl+B` | Toggle the rail (desktop) or the sheet (mobile). Works anywhere on the page. |
| `Tab` (first) | Reveals "Skip to content", which moves focus to `AppMain` (`id="app-main"`, `tabIndex={-1}`). Keep that id unless you also render your own skip link. |
| `Tab` | Moves through sidebar items in DOM order; the resize handle is focusable. |
| `←` / `→` on the resize handle | Shrink / grow by 16px (`Shift` = 64px). Reversed in RTL so it follows the visual edge. At the minimum, shrink collapses to the rail; grow from the rail expands to `minWidth`. |
| `Home` / `End` on the resize handle | Minimum / maximum width. |
| `Enter` on the resize handle | Reset to `defaultWidth`. Double-click does the same. |
| `Esc` | Closes the mobile sheet. |

- `SidebarItem` sets `aria-current="page"` when `active`. The gold rule is decorative; the state is also carried by weight and the attribute.
- On the rail each item gets `aria-label` from `tooltip`, its string children, or the `aria-label` prop, plus a tooltip on hover/focus. A collapsed `SidebarGroup` is `role="group"` named by its `label` when that is a string (the label row is hidden on the rail).
- The resize handle is `role="separator"` with `aria-orientation="vertical"`, `aria-valuemin/max/now` (`now` is the current width, the stored one while collapsed) and a label. On the rail the handle is `aria-hidden` and not focusable.
- Top navigation: `AppBreadcrumbs` and `AppNav` are separate named `<nav>` landmarks ("Breadcrumb", "Sections"); the current crumb and tab carry `aria-current="page"`. Each ⇅ switcher is a menu button named "Switch {name}". `AppFooter` is the `contentinfo` landmark.
- Only one of the tab row and the phone bar is rendered visibly at a time, so there is only ever one "Sections" landmark. More is a dialog trigger. The drawer has a "More" title, traps focus and closes with Esc, a swipe down or a tap on a link.
- `SidebarStatus` on the rail keeps its words as the accessible name and tooltip; its dot is `aria-hidden`.
- **Localise:** `resizeLabel`, `SidebarTrigger.label`, group labels, item text and `tooltip`. Built in and localised by provider locale: the sheet's screen-reader title ("Navigation" / "التنقل"), the `Sidebar` label, and the trigger label and tooltip. Blocked `localStorage` is tolerated: the state simply is not remembered.

## RTL & i18n

- The sidebar sits at the inline start, so it is on the right in RTL. Borders, resize handle, active rule, nest indent and chevrons all use logical properties and mirror.
- The chevrons and panel icon are `directional` icons; the mobile sheet slides in from the correct side.
- The resize drag and keyboard arrows read the computed direction, so dragging toward the page always grows the sidebar.
- In top navigation the path reads from the inline start (organisation on the right in Arabic), the tab row scrolls from the start, the phone bar runs right to left with More at the far left, and footer links sit at the inline end.
- Trailing counts use `tabular-nums`; wrap Latin numerals or keys inside Arabic text in `<bdi dir="ltr">`.

## Styling & tokens

- Surfaces: page `bg-background`, sidebar `bg-sidebar` with `border-e border-border`, header `bg-background/95`.
- Item states: hover `bg-nq-hover`, active `bg-nq-selected` with an `nq-accent` rule, focus ring `nq-focus`.
- Sizes come from tokens: `--nq-nav-row`, `--nq-control`, `--nq-touch-min`, `--nq-sidebar-width` (set on the aside; you can read it in CSS).

### Density

The whole frame follows the provider's density (`<NasaqProvider density="…">`, which sets `data-density` on `<html>`).
Density changes sizes, never hierarchy or the type scale.

| | comfortable | compact (default) | dense |
| --- | --- | --- | --- |
| Header height (`--nq-header`) | 56 | 48 | 40 |
| Nav row (`--nq-nav-row`) | 36 | 32 | 28 |
| Workspace / account trigger (nav row + 12) | 48 | 44 | 40 |
| Sidebar padding and gaps (`--nq-shell-pad`) | 16 | 12 | 8 |
| Page padding (`--nq-page-pad`) | 28 | 24 | 16 |
| Collapsed rail (`--nq-control` + 2 × shell pad) | 72 | 56 | 44 |

Use comfortable for portals and marketing-adjacent screens, compact for apps, and dense for ops consoles. On touch
devices, items keep a 44px minimum (`--nq-touch-min`) whatever the density. There is no per-shell density prop.
Menus and the mobile sheet render in portals and follow the document, so set density once on the provider.
- Target with `[data-slot=app-sidebar][data-collapsed]`, `[data-resizing]`, `[data-slot=sidebar-item]`.
- Extend with `className` on any part. Do not override colours with raw hex.

## Do / Don't

- **Do** put `SidebarTrigger` first in `AppHeader`, and `SidebarBrand` first in `SidebarHeader`, then the workspace switcher.
- **Do** keep the active marker as the gold accent rule plus weight (colour is never the only cue).
- **Do** use whitespace and headings to group; the shell is flat by default (see `docs/foundations/LAYOUT.md`).
- **Don't** wrap page content in a card just to fill space.
- **Don't** add a second `AppShell` or `CommandProvider`; nested providers reuse the outer registry.
- **Do** pick one frame per app: a sidebar for many sections, top navigation for a few sections under one resource.
- **Do** end `AppPageHeader` actions with the single primary action.
- **Don't** hard-code colours, and don't move settings into the sidebar footer; they live in the user menu. Support, docs and `SidebarStatus` may sit above it.
- **Don't** render `SidebarTrigger` or `AppFooter` in the wrong frame: no trigger without a sidebar, no footer with one.

## Related

- [sidebar-layout](https://docs.nasaqui.com/components/sidebar-layout): user reorder/hide of sidebar items
- [workspace-switcher](https://docs.nasaqui.com/components/workspace-switcher) · [user-menu](https://docs.nasaqui.com/components/user-menu) · [breadcrumb](https://docs.nasaqui.com/components/breadcrumb)
- [command-palette](https://docs.nasaqui.com/components/command-palette) · [commands](https://docs.nasaqui.com/components/commands)
- [product-switcher](https://docs.nasaqui.com/components/product-switcher) · [switchers](https://docs.nasaqui.com/components/switchers)

## Lab

https://docs.nasaqui.com/?path=/docs/components-layout-pages-app-shell--docs

Frames: `Inset` (rounded panel, support/docs/status footer), `Text-only on desktop` and its mobile sheet, `Top navigation`, `Top navigation, empty page`, `Top navigation, mobile` and `Top navigation, text-only tabs`.

## Code

### React

```tsx
import {
  AppHeader,
  AppMain,
  AppShell,
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbList,
  BreadcrumbPage,
  Sidebar,
  SidebarBrand,
  SidebarContent,
  SidebarGroup,
  SidebarHeader,
  SidebarItem,
  SidebarTrigger,
} from "@fadymondy/nasaq/web";
import { Inbox, LayoutDashboard } from "lucide-react";

function AppSidebar() {
  return (
    <Sidebar>
      <SidebarHeader>
        <SidebarBrand href="/" />
      </SidebarHeader>
      <SidebarContent>
        <SidebarGroup>
          <SidebarItem href="/" icon={<LayoutDashboard />} active>
            Dashboard
          </SidebarItem>
          <SidebarItem href="/inbox" icon={<Inbox />} trailing="12">
            Inbox
          </SidebarItem>
        </SidebarGroup>
      </SidebarContent>
    </Sidebar>
  );
}

export function Layout({ children }: { children: React.ReactNode }) {
  return (
    <AppShell sidebar={<AppSidebar />}>
      <AppHeader>
        <SidebarTrigger />
        <Breadcrumb>
          <BreadcrumbList>
            <BreadcrumbItem>
              <BreadcrumbPage>Dashboard</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>
      </AppHeader>
      <AppMain>{children}</AppMain>
    </AppShell>
  );
}
```

### shadcn

```tsx
import { AppHeader, AppMain, AppShell, Sidebar, SidebarBrand, SidebarContent, SidebarGroup, SidebarHeader, SidebarItem, SidebarTrigger } from "@/components/ui/app-shell";
import { Breadcrumb, BreadcrumbItem, BreadcrumbList, BreadcrumbPage } from "@/components/ui/breadcrumb";
import { Inbox, LayoutDashboard } from "lucide-react";

function AppSidebar() {
  return (
    <Sidebar>
      <SidebarHeader>
        <SidebarBrand href="/" />
      </SidebarHeader>
      <SidebarContent>
        <SidebarGroup>
          <SidebarItem href="/" icon={<LayoutDashboard />} active>
            Dashboard
          </SidebarItem>
          <SidebarItem href="/inbox" icon={<Inbox />} trailing="12">
            Inbox
          </SidebarItem>
        </SidebarGroup>
      </SidebarContent>
    </Sidebar>
  );
}

export function Layout({ children }: { children: React.ReactNode }) {
  return (
    <AppShell sidebar={<AppSidebar />}>
      <AppHeader>
        <SidebarTrigger />
        <Breadcrumb>
          <BreadcrumbList>
            <BreadcrumbItem>
              <BreadcrumbPage>Dashboard</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>
      </AppHeader>
      <AppMain>{children}</AppMain>
    </AppShell>
  );
}
```

### Vue

```vue
<script setup lang="ts">
import { Folder, Home, Inbox, Settings } from "lucide-vue-next";
import {
  NqAppBreadcrumbs,
  NqAppCrumb,
  NqAppHeader,
  NqAppMain,
  NqAppPageHeader,
  NqAppShell,
  NqSidebar,
  NqSidebarBrand,
  NqSidebarContent,
  NqSidebarFooter,
  NqSidebarGroup,
  NqSidebarHeader,
  NqSidebarItem,
  NqSidebarNest,
  NqSidebarStatus,
  NqSidebarSubItem,
  NqSidebarTrigger,
} from "@fadymondy/nasaq/vue";
</script>

<template>
  <NqAppShell class="min-h-96">
    <template #sidebar>
      <NqSidebar>
        <NqSidebarHeader><NqSidebarBrand /></NqSidebarHeader>
        <NqSidebarContent>
          <NqSidebarGroup label="Workspace">
            <NqSidebarItem active href="#"><template #icon><Home /></template>Overview</NqSidebarItem>
            <NqSidebarItem href="#"><template #icon><Inbox /></template>Inbox<template #trailing>3</template></NqSidebarItem>
            <NqSidebarNest label="Projects">
              <template #icon><Folder /></template>
              <NqSidebarSubItem href="#">Website</NqSidebarSubItem>
              <NqSidebarSubItem href="#">Mobile app</NqSidebarSubItem>
            </NqSidebarNest>
          </NqSidebarGroup>
        </NqSidebarContent>
        <NqSidebarFooter>
          <NqSidebarItem href="#"><template #icon><Settings /></template>Settings</NqSidebarItem>
          <NqSidebarStatus href="#">All systems normal</NqSidebarStatus>
        </NqSidebarFooter>
      </NqSidebar>
    </template>
    <NqAppHeader>
      <NqSidebarTrigger />
      <NqAppBreadcrumbs>
        <NqAppCrumb href="#">Acme</NqAppCrumb>
        <NqAppCrumb current>Website</NqAppCrumb>
      </NqAppBreadcrumbs>
    </NqAppHeader>
    <NqAppMain>
      <NqAppPageHeader title="Overview" description="What happened in the last 7 days." />
    </NqAppMain>
  </NqAppShell>
</template>
```

### Blade

```blade
<x-nq::app-shell class="min-h-96">
    <x-slot:sidebar>
        <x-nq::app-shell.sidebar>
            <x-nq::app-shell.sidebar-header><x-nq::app-shell.sidebar-brand /></x-nq::app-shell.sidebar-header>
            <x-nq::app-shell.sidebar-content>
                <x-nq::app-shell.sidebar-group label="Workspace">
                    <x-nq::app-shell.sidebar-item :active="true" href="#"><x-slot:icon><x-lucide-house /></x-slot:icon> Overview</x-nq::app-shell.sidebar-item>
                    <x-nq::app-shell.sidebar-item href="#"><x-slot:icon><x-lucide-inbox /></x-slot:icon> Inbox<x-slot:trailing>3</x-slot:trailing></x-nq::app-shell.sidebar-item>
                    <x-nq::app-shell.sidebar-nest label="Projects">
                        <x-slot:icon><x-lucide-folder /></x-slot:icon>
                        <x-nq::app-shell.sidebar-sub-item href="#">Website</x-nq::app-shell.sidebar-sub-item>
                        <x-nq::app-shell.sidebar-sub-item href="#">Mobile app</x-nq::app-shell.sidebar-sub-item>
                    </x-nq::app-shell.sidebar-nest>
                </x-nq::app-shell.sidebar-group>
            </x-nq::app-shell.sidebar-content>
            <x-nq::app-shell.sidebar-footer>
                <x-nq::app-shell.sidebar-item href="#"><x-slot:icon><x-lucide-settings /></x-slot:icon> Settings</x-nq::app-shell.sidebar-item>
                <x-nq::app-shell.sidebar-status href="#">All systems normal</x-nq::app-shell.sidebar-status>
            </x-nq::app-shell.sidebar-footer>
        </x-nq::app-shell.sidebar>
    </x-slot:sidebar>
    <x-nq::app-shell.header>
        <x-nq::app-shell.sidebar-trigger />
        <x-nq::app-shell.breadcrumbs>
            <x-nq::app-shell.crumb href="#">Acme</x-nq::app-shell.crumb>
            <x-nq::app-shell.crumb :current="true">Website</x-nq::app-shell.crumb>
        </x-nq::app-shell.breadcrumbs>
    </x-nq::app-shell.header>
    <x-nq::app-shell.main>
        <x-nq::app-shell.page-header title="Overview" description="What happened in the last 7 days." />
    </x-nq::app-shell.main>
</x-nq::app-shell>

<x-nq::app-shell class="mt-6 min-h-72">
    <x-nq::app-shell.header>
        <x-nq::app-shell.breadcrumbs>
            <x-nq::app-shell.crumb href="#">Acme</x-nq::app-shell.crumb>
            <x-nq::app-shell.crumb :current="true">Billing</x-nq::app-shell.crumb>
        </x-nq::app-shell.breadcrumbs>
    </x-nq::app-shell.header>
    <x-nq::app-shell.nav :mobile-items="2">
        <x-nq::app-shell.nav-item :active="true" href="#"><x-slot:icon><x-lucide-house /></x-slot:icon> Overview</x-nq::app-shell.nav-item>
        <x-nq::app-shell.nav-item href="#"><x-slot:icon><x-lucide-credit-card /></x-slot:icon> Billing</x-nq::app-shell.nav-item>
        <x-nq::app-shell.nav-item href="#"><x-slot:icon><x-lucide-users /></x-slot:icon> Team</x-nq::app-shell.nav-item>
        <x-nq::app-shell.nav-item href="#"><x-slot:icon><x-lucide-settings /></x-slot:icon> Settings</x-nq::app-shell.nav-item>
    </x-nq::app-shell.nav>
    <x-nq::app-shell.main>
        <x-nq::app-shell.page-header title="Billing" />
    </x-nq::app-shell.main>
    <x-nq::app-shell.footer>
        <x-slot:start>Acme Inc.</x-slot:start>
        <x-nq::app-shell.footer-link href="#">Terms</x-nq::app-shell.footer-link>
    </x-nq::app-shell.footer>
</x-nq::app-shell>
```

### HTML + Alpine

```html
<div data-slot="app-shell" data-variant="plain" data-navigation="sidebar"
    x-data="nqAppShell(JSON.parse('{\u0022collapsed\u0022:false,\u0022persist\u0022:true,\u0022sidebar\u0022:true,\u0022width\u0022:256,\u0022minWidth\u0022:208,\u0022maxWidth\u0022:420}'))" x-modelable="collapsed" x-id="['nq-shell']" x-bind="root"
        class="flex bg-background text-foreground has-data-[slot=app-nav-bar]:max-md:pb-[calc(3.5rem+env(safe-area-inset-bottom))] min-h-96">
    <a href="#app-main" class="sr-only rounded-control border border-border bg-popover text-label text-foreground shadow-md focus:not-sr-only focus:fixed focus:start-3 focus:top-2 focus:z-50 focus:px-3 focus:py-2 focus-visible:outline-2 focus-visible:outline-nq-focus">Skip to content</a>
            <aside data-slot="app-sidebar"             :data-collapsed="collapsed ? '' : undefined" :data-resizing="resizing ? '' : undefined"
            style="--nq-sidebar-width: 256px" :style="{ '--nq-sidebar-width': width + 'px' }"
            class="group/sidebar sticky top-[var(--nasaq-shell-offset,0px)] hidden h-[calc(100dvh_-_var(--nasaq-shell-offset,0px))] w-(--nq-sidebar-width) shrink-0 border-e border-border bg-sidebar transition-[width] duration-200 ease-nq data-collapsed:w-[calc(var(--nq-control)+2*var(--nq-shell-pad))] data-resizing:transition-none md:block ">
            <div x-data="{ rail: true }" class="h-full overflow-hidden"><nav data-slot="sidebar" data-icons="always"
    aria-label="Main" class="flex h-full flex-col gap-shell overflow-y-auto overflow-x-hidden p-shell"><div data-slot="sidebar-header" class="flex shrink-0 flex-col gap-2"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-brand" href="/" x-bind:aria-label="(rail && collapsed) ? 'Nasaq' : null"
        class="flex h-control shrink-0 items-center gap-2 rounded-control px-2 outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span class="contents group-data-collapsed/sidebar:hidden">
            <span data-slot="product-logo" class="inline-flex items-center gap-2">
    <svg data-slot="product-mark" viewBox="0 0 100 100" width="20" height="20"  aria-hidden="true"  shape-rendering="crispEdges"  class="shrink-0">
            <g class="dark:hidden">
                            <rect x="0" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="80" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="20" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="60" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
        <g class="hidden dark:block">
                            <rect x="0" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="80" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="20" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="60" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
    </svg>
            <span dir="ltr" class="font-mono font-medium tracking-[0.14em] uppercase text-foreground" style="font-size: 12px">NASAQ</span>
    </span>
        </span>
        <span class="hidden group-data-collapsed/sidebar:contents">
            <svg data-slot="product-mark" viewBox="0 0 100 100" width="20" height="20"  aria-hidden="true"  shape-rendering="crispEdges"  class="shrink-0">
            <g class="dark:hidden">
                            <rect x="0" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="80" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="20" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="60" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
        <g class="hidden dark:block">
                            <rect x="0" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="80" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="20" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="60" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
    </svg>
        </span>
    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Nasaq</div>
    </template>
</div></div>
            <div data-slot="sidebar-content" class="-mx-1 flex min-h-0 flex-1 flex-col gap-[calc(var(--spacing-shell)+--spacing(1))] overflow-y-auto overflow-x-hidden overscroll-contain px-1 [scrollbar-width:thin]"><div data-slot="sidebar-group" role="group"  x-bind:aria-label="(rail && collapsed) ? 'Workspace' : null"         class="flex flex-col group-data-collapsed/sidebar:border-t group-data-collapsed/sidebar:border-border group-data-collapsed/sidebar:pt-3 group-data-collapsed/sidebar:first:border-0 group-data-collapsed/sidebar:first:pt-0">
                    <div class="group/label flex h-[calc(var(--spacing-nav-row)-4px)] items-center gap-1 ps-2 pe-1 group-data-collapsed/sidebar:hidden">
                <div class="min-w-0 flex-1 truncate text-caption font-medium text-muted-foreground">Workspace</div>
                            </div>
                <div class="flex flex-col gap-0.5"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"  aria-current="page"          x-bind:aria-label="(rail && collapsed) ? 'Overview' : null"         href="#" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0 bg-nq-selected font-medium text-foreground">
        <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/>
  <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Overview</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Overview</div>
    </template>
</div>
                    <div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Inbox' : null"         href="#" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <polyline points="22 12 16 12 14 15 10 15 8 12 2 12"/>
  <path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Inbox</span>
        <span class="ms-auto text-caption text-muted-foreground tabular-nums group-data-collapsed/sidebar:hidden">3</span>    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Inbox</div>
    </template>
</div>
                    <div data-slot="sidebar-nest" class="contents">
    <div data-slot="collapsible" x-data="nqCollapsible(false)" x-modelable="open" x-id="['nq-collapsible']"
    :data-open="open ? '' : undefined" :data-closed="open ? undefined : ''"
     data-closed     class="group/nest flex flex-col group-data-collapsed/sidebar:hidden">
    <button type="button" x-on:click="toggle()" x-bind:aria-expanded="open"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 ">
            <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>
</svg></span>            <span class="min-w-0 flex-1 truncate">Projects</span>
            <svg aria-hidden="true" class="ms-auto size-3.5! text-muted-foreground transition-[rotate] duration-200 ease-nq group-data-open/nest:rotate-90 rtl:-scale-x-100 rtl:group-data-open/nest:-rotate-90" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m9 18 6-6-6-6"/>
</svg>        </button>
        <div data-slot="collapsible-panel" x-ref="panel" x-nq-presence="open" :id="$id('nq-collapsible', 'panel')"
     data-closed style="display:none"     class="h-(--collapsible-panel-height) overflow-hidden transition-[height,opacity] duration-200 ease-nq motion-reduce:transition-none data-starting-style:h-0 data-starting-style:opacity-0 data-ending-style:h-0 data-ending-style:opacity-0"><div class="ms-4 mt-0.5 flex flex-col gap-0.5 border-s border-border ps-2"><a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Website</a>
                        <a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Mobile app</a></div></div>
</div>
    <div data-slot="sidebar-nest-rail" x-data="nqRailFlyout" x-id="['nq-flyout']" class="hidden group-data-collapsed/sidebar:contents">
        <button type="button" x-ref="trigger" aria-label="Projects" aria-haspopup="dialog" x-bind:aria-expanded="open"
            x-on:click="toggle()" x-on:pointerenter="hover(true)" x-on:pointerleave="hover(false)" x-bind:data-popup-open="open ? '' : undefined"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 justify-center px-0 size-control data-popup-open:bg-nq-hover data-popup-open:text-foreground ">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>
</svg>
        </button>
        <template x-teleport="body">
            <div data-slot="sidebar-nest-flyout" x-bind="popup" x-nq-presence="open" x-anchor.right-start.offset.8="$refs.trigger"
                class="z-50 w-auto min-w-44 rounded-floating border border-border bg-popover p-1 text-popover-foreground shadow-floating outline-none transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">
                <div :id="$id('nq-flyout', 'title')" class="px-2 pt-1 pb-1.5 text-caption font-medium text-muted-foreground">Projects</div>
                <div class="flex flex-col gap-0.5"><a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Website</a>
                        <a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Mobile app</a></div>
            </div>
        </template>
    </div>
</div></div>
    </div></div>
            <div data-slot="sidebar-footer" class="mt-auto flex shrink-0 flex-col gap-1 pt-2"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Settings' : null"         href="#" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"/>
  <circle cx="12" cy="12" r="3"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Settings</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Settings</div>
    </template>
</div>
                <div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-status" data-tone="success"  x-bind:aria-label="(rail && collapsed) ? 'All systems normal' : null"         href="#" class="flex h-nav-row items-center gap-2 rounded-control px-2 text-caption text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span aria-hidden="true" class="size-2 shrink-0 rounded-full bg-nq-success "></span>
        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">All systems normal</span>
    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">All systems normal</div>
    </template>
</div></div></nav></div>
                            <div role="separator" aria-orientation="vertical" aria-label="Resize sidebar"
                    aria-valuemin="208" aria-valuemax="420" aria-valuenow="256" tabindex="0"
                    data-slot="sidebar-resize-handle" x-bind="handle"
                    class="absolute inset-y-0 -end-[5px] z-20 w-[9px] cursor-col-resize touch-none outline-none after:absolute after:inset-y-0 after:start-1 after:w-0.5 after:bg-transparent after:transition-colors after:duration-150 hover:after:bg-nq-line-strong focus-visible:after:bg-nq-focus"></div>
                    </aside>
        <template x-teleport="body">
            <div data-slot="app-shell-sheet-portal">
                <div data-slot="app-shell-sheet-backdrop" x-nq-presence="mobileOpen" x-on:click="mobileOpen = false"
                    class="fixed inset-0 z-40 bg-nq-fg/15 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 md:hidden dark:bg-nq-bg/70"></div>
                <div data-slot="app-shell-sheet" role="dialog" aria-modal="true" :aria-labelledby="$id('nq-shell', 'title')" tabindex="-1"
                    x-nq-presence="mobileOpen" x-trap.noscroll="mobileOpen" x-on:keydown.escape.prevent.stop="mobileOpen = false"
                    class="fixed inset-y-0 start-0 z-50 w-[min(18rem,85vw)] border-e border-border bg-sidebar outline-none transition-[translate,opacity] duration-200 ease-nq data-ending-style:-translate-x-8 data-ending-style:opacity-0 data-starting-style:-translate-x-8 data-starting-style:opacity-0 rtl:data-ending-style:translate-x-8 rtl:data-starting-style:translate-x-8 md:hidden">
                    <h2 :id="$id('nq-shell', 'title')" class="sr-only">Navigation</h2>
                    <div x-data="{ rail: false }" class="h-full" x-on:click="if ($event.target.closest('a')) mobileOpen = false"><nav data-slot="sidebar" data-icons="always"
    aria-label="Main" class="flex h-full flex-col gap-shell overflow-y-auto overflow-x-hidden p-shell"><div data-slot="sidebar-header" class="flex shrink-0 flex-col gap-2"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-brand" href="/" x-bind:aria-label="(rail && collapsed) ? 'Nasaq' : null"
        class="flex h-control shrink-0 items-center gap-2 rounded-control px-2 outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span class="contents group-data-collapsed/sidebar:hidden">
            <span data-slot="product-logo" class="inline-flex items-center gap-2">
    <svg data-slot="product-mark" viewBox="0 0 100 100" width="20" height="20"  aria-hidden="true"  shape-rendering="crispEdges"  class="shrink-0">
            <g class="dark:hidden">
                            <rect x="0" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="80" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="20" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="60" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
        <g class="hidden dark:block">
                            <rect x="0" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="80" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="20" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="60" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
    </svg>
            <span dir="ltr" class="font-mono font-medium tracking-[0.14em] uppercase text-foreground" style="font-size: 12px">NASAQ</span>
    </span>
        </span>
        <span class="hidden group-data-collapsed/sidebar:contents">
            <svg data-slot="product-mark" viewBox="0 0 100 100" width="20" height="20"  aria-hidden="true"  shape-rendering="crispEdges"  class="shrink-0">
            <g class="dark:hidden">
                            <rect x="0" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="80" y="20" width="20" height="20" fill="#15694A" />
                            <rect x="20" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="60" y="40" width="20" height="20" fill="#15694A" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
        <g class="hidden dark:block">
                            <rect x="0" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="80" y="20" width="20" height="20" fill="#4CC495" />
                            <rect x="20" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="60" y="40" width="20" height="20" fill="#4CC495" />
                            <rect x="40" y="60" width="20" height="20" fill="#C9A227" />
                    </g>
    </svg>
        </span>
    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Nasaq</div>
    </template>
</div></div>
            <div data-slot="sidebar-content" class="-mx-1 flex min-h-0 flex-1 flex-col gap-[calc(var(--spacing-shell)+--spacing(1))] overflow-y-auto overflow-x-hidden overscroll-contain px-1 [scrollbar-width:thin]"><div data-slot="sidebar-group" role="group"  x-bind:aria-label="(rail && collapsed) ? 'Workspace' : null"         class="flex flex-col group-data-collapsed/sidebar:border-t group-data-collapsed/sidebar:border-border group-data-collapsed/sidebar:pt-3 group-data-collapsed/sidebar:first:border-0 group-data-collapsed/sidebar:first:pt-0">
                    <div class="group/label flex h-[calc(var(--spacing-nav-row)-4px)] items-center gap-1 ps-2 pe-1 group-data-collapsed/sidebar:hidden">
                <div class="min-w-0 flex-1 truncate text-caption font-medium text-muted-foreground">Workspace</div>
                            </div>
                <div class="flex flex-col gap-0.5"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"  aria-current="page"          x-bind:aria-label="(rail && collapsed) ? 'Overview' : null"         href="#" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0 bg-nq-selected font-medium text-foreground">
        <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/>
  <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Overview</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Overview</div>
    </template>
</div>
                    <div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Inbox' : null"         href="#" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <polyline points="22 12 16 12 14 15 10 15 8 12 2 12"/>
  <path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Inbox</span>
        <span class="ms-auto text-caption text-muted-foreground tabular-nums group-data-collapsed/sidebar:hidden">3</span>    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Inbox</div>
    </template>
</div>
                    <div data-slot="sidebar-nest" class="contents">
    <div data-slot="collapsible" x-data="nqCollapsible(false)" x-modelable="open" x-id="['nq-collapsible']"
    :data-open="open ? '' : undefined" :data-closed="open ? undefined : ''"
     data-closed     class="group/nest flex flex-col group-data-collapsed/sidebar:hidden">
    <button type="button" x-on:click="toggle()" x-bind:aria-expanded="open"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 ">
            <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>
</svg></span>            <span class="min-w-0 flex-1 truncate">Projects</span>
            <svg aria-hidden="true" class="ms-auto size-3.5! text-muted-foreground transition-[rotate] duration-200 ease-nq group-data-open/nest:rotate-90 rtl:-scale-x-100 rtl:group-data-open/nest:-rotate-90" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m9 18 6-6-6-6"/>
</svg>        </button>
        <div data-slot="collapsible-panel" x-ref="panel" x-nq-presence="open" :id="$id('nq-collapsible', 'panel')"
     data-closed style="display:none"     class="h-(--collapsible-panel-height) overflow-hidden transition-[height,opacity] duration-200 ease-nq motion-reduce:transition-none data-starting-style:h-0 data-starting-style:opacity-0 data-ending-style:h-0 data-ending-style:opacity-0"><div class="ms-4 mt-0.5 flex flex-col gap-0.5 border-s border-border ps-2"><a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Website</a>
                        <a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Mobile app</a></div></div>
</div>
    <div data-slot="sidebar-nest-rail" x-data="nqRailFlyout" x-id="['nq-flyout']" class="hidden group-data-collapsed/sidebar:contents">
        <button type="button" x-ref="trigger" aria-label="Projects" aria-haspopup="dialog" x-bind:aria-expanded="open"
            x-on:click="toggle()" x-on:pointerenter="hover(true)" x-on:pointerleave="hover(false)" x-bind:data-popup-open="open ? '' : undefined"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 justify-center px-0 size-control data-popup-open:bg-nq-hover data-popup-open:text-foreground ">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>
</svg>
        </button>
        <template x-teleport="body">
            <div data-slot="sidebar-nest-flyout" x-bind="popup" x-nq-presence="open" x-anchor.right-start.offset.8="$refs.trigger"
                class="z-50 w-auto min-w-44 rounded-floating border border-border bg-popover p-1 text-popover-foreground shadow-floating outline-none transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">
                <div :id="$id('nq-flyout', 'title')" class="px-2 pt-1 pb-1.5 text-caption font-medium text-muted-foreground">Projects</div>
                <div class="flex flex-col gap-0.5"><a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Website</a>
                        <a data-slot="sidebar-sub-item"  href="#" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Mobile app</a></div>
            </div>
        </template>
    </div>
</div></div>
    </div></div>
            <div data-slot="sidebar-footer" class="mt-auto flex shrink-0 flex-col gap-1 pt-2"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Settings' : null"         href="#" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"/>
  <circle cx="12" cy="12" r="3"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Settings</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Settings</div>
    </template>
</div>
                <div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-status" data-tone="success"  x-bind:aria-label="(rail && collapsed) ? 'All systems normal' : null"         href="#" class="flex h-nav-row items-center gap-2 rounded-control px-2 text-caption text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span aria-hidden="true" class="size-2 shrink-0 rounded-full bg-nq-success "></span>
        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">All systems normal</span>
    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">All systems normal</div>
    </template>
</div></div></nav></div>
                </div>
            </div>
        </template>
                <div class="flex min-w-0 flex-1 flex-col"><header data-slot="app-header" class="sticky top-0 z-30 flex h-header shrink-0 items-center gap-2 border-b border-border bg-background/95 px-3 backdrop-blur-sm md:px-4 in-data-[slot=app-shell-panel]:md:rounded-t-xl"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><button data-slot="button"
     type="button"                         aria-label="Toggle sidebar" x-on:click="toggle()" x-bind:aria-expanded="desktop ? !collapsed : mobileOpen" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 -ms-1 text-muted-foreground">
        <svg class="rtl:-scale-x-100" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="18" height="18" x="3" y="3" rx="2"/>
  <path d="M9 3v18"/>
</svg></button></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.top.offset.6="triggerEl"
            class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Toggle sidebar</div>
    </template>
</div>
        <nav data-slot="app-breadcrumbs" aria-label="Breadcrumb" class="min-w-0">
    <ol class="flex min-w-0 items-center gap-1"><li class="group/crumb flex min-w-0 items-center gap-1 max-md:not-last:hidden">
    <span aria-hidden="true" class="select-none px-0.5 text-body text-nq-line-strong group-first/crumb:hidden max-md:hidden">/</span>
    <span data-slot="app-crumb" class="flex min-w-0 items-center gap-1">
                    <a href="#" class="flex h-8 min-w-0 items-center gap-2 rounded-control px-1.5 text-label text-foreground outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus transition-colors duration-150 ease-nq hover:bg-nq-hover">
                                <span class="truncate">Acme</span>
            </a>
                            </span>
</li>
            <li class="group/crumb flex min-w-0 items-center gap-1 max-md:not-last:hidden">
    <span aria-hidden="true" class="select-none px-0.5 text-body text-nq-line-strong group-first/crumb:hidden max-md:hidden">/</span>
    <span data-slot="app-crumb" class="flex min-w-0 items-center gap-1">
                    <span  aria-current="page"  class="flex h-8 min-w-0 items-center gap-2 rounded-control px-1.5 text-label text-foreground outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">
                                <span class="truncate">Website</span>
            </span>
                            </span>
</li></ol>
</nav></header>
    <main id="app-main" tabindex="-1" data-slot="app-main" class="flex-1 px-4 py-page outline-none md:px-page"><div data-slot="app-page-header" class="flex flex-wrap items-center gap-x-4 gap-y-3">
    <div class="flex min-w-0 flex-1 items-center gap-3">
                <div class="grid min-w-0 gap-1">
            <h1 class="truncate text-h2 text-foreground">Overview</h1>
            <div class="text-body-sm text-muted-foreground">What happened in the last 7 days.</div>        </div>
    </div>
</div></main></div>
    </div>
<div data-slot="app-shell" data-variant="plain" data-navigation="top"
    x-data="nqAppShell(JSON.parse('{\u0022collapsed\u0022:false,\u0022persist\u0022:true,\u0022sidebar\u0022:false,\u0022width\u0022:256,\u0022minWidth\u0022:208,\u0022maxWidth\u0022:420}'))" x-modelable="collapsed" x-id="['nq-shell']" x-bind="root"
        class="flex bg-background text-foreground has-data-[slot=app-nav-bar]:max-md:pb-[calc(3.5rem+env(safe-area-inset-bottom))] mt-6 min-h-72">
    <a href="#app-main" class="sr-only rounded-control border border-border bg-popover text-label text-foreground shadow-md focus:not-sr-only focus:fixed focus:start-3 focus:top-2 focus:z-50 focus:px-3 focus:py-2 focus-visible:outline-2 focus-visible:outline-nq-focus">Skip to content</a>
                <div class="flex min-w-0 flex-1 flex-col"><header data-slot="app-header" class="sticky top-0 z-30 flex h-header shrink-0 items-center gap-2 border-b border-border bg-background/95 px-3 backdrop-blur-sm md:px-4 in-data-[slot=app-shell-panel]:md:rounded-t-xl"><nav data-slot="app-breadcrumbs" aria-label="Breadcrumb" class="min-w-0">
    <ol class="flex min-w-0 items-center gap-1"><li class="group/crumb flex min-w-0 items-center gap-1 max-md:not-last:hidden">
    <span aria-hidden="true" class="select-none px-0.5 text-body text-nq-line-strong group-first/crumb:hidden max-md:hidden">/</span>
    <span data-slot="app-crumb" class="flex min-w-0 items-center gap-1">
                    <a href="#" class="flex h-8 min-w-0 items-center gap-2 rounded-control px-1.5 text-label text-foreground outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus transition-colors duration-150 ease-nq hover:bg-nq-hover">
                                <span class="truncate">Acme</span>
            </a>
                            </span>
</li>
            <li class="group/crumb flex min-w-0 items-center gap-1 max-md:not-last:hidden">
    <span aria-hidden="true" class="select-none px-0.5 text-body text-nq-line-strong group-first/crumb:hidden max-md:hidden">/</span>
    <span data-slot="app-crumb" class="flex min-w-0 items-center gap-1">
                    <span  aria-current="page"  class="flex h-8 min-w-0 items-center gap-2 rounded-control px-1.5 text-label text-foreground outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">
                                <span class="truncate">Billing</span>
            </span>
                            </span>
</li></ol>
</nav></header>
    <nav data-slot="app-nav" aria-label="Sections" class="shrink-0 border-b border-border bg-background max-md:hidden">
    <div class="flex items-center gap-1 overflow-x-auto px-2 [scrollbar-width:none]"><a data-slot="app-nav-item" aria-current="page" href="#" class="relative flex h-11 shrink-0 items-center gap-2 px-2 text-body-sm whitespace-nowrap outline-none transition-colors duration-150 ease-nq hover:text-foreground [&_svg]:size-4 after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full focus-visible:outline-2 focus-visible:-outline-offset-4 focus-visible:outline-nq-focus font-medium text-foreground after:bg-foreground"><span data-slot="app-nav-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/>
  <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
</svg></span>Overview</a><a data-slot="app-nav-item"  href="#" class="relative flex h-11 shrink-0 items-center gap-2 px-2 text-body-sm whitespace-nowrap text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:text-foreground [&_svg]:size-4 after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full after:bg-transparent focus-visible:outline-2 focus-visible:-outline-offset-4 focus-visible:outline-nq-focus"><span data-slot="app-nav-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="20" height="14" x="2" y="5" rx="2"/>
  <line x1="2" x2="22" y1="10" y2="10"/>
</svg></span>Billing</a><a data-slot="app-nav-item"  href="#" class="relative flex h-11 shrink-0 items-center gap-2 px-2 text-body-sm whitespace-nowrap text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:text-foreground [&_svg]:size-4 after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full after:bg-transparent focus-visible:outline-2 focus-visible:-outline-offset-4 focus-visible:outline-nq-focus"><span data-slot="app-nav-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/>
  <path d="M16 3.128a4 4 0 0 1 0 7.744"/>
  <path d="M22 21v-2a4 4 0 0 0-3-3.87"/>
  <circle cx="9" cy="7" r="4"/>
</svg></span>Team</a><a data-slot="app-nav-item"  href="#" class="relative flex h-11 shrink-0 items-center gap-2 px-2 text-body-sm whitespace-nowrap text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:text-foreground [&_svg]:size-4 after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full after:bg-transparent focus-visible:outline-2 focus-visible:-outline-offset-4 focus-visible:outline-nq-focus"><span data-slot="app-nav-icon" class="contents"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"/>
  <circle cx="12" cy="12" r="3"/>
</svg></span>Settings</a></div>
</nav>
<nav data-slot="app-nav-bar" aria-label="Sections" class="fixed inset-x-0 bottom-0 z-30 border-t border-border bg-background/95 pb-[env(safe-area-inset-bottom)] backdrop-blur-sm md:hidden">
    <div class="flex items-stretch px-1">
        <a data-slot="app-nav-item" aria-current="page"  data-active  href="#" class="relative flex min-h-14 min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-control px-1 py-1.5 text-caption outline-none transition-colors duration-150 ease-nq hover:text-foreground [&_svg]:size-5 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus font-medium text-foreground"><span class="relative inline-flex"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/>
  <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
</svg></span><span class="max-w-full truncate">Overview</span></a><a data-slot="app-nav-item"   href="#" class="relative flex min-h-14 min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-control px-1 py-1.5 text-caption text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:text-foreground [&_svg]:size-5 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus"><span class="relative inline-flex"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="20" height="14" x="2" y="5" rx="2"/>
  <line x1="2" x2="22" y1="10" y2="10"/>
</svg></span><span class="max-w-full truncate">Billing</span></a>
                    <div data-slot="drawer" x-data="nqDrawer(false)" x-modelable="open" x-id="['nq-dialog']" class="contents">
    <button type="button" data-slot="app-nav-more" aria-haspopup="dialog" x-on:click="show()" x-bind:aria-expanded="open"                     class="relative flex min-h-14 min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-control px-1 py-1.5 text-caption text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:text-foreground [&amp;_svg]:size-5 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus ">
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="1"/>
  <circle cx="19" cy="12" r="1"/>
  <circle cx="5" cy="12" r="1"/>
</svg>                    <span class="max-w-full truncate">More</span>
                </button>
                <template x-teleport="body">
    <div data-slot="drawer-portal">
        <div data-slot="drawer-backdrop" x-nq-presence="open" x-on:click="close()" class="fixed inset-0 z-50 bg-nq-fg/10 transition-opacity duration-200 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 motion-reduce:transition-none dark:bg-nq-bg/60"></div>
        <div data-slot="drawer-content" x-bind="popup" x-nq-presence="open" x-trap.noscroll="open"
            :data-dragging="dragAttr" :style="shift"
            class="fixed inset-x-0 bottom-0 z-50 mx-auto flex max-h-[85dvh] w-full max-w-xl flex-col rounded-t-floating border border-b-0 border-border bg-popover text-popover-foreground shadow-floating outline-none transition-[translate,opacity] duration-200 ease-nq data-starting-style:translate-y-8 data-starting-style:opacity-0 data-ending-style:translate-y-8 data-ending-style:opacity-0 data-dragging:transition-none motion-reduce:transition-none">
                            <div data-slot="drawer-handle" aria-hidden="true" x-bind="handle" class="flex h-6 shrink-0 cursor-grab touch-none items-center justify-center active:cursor-grabbing">
                    <span class="h-1 w-10 rounded-full bg-nq-line-strong"></span>
                </div>
                        <div data-slot="drawer-header" class="flex flex-col gap-1 border-b border-border px-4 pb-3.5 pe-12"><h2 data-slot="drawer-title" :id="$id('nq-dialog', 'title')" class="text-label text-foreground">More</h2></div>
                    <div data-slot="drawer-body" class="min-h-0 flex-1 overflow-y-auto overscroll-contain"><div class="grid gap-0.5 pb-2" x-on:click="if ($event.target.closest('a')) close()"><a data-slot="app-nav-item"   href="#" class="flex h-11 items-center gap-3 rounded-control px-3 text-body text-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover [&_svg]:size-5 [&_svg]:text-muted-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/>
  <path d="M16 3.128a4 4 0 0 1 0 7.744"/>
  <path d="M22 21v-2a4 4 0 0 0-3-3.87"/>
  <circle cx="9" cy="7" r="4"/>
</svg><span class="min-w-0 flex-1 truncate">Team</span></a><a data-slot="app-nav-item"   href="#" class="flex h-11 items-center gap-3 rounded-control px-3 text-body text-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover [&_svg]:size-5 [&_svg]:text-muted-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"/>
  <circle cx="12" cy="12" r="3"/>
</svg><span class="min-w-0 flex-1 truncate">Settings</span></a></div></div>
                            <button type="button" data-slot="drawer-close" x-on:click="close()" aria-label="Close"
                    class="absolute end-3 top-3 inline-flex size-8 items-center justify-center rounded-control text-muted-foreground transition-colors duration-150 hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-nq-focus [&_svg]:size-4"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
</template>
</div>
            </div>
</nav>
    <main id="app-main" tabindex="-1" data-slot="app-main" class="flex-1 px-4 py-page outline-none md:px-page"><div data-slot="app-page-header" class="flex flex-wrap items-center gap-x-4 gap-y-3">
    <div class="flex min-w-0 flex-1 items-center gap-3">
                <div class="grid min-w-0 gap-1">
            <h1 class="truncate text-h2 text-foreground">Billing</h1>
                    </div>
    </div>
</div></main>
    <footer data-slot="app-footer" class="mt-auto flex shrink-0 flex-wrap items-center gap-x-6 gap-y-2 border-t border-border px-4 py-3 text-caption text-muted-foreground md:px-page">
    <div class="flex min-w-0 items-center gap-2">Acme Inc.</div>    <div class="ms-auto flex flex-wrap items-center gap-x-5 gap-y-1"><a data-slot="app-footer-link" href="#" class="rounded-xs outline-none transition-colors duration-150 ease-nq hover:text-foreground focus-visible:outline-2 focus-visible:outline-nq-focus">Terms</a></div>
</footer></div>
    </div>
```
