{
  "name": "room-shell",
  "type": "registry:ui",
  "title": "RoomShell",
  "description": "Every bench room: one floating strip (min-height 76px: eyebrow · context left, verbs right) over ONE stage panel. Rooms are not allowed bespoke anatomies.",
  "dependencies": [
    "@candlelight-ds/tokens",
    "clsx",
    "tailwind-merge"
  ],
  "files": [
    {
      "path": "components/layouts/RoomShell.tsx",
      "type": "registry:ui",
      "content": "'use client'\n\n/**\n * RoomShell — every bench room's anatomy, the performance surface's\n * containers verbatim: one floating strip (min-height 76px: eyebrow ·\n * context left, verbs right) over ONE stage panel on the black stage.\n * No deck, no console seat — a room is a single panel. Rooms are NOT\n * allowed bespoke anatomies: \"looks like the performance surface\" is a\n * fact of the import graph.\n *\n * Use when: a bench room (the shelf, the library, settings).\n * Don't use when: the instrument itself (StageShell) or list+detail\n * (SplitShell).\n */\n\nimport type { ReactNode } from 'react'\n// The law number lives in ONE home (spec §4) — import, never re-declare.\nimport { STRIP_MIN_H } from '@candlelight-ds/tokens/metrics'\nimport { cn } from '@/lib/utils'\n\ninterface RoomShellProps {\n  /** Strip left: eyebrow · context. */\n  stripLeft?: ReactNode\n  /** Strip right: the room's verbs. */\n  stripRight?: ReactNode\n  /** A full custom strip row (a toolbar room) — replaces both. */\n  strip?: ReactNode\n  /** The ambient posture (§2.6) — rooms are bench-density. */\n  density?: 'performance' | 'bench'\n  /** The main seat — usually a RoomPanel, optionally under a SheetRegion. */\n  children: ReactNode\n}\n\nexport function RoomShell({\n  stripLeft,\n  stripRight,\n  strip,\n  density = 'bench',\n  children,\n}: RoomShellProps) {\n  return (\n    <div\n      data-density={density}\n      className=\"relative flex h-full flex-col overflow-hidden bg-stage text-ink\"\n    >\n      {/* STRIP_MIN_H: the strip block every surface shares (the commit\n          key is h-12; quieter strips center in the same band). */}\n      {strip ?? (\n        <header\n          className=\"relative z-rail flex items-center justify-between gap-4 px-7 pb-2 pt-5\"\n          style={{ minHeight: STRIP_MIN_H }}\n        >\n          <div className=\"flex min-w-0 items-baseline gap-3\">{stripLeft}</div>\n          {stripRight ? (\n            <div className=\"flex shrink-0 items-center gap-2.5\">{stripRight}</div>\n          ) : null}\n        </header>\n      )}\n      <main className=\"relative z-rail min-h-0 flex-1 px-5 pb-3 pt-2\">{children}</main>\n    </div>\n  )\n}\n\n/** The eyebrow — the strip type every room shares (eyebrows are places). */\nexport function RoomEyebrow({ children }: { children: ReactNode }) {\n  return (\n    <span className=\"shrink-0 text-eyebrow uppercase tracking-eyebrow-wide text-brass/80\">\n      {children}\n    </span>\n  )\n}\n\n/** The one stage panel — the shell's panel chrome, exported for rooms.\n *  Flat surface, no identity wash: place reads through accents and\n *  words, never through washes (§2.1). */\nexport function RoomPanel({\n  children,\n  className,\n}: {\n  children: ReactNode\n  className?: string\n}) {\n  return (\n    <div\n      className={cn(\n        'relative h-full min-h-0 overflow-hidden rounded-md border border-hairline bg-surface/60 backdrop-blur-sm',\n        className\n      )}\n    >\n      {children}\n    </div>\n  )\n}\n",
      "target": "components/layouts/RoomShell.tsx"
    }
  ],
  "meta": {
    "candlelight": {
      "category": "shell",
      "gRules": [
        "C1",
        "C4",
        "C6"
      ],
      "useWhen": "A bench room — the shelf, the library, settings.",
      "dontUseWhen": "The instrument itself (StageShell) or list+detail (SplitShell).",
      "states": [
        "default strip (eyebrow + verbs)",
        "custom strip (toolbar rooms)"
      ],
      "keyboard": [],
      "acceptanceTests": [
        "'Looks like the performance surface' is a fact of the import graph — the strip grammar and panel chrome are shared exports (RoomEyebrow, RoomPanel)."
      ]
    }
  },
  "registryDependencies": [
    "utils"
  ]
}