1/*
2 * Plain admin — Tailwind entry.
3 *
4 * Auto-discovered by plain-tailwind: any package shipping a `tailwind.css`
5 * next to its `__init__.py` is auto-`@import`-ed into the user's Tailwind
6 * build. That's how the admin's `@theme` tokens, component rules, and
7 * dark-mode variant end up compiled.
8 *
9 * Build-time only — this file is not served to the browser.
10 *
11 * Layout:
12 * styles/tokens.css design tokens (light + dark) + @theme
13 * styles/base.css @layer base resets
14 * styles/components/*.css one file per UI primitive, wrapped in
15 * @scope (.plain-admin) below so
16 * `class="card"` etc. on user pages don't
17 * pick up admin styling. To add one, drop
18 * a new file in components/ with a single
19 * @layer components { … } block, then add
20 * an @import in the @scope block below.
21 * styles/admin/prose.css element-level defaults for raw HTML
22 * content inside the admin (dl/dt, prose
23 * links, table link inheritance, code/pre,
24 * native select). Self-scoped via inner
25 * `.plain-admin { … }` selector.
26 * styles/admin/nav.css pinned-nav drag-and-drop states
27 * styles/admin/scrollbar.css opt-in `.admin-scrollbar` / `.admin-scrollbar-hide`
28 * utilities themed via `--scrollbar-*`
29 *
30 * See ATTRIBUTIONS.md for credit / MIT license preservation.
31 */
32
33@import "./styles/tokens.css";
34@import "./styles/base.css";
35
36/* Safelist classes Tailwind can't see statically. Card sizes are an
37 Enum (Card.Sizes 1-4) interpolated into templates as
38 `col-span-{{ size.value }}`, which is invisible to the content scanner. */
39@source inline("col-span-{1,2,3,4}");
40
41/* Wrapped in @scope (.plain-admin) so generic class names — `.admin-card`,
42 `.admin-btn`, `.admin-nav-tab`, `.admin-scrollbar` — only style descendants of the
43 admin chrome. A user page with `class="card"` keeps its own look. */
44@scope (.plain-admin) {
45 @import "./styles/components/alert.css";
46 @import "./styles/components/badge.css";
47 @import "./styles/components/button.css";
48 @import "./styles/components/card.css";
49 @import "./styles/components/checkbox.css";
50 @import "./styles/components/collapsible.css";
51 @import "./styles/components/dialog.css";
52 @import "./styles/components/dropdown-menu.css";
53 @import "./styles/components/field.css";
54 @import "./styles/components/hovercard.css";
55 @import "./styles/components/input.css";
56 @import "./styles/components/kbd.css";
57 @import "./styles/components/label.css";
58 @import "./styles/components/popover.css";
59 @import "./styles/components/progress.css";
60 @import "./styles/components/radio.css";
61 @import "./styles/components/segmented.css";
62 @import "./styles/components/select.css";
63 @import "./styles/components/switch.css";
64 @import "./styles/components/table.css";
65 @import "./styles/components/tabs.css";
66 @import "./styles/components/textarea.css";
67 @import "./styles/components/tooltip.css";
68
69 @import "./styles/admin/nav.css";
70 @import "./styles/admin/scrollbar.css";
71}
72
73/* prose.css self-scopes via an inner `.plain-admin { … }` selector, so
74 it sits outside @scope to keep its element-level rules readable. */
75@import "./styles/admin/prose.css";