admin-lte 4.1.0 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -1
- package/README.md +23 -7
- package/dist/css/adminlte-docs.css +1 -1
- package/dist/css/adminlte-docs.css.map +1 -1
- package/dist/css/adminlte-docs.min.css +1 -1
- package/dist/css/adminlte-docs.min.css.map +1 -1
- package/dist/css/adminlte-docs.rtl.css +1 -1
- package/dist/css/adminlte-docs.rtl.css.map +1 -1
- package/dist/css/adminlte-docs.rtl.min.css +1 -1
- package/dist/css/adminlte-docs.rtl.min.css.map +1 -1
- package/dist/css/adminlte-select2.css +329 -0
- package/dist/css/adminlte-select2.css.map +1 -0
- package/dist/css/adminlte-select2.min.css +12 -0
- package/dist/css/adminlte-select2.min.css.map +1 -0
- package/dist/css/adminlte-select2.rtl.css +328 -0
- package/dist/css/adminlte-select2.rtl.css.map +1 -0
- package/dist/css/adminlte-select2.rtl.min.css +12 -0
- package/dist/css/adminlte-select2.rtl.min.css.map +1 -0
- package/dist/css/adminlte.css +332 -131
- package/dist/css/adminlte.css.map +1 -1
- package/dist/css/adminlte.min.css +2 -2
- package/dist/css/adminlte.min.css.map +1 -1
- package/dist/css/adminlte.rtl.css +332 -131
- package/dist/css/adminlte.rtl.css.map +1 -1
- package/dist/css/adminlte.rtl.min.css +2 -2
- package/dist/css/adminlte.rtl.min.css.map +1 -1
- package/dist/js/adminlte.esm.js +300 -109
- package/dist/js/adminlte.esm.js.map +1 -1
- package/dist/js/adminlte.esm.min.js +2 -2
- package/dist/js/adminlte.esm.min.js.map +1 -1
- package/dist/js/adminlte.js +302 -108
- package/dist/js/adminlte.js.map +1 -1
- package/dist/js/adminlte.min.js +2 -2
- package/dist/js/adminlte.min.js.map +1 -1
- package/dist/js/types/adminlte.d.ts +3 -1
- package/dist/js/types/base-component.d.ts +24 -0
- package/dist/js/types/color-mode.d.ts +24 -6
- package/dist/js/types/push-menu.d.ts +21 -0
- package/dist/js/types/sidebar-search.d.ts +46 -0
- package/dist/js/types/util/index.d.ts +38 -1
- package/package.json +24 -23
- package/src/scss/_app-sidebar.scss +12 -0
- package/src/scss/_ribbon.scss +75 -0
- package/src/scss/_variables.scss +28 -0
- package/src/scss/_widgets.scss +192 -0
- package/src/scss/adminlte-docs.scss +1 -1
- package/src/scss/adminlte-select2.scss +31 -0
- package/src/scss/adminlte.scss +1 -1
- package/src/scss/compat/_select2.scss +476 -0
- package/src/scss/parts/_extra-components.scss +2 -0
- package/src/ts/accessibility.ts +31 -15
- package/src/ts/adminlte.ts +7 -3
- package/src/ts/base-component.ts +30 -3
- package/src/ts/color-mode.ts +100 -20
- package/src/ts/push-menu.ts +37 -7
- package/src/ts/sidebar-search.ts +252 -0
- package/src/ts/util/index.ts +79 -15
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,63 @@ All notable changes to AdminLTE will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
8
|
+
## [4.3.1] - 2026-08-10
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Ribbons left the card corner bare.** The banner was centred on its clipping square, but the square's centre is the point *furthest* from the corner — so the banner sat too far into the card, left a large empty triangle at the corner it is supposed to cover, and had its label cut off by the clip. The banner's centre now sits on the corner's bisector at ~46% of the square's side, the proportion that leaves the label room and fills the corner, and the width is the chord across the corner rather than the square's diagonal. RTL mirrors as before.
|
|
13
|
+
- The ribbons demo uses short labels and states the constraint: the banner is clipped to the corner, so only about `64px` of it is readable at the default size. `.ribbon-lg` and `.ribbon-xl` give more room. Documented on the Miscellaneous components page.
|
|
14
|
+
|
|
15
|
+
## [4.3.0] - 2026-08-10
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **Gallery page (`pages/gallery.html`)** — a filterable media library: responsive tile grid, per-item action menus, a live result count and an empty state. It carries **no image library at all** — the tiles are a Bootstrap `.ratio` box plus `.object-fit-cover`, and the category filter is ~25 lines of page-local script, so nothing is added to `adminlte.js` and no CDN dependency is imposed on anyone who just wants the grid. A lightbox stays deliberately out of scope; it is the part that needs a dependency.
|
|
20
|
+
- **Search results page (`pages/search-results.html`)** — typed results (page / user / file / project, each with its own icon and badge) over a tabbed type filter, plus a refine panel, related searches, pagination and a worked "no results" state. The navbar search now posts to it with `name="q"` instead of `action="#"`, so the search added alongside `SidebarSearch` has a real destination.
|
|
21
|
+
- **Language menu in the app header** — a `bi-translate` dropdown listing five locales with the current one marked via `.active` + `aria-current`, and `hreflang` on each item. It is markup only, by design; the new **"A language switcher wired to a real locale"** recipe in the docs covers the four things that separate a working switcher from set dressing — real per-locale links rather than `#` plus a click handler, the locale living in the URL or a cookie rather than `localStorage` (the server has to know it *before* it renders), marking the current language for assistive tech, and serving `adminlte.rtl.css` alongside `dir="rtl"` when switching to an RTL locale.
|
|
22
|
+
- **`SidebarSearch` plugin** — a filter field above the sidebar menu (`data-lte-toggle="sidebar-search"` on an input, optional `data-lte-target` for the menu). Typing hides non-matching entries and expands whatever submenu holds a match; a group whose own name matches keeps its entire subtree, so expanding it is never a dead end. Clearing the field — `ESC`, the native clear button, or `clear()` — restores every entry *and* each submenu's previous open state, including the inline `display` Treeview's slide animation leaves behind. Entries are hidden with the `hidden` attribute rather than a class, so they leave the accessibility tree too. Fires `filtered.lte.sidebar-search` with `{ query, matches }`; both listeners are delegated on `document`, so a sidebar rendered after load needs no re-initialisation. Wired into every demo and docs page, and documented at `docs/javascript/sidebar-search.html`.
|
|
23
|
+
- **Navbar search** in the app header — a `role="search"` form with a visually-hidden label, shown from the `md` breakpoint up, posting to the new search results page.
|
|
24
|
+
- **Ribbons** (`.ribbon-wrapper` + `.ribbon`, sizes `.ribbon-lg` / `.ribbon-xl`) — the corner banner from v3, rebuilt. The wrapper clips the banner and the banner is centred on it before rotating, so the whole geometry follows one custom property (`--lte-ribbon-size`) and stays correct at every scale; the clip inherits the parent's corner radius, so it follows a rounded card instead of cutting a square out of it. Colour comes from a `.text-bg-*` utility and long labels truncate rather than breaking the shape. rtlcss mirrors both the corner and the rotation, so RTL needs no extra markup. New demo page at `UI/ribbons.html`.
|
|
25
|
+
- **Social and post widgets** (`.user-block`, `.post`, `.widget-user`, `.widget-user-2`, `.description-block`) — the profile cards and activity-feed blocks from v3, keeping their v3 class names so migrating markup works unchanged, but laid out with grid and flex rather than floats and coloured with Bootstrap utilities. `.user-block` renders avatar, name and meta from flat markup with no wrapper element. New demo page at `widgets/social.html`.
|
|
26
|
+
- **Nav tabs & pills, modal and offcanvas sections** on `UI/general.html` — the three Bootstrap components the components showcase did not yet cover.
|
|
27
|
+
- **Card and Miscellaneous documentation pages** (`docs/components/card.html`, `docs/components/miscellaneous.html`) — between them they document every AdminLTE component that ships CSS but had no reference until now: cards (anatomy, colour variants, states, tabbed cards, Sass variables), callouts, ribbons, small box, info box, timeline, the social/post widgets, progress-bar sizes, themed toasts and the image-size utilities.
|
|
28
|
+
- **Select2 compatibility theme (`dist/css/adminlte-select2.css`)** — an opt-in, **CSS-only** sheet for projects that can't drop Select2 yet. AdminLTE still bundles neither Select2 nor jQuery and nothing is added to `adminlte.css`; load this one extra stylesheet after `select2.css` and a Select2 you bring yourself inherits Bootstrap 5.3's form metrics (`.form-select-sm` / `-lg` on the original `<select>` are honoured), focus ring, `.is-invalid` / `.is-valid` states, input-group corner rounding, badge-style multi-select pills, and `data-bs-theme` dark mode — including the body-appended dropdown. It also raises the dropdown above `.modal`, which removes the usual need for `dropdownParent`. Source lives in `src/scss/compat/_select2.scss` for anyone compiling their own Sass; RTL and minified variants are generated alongside the rest of the CSS (#6097, requested by @saddam2512).
|
|
29
|
+
- **Third-party plugin replacement table** on the Migration page: every jQuery widget AdminLTE 3 bundled (Select2, DataTables, Summernote, iCheck, bootstrap-datepicker, jQuery Knob, Mapael, …) mapped to its vanilla-JS successor. The old plugin names were absent from the v4 docs entirely, so anyone searching for the plugin they knew found nothing and concluded it was unsupported.
|
|
30
|
+
- **Select2 → Tom Select API mapping**, on both the Advanced Elements demo page and the Integrations docs page: 19 options, methods and events translated one-to-one (`ajax` → `load` + `loadThrottle`, `templateResult` → `render.option`, `select2("destroy")` → `ts.destroy()`, and so on).
|
|
31
|
+
- **jsVectorMap** documented on the Integrations page as the dependency-free successor to AdminLTE 3's jQuery Mapael.
|
|
32
|
+
- **New FAQ entry, "Does AdminLTE 4 support Select2?"**, plus a pointer from the existing jQuery question to the replacement table. The Deployment asset table and the RTL page now list the optional Select2 sheet alongside the core builds, and the README's breaking-changes list links the replacement table.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- **Removed the dead `src/html/components/docs/faq.mdx`.** The docs FAQ has been rendered from the typed `sections` array in `src/html/pages/docs/faq.astro` since the accordion rewrite, and nothing imported the `.mdx` any more — but two later commits kept editing it, so those edits silently did nothing. It is the only docs `.mdx` with no importer; every other one is rendered by its matching `pages/docs/*.astro`.
|
|
37
|
+
- **The remote-data Tom Select demo in `forms/advanced.html` is now the real pattern**, not a `setTimeout` sketch: request debouncing via `loadThrottle`, in-flight cancellation via `AbortController`, and page-by-page loading through the `virtual_scroll` plugin against a 72-record stub whose `{ results, next }` response shape matches a real endpoint — swap the stub body for a single `fetch()` and it works unchanged. The single select also gained the `clear_button` plugin.
|
|
38
|
+
- **The axe gate covers 16 pages** (from 10), adding `UI/general.html`, `UI/ribbons.html`, `widgets/social.html`, `pages/gallery.html`, `pages/search-results.html` and `docs/components/miscellaneous.html`. Unit tests are up to 62 (from 51). The two new pages needed three Bootstrap-default contrast fixes the gate caught: `.text-secondary` under 4.5:1 on the tertiary page ground, the nav-tab link blue under it on the same ground (the tabs moved onto the card surface, which is the documented `.card-tabs` shape), and `.btn-outline-secondary` under it on a card footer.
|
|
39
|
+
- **Outline buttons on `UI/general.html` are demonstrated where they are legible.** The warning, info and light outline variants draw their text in a light colour that falls below 4.5:1 on a light surface — adding the page to the axe gate surfaced it. They now sit on a dark panel, with a note saying why, which is also the guidance Bootstrap gives for them.
|
|
40
|
+
- **Bundlewatch budgets raised** for the ribbon, widget and SidebarSearch additions: `adminlte.min.css` 42.5 → 43.5 kB and `adminlte.min.js` 7.5 → 8.5 kB gzip (and the matching RTL/ESM/unminified entries).
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- **Dashboard v2 linked to a page that does not exist.** Seven order-number links in `index2.html` pointed at `pages/examples/invoice.html`; the invoice page is at `pages/invoice.html`. Caught by a new link-resolution pass over every built page.
|
|
45
|
+
- **`#navigation` no longer resolves to the app header.** `ensureSkipTargets()` looked its two skip-link targets up with a single selector list each (`#navigation, nav, [role="navigation"]`), but a selector list resolves in *document order* rather than by which selector matched — so on every demo page, where the header `<nav>` precedes the sidebar menu that already carries `id="navigation"`, the header was stamped with the id a second time. That left a duplicate id in the document, pointed the "Skip to navigation" link at the header instead of the menu, and silently redirected any application code doing `document.querySelector("#navigation")` to the wrong element. An element the page already gave the id to now always wins.
|
|
46
|
+
|
|
47
|
+
## [4.2.0] - 2026-08-06
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
|
|
51
|
+
- **Advanced form pages:** `forms/advanced.html` demonstrates the recommended Tom Select and Flatpickr integrations (searchable single select, tag-style multi-select, option groups loaded on demand; date, date-time, range, and time pickers), and `forms/editors.html` demonstrates Quill 2 in both the snow (toolbar) and bubble (inline) themes. CDN assets are pinned to the versions recommended on the docs Integrations page and carry SRI hashes. Both pages are linked from the sidebar's Forms menu.
|
|
52
|
+
- **Top-nav layout demo:** `layout/top-nav.html` — a sidebar-less page whose primary navigation lives in the app-header as a plain Bootstrap `navbar-expand-lg` (collapse toggler on mobile, no PushMenu). No new CSS was needed: without an `.app-sidebar` in the markup, the `app-wrapper` grid's `auto` sidebar column collapses to zero width on its own.
|
|
53
|
+
- **Color mode: server-rendered themes, and an opt-out for applications with their own theming.** ColorMode now resolves the theme from the visitor's stored choice, then a theme the page declared itself in `<html data-bs-theme="light|dark">`, then the OS preference — so a theme rendered server-side from a cookie or a user record is no longer overwritten on load, and no longer lost the first time the OS preference changes. Applications that manage `data-bs-theme` themselves — including anyone using a custom Bootstrap theme name, which ColorMode cannot resolve — turn the module off entirely with `<html data-lte-color-mode="off">`: nothing is written on load, on a `[data-bs-theme-value]` toggle click, or when the OS preference changes, and the pre-paint snippet in `<head>` honours it too (#6084, reported by @cytech; #6093, thanks @dfsmania). The snippet now flags the values it resolves itself with `data-lte-theme-resolved`, so a computed theme is never mistaken for one the page declared.
|
|
54
|
+
- **`initialize()` / `teardown()` lifecycle API for client-side rendered layouts:** frameworks that build the layout after `DOMContentLoaded` into a persistent `<body>` (GWT and similar widget toolkits) can call `adminlte.initialize()` once the layout is attached — it tears down the previous cycle's listeners and re-runs every plugin's initialisation against the current DOM, and is safe to call repeatedly (#6083, thanks @themarioga). `teardown()` is the inverse, for apps that unmount the layout. Re-initialisation was hardened along the way: the accessibility module's per-field `invalid` listeners no longer stack across cycles, an `initialize()` call made while the document is still loading no longer suppresses the initial `DOMContentLoaded` pass, and calling `initialize()` from inside a lifecycle callback no longer recurses.
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- **Dev dependencies refreshed to their latest releases**, including two majors: `eslint-plugin-astro` 2 → 3 and `eslint-plugin-unicorn` 72 → 73, whose new `single-line-block-comment-style` rule prompted converting four one-line banner comments in `src/ts/util/index.ts` to line comments. Also Astro 7.1.6, ESLint 10.8, typescript-eslint 8.66, Sass 1.102, Rollup 4.62.4, Terser 5.49.2, PostCSS 8.5.25, happy-dom 20.11.1, `@astrojs/mdx` 7.0.5, plus concurrently, fs-extra and globals. TypeScript stays on 6.0.3: 7.0 has shipped, but both `typescript-eslint` (peer `>=4.8.4 <6.1.0`) and `@astrojs/check` (peer `^5 || ^6`) still cap it, so installing it fails dependency resolution outright. Nothing in `dist/` changed as a result. Supersedes #6085–#6092.
|
|
59
|
+
- Component docstrings corrected in `base-component.ts` and `push-menu.ts` (#6082, thanks @dfsmania), the `adminlte-docs.scss` banner is now version-synced by `npm version` along with the other source banners, and the README's screenshots were downscaled to WebP for faster cold-cache loads.
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- **A sidebar rendered collapsed no longer springs open on load:** a page shipping `<body class="sidebar-collapse">` had that state overwritten by PushMenu's responsive pass during initialisation, so a deliberately collapsed sidebar expanded itself on wide screens. The responsive pass now runs only when the sidebar was not already collapsed in the markup (#6076, thanks @dfsmania).
|
|
64
|
+
- **The Color Mode docs page ran two switchers at once:** `docs/color-mode.html` still carried the pre-4.1 inline toggler, which bound its own handlers to the same `[data-bs-theme-value]` buttons as the bundled module and persisted to a different `localStorage` key (`theme` instead of `lte-theme`). It has been removed — the page now uses the shipped ColorMode like every other page.
|
|
9
65
|
|
|
10
66
|
## [4.1.0] - 2026-07-02
|
|
11
67
|
|
package/README.md
CHANGED
|
@@ -19,10 +19,10 @@ large desktops, and it's MIT-licensed.
|
|
|
19
19
|
|
|
20
20
|
<p align="center">
|
|
21
21
|
<a href="https://adminlte.io/themes/v4/">
|
|
22
|
-
<img alt="AdminLTE 4 dashboard — light mode" src=".github/assets/dashboard-light.
|
|
22
|
+
<img alt="AdminLTE 4 dashboard — light mode" src=".github/assets/dashboard-light.webp" width="49%">
|
|
23
23
|
</a>
|
|
24
24
|
<a href="https://adminlte.io/themes/v4/">
|
|
25
|
-
<img alt="AdminLTE 4 dashboard — dark mode" src=".github/assets/dashboard-dark.
|
|
25
|
+
<img alt="AdminLTE 4 dashboard — dark mode" src=".github/assets/dashboard-dark.webp" width="49%">
|
|
26
26
|
</a>
|
|
27
27
|
</p>
|
|
28
28
|
|
|
@@ -113,6 +113,21 @@ The v4 line is a ground-up rewrite on Bootstrap 5.3 with **no jQuery**: 18 new d
|
|
|
113
113
|
a documentation overhaul, and major dependency upgrades. See the
|
|
114
114
|
[CHANGELOG](CHANGELOG.md) for full details.
|
|
115
115
|
|
|
116
|
+
### New in 4.3
|
|
117
|
+
|
|
118
|
+
- **Sidebar search** — a new `SidebarSearch` plugin filters the menu as you type, expanding
|
|
119
|
+
whatever submenu holds a match and restoring the menu exactly as it was when cleared.
|
|
120
|
+
Paired with a navbar search in the app header.
|
|
121
|
+
- **Ribbons** — corner banners (`.ribbon-wrapper` + `.ribbon`) in three sizes, mirrored
|
|
122
|
+
automatically in RTL, with the clip following the card's corner radius.
|
|
123
|
+
- **Social & post widgets** — `.user-block`, `.post`, `.widget-user`, `.widget-user-2` and
|
|
124
|
+
`.description-block`, laid out with grid and flex.
|
|
125
|
+
- **Three new demo pages** — Gallery (filterable media library, no image library required),
|
|
126
|
+
Search Results (typed results with a refine panel), and Ribbons.
|
|
127
|
+
- **Nav tabs, modals and offcanvas** added to the General UI Elements showcase.
|
|
128
|
+
- **Card and Miscellaneous docs pages**, plus a language switcher recipe — every component
|
|
129
|
+
that ships CSS now has a reference page.
|
|
130
|
+
|
|
116
131
|
<details>
|
|
117
132
|
<summary>Highlights</summary>
|
|
118
133
|
|
|
@@ -128,7 +143,7 @@ a documentation overhaul, and major dependency upgrades. See the
|
|
|
128
143
|
|
|
129
144
|
- New pages: Getting Started, Customization & Theming, RTL Support, Migration from v3, Layout Blueprint, Recipes, Deployment & Performance, Recommended Integrations, JavaScript Plugins Overview
|
|
130
145
|
- Rewritten Introduction with four labelled install paths (CDN / npm / source / Composer)
|
|
131
|
-
- FAQ rebuilt with hero, live search, section chips, and an accordion of
|
|
146
|
+
- FAQ rebuilt with hero, live search, section chips, and an accordion of 23 questions
|
|
132
147
|
- Split sidebar navigation: dashboard demo and docs each have their own nav
|
|
133
148
|
|
|
134
149
|
**Major dependency upgrades**
|
|
@@ -145,6 +160,7 @@ a documentation overhaul, and major dependency upgrades. See the
|
|
|
145
160
|
- Data attributes: `data-toggle` → `data-bs-toggle`, `data-widget="pushmenu"` → `data-lte-toggle="sidebar"`, `data-widget="treeview"` → `data-lte-toggle="treeview"`
|
|
146
161
|
- Dark mode: `.dark-mode` body class → `data-bs-theme="dark"` attribute (Bootstrap 5.3 native)
|
|
147
162
|
- jQuery no longer required; plugins are vanilla TypeScript
|
|
163
|
+
- The bundled `plugins/` folder is gone — every v3 jQuery widget has a documented vanilla-JS successor ([replacement table](https://adminlte.io/themes/v4/docs/migration.html#third-party-plugin-replacements): Select2 → Tom Select, DataTables → Tabulator, Summernote → Quill, …)
|
|
148
164
|
|
|
149
165
|
See the dedicated [Migration from v3](https://adminlte.io/themes/v4/docs/migration.html) guide.
|
|
150
166
|
|
|
@@ -161,7 +177,7 @@ including editions built for the same stacks AdminLTE integrates with:
|
|
|
161
177
|
<tr>
|
|
162
178
|
<td align="center" width="50%">
|
|
163
179
|
<a href="https://dashboardpack.com/theme-details/admindek-html/?utm_source=github&utm_medium=readme&utm_campaign=adminlte">
|
|
164
|
-
<img src=".github/assets/premium/admindek.
|
|
180
|
+
<img src=".github/assets/premium/admindek.webp" alt="Admindek — feature-rich Bootstrap 5 dashboard with dark mode" width="100%">
|
|
165
181
|
</a>
|
|
166
182
|
<br>
|
|
167
183
|
<a href="https://dashboardpack.com/theme-details/admindek-html/?utm_source=github&utm_medium=readme&utm_campaign=adminlte"><strong>Admindek</strong></a>
|
|
@@ -173,7 +189,7 @@ including editions built for the same stacks AdminLTE integrates with:
|
|
|
173
189
|
</td>
|
|
174
190
|
<td align="center" width="50%">
|
|
175
191
|
<a href="https://dashboardpack.com/theme-details/apex-dashboard-nextjs/?utm_source=github&utm_medium=readme&utm_campaign=adminlte">
|
|
176
|
-
<img src=".github/assets/premium/apex.
|
|
192
|
+
<img src=".github/assets/premium/apex.webp" alt="Apex Dashboard — admin template available for Next.js, Laravel, Django and Angular" width="100%">
|
|
177
193
|
</a>
|
|
178
194
|
<br>
|
|
179
195
|
<a href="https://dashboardpack.com/theme-details/apex-dashboard-nextjs/?utm_source=github&utm_medium=readme&utm_campaign=adminlte"><strong>Apex Dashboard</strong></a>
|
|
@@ -188,7 +204,7 @@ including editions built for the same stacks AdminLTE integrates with:
|
|
|
188
204
|
<tr>
|
|
189
205
|
<td align="center" width="50%">
|
|
190
206
|
<a href="https://dashboardpack.com/theme-details/zenith-dashboard-django/?utm_source=github&utm_medium=readme&utm_campaign=adminlte">
|
|
191
|
-
<img src=".github/assets/premium/zenith.
|
|
207
|
+
<img src=".github/assets/premium/zenith.webp" alt="Zenith — ultra-minimal admin dashboard, Django edition" width="100%">
|
|
192
208
|
</a>
|
|
193
209
|
<br>
|
|
194
210
|
<a href="https://dashboardpack.com/theme-details/zenith-dashboard-django/?utm_source=github&utm_medium=readme&utm_campaign=adminlte"><strong>Zenith Dashboard — Django</strong></a>
|
|
@@ -197,7 +213,7 @@ including editions built for the same stacks AdminLTE integrates with:
|
|
|
197
213
|
</td>
|
|
198
214
|
<td align="center" width="50%">
|
|
199
215
|
<a href="https://dashboardpack.com/theme-details/haze-dashboard-nuxt/?utm_source=github&utm_medium=readme&utm_campaign=adminlte">
|
|
200
|
-
<img src=".github/assets/premium/haze.
|
|
216
|
+
<img src=".github/assets/premium/haze.webp" alt="Haze — Nuxt 4 admin dashboard with 92+ pages and 5 dashboards" width="100%">
|
|
201
217
|
</a>
|
|
202
218
|
<br>
|
|
203
219
|
<a href="https://dashboardpack.com/theme-details/haze-dashboard-nuxt/?utm_source=github&utm_medium=readme&utm_campaign=adminlte"><strong>Haze — Nuxt</strong></a>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@charset "UTF-8";
|
|
2
2
|
/*!
|
|
3
|
-
* AdminLTE v4.
|
|
3
|
+
* AdminLTE v4.3.1 — documentation styles
|
|
4
4
|
* Styles for the documentation and FAQ pages only (body.docs-page /
|
|
5
5
|
* body.faq-page). Applications never need this file; it is loaded by the
|
|
6
6
|
* docs pages in addition to adminlte.css.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["adminlte-docs.css","../../src/scss/adminlte-docs.scss","../../src/scss/mixins/_animations.scss","../../src/scss/_docs.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../node_modules/bootstrap/scss/mixins/_transition.scss"],"names":[],"mappings":"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","file":"adminlte-docs.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * AdminLTE v4.0.4 — documentation styles\n * Styles for the documentation and FAQ pages only (body.docs-page /\n * body.faq-page). Applications never need this file; it is loaded by the\n * docs pages in addition to adminlte.css.\n */\n@keyframes flipInX {\n 0% {\n opacity: 0;\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n }\n 40% {\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n }\n 60% {\n opacity: 1;\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n 100% {\n transform: perspective(400px);\n }\n}\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes fadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes shake {\n 0% {\n transform: translate(2px, 1px) rotate(0deg);\n }\n 10% {\n transform: translate(-1px, -2px) rotate(-2deg);\n }\n 20% {\n transform: translate(-3px, 0) rotate(3deg);\n }\n 30% {\n transform: translate(0, 2px) rotate(0deg);\n }\n 40% {\n transform: translate(1px, -1px) rotate(1deg);\n }\n 50% {\n transform: translate(-1px, 2px) rotate(-1deg);\n }\n 60% {\n transform: translate(-3px, 1px) rotate(0deg);\n }\n 70% {\n transform: translate(2px, 1px) rotate(-2deg);\n }\n 80% {\n transform: translate(-1px, -1px) rotate(4deg);\n }\n 90% {\n transform: translate(2px, 2px) rotate(0deg);\n }\n 100% {\n transform: translate(1px, -2px) rotate(-1deg);\n }\n}\n@keyframes wobble {\n 0% {\n transform: none;\n }\n 15% {\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n }\n 30% {\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n }\n 45% {\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n }\n 60% {\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n }\n 75% {\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n }\n 100% {\n transform: none;\n }\n}\n.astro-code {\n padding: 0.75rem;\n border-radius: 0.375rem;\n}\n\n.docs-page .app-content > .container-fluid {\n max-width: 60rem;\n}\n@media (min-width: 1400px) {\n .docs-page .app-content > .container-fluid {\n max-width: 64rem;\n }\n}\n.docs-page .card > .card-body {\n padding: 1.5rem;\n font-size: 1rem;\n line-height: 1.7;\n color: var(--bs-body-color);\n}\n@media (min-width: 768px) {\n .docs-page .card > .card-body {\n padding: 2.5rem;\n }\n}\n.docs-page .card > .card-body h1,\n.docs-page .card > .card-body h2,\n.docs-page .card > .card-body h3,\n.docs-page .card > .card-body h4,\n.docs-page .card > .card-body h5,\n.docs-page .card > .card-body h6,\n.docs-page .card > .card-body .h1,\n.docs-page .card > .card-body .h2,\n.docs-page .card > .card-body .h3,\n.docs-page .card > .card-body .h4,\n.docs-page .card > .card-body .h5,\n.docs-page .card > .card-body .h6 {\n margin-top: 2em;\n margin-bottom: 0.5em;\n font-weight: 600;\n line-height: 1.3;\n color: var(--bs-emphasis-color);\n scroll-margin-top: 4rem;\n}\n.docs-page .card > .card-body h1:first-child,\n.docs-page .card > .card-body h2:first-child,\n.docs-page .card > .card-body h3:first-child,\n.docs-page .card > .card-body h4:first-child,\n.docs-page .card > .card-body h5:first-child,\n.docs-page .card > .card-body h6:first-child,\n.docs-page .card > .card-body .h1:first-child,\n.docs-page .card > .card-body .h2:first-child,\n.docs-page .card > .card-body .h3:first-child,\n.docs-page .card > .card-body .h4:first-child,\n.docs-page .card > .card-body .h5:first-child,\n.docs-page .card > .card-body .h6:first-child {\n margin-top: 0;\n}\n.docs-page .card > .card-body h2,\n.docs-page .card > .card-body .h2 {\n padding-bottom: 0.35em;\n font-size: 1.75rem;\n border-bottom: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body h3,\n.docs-page .card > .card-body .h3 {\n font-size: 1.4rem;\n}\n.docs-page .card > .card-body h4,\n.docs-page .card > .card-body .h4 {\n font-size: 1.2rem;\n}\n.docs-page .card > .card-body h5,\n.docs-page .card > .card-body .h5 {\n padding-top: 1.5em;\n margin-top: 2.5em;\n font-size: 1.3rem;\n border-top: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body h5:first-child,\n.docs-page .card > .card-body .h5:first-child {\n padding-top: 0;\n border-top: 0;\n}\n.docs-page .card > .card-body h6,\n.docs-page .card > .card-body .h6 {\n margin-top: 1.75em;\n font-size: 1.08rem;\n color: var(--bs-emphasis-color);\n}\n.docs-page .card > .card-body p,\n.docs-page .card > .card-body ul,\n.docs-page .card > .card-body ol,\n.docs-page .card > .card-body dl,\n.docs-page .card > .card-body blockquote,\n.docs-page .card > .card-body table {\n margin-bottom: 1.1rem;\n}\n.docs-page .card > .card-body ul,\n.docs-page .card > .card-body ol {\n padding-left: 1.5rem;\n}\n.docs-page .card > .card-body ul li,\n.docs-page .card > .card-body ol li {\n margin-bottom: 0.35rem;\n}\n.docs-page .card > .card-body ul ul,\n.docs-page .card > .card-body ul ol,\n.docs-page .card > .card-body ol ul,\n.docs-page .card > .card-body ol ol {\n margin-top: 0.35rem;\n margin-bottom: 0;\n}\n.docs-page .card > .card-body h2 + p,\n.docs-page .card > .card-body h3 + p,\n.docs-page .card > .card-body h5 + p {\n margin-top: 0;\n}\n.docs-page .card > .card-body p code,\n.docs-page .card > .card-body li code,\n.docs-page .card > .card-body td code,\n.docs-page .card > .card-body th code,\n.docs-page .card > .card-body h2 code,\n.docs-page .card > .card-body h3 code,\n.docs-page .card > .card-body h4 code,\n.docs-page .card > .card-body h5 code,\n.docs-page .card > .card-body h6 code {\n padding: 0.15em 0.4em;\n font-size: 0.875em;\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n}\n.docs-page .card > .card-body pre.astro-code,\n.docs-page .card > .card-body pre {\n padding: 1rem 1.25rem;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow-x: auto;\n font-size: 0.875rem;\n line-height: 1.6;\n border-radius: 0.375rem;\n}\n.docs-page .card > .card-body pre.astro-code code,\n.docs-page .card > .card-body pre code {\n padding: 0;\n background: transparent;\n border: 0;\n}\n.docs-page .card > .card-body table {\n width: 100%;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow: hidden;\n font-size: 0.95rem;\n border-collapse: collapse;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n}\n.docs-page .card > .card-body table th,\n.docs-page .card > .card-body table td {\n padding: 0.65rem 0.9rem;\n text-align: left;\n vertical-align: top;\n border-bottom: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body table th {\n font-weight: 600;\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n}\n.docs-page .card > .card-body table tr:last-child td {\n border-bottom: 0;\n}\n.docs-page .card > .card-body table code {\n white-space: nowrap;\n}\n.docs-page .card > .card-body blockquote {\n padding: 0.85rem 1.1rem;\n margin-top: 1.25rem;\n color: var(--bs-emphasis-color);\n background: var(--bs-info-bg-subtle);\n border-left: 4px solid var(--bs-info-border-subtle);\n border-radius: 0.25rem;\n}\n.docs-page .card > .card-body blockquote p:last-child {\n margin-bottom: 0;\n}\n.docs-page .card > .card-body blockquote code {\n background: rgba(0, 0, 0, 0.05);\n}\n.docs-page .card > .card-body a:not(.btn):not(.nav-link) {\n color: var(--bs-primary);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 3px;\n}\n.docs-page .card > .card-body a:not(.btn):not(.nav-link):hover {\n text-decoration-thickness: 2px;\n}\n.docs-page .card > .card-body hr {\n margin: 2.5rem 0;\n border: 0;\n border-top: 1px solid var(--bs-border-color);\n opacity: 1;\n}\n.docs-page .card > .card-body > p:first-child,\n.docs-page .card > .card-body > p:first-of-type {\n margin-bottom: 2rem;\n font-size: 1.125rem;\n line-height: 1.6;\n color: var(--bs-body-color);\n}\n.docs-page .card > .card-body details.faq-item {\n margin-bottom: 0.5rem;\n overflow: hidden;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .docs-page .card > .card-body details.faq-item {\n transition: none;\n }\n}\n.docs-page .card > .card-body details.faq-item:hover {\n border-color: var(--bs-primary-border-subtle);\n}\n.docs-page .card > .card-body details.faq-item[open] {\n background: var(--bs-body-bg);\n border-color: var(--bs-primary-border-subtle);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);\n}\n.docs-page .card > .card-body details.faq-item summary {\n position: relative;\n padding: 0.9rem 3rem 0.9rem 1.1rem;\n font-size: 1rem;\n font-weight: 600;\n color: var(--bs-emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n transition: color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .docs-page .card > .card-body details.faq-item summary {\n transition: none;\n }\n}\n.docs-page .card > .card-body details.faq-item summary::-webkit-details-marker {\n display: none;\n}\n.docs-page .card > .card-body details.faq-item summary::marker {\n content: \"\";\n}\n.docs-page .card > .card-body details.faq-item summary:hover {\n color: var(--bs-primary);\n}\n.docs-page .card > .card-body details.faq-item summary::after {\n position: absolute;\n top: 50%;\n right: 1.1rem;\n display: inline-block;\n width: 0.55rem;\n height: 0.55rem;\n margin-top: -0.4rem;\n content: \"\";\n border-right: 2px solid currentcolor;\n border-bottom: 2px solid currentcolor;\n opacity: 0.55;\n transform: rotate(45deg);\n transition: transform 0.2s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .docs-page .card > .card-body details.faq-item summary::after {\n transition: none;\n }\n}\n.docs-page .card > .card-body details.faq-item[open] > summary {\n color: var(--bs-primary);\n border-bottom: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body details.faq-item[open] > summary::after {\n margin-top: -0.15rem;\n opacity: 1;\n transform: rotate(-135deg);\n}\n.docs-page .card > .card-body details.faq-item > *:not(summary) {\n padding-right: 1.1rem;\n padding-left: 1.1rem;\n}\n.docs-page .card > .card-body details.faq-item > *:not(summary):first-of-type {\n padding-top: 1rem;\n}\n.docs-page .card > .card-body details.faq-item > *:not(summary):last-child {\n padding-bottom: 1rem;\n}\n.docs-page .card > .card-body details.faq-item p,\n.docs-page .card > .card-body details.faq-item ul,\n.docs-page .card > .card-body details.faq-item ol {\n margin-bottom: 0.65rem;\n}\n.docs-page .card > .card-body details.faq-item > *:last-child p:last-child,\n.docs-page .card > .card-body details.faq-item > p:last-child,\n.docs-page .card > .card-body details.faq-item > ul:last-child,\n.docs-page .card > .card-body details.faq-item > ol:last-child {\n margin-bottom: 0;\n}\n.docs-page .card > .card-body details.faq-item pre.astro-code,\n.docs-page .card > .card-body details.faq-item pre {\n margin-right: 0;\n margin-left: 0;\n}\n.docs-page[data-bs-theme=dark] .card > .card-body blockquote code, [data-bs-theme=dark] .docs-page .card > .card-body blockquote code {\n background: rgba(255, 255, 255, 0.08);\n}\n\n.faq-page .app-content > .container-fluid {\n max-width: 64rem;\n}\n@media (min-width: 1400px) {\n .faq-page .app-content > .container-fluid {\n max-width: 72rem;\n }\n}\n.faq-page .faq-hero {\n position: relative;\n padding: 3rem 1.5rem 2.5rem;\n margin-top: 1rem;\n overflow: hidden;\n background: radial-gradient(ellipse at top left, rgba(var(--bs-primary-rgb), 0.12), transparent 60%), radial-gradient(ellipse at bottom right, rgba(var(--bs-info-rgb), 0.1), transparent 65%), var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 1rem;\n}\n.faq-page .faq-hero-eyebrow {\n display: inline-flex;\n gap: 0.4rem;\n align-items: center;\n padding: 0.35rem 0.85rem;\n margin-bottom: 1rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--bs-primary);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n background: var(--bs-primary-bg-subtle);\n border: 1px solid var(--bs-primary-border-subtle);\n border-radius: 50rem;\n}\n.faq-page .faq-hero-eyebrow .bi {\n font-size: 0.9rem;\n}\n.faq-page .faq-hero-title {\n margin: 0 0 0.5rem;\n font-size: 2.25rem;\n font-weight: 700;\n line-height: 1.15;\n color: var(--bs-emphasis-color);\n}\n@media (min-width: 768px) {\n .faq-page .faq-hero-title {\n font-size: 2.75rem;\n }\n}\n.faq-page .faq-hero-lead {\n max-width: 36rem;\n margin: 0 auto 1.75rem;\n font-size: 1.05rem;\n line-height: 1.55;\n color: var(--bs-secondary-color);\n}\n.faq-page .faq-search {\n position: relative;\n max-width: 32rem;\n margin: 0 auto;\n}\n.faq-page .faq-search .form-control {\n height: 3rem;\n padding-right: 3rem;\n padding-left: 3rem;\n font-size: 1rem;\n background: var(--bs-body-bg);\n border-radius: 50rem;\n transition: box-shadow 0.15s ease, border-color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-search .form-control {\n transition: none;\n }\n}\n.faq-page .faq-search .form-control:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.15);\n}\n.faq-page .faq-search-icon {\n position: absolute;\n top: 50%;\n left: 1.2rem;\n color: var(--bs-secondary-color);\n pointer-events: none;\n transform: translateY(-50%);\n}\n.faq-page .faq-search-clear {\n position: absolute;\n top: 50%;\n right: 0.65rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n color: var(--bs-secondary-color);\n background: var(--bs-tertiary-bg);\n border: 0;\n transform: translateY(-50%);\n border-radius: 50%;\n transition: background 0.15s ease, color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-search-clear {\n transition: none;\n }\n}\n.faq-page .faq-search-clear:hover {\n color: var(--bs-body-color);\n background: var(--bs-secondary-bg);\n}\n.faq-page .faq-empty-state {\n max-width: 32rem;\n padding: 1rem;\n margin: 1.5rem auto 0;\n font-size: 0.95rem;\n color: var(--bs-secondary-color);\n background: var(--bs-tertiary-bg);\n border-radius: 0.375rem;\n}\n.faq-page .faq-empty-state .bi {\n margin-right: 0.35rem;\n}\n.faq-page .faq-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n justify-content: center;\n}\n.faq-page .faq-chip {\n display: inline-flex;\n gap: 0.45rem;\n align-items: center;\n padding: 0.45rem 0.85rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--bs-body-color);\n text-decoration: none;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 50rem;\n transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease, color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-chip {\n transition: none;\n }\n}\n.faq-page .faq-chip:hover {\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n transform: translateY(-1px);\n}\n.faq-page .faq-chip .bi {\n font-size: 1rem;\n}\n.faq-page .faq-chip-count {\n padding: 0 0.45rem;\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--bs-secondary-color);\n background: var(--bs-tertiary-bg);\n border-radius: 50rem;\n}\n.faq-page .faq-chip-primary:hover {\n color: var(--bs-primary-text-emphasis);\n background: var(--bs-primary-bg-subtle);\n border-color: var(--bs-primary-border-subtle);\n}\n.faq-page .faq-chip-primary:hover .faq-chip-count {\n color: var(--bs-primary-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-info:hover {\n color: var(--bs-info-text-emphasis);\n background: var(--bs-info-bg-subtle);\n border-color: var(--bs-info-border-subtle);\n}\n.faq-page .faq-chip-info:hover .faq-chip-count {\n color: var(--bs-info-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-warning:hover {\n color: var(--bs-warning-text-emphasis);\n background: var(--bs-warning-bg-subtle);\n border-color: var(--bs-warning-border-subtle);\n}\n.faq-page .faq-chip-warning:hover .faq-chip-count {\n color: var(--bs-warning-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-success:hover {\n color: var(--bs-success-text-emphasis);\n background: var(--bs-success-bg-subtle);\n border-color: var(--bs-success-border-subtle);\n}\n.faq-page .faq-chip-success:hover .faq-chip-count {\n color: var(--bs-success-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-danger:hover {\n color: var(--bs-danger-text-emphasis);\n background: var(--bs-danger-bg-subtle);\n border-color: var(--bs-danger-border-subtle);\n}\n.faq-page .faq-chip-danger:hover .faq-chip-count {\n color: var(--bs-danger-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-secondary:hover {\n color: var(--bs-secondary-text-emphasis);\n background: var(--bs-secondary-bg-subtle);\n border-color: var(--bs-secondary-border-subtle);\n}\n.faq-page .faq-chip-secondary:hover .faq-chip-count {\n color: var(--bs-secondary-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-section {\n margin-bottom: 2.5rem;\n scroll-margin-top: 5rem;\n}\n.faq-page .faq-section-header {\n display: flex;\n gap: 1rem;\n align-items: center;\n padding: 1rem 1.25rem;\n margin-bottom: 1rem;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-left: 4px solid var(--bs-primary);\n border-radius: 0.375rem;\n}\n.faq-page .faq-section-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.35rem;\n color: var(--bs-primary);\n background: var(--bs-primary-bg-subtle);\n border-radius: 0.375rem;\n}\n.faq-page .faq-section-title {\n margin: 0;\n font-size: 1.4rem;\n font-weight: 600;\n line-height: 1.2;\n color: var(--bs-emphasis-color);\n}\n.faq-page .faq-section-count {\n margin: 0.1rem 0 0;\n font-size: 0.8rem;\n color: var(--bs-secondary-color);\n}\n.faq-page .faq-section-primary {\n border-left-color: var(--bs-primary);\n}\n.faq-page .faq-section-primary .faq-section-icon {\n color: var(--bs-primary-text-emphasis);\n background: var(--bs-primary-bg-subtle);\n}\n.faq-page .faq-section-info {\n border-left-color: var(--bs-info);\n}\n.faq-page .faq-section-info .faq-section-icon {\n color: var(--bs-info-text-emphasis);\n background: var(--bs-info-bg-subtle);\n}\n.faq-page .faq-section-warning {\n border-left-color: var(--bs-warning);\n}\n.faq-page .faq-section-warning .faq-section-icon {\n color: var(--bs-warning-text-emphasis);\n background: var(--bs-warning-bg-subtle);\n}\n.faq-page .faq-section-success {\n border-left-color: var(--bs-success);\n}\n.faq-page .faq-section-success .faq-section-icon {\n color: var(--bs-success-text-emphasis);\n background: var(--bs-success-bg-subtle);\n}\n.faq-page .faq-section-danger {\n border-left-color: var(--bs-danger);\n}\n.faq-page .faq-section-danger .faq-section-icon {\n color: var(--bs-danger-text-emphasis);\n background: var(--bs-danger-bg-subtle);\n}\n.faq-page .faq-section-secondary {\n border-left-color: var(--bs-secondary);\n}\n.faq-page .faq-section-secondary .faq-section-icon {\n color: var(--bs-secondary-text-emphasis);\n background: var(--bs-secondary-bg-subtle);\n}\n.faq-page .faq-section-items .faq-item {\n margin-bottom: 0.5rem;\n overflow: hidden;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-section-items .faq-item {\n transition: none;\n }\n}\n.faq-page .faq-section-items .faq-item:hover {\n border-color: var(--bs-primary-border-subtle);\n transform: translateX(2px);\n}\n.faq-page .faq-section-items .faq-item[open] {\n border-color: var(--bs-primary-border-subtle);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n transform: none;\n}\n.faq-page .faq-section-items .faq-item summary {\n display: flex;\n gap: 0.85rem;\n align-items: center;\n padding: 1rem 1.25rem;\n font-size: 1rem;\n font-weight: 500;\n color: var(--bs-emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n}\n.faq-page .faq-section-items .faq-item summary::-webkit-details-marker {\n display: none;\n}\n.faq-page .faq-section-items .faq-item summary::marker {\n content: \"\";\n}\n.faq-page .faq-section-items .faq-item summary::after {\n content: none;\n}\n.faq-page .faq-section-items .faq-item .faq-q-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n font-size: 0.85rem;\n color: var(--bs-primary);\n background: var(--bs-primary-bg-subtle);\n border-radius: 50%;\n}\n.faq-page .faq-section-items .faq-item .faq-q-text {\n flex-grow: 1;\n}\n.faq-page .faq-section-items .faq-item .faq-q-chevron {\n flex-shrink: 0;\n color: var(--bs-secondary-color);\n transition: transform 0.2s ease, color 0.2s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-section-items .faq-item .faq-q-chevron {\n transition: none;\n }\n}\n.faq-page .faq-section-items .faq-item[open] .faq-q-chevron {\n color: var(--bs-primary);\n transform: rotate(180deg);\n}\n.faq-page .faq-section-items .faq-item[open] summary {\n color: var(--bs-primary);\n border-bottom: 1px solid var(--bs-border-color);\n}\n.faq-page .faq-section-items .faq-item .faq-answer {\n padding: 1.1rem 1.25rem 1.1rem 3.85rem;\n font-size: 0.95rem;\n line-height: 1.65;\n color: var(--bs-body-color);\n}\n.faq-page .faq-section-items .faq-item .faq-answer p:last-child,\n.faq-page .faq-section-items .faq-item .faq-answer ul:last-child,\n.faq-page .faq-section-items .faq-item .faq-answer ol:last-child,\n.faq-page .faq-section-items .faq-item .faq-answer pre:last-child {\n margin-bottom: 0;\n}\n.faq-page .faq-section-items .faq-item .faq-answer a {\n color: var(--bs-primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.faq-page .faq-section-items .faq-item .faq-answer a:hover {\n text-decoration-thickness: 2px;\n}\n.faq-page .faq-section-items .faq-item .faq-answer code {\n padding: 0.12em 0.35em;\n font-size: 0.875em;\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n}\n.faq-page .faq-section-items .faq-item .faq-answer pre.astro-code,\n.faq-page .faq-section-items .faq-item .faq-answer pre {\n padding: 0.85rem 1rem;\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n overflow-x: auto;\n font-size: 0.85rem;\n line-height: 1.55;\n border-radius: 0.25rem;\n}\n.faq-page .faq-section-items .faq-item .faq-answer pre.astro-code code,\n.faq-page .faq-section-items .faq-item .faq-answer pre code {\n padding: 0;\n background: transparent;\n border: 0;\n}\n.faq-page .faq-cta {\n padding: 2.5rem 1.5rem;\n text-align: center;\n background: radial-gradient(ellipse at top, rgba(var(--bs-primary-rgb), 0.08), transparent 60%), var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 1rem;\n}\n.faq-page .faq-cta-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 3.5rem;\n height: 3.5rem;\n margin-bottom: 1rem;\n font-size: 1.6rem;\n color: var(--bs-primary);\n background: var(--bs-primary-bg-subtle);\n border-radius: 50%;\n}\n.faq-page .faq-cta h2 {\n margin: 0 0 0.5rem;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--bs-emphasis-color);\n}\n.faq-page .faq-cta p {\n max-width: 32rem;\n margin: 0 auto 1.5rem;\n color: var(--bs-secondary-color);\n}\n.faq-page .faq-cta-actions {\n display: inline-flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n justify-content: center;\n}\n\n/*# sourceMappingURL=adminlte-docs.css.map */\n","/*!\n * AdminLTE v4.0.4 — documentation styles\n * Styles for the documentation and FAQ pages only (body.docs-page /\n * body.faq-page). Applications never need this file; it is loaded by the\n * docs pages in addition to adminlte.css.\n */\n\n// Bootstrap Configuration\n// ---------------------------------------------------\n@import \"bootstrap/scss/functions\";\n@import \"bootstrap-overrides\";\n@import \"bootstrap/scss/variables\";\n@import \"bootstrap/scss/variables-dark\";\n@import \"bootstrap/scss/maps\";\n@import \"bootstrap/scss/mixins\";\n\n// AdminLTE Configuration\n// ---------------------------------------------------\n@import \"variables\";\n@import \"variables-dark\";\n@import \"mixins\";\n\n// Documentation styles\n// ---------------------------------------------------\n@import \"docs\";\n","//\n// Mixins: Animation\n//\n\n\n@keyframes flipInX {\n 0% {\n opacity: 0;\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n }\n\n 40% {\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n }\n\n 60% {\n opacity: 1;\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n }\n\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n\n 100% {\n transform: perspective(400px);\n }\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes fadeOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes shake {\n 0% {\n transform: translate(2px, 1px) rotate(0deg);\n }\n 10% {\n transform: translate(-1px, -2px) rotate(-2deg);\n }\n 20% {\n transform: translate(-3px, 0) rotate(3deg);\n }\n 30% {\n transform: translate(0, 2px) rotate(0deg);\n }\n 40% {\n transform: translate(1px, -1px) rotate(1deg);\n }\n 50% {\n transform: translate(-1px, 2px) rotate(-1deg);\n }\n 60% {\n transform: translate(-3px, 1px) rotate(0deg);\n }\n 70% {\n transform: translate(2px, 1px) rotate(-2deg);\n }\n 80% {\n transform: translate(-1px, -1px) rotate(4deg);\n }\n 90% {\n transform: translate(2px, 2px) rotate(0deg);\n }\n 100% {\n transform: translate(1px, -2px) rotate(-1deg);\n }\n}\n\n@keyframes wobble {\n 0% {\n transform: none;\n }\n\n 15% {\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n }\n\n 30% {\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n }\n\n 45% {\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n }\n\n 60% {\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n }\n\n 75% {\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n }\n\n 100% {\n transform: none;\n }\n}\n","//\n// Component: Docs\n//\n// Visual treatment for documentation pages. Body class `.docs-page` opts in.\n// Demo pages are not affected.\n//\n\n// Inline code blocks rendered by MDX (Astro highlight default class)\n.astro-code {\n padding: .75rem;\n @include border-radius($border-radius);\n}\n\n.docs-page {\n // Constrain the docs card to a comfortable reading width.\n // Tables and code blocks inside can still scroll horizontally if needed.\n .app-content > .container-fluid {\n max-width: 60rem; // ~960px\n\n @include media-breakpoint-up(xxl) {\n max-width: 64rem;\n }\n }\n\n //\n // Card body — breathing room + prose typography.\n // Only applied inside docs content cards so demo-page card content\n // stays unchanged.\n //\n .card > .card-body {\n padding: 1.5rem;\n font-size: 1rem;\n line-height: 1.7;\n color: var(--#{$prefix}body-color);\n\n @include media-breakpoint-up(md) {\n padding: 2.5rem;\n }\n\n //\n // Heading hierarchy. The MDX content in src/html/components/docs/ uses\n // ##### (h5) as the dominant section heading and ###### (h6) as a\n // sub-heading (most visible in FAQ.mdx, where h5 is a topic and h6 is\n // a question). Style h5 as a major section and h6 as a sub-section so\n // the visual hierarchy matches the semantic one.\n //\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n .h1,\n .h2,\n .h3,\n .h4,\n .h5,\n .h6 {\n margin-top: 2em;\n margin-bottom: .5em;\n font-weight: 600;\n line-height: 1.3;\n color: var(--#{$prefix}emphasis-color);\n scroll-margin-top: 4rem; // anchor-link friendly\n\n &:first-child {\n margin-top: 0;\n }\n }\n\n h2,\n .h2 {\n padding-bottom: .35em;\n font-size: 1.75rem;\n border-bottom: 1px solid var(--#{$prefix}border-color);\n }\n\n h3,\n .h3 {\n font-size: 1.4rem;\n }\n\n h4,\n .h4 {\n font-size: 1.2rem;\n }\n\n // h5 is the dominant section heading across docs MDX files. Give it\n // a visible separator above so sections are easy to scan.\n h5,\n .h5 {\n padding-top: 1.5em;\n margin-top: 2.5em;\n font-size: 1.3rem;\n border-top: 1px solid var(--#{$prefix}border-color);\n\n &:first-child {\n padding-top: 0;\n border-top: 0;\n }\n }\n\n // h6 is the sub-section / FAQ question style. Smaller than h5 but\n // still distinctly heading-like, with a touch of accent colour to\n // separate from body text.\n h6,\n .h6 {\n margin-top: 1.75em;\n font-size: 1.08rem;\n color: var(--#{$prefix}emphasis-color);\n }\n\n //\n // Paragraphs and lists.\n //\n p,\n ul,\n ol,\n dl,\n blockquote,\n table {\n margin-bottom: 1.1rem;\n }\n\n ul,\n ol {\n padding-left: 1.5rem;\n\n li {\n margin-bottom: .35rem;\n }\n\n // Tighter nested lists\n ul,\n ol {\n margin-top: .35rem;\n margin-bottom: 0;\n }\n }\n\n // Lead-style first paragraph (just after a heading)\n h2 + p,\n h3 + p,\n h5 + p {\n margin-top: 0;\n }\n\n //\n // Inline code — pill style that complements MDX's syntax-highlighted blocks.\n //\n p code,\n li code,\n td code,\n th code,\n h2 code,\n h3 code,\n h4 code,\n h5 code,\n h6 code {\n padding: .15em .4em;\n font-size: .875em;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-sm);\n }\n\n //\n // Code blocks.\n //\n pre.astro-code,\n pre {\n padding: 1rem 1.25rem;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow-x: auto;\n font-size: .875rem;\n line-height: 1.6;\n @include border-radius($border-radius);\n\n code {\n padding: 0;\n background: transparent;\n border: 0;\n }\n }\n\n //\n // Tables — reference-doc styling with hairline borders.\n //\n table {\n width: 100%;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow: hidden;\n font-size: .95rem;\n border-collapse: collapse;\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-sm);\n\n th,\n td {\n padding: .65rem .9rem;\n text-align: left;\n vertical-align: top;\n border-bottom: 1px solid var(--#{$prefix}border-color);\n }\n\n th {\n font-weight: 600;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n }\n\n tr:last-child td {\n border-bottom: 0;\n }\n\n code {\n white-space: nowrap;\n }\n }\n\n //\n // Blockquotes used as info callouts.\n //\n blockquote {\n padding: .85rem 1.1rem;\n margin-top: 1.25rem;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}info-bg-subtle);\n border-left: 4px solid var(--#{$prefix}info-border-subtle);\n @include border-radius($border-radius-sm);\n\n p:last-child {\n margin-bottom: 0;\n }\n\n code {\n background: rgba(0, 0, 0, .05);\n }\n }\n\n //\n // Prose links — stand out more than Bootstrap defaults.\n //\n a:not(.btn):not(.nav-link) {\n color: var(--#{$prefix}primary);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 3px;\n\n &:hover {\n text-decoration-thickness: 2px;\n }\n }\n\n //\n // Horizontal rule — used as additional section separator.\n //\n hr {\n margin: 2.5rem 0;\n border: 0;\n border-top: 1px solid var(--#{$prefix}border-color);\n opacity: 1;\n }\n\n //\n // Lead paragraph — the first paragraph in any doc is a summary.\n // Visually heavier so it functions as a deck.\n //\n > p:first-child,\n > p:first-of-type {\n margin-bottom: 2rem;\n font-size: 1.125rem;\n line-height: 1.6;\n color: var(--#{$prefix}body-color);\n }\n\n //\n // FAQ / disclosure accordion — uses native <details>/<summary>.\n // Add `.faq-item` to <details> to opt in.\n //\n details.faq-item {\n margin-bottom: .5rem;\n overflow: hidden;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius);\n @include transition(border-color .15s ease, box-shadow .15s ease);\n\n &:hover {\n border-color: var(--#{$prefix}primary-border-subtle);\n }\n\n &[open] {\n background: var(--#{$prefix}body-bg);\n border-color: var(--#{$prefix}primary-border-subtle);\n box-shadow: 0 1px 3px rgba(0, 0, 0, .04);\n }\n\n summary {\n position: relative;\n padding: .9rem 3rem .9rem 1.1rem;\n font-size: 1rem;\n font-weight: 600;\n color: var(--#{$prefix}emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n @include transition(color .15s ease);\n\n // Hide the default disclosure triangle in Webkit/Blink\n &::-webkit-details-marker {\n display: none;\n }\n\n // Hide the marker in modern Firefox too\n &::marker {\n content: \"\";\n }\n\n &:hover {\n color: var(--#{$prefix}primary);\n }\n\n // Right-side chevron, rotates on open\n &::after {\n position: absolute;\n top: 50%;\n right: 1.1rem;\n display: inline-block;\n width: .55rem;\n height: .55rem;\n margin-top: -.4rem;\n content: \"\";\n border-right: 2px solid currentcolor;\n border-bottom: 2px solid currentcolor;\n opacity: .55;\n transform: rotate(45deg);\n @include transition(transform .2s ease);\n }\n }\n\n &[open] > summary {\n color: var(--#{$prefix}primary);\n border-bottom: 1px solid var(--#{$prefix}border-color);\n\n &::after {\n margin-top: -.15rem;\n opacity: 1;\n transform: rotate(-135deg);\n }\n }\n\n // Content (everything after <summary>) gets the inner padding\n > *:not(summary) {\n padding-right: 1.1rem;\n padding-left: 1.1rem;\n }\n\n > *:not(summary):first-of-type {\n padding-top: 1rem;\n }\n\n > *:not(summary):last-child {\n padding-bottom: 1rem;\n }\n\n // Tighten paragraphs/lists inside an FAQ answer\n p,\n ul,\n ol {\n margin-bottom: .65rem;\n }\n\n > *:last-child p:last-child,\n > p:last-child,\n > ul:last-child,\n > ol:last-child {\n margin-bottom: 0;\n }\n\n // Code blocks inside an FAQ answer get a less-distracting bg\n pre.astro-code,\n pre {\n margin-right: 0;\n margin-left: 0;\n }\n }\n }\n\n // Dark-mode tweak: blockquote info bg needs more contrast on dark\n &[data-bs-theme=\"dark\"],\n [data-bs-theme=\"dark\"] & {\n .card > .card-body blockquote code {\n background: rgba(255, 255, 255, .08);\n }\n }\n}\n\n//\n// FAQ page — custom layout that breaks out of the standard docs card\n// to give the FAQ a more distinctive visual identity. Opt in via\n// body.faq-page (set in pages/docs/faq.astro).\n//\n\n.faq-page {\n // The FAQ doesn't use the standard card wrapper used by other docs,\n // so the container can stretch wider for the chip strip and section\n // grid.\n .app-content > .container-fluid {\n max-width: 64rem;\n\n @include media-breakpoint-up(xxl) {\n max-width: 72rem;\n }\n }\n\n // --- Hero -------------------------------------------------------------\n .faq-hero {\n position: relative;\n padding: 3rem 1.5rem 2.5rem;\n margin-top: 1rem;\n overflow: hidden;\n background: radial-gradient(ellipse at top left, rgba(var(--#{$prefix}primary-rgb), .12), transparent 60%), radial-gradient(ellipse at bottom right, rgba(var(--#{$prefix}info-rgb), .1), transparent 65%), var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-xl);\n }\n\n .faq-hero-eyebrow {\n display: inline-flex;\n gap: .4rem;\n align-items: center;\n padding: .35rem .85rem;\n margin-bottom: 1rem;\n font-size: .75rem;\n font-weight: 600;\n color: var(--#{$prefix}primary);\n text-transform: uppercase;\n letter-spacing: .08em;\n background: var(--#{$prefix}primary-bg-subtle);\n border: 1px solid var(--#{$prefix}primary-border-subtle);\n @include border-radius(50rem);\n\n .bi {\n font-size: .9rem;\n }\n }\n\n .faq-hero-title {\n margin: 0 0 .5rem;\n font-size: 2.25rem;\n font-weight: 700;\n line-height: 1.15;\n color: var(--#{$prefix}emphasis-color);\n\n @include media-breakpoint-up(md) {\n font-size: 2.75rem;\n }\n }\n\n .faq-hero-lead {\n max-width: 36rem;\n margin: 0 auto 1.75rem;\n font-size: 1.05rem;\n line-height: 1.55;\n color: var(--#{$prefix}secondary-color);\n }\n\n .faq-search {\n position: relative;\n max-width: 32rem;\n margin: 0 auto;\n\n .form-control {\n height: 3rem;\n padding-right: 3rem;\n padding-left: 3rem;\n font-size: 1rem;\n background: var(--#{$prefix}body-bg);\n @include border-radius(50rem);\n @include transition(box-shadow .15s ease, border-color .15s ease);\n\n &:focus {\n box-shadow: 0 0 0 .25rem rgba(var(--#{$prefix}primary-rgb), .15);\n }\n }\n }\n\n .faq-search-icon {\n position: absolute;\n top: 50%;\n left: 1.2rem;\n color: var(--#{$prefix}secondary-color);\n pointer-events: none;\n transform: translateY(-50%);\n }\n\n .faq-search-clear {\n position: absolute;\n top: 50%;\n right: .65rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n color: var(--#{$prefix}secondary-color);\n background: var(--#{$prefix}tertiary-bg);\n border: 0;\n transform: translateY(-50%);\n @include border-radius(50%);\n @include transition(background .15s ease, color .15s ease);\n\n &:hover {\n color: var(--#{$prefix}body-color);\n background: var(--#{$prefix}secondary-bg);\n }\n }\n\n .faq-empty-state {\n max-width: 32rem;\n padding: 1rem;\n margin: 1.5rem auto 0;\n font-size: .95rem;\n color: var(--#{$prefix}secondary-color);\n background: var(--#{$prefix}tertiary-bg);\n @include border-radius($border-radius);\n\n .bi {\n margin-right: .35rem;\n }\n }\n\n // --- Section nav chips ------------------------------------------------\n .faq-chips {\n display: flex;\n flex-wrap: wrap;\n gap: .5rem;\n justify-content: center;\n }\n\n .faq-chip {\n display: inline-flex;\n gap: .45rem;\n align-items: center;\n padding: .45rem .85rem;\n font-size: .875rem;\n font-weight: 500;\n color: var(--#{$prefix}body-color);\n text-decoration: none;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius(50rem);\n @include transition(transform .15s ease, border-color .15s ease, background-color .15s ease, color .15s ease);\n\n &:hover {\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n transform: translateY(-1px);\n }\n\n .bi {\n font-size: 1rem;\n }\n }\n\n .faq-chip-count {\n padding: 0 .45rem;\n font-size: .7rem;\n font-weight: 600;\n color: var(--#{$prefix}secondary-color);\n background: var(--#{$prefix}tertiary-bg);\n @include border-radius(50rem);\n }\n\n // Per-section chip accent on hover/active\n @each $tone in (primary, info, warning, success, danger, secondary) {\n .faq-chip-#{$tone}:hover {\n color: var(--#{$prefix}#{$tone}-text-emphasis);\n background: var(--#{$prefix}#{$tone}-bg-subtle);\n border-color: var(--#{$prefix}#{$tone}-border-subtle);\n\n .faq-chip-count {\n color: var(--#{$prefix}#{$tone}-text-emphasis);\n background: rgba(0, 0, 0, .06);\n }\n }\n }\n\n // --- Sections ---------------------------------------------------------\n .faq-section {\n margin-bottom: 2.5rem;\n scroll-margin-top: 5rem;\n }\n\n .faq-section-header {\n display: flex;\n gap: 1rem;\n align-items: center;\n padding: 1rem 1.25rem;\n margin-bottom: 1rem;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n border-left: 4px solid var(--#{$prefix}primary);\n @include border-radius($border-radius);\n }\n\n .faq-section-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.35rem;\n color: var(--#{$prefix}primary);\n background: var(--#{$prefix}primary-bg-subtle);\n @include border-radius($border-radius);\n }\n\n .faq-section-title {\n margin: 0;\n font-size: 1.4rem;\n font-weight: 600;\n line-height: 1.2;\n color: var(--#{$prefix}emphasis-color);\n }\n\n .faq-section-count {\n margin: .1rem 0 0;\n font-size: .8rem;\n color: var(--#{$prefix}secondary-color);\n }\n\n // Per-section tone accents\n @each $tone in (primary, info, warning, success, danger, secondary) {\n .faq-section-#{$tone} {\n border-left-color: var(--#{$prefix}#{$tone});\n\n .faq-section-icon {\n color: var(--#{$prefix}#{$tone}-text-emphasis);\n background: var(--#{$prefix}#{$tone}-bg-subtle);\n }\n }\n }\n\n // --- FAQ items (override the generic .docs-page details styling) ------\n .faq-section-items .faq-item {\n margin-bottom: .5rem;\n overflow: hidden;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius);\n @include transition(border-color .15s ease, box-shadow .15s ease, transform .15s ease);\n\n &:hover {\n border-color: var(--#{$prefix}primary-border-subtle);\n transform: translateX(2px);\n }\n\n &[open] {\n border-color: var(--#{$prefix}primary-border-subtle);\n box-shadow: 0 2px 8px rgba(0, 0, 0, .04);\n transform: none;\n }\n\n summary {\n display: flex;\n gap: .85rem;\n align-items: center;\n padding: 1rem 1.25rem;\n font-size: 1rem;\n font-weight: 500;\n color: var(--#{$prefix}emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &::marker {\n content: \"\";\n }\n\n &::after {\n content: none; // disable the generic chevron, we use our own\n }\n }\n\n .faq-q-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n font-size: .85rem;\n color: var(--#{$prefix}primary);\n background: var(--#{$prefix}primary-bg-subtle);\n @include border-radius(50%);\n }\n\n .faq-q-text {\n flex-grow: 1;\n }\n\n .faq-q-chevron {\n flex-shrink: 0;\n color: var(--#{$prefix}secondary-color);\n @include transition(transform .2s ease, color .2s ease);\n }\n\n &[open] .faq-q-chevron {\n color: var(--#{$prefix}primary);\n transform: rotate(180deg);\n }\n\n &[open] summary {\n color: var(--#{$prefix}primary);\n border-bottom: 1px solid var(--#{$prefix}border-color);\n }\n\n .faq-answer {\n padding: 1.1rem 1.25rem 1.1rem 3.85rem; // align with the question text (icon + gap)\n font-size: .95rem;\n line-height: 1.65;\n color: var(--#{$prefix}body-color);\n\n p:last-child,\n ul:last-child,\n ol:last-child,\n pre:last-child {\n margin-bottom: 0;\n }\n\n a {\n color: var(--#{$prefix}primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-thickness: 2px;\n }\n }\n\n code {\n padding: .12em .35em;\n font-size: .875em;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-sm);\n }\n\n pre.astro-code,\n pre {\n padding: .85rem 1rem;\n margin-top: .75rem;\n margin-bottom: .75rem;\n overflow-x: auto;\n font-size: .85rem;\n line-height: 1.55;\n @include border-radius($border-radius-sm);\n\n code {\n padding: 0;\n background: transparent;\n border: 0;\n }\n }\n }\n }\n\n // --- CTA footer -------------------------------------------------------\n .faq-cta {\n padding: 2.5rem 1.5rem;\n text-align: center;\n background: radial-gradient(ellipse at top, rgba(var(--#{$prefix}primary-rgb), .08), transparent 60%), var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-xl);\n }\n\n .faq-cta-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 3.5rem;\n height: 3.5rem;\n margin-bottom: 1rem;\n font-size: 1.6rem;\n color: var(--#{$prefix}primary);\n background: var(--#{$prefix}primary-bg-subtle);\n @include border-radius(50%);\n }\n\n .faq-cta h2 {\n margin: 0 0 .5rem;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--#{$prefix}emphasis-color);\n }\n\n .faq-cta p {\n max-width: 32rem;\n margin: 0 auto 1.5rem;\n color: var(--#{$prefix}secondary-color);\n }\n\n .faq-cta-actions {\n display: inline-flex;\n flex-wrap: wrap;\n gap: .5rem;\n justify-content: center;\n }\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["adminlte-docs.css","../../src/scss/adminlte-docs.scss","../../src/scss/mixins/_animations.scss","../../src/scss/_docs.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../node_modules/bootstrap/scss/mixins/_transition.scss"],"names":[],"mappings":"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","file":"adminlte-docs.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * AdminLTE v4.3.1 — documentation styles\n * Styles for the documentation and FAQ pages only (body.docs-page /\n * body.faq-page). Applications never need this file; it is loaded by the\n * docs pages in addition to adminlte.css.\n */\n@keyframes flipInX {\n 0% {\n opacity: 0;\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n }\n 40% {\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n }\n 60% {\n opacity: 1;\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n 100% {\n transform: perspective(400px);\n }\n}\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes fadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes shake {\n 0% {\n transform: translate(2px, 1px) rotate(0deg);\n }\n 10% {\n transform: translate(-1px, -2px) rotate(-2deg);\n }\n 20% {\n transform: translate(-3px, 0) rotate(3deg);\n }\n 30% {\n transform: translate(0, 2px) rotate(0deg);\n }\n 40% {\n transform: translate(1px, -1px) rotate(1deg);\n }\n 50% {\n transform: translate(-1px, 2px) rotate(-1deg);\n }\n 60% {\n transform: translate(-3px, 1px) rotate(0deg);\n }\n 70% {\n transform: translate(2px, 1px) rotate(-2deg);\n }\n 80% {\n transform: translate(-1px, -1px) rotate(4deg);\n }\n 90% {\n transform: translate(2px, 2px) rotate(0deg);\n }\n 100% {\n transform: translate(1px, -2px) rotate(-1deg);\n }\n}\n@keyframes wobble {\n 0% {\n transform: none;\n }\n 15% {\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n }\n 30% {\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n }\n 45% {\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n }\n 60% {\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n }\n 75% {\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n }\n 100% {\n transform: none;\n }\n}\n.astro-code {\n padding: 0.75rem;\n border-radius: 0.375rem;\n}\n\n.docs-page .app-content > .container-fluid {\n max-width: 60rem;\n}\n@media (min-width: 1400px) {\n .docs-page .app-content > .container-fluid {\n max-width: 64rem;\n }\n}\n.docs-page .card > .card-body {\n padding: 1.5rem;\n font-size: 1rem;\n line-height: 1.7;\n color: var(--bs-body-color);\n}\n@media (min-width: 768px) {\n .docs-page .card > .card-body {\n padding: 2.5rem;\n }\n}\n.docs-page .card > .card-body h1,\n.docs-page .card > .card-body h2,\n.docs-page .card > .card-body h3,\n.docs-page .card > .card-body h4,\n.docs-page .card > .card-body h5,\n.docs-page .card > .card-body h6,\n.docs-page .card > .card-body .h1,\n.docs-page .card > .card-body .h2,\n.docs-page .card > .card-body .h3,\n.docs-page .card > .card-body .h4,\n.docs-page .card > .card-body .h5,\n.docs-page .card > .card-body .h6 {\n margin-top: 2em;\n margin-bottom: 0.5em;\n font-weight: 600;\n line-height: 1.3;\n color: var(--bs-emphasis-color);\n scroll-margin-top: 4rem;\n}\n.docs-page .card > .card-body h1:first-child,\n.docs-page .card > .card-body h2:first-child,\n.docs-page .card > .card-body h3:first-child,\n.docs-page .card > .card-body h4:first-child,\n.docs-page .card > .card-body h5:first-child,\n.docs-page .card > .card-body h6:first-child,\n.docs-page .card > .card-body .h1:first-child,\n.docs-page .card > .card-body .h2:first-child,\n.docs-page .card > .card-body .h3:first-child,\n.docs-page .card > .card-body .h4:first-child,\n.docs-page .card > .card-body .h5:first-child,\n.docs-page .card > .card-body .h6:first-child {\n margin-top: 0;\n}\n.docs-page .card > .card-body h2,\n.docs-page .card > .card-body .h2 {\n padding-bottom: 0.35em;\n font-size: 1.75rem;\n border-bottom: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body h3,\n.docs-page .card > .card-body .h3 {\n font-size: 1.4rem;\n}\n.docs-page .card > .card-body h4,\n.docs-page .card > .card-body .h4 {\n font-size: 1.2rem;\n}\n.docs-page .card > .card-body h5,\n.docs-page .card > .card-body .h5 {\n padding-top: 1.5em;\n margin-top: 2.5em;\n font-size: 1.3rem;\n border-top: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body h5:first-child,\n.docs-page .card > .card-body .h5:first-child {\n padding-top: 0;\n border-top: 0;\n}\n.docs-page .card > .card-body h6,\n.docs-page .card > .card-body .h6 {\n margin-top: 1.75em;\n font-size: 1.08rem;\n color: var(--bs-emphasis-color);\n}\n.docs-page .card > .card-body p,\n.docs-page .card > .card-body ul,\n.docs-page .card > .card-body ol,\n.docs-page .card > .card-body dl,\n.docs-page .card > .card-body blockquote,\n.docs-page .card > .card-body table {\n margin-bottom: 1.1rem;\n}\n.docs-page .card > .card-body ul,\n.docs-page .card > .card-body ol {\n padding-left: 1.5rem;\n}\n.docs-page .card > .card-body ul li,\n.docs-page .card > .card-body ol li {\n margin-bottom: 0.35rem;\n}\n.docs-page .card > .card-body ul ul,\n.docs-page .card > .card-body ul ol,\n.docs-page .card > .card-body ol ul,\n.docs-page .card > .card-body ol ol {\n margin-top: 0.35rem;\n margin-bottom: 0;\n}\n.docs-page .card > .card-body h2 + p,\n.docs-page .card > .card-body h3 + p,\n.docs-page .card > .card-body h5 + p {\n margin-top: 0;\n}\n.docs-page .card > .card-body p code,\n.docs-page .card > .card-body li code,\n.docs-page .card > .card-body td code,\n.docs-page .card > .card-body th code,\n.docs-page .card > .card-body h2 code,\n.docs-page .card > .card-body h3 code,\n.docs-page .card > .card-body h4 code,\n.docs-page .card > .card-body h5 code,\n.docs-page .card > .card-body h6 code {\n padding: 0.15em 0.4em;\n font-size: 0.875em;\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n}\n.docs-page .card > .card-body pre.astro-code,\n.docs-page .card > .card-body pre {\n padding: 1rem 1.25rem;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow-x: auto;\n font-size: 0.875rem;\n line-height: 1.6;\n border-radius: 0.375rem;\n}\n.docs-page .card > .card-body pre.astro-code code,\n.docs-page .card > .card-body pre code {\n padding: 0;\n background: transparent;\n border: 0;\n}\n.docs-page .card > .card-body table {\n width: 100%;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow: hidden;\n font-size: 0.95rem;\n border-collapse: collapse;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n}\n.docs-page .card > .card-body table th,\n.docs-page .card > .card-body table td {\n padding: 0.65rem 0.9rem;\n text-align: left;\n vertical-align: top;\n border-bottom: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body table th {\n font-weight: 600;\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n}\n.docs-page .card > .card-body table tr:last-child td {\n border-bottom: 0;\n}\n.docs-page .card > .card-body table code {\n white-space: nowrap;\n}\n.docs-page .card > .card-body blockquote {\n padding: 0.85rem 1.1rem;\n margin-top: 1.25rem;\n color: var(--bs-emphasis-color);\n background: var(--bs-info-bg-subtle);\n border-left: 4px solid var(--bs-info-border-subtle);\n border-radius: 0.25rem;\n}\n.docs-page .card > .card-body blockquote p:last-child {\n margin-bottom: 0;\n}\n.docs-page .card > .card-body blockquote code {\n background: rgba(0, 0, 0, 0.05);\n}\n.docs-page .card > .card-body a:not(.btn):not(.nav-link) {\n color: var(--bs-primary);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 3px;\n}\n.docs-page .card > .card-body a:not(.btn):not(.nav-link):hover {\n text-decoration-thickness: 2px;\n}\n.docs-page .card > .card-body hr {\n margin: 2.5rem 0;\n border: 0;\n border-top: 1px solid var(--bs-border-color);\n opacity: 1;\n}\n.docs-page .card > .card-body > p:first-child,\n.docs-page .card > .card-body > p:first-of-type {\n margin-bottom: 2rem;\n font-size: 1.125rem;\n line-height: 1.6;\n color: var(--bs-body-color);\n}\n.docs-page .card > .card-body details.faq-item {\n margin-bottom: 0.5rem;\n overflow: hidden;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .docs-page .card > .card-body details.faq-item {\n transition: none;\n }\n}\n.docs-page .card > .card-body details.faq-item:hover {\n border-color: var(--bs-primary-border-subtle);\n}\n.docs-page .card > .card-body details.faq-item[open] {\n background: var(--bs-body-bg);\n border-color: var(--bs-primary-border-subtle);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);\n}\n.docs-page .card > .card-body details.faq-item summary {\n position: relative;\n padding: 0.9rem 3rem 0.9rem 1.1rem;\n font-size: 1rem;\n font-weight: 600;\n color: var(--bs-emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n transition: color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .docs-page .card > .card-body details.faq-item summary {\n transition: none;\n }\n}\n.docs-page .card > .card-body details.faq-item summary::-webkit-details-marker {\n display: none;\n}\n.docs-page .card > .card-body details.faq-item summary::marker {\n content: \"\";\n}\n.docs-page .card > .card-body details.faq-item summary:hover {\n color: var(--bs-primary);\n}\n.docs-page .card > .card-body details.faq-item summary::after {\n position: absolute;\n top: 50%;\n right: 1.1rem;\n display: inline-block;\n width: 0.55rem;\n height: 0.55rem;\n margin-top: -0.4rem;\n content: \"\";\n border-right: 2px solid currentcolor;\n border-bottom: 2px solid currentcolor;\n opacity: 0.55;\n transform: rotate(45deg);\n transition: transform 0.2s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .docs-page .card > .card-body details.faq-item summary::after {\n transition: none;\n }\n}\n.docs-page .card > .card-body details.faq-item[open] > summary {\n color: var(--bs-primary);\n border-bottom: 1px solid var(--bs-border-color);\n}\n.docs-page .card > .card-body details.faq-item[open] > summary::after {\n margin-top: -0.15rem;\n opacity: 1;\n transform: rotate(-135deg);\n}\n.docs-page .card > .card-body details.faq-item > *:not(summary) {\n padding-right: 1.1rem;\n padding-left: 1.1rem;\n}\n.docs-page .card > .card-body details.faq-item > *:not(summary):first-of-type {\n padding-top: 1rem;\n}\n.docs-page .card > .card-body details.faq-item > *:not(summary):last-child {\n padding-bottom: 1rem;\n}\n.docs-page .card > .card-body details.faq-item p,\n.docs-page .card > .card-body details.faq-item ul,\n.docs-page .card > .card-body details.faq-item ol {\n margin-bottom: 0.65rem;\n}\n.docs-page .card > .card-body details.faq-item > *:last-child p:last-child,\n.docs-page .card > .card-body details.faq-item > p:last-child,\n.docs-page .card > .card-body details.faq-item > ul:last-child,\n.docs-page .card > .card-body details.faq-item > ol:last-child {\n margin-bottom: 0;\n}\n.docs-page .card > .card-body details.faq-item pre.astro-code,\n.docs-page .card > .card-body details.faq-item pre {\n margin-right: 0;\n margin-left: 0;\n}\n.docs-page[data-bs-theme=dark] .card > .card-body blockquote code, [data-bs-theme=dark] .docs-page .card > .card-body blockquote code {\n background: rgba(255, 255, 255, 0.08);\n}\n\n.faq-page .app-content > .container-fluid {\n max-width: 64rem;\n}\n@media (min-width: 1400px) {\n .faq-page .app-content > .container-fluid {\n max-width: 72rem;\n }\n}\n.faq-page .faq-hero {\n position: relative;\n padding: 3rem 1.5rem 2.5rem;\n margin-top: 1rem;\n overflow: hidden;\n background: radial-gradient(ellipse at top left, rgba(var(--bs-primary-rgb), 0.12), transparent 60%), radial-gradient(ellipse at bottom right, rgba(var(--bs-info-rgb), 0.1), transparent 65%), var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 1rem;\n}\n.faq-page .faq-hero-eyebrow {\n display: inline-flex;\n gap: 0.4rem;\n align-items: center;\n padding: 0.35rem 0.85rem;\n margin-bottom: 1rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--bs-primary);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n background: var(--bs-primary-bg-subtle);\n border: 1px solid var(--bs-primary-border-subtle);\n border-radius: 50rem;\n}\n.faq-page .faq-hero-eyebrow .bi {\n font-size: 0.9rem;\n}\n.faq-page .faq-hero-title {\n margin: 0 0 0.5rem;\n font-size: 2.25rem;\n font-weight: 700;\n line-height: 1.15;\n color: var(--bs-emphasis-color);\n}\n@media (min-width: 768px) {\n .faq-page .faq-hero-title {\n font-size: 2.75rem;\n }\n}\n.faq-page .faq-hero-lead {\n max-width: 36rem;\n margin: 0 auto 1.75rem;\n font-size: 1.05rem;\n line-height: 1.55;\n color: var(--bs-secondary-color);\n}\n.faq-page .faq-search {\n position: relative;\n max-width: 32rem;\n margin: 0 auto;\n}\n.faq-page .faq-search .form-control {\n height: 3rem;\n padding-right: 3rem;\n padding-left: 3rem;\n font-size: 1rem;\n background: var(--bs-body-bg);\n border-radius: 50rem;\n transition: box-shadow 0.15s ease, border-color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-search .form-control {\n transition: none;\n }\n}\n.faq-page .faq-search .form-control:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.15);\n}\n.faq-page .faq-search-icon {\n position: absolute;\n top: 50%;\n left: 1.2rem;\n color: var(--bs-secondary-color);\n pointer-events: none;\n transform: translateY(-50%);\n}\n.faq-page .faq-search-clear {\n position: absolute;\n top: 50%;\n right: 0.65rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n color: var(--bs-secondary-color);\n background: var(--bs-tertiary-bg);\n border: 0;\n transform: translateY(-50%);\n border-radius: 50%;\n transition: background 0.15s ease, color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-search-clear {\n transition: none;\n }\n}\n.faq-page .faq-search-clear:hover {\n color: var(--bs-body-color);\n background: var(--bs-secondary-bg);\n}\n.faq-page .faq-empty-state {\n max-width: 32rem;\n padding: 1rem;\n margin: 1.5rem auto 0;\n font-size: 0.95rem;\n color: var(--bs-secondary-color);\n background: var(--bs-tertiary-bg);\n border-radius: 0.375rem;\n}\n.faq-page .faq-empty-state .bi {\n margin-right: 0.35rem;\n}\n.faq-page .faq-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n justify-content: center;\n}\n.faq-page .faq-chip {\n display: inline-flex;\n gap: 0.45rem;\n align-items: center;\n padding: 0.45rem 0.85rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--bs-body-color);\n text-decoration: none;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 50rem;\n transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease, color 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-chip {\n transition: none;\n }\n}\n.faq-page .faq-chip:hover {\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n transform: translateY(-1px);\n}\n.faq-page .faq-chip .bi {\n font-size: 1rem;\n}\n.faq-page .faq-chip-count {\n padding: 0 0.45rem;\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--bs-secondary-color);\n background: var(--bs-tertiary-bg);\n border-radius: 50rem;\n}\n.faq-page .faq-chip-primary:hover {\n color: var(--bs-primary-text-emphasis);\n background: var(--bs-primary-bg-subtle);\n border-color: var(--bs-primary-border-subtle);\n}\n.faq-page .faq-chip-primary:hover .faq-chip-count {\n color: var(--bs-primary-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-info:hover {\n color: var(--bs-info-text-emphasis);\n background: var(--bs-info-bg-subtle);\n border-color: var(--bs-info-border-subtle);\n}\n.faq-page .faq-chip-info:hover .faq-chip-count {\n color: var(--bs-info-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-warning:hover {\n color: var(--bs-warning-text-emphasis);\n background: var(--bs-warning-bg-subtle);\n border-color: var(--bs-warning-border-subtle);\n}\n.faq-page .faq-chip-warning:hover .faq-chip-count {\n color: var(--bs-warning-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-success:hover {\n color: var(--bs-success-text-emphasis);\n background: var(--bs-success-bg-subtle);\n border-color: var(--bs-success-border-subtle);\n}\n.faq-page .faq-chip-success:hover .faq-chip-count {\n color: var(--bs-success-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-danger:hover {\n color: var(--bs-danger-text-emphasis);\n background: var(--bs-danger-bg-subtle);\n border-color: var(--bs-danger-border-subtle);\n}\n.faq-page .faq-chip-danger:hover .faq-chip-count {\n color: var(--bs-danger-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-chip-secondary:hover {\n color: var(--bs-secondary-text-emphasis);\n background: var(--bs-secondary-bg-subtle);\n border-color: var(--bs-secondary-border-subtle);\n}\n.faq-page .faq-chip-secondary:hover .faq-chip-count {\n color: var(--bs-secondary-text-emphasis);\n background: rgba(0, 0, 0, 0.06);\n}\n.faq-page .faq-section {\n margin-bottom: 2.5rem;\n scroll-margin-top: 5rem;\n}\n.faq-page .faq-section-header {\n display: flex;\n gap: 1rem;\n align-items: center;\n padding: 1rem 1.25rem;\n margin-bottom: 1rem;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-left: 4px solid var(--bs-primary);\n border-radius: 0.375rem;\n}\n.faq-page .faq-section-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.35rem;\n color: var(--bs-primary);\n background: var(--bs-primary-bg-subtle);\n border-radius: 0.375rem;\n}\n.faq-page .faq-section-title {\n margin: 0;\n font-size: 1.4rem;\n font-weight: 600;\n line-height: 1.2;\n color: var(--bs-emphasis-color);\n}\n.faq-page .faq-section-count {\n margin: 0.1rem 0 0;\n font-size: 0.8rem;\n color: var(--bs-secondary-color);\n}\n.faq-page .faq-section-primary {\n border-left-color: var(--bs-primary);\n}\n.faq-page .faq-section-primary .faq-section-icon {\n color: var(--bs-primary-text-emphasis);\n background: var(--bs-primary-bg-subtle);\n}\n.faq-page .faq-section-info {\n border-left-color: var(--bs-info);\n}\n.faq-page .faq-section-info .faq-section-icon {\n color: var(--bs-info-text-emphasis);\n background: var(--bs-info-bg-subtle);\n}\n.faq-page .faq-section-warning {\n border-left-color: var(--bs-warning);\n}\n.faq-page .faq-section-warning .faq-section-icon {\n color: var(--bs-warning-text-emphasis);\n background: var(--bs-warning-bg-subtle);\n}\n.faq-page .faq-section-success {\n border-left-color: var(--bs-success);\n}\n.faq-page .faq-section-success .faq-section-icon {\n color: var(--bs-success-text-emphasis);\n background: var(--bs-success-bg-subtle);\n}\n.faq-page .faq-section-danger {\n border-left-color: var(--bs-danger);\n}\n.faq-page .faq-section-danger .faq-section-icon {\n color: var(--bs-danger-text-emphasis);\n background: var(--bs-danger-bg-subtle);\n}\n.faq-page .faq-section-secondary {\n border-left-color: var(--bs-secondary);\n}\n.faq-page .faq-section-secondary .faq-section-icon {\n color: var(--bs-secondary-text-emphasis);\n background: var(--bs-secondary-bg-subtle);\n}\n.faq-page .faq-section-items .faq-item {\n margin-bottom: 0.5rem;\n overflow: hidden;\n background: var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-section-items .faq-item {\n transition: none;\n }\n}\n.faq-page .faq-section-items .faq-item:hover {\n border-color: var(--bs-primary-border-subtle);\n transform: translateX(2px);\n}\n.faq-page .faq-section-items .faq-item[open] {\n border-color: var(--bs-primary-border-subtle);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n transform: none;\n}\n.faq-page .faq-section-items .faq-item summary {\n display: flex;\n gap: 0.85rem;\n align-items: center;\n padding: 1rem 1.25rem;\n font-size: 1rem;\n font-weight: 500;\n color: var(--bs-emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n}\n.faq-page .faq-section-items .faq-item summary::-webkit-details-marker {\n display: none;\n}\n.faq-page .faq-section-items .faq-item summary::marker {\n content: \"\";\n}\n.faq-page .faq-section-items .faq-item summary::after {\n content: none;\n}\n.faq-page .faq-section-items .faq-item .faq-q-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n font-size: 0.85rem;\n color: var(--bs-primary);\n background: var(--bs-primary-bg-subtle);\n border-radius: 50%;\n}\n.faq-page .faq-section-items .faq-item .faq-q-text {\n flex-grow: 1;\n}\n.faq-page .faq-section-items .faq-item .faq-q-chevron {\n flex-shrink: 0;\n color: var(--bs-secondary-color);\n transition: transform 0.2s ease, color 0.2s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .faq-page .faq-section-items .faq-item .faq-q-chevron {\n transition: none;\n }\n}\n.faq-page .faq-section-items .faq-item[open] .faq-q-chevron {\n color: var(--bs-primary);\n transform: rotate(180deg);\n}\n.faq-page .faq-section-items .faq-item[open] summary {\n color: var(--bs-primary);\n border-bottom: 1px solid var(--bs-border-color);\n}\n.faq-page .faq-section-items .faq-item .faq-answer {\n padding: 1.1rem 1.25rem 1.1rem 3.85rem;\n font-size: 0.95rem;\n line-height: 1.65;\n color: var(--bs-body-color);\n}\n.faq-page .faq-section-items .faq-item .faq-answer p:last-child,\n.faq-page .faq-section-items .faq-item .faq-answer ul:last-child,\n.faq-page .faq-section-items .faq-item .faq-answer ol:last-child,\n.faq-page .faq-section-items .faq-item .faq-answer pre:last-child {\n margin-bottom: 0;\n}\n.faq-page .faq-section-items .faq-item .faq-answer a {\n color: var(--bs-primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.faq-page .faq-section-items .faq-item .faq-answer a:hover {\n text-decoration-thickness: 2px;\n}\n.faq-page .faq-section-items .faq-item .faq-answer code {\n padding: 0.12em 0.35em;\n font-size: 0.875em;\n color: var(--bs-emphasis-color);\n background: var(--bs-tertiary-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 0.25rem;\n}\n.faq-page .faq-section-items .faq-item .faq-answer pre.astro-code,\n.faq-page .faq-section-items .faq-item .faq-answer pre {\n padding: 0.85rem 1rem;\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n overflow-x: auto;\n font-size: 0.85rem;\n line-height: 1.55;\n border-radius: 0.25rem;\n}\n.faq-page .faq-section-items .faq-item .faq-answer pre.astro-code code,\n.faq-page .faq-section-items .faq-item .faq-answer pre code {\n padding: 0;\n background: transparent;\n border: 0;\n}\n.faq-page .faq-cta {\n padding: 2.5rem 1.5rem;\n text-align: center;\n background: radial-gradient(ellipse at top, rgba(var(--bs-primary-rgb), 0.08), transparent 60%), var(--bs-body-bg);\n border: 1px solid var(--bs-border-color);\n border-radius: 1rem;\n}\n.faq-page .faq-cta-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 3.5rem;\n height: 3.5rem;\n margin-bottom: 1rem;\n font-size: 1.6rem;\n color: var(--bs-primary);\n background: var(--bs-primary-bg-subtle);\n border-radius: 50%;\n}\n.faq-page .faq-cta h2 {\n margin: 0 0 0.5rem;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--bs-emphasis-color);\n}\n.faq-page .faq-cta p {\n max-width: 32rem;\n margin: 0 auto 1.5rem;\n color: var(--bs-secondary-color);\n}\n.faq-page .faq-cta-actions {\n display: inline-flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n justify-content: center;\n}\n\n/*# sourceMappingURL=adminlte-docs.css.map */\n","/*!\n * AdminLTE v4.3.1 — documentation styles\n * Styles for the documentation and FAQ pages only (body.docs-page /\n * body.faq-page). Applications never need this file; it is loaded by the\n * docs pages in addition to adminlte.css.\n */\n\n// Bootstrap Configuration\n// ---------------------------------------------------\n@import \"bootstrap/scss/functions\";\n@import \"bootstrap-overrides\";\n@import \"bootstrap/scss/variables\";\n@import \"bootstrap/scss/variables-dark\";\n@import \"bootstrap/scss/maps\";\n@import \"bootstrap/scss/mixins\";\n\n// AdminLTE Configuration\n// ---------------------------------------------------\n@import \"variables\";\n@import \"variables-dark\";\n@import \"mixins\";\n\n// Documentation styles\n// ---------------------------------------------------\n@import \"docs\";\n","//\n// Mixins: Animation\n//\n\n\n@keyframes flipInX {\n 0% {\n opacity: 0;\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n }\n\n 40% {\n transition-timing-function: ease-in;\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n }\n\n 60% {\n opacity: 1;\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n }\n\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n\n 100% {\n transform: perspective(400px);\n }\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes fadeOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes shake {\n 0% {\n transform: translate(2px, 1px) rotate(0deg);\n }\n 10% {\n transform: translate(-1px, -2px) rotate(-2deg);\n }\n 20% {\n transform: translate(-3px, 0) rotate(3deg);\n }\n 30% {\n transform: translate(0, 2px) rotate(0deg);\n }\n 40% {\n transform: translate(1px, -1px) rotate(1deg);\n }\n 50% {\n transform: translate(-1px, 2px) rotate(-1deg);\n }\n 60% {\n transform: translate(-3px, 1px) rotate(0deg);\n }\n 70% {\n transform: translate(2px, 1px) rotate(-2deg);\n }\n 80% {\n transform: translate(-1px, -1px) rotate(4deg);\n }\n 90% {\n transform: translate(2px, 2px) rotate(0deg);\n }\n 100% {\n transform: translate(1px, -2px) rotate(-1deg);\n }\n}\n\n@keyframes wobble {\n 0% {\n transform: none;\n }\n\n 15% {\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n }\n\n 30% {\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n }\n\n 45% {\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n }\n\n 60% {\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n }\n\n 75% {\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n }\n\n 100% {\n transform: none;\n }\n}\n","//\n// Component: Docs\n//\n// Visual treatment for documentation pages. Body class `.docs-page` opts in.\n// Demo pages are not affected.\n//\n\n// Inline code blocks rendered by MDX (Astro highlight default class)\n.astro-code {\n padding: .75rem;\n @include border-radius($border-radius);\n}\n\n.docs-page {\n // Constrain the docs card to a comfortable reading width.\n // Tables and code blocks inside can still scroll horizontally if needed.\n .app-content > .container-fluid {\n max-width: 60rem; // ~960px\n\n @include media-breakpoint-up(xxl) {\n max-width: 64rem;\n }\n }\n\n //\n // Card body — breathing room + prose typography.\n // Only applied inside docs content cards so demo-page card content\n // stays unchanged.\n //\n .card > .card-body {\n padding: 1.5rem;\n font-size: 1rem;\n line-height: 1.7;\n color: var(--#{$prefix}body-color);\n\n @include media-breakpoint-up(md) {\n padding: 2.5rem;\n }\n\n //\n // Heading hierarchy. The MDX content in src/html/components/docs/ uses\n // ##### (h5) as the dominant section heading and ###### (h6) as a\n // sub-heading (most visible in FAQ.mdx, where h5 is a topic and h6 is\n // a question). Style h5 as a major section and h6 as a sub-section so\n // the visual hierarchy matches the semantic one.\n //\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n .h1,\n .h2,\n .h3,\n .h4,\n .h5,\n .h6 {\n margin-top: 2em;\n margin-bottom: .5em;\n font-weight: 600;\n line-height: 1.3;\n color: var(--#{$prefix}emphasis-color);\n scroll-margin-top: 4rem; // anchor-link friendly\n\n &:first-child {\n margin-top: 0;\n }\n }\n\n h2,\n .h2 {\n padding-bottom: .35em;\n font-size: 1.75rem;\n border-bottom: 1px solid var(--#{$prefix}border-color);\n }\n\n h3,\n .h3 {\n font-size: 1.4rem;\n }\n\n h4,\n .h4 {\n font-size: 1.2rem;\n }\n\n // h5 is the dominant section heading across docs MDX files. Give it\n // a visible separator above so sections are easy to scan.\n h5,\n .h5 {\n padding-top: 1.5em;\n margin-top: 2.5em;\n font-size: 1.3rem;\n border-top: 1px solid var(--#{$prefix}border-color);\n\n &:first-child {\n padding-top: 0;\n border-top: 0;\n }\n }\n\n // h6 is the sub-section / FAQ question style. Smaller than h5 but\n // still distinctly heading-like, with a touch of accent colour to\n // separate from body text.\n h6,\n .h6 {\n margin-top: 1.75em;\n font-size: 1.08rem;\n color: var(--#{$prefix}emphasis-color);\n }\n\n //\n // Paragraphs and lists.\n //\n p,\n ul,\n ol,\n dl,\n blockquote,\n table {\n margin-bottom: 1.1rem;\n }\n\n ul,\n ol {\n padding-left: 1.5rem;\n\n li {\n margin-bottom: .35rem;\n }\n\n // Tighter nested lists\n ul,\n ol {\n margin-top: .35rem;\n margin-bottom: 0;\n }\n }\n\n // Lead-style first paragraph (just after a heading)\n h2 + p,\n h3 + p,\n h5 + p {\n margin-top: 0;\n }\n\n //\n // Inline code — pill style that complements MDX's syntax-highlighted blocks.\n //\n p code,\n li code,\n td code,\n th code,\n h2 code,\n h3 code,\n h4 code,\n h5 code,\n h6 code {\n padding: .15em .4em;\n font-size: .875em;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-sm);\n }\n\n //\n // Code blocks.\n //\n pre.astro-code,\n pre {\n padding: 1rem 1.25rem;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow-x: auto;\n font-size: .875rem;\n line-height: 1.6;\n @include border-radius($border-radius);\n\n code {\n padding: 0;\n background: transparent;\n border: 0;\n }\n }\n\n //\n // Tables — reference-doc styling with hairline borders.\n //\n table {\n width: 100%;\n margin-top: 1.25rem;\n margin-bottom: 1.5rem;\n overflow: hidden;\n font-size: .95rem;\n border-collapse: collapse;\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-sm);\n\n th,\n td {\n padding: .65rem .9rem;\n text-align: left;\n vertical-align: top;\n border-bottom: 1px solid var(--#{$prefix}border-color);\n }\n\n th {\n font-weight: 600;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n }\n\n tr:last-child td {\n border-bottom: 0;\n }\n\n code {\n white-space: nowrap;\n }\n }\n\n //\n // Blockquotes used as info callouts.\n //\n blockquote {\n padding: .85rem 1.1rem;\n margin-top: 1.25rem;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}info-bg-subtle);\n border-left: 4px solid var(--#{$prefix}info-border-subtle);\n @include border-radius($border-radius-sm);\n\n p:last-child {\n margin-bottom: 0;\n }\n\n code {\n background: rgba(0, 0, 0, .05);\n }\n }\n\n //\n // Prose links — stand out more than Bootstrap defaults.\n //\n a:not(.btn):not(.nav-link) {\n color: var(--#{$prefix}primary);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 3px;\n\n &:hover {\n text-decoration-thickness: 2px;\n }\n }\n\n //\n // Horizontal rule — used as additional section separator.\n //\n hr {\n margin: 2.5rem 0;\n border: 0;\n border-top: 1px solid var(--#{$prefix}border-color);\n opacity: 1;\n }\n\n //\n // Lead paragraph — the first paragraph in any doc is a summary.\n // Visually heavier so it functions as a deck.\n //\n > p:first-child,\n > p:first-of-type {\n margin-bottom: 2rem;\n font-size: 1.125rem;\n line-height: 1.6;\n color: var(--#{$prefix}body-color);\n }\n\n //\n // FAQ / disclosure accordion — uses native <details>/<summary>.\n // Add `.faq-item` to <details> to opt in.\n //\n details.faq-item {\n margin-bottom: .5rem;\n overflow: hidden;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius);\n @include transition(border-color .15s ease, box-shadow .15s ease);\n\n &:hover {\n border-color: var(--#{$prefix}primary-border-subtle);\n }\n\n &[open] {\n background: var(--#{$prefix}body-bg);\n border-color: var(--#{$prefix}primary-border-subtle);\n box-shadow: 0 1px 3px rgba(0, 0, 0, .04);\n }\n\n summary {\n position: relative;\n padding: .9rem 3rem .9rem 1.1rem;\n font-size: 1rem;\n font-weight: 600;\n color: var(--#{$prefix}emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n @include transition(color .15s ease);\n\n // Hide the default disclosure triangle in Webkit/Blink\n &::-webkit-details-marker {\n display: none;\n }\n\n // Hide the marker in modern Firefox too\n &::marker {\n content: \"\";\n }\n\n &:hover {\n color: var(--#{$prefix}primary);\n }\n\n // Right-side chevron, rotates on open\n &::after {\n position: absolute;\n top: 50%;\n right: 1.1rem;\n display: inline-block;\n width: .55rem;\n height: .55rem;\n margin-top: -.4rem;\n content: \"\";\n border-right: 2px solid currentcolor;\n border-bottom: 2px solid currentcolor;\n opacity: .55;\n transform: rotate(45deg);\n @include transition(transform .2s ease);\n }\n }\n\n &[open] > summary {\n color: var(--#{$prefix}primary);\n border-bottom: 1px solid var(--#{$prefix}border-color);\n\n &::after {\n margin-top: -.15rem;\n opacity: 1;\n transform: rotate(-135deg);\n }\n }\n\n // Content (everything after <summary>) gets the inner padding\n > *:not(summary) {\n padding-right: 1.1rem;\n padding-left: 1.1rem;\n }\n\n > *:not(summary):first-of-type {\n padding-top: 1rem;\n }\n\n > *:not(summary):last-child {\n padding-bottom: 1rem;\n }\n\n // Tighten paragraphs/lists inside an FAQ answer\n p,\n ul,\n ol {\n margin-bottom: .65rem;\n }\n\n > *:last-child p:last-child,\n > p:last-child,\n > ul:last-child,\n > ol:last-child {\n margin-bottom: 0;\n }\n\n // Code blocks inside an FAQ answer get a less-distracting bg\n pre.astro-code,\n pre {\n margin-right: 0;\n margin-left: 0;\n }\n }\n }\n\n // Dark-mode tweak: blockquote info bg needs more contrast on dark\n &[data-bs-theme=\"dark\"],\n [data-bs-theme=\"dark\"] & {\n .card > .card-body blockquote code {\n background: rgba(255, 255, 255, .08);\n }\n }\n}\n\n//\n// FAQ page — custom layout that breaks out of the standard docs card\n// to give the FAQ a more distinctive visual identity. Opt in via\n// body.faq-page (set in pages/docs/faq.astro).\n//\n\n.faq-page {\n // The FAQ doesn't use the standard card wrapper used by other docs,\n // so the container can stretch wider for the chip strip and section\n // grid.\n .app-content > .container-fluid {\n max-width: 64rem;\n\n @include media-breakpoint-up(xxl) {\n max-width: 72rem;\n }\n }\n\n // --- Hero -------------------------------------------------------------\n .faq-hero {\n position: relative;\n padding: 3rem 1.5rem 2.5rem;\n margin-top: 1rem;\n overflow: hidden;\n background: radial-gradient(ellipse at top left, rgba(var(--#{$prefix}primary-rgb), .12), transparent 60%), radial-gradient(ellipse at bottom right, rgba(var(--#{$prefix}info-rgb), .1), transparent 65%), var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-xl);\n }\n\n .faq-hero-eyebrow {\n display: inline-flex;\n gap: .4rem;\n align-items: center;\n padding: .35rem .85rem;\n margin-bottom: 1rem;\n font-size: .75rem;\n font-weight: 600;\n color: var(--#{$prefix}primary);\n text-transform: uppercase;\n letter-spacing: .08em;\n background: var(--#{$prefix}primary-bg-subtle);\n border: 1px solid var(--#{$prefix}primary-border-subtle);\n @include border-radius(50rem);\n\n .bi {\n font-size: .9rem;\n }\n }\n\n .faq-hero-title {\n margin: 0 0 .5rem;\n font-size: 2.25rem;\n font-weight: 700;\n line-height: 1.15;\n color: var(--#{$prefix}emphasis-color);\n\n @include media-breakpoint-up(md) {\n font-size: 2.75rem;\n }\n }\n\n .faq-hero-lead {\n max-width: 36rem;\n margin: 0 auto 1.75rem;\n font-size: 1.05rem;\n line-height: 1.55;\n color: var(--#{$prefix}secondary-color);\n }\n\n .faq-search {\n position: relative;\n max-width: 32rem;\n margin: 0 auto;\n\n .form-control {\n height: 3rem;\n padding-right: 3rem;\n padding-left: 3rem;\n font-size: 1rem;\n background: var(--#{$prefix}body-bg);\n @include border-radius(50rem);\n @include transition(box-shadow .15s ease, border-color .15s ease);\n\n &:focus {\n box-shadow: 0 0 0 .25rem rgba(var(--#{$prefix}primary-rgb), .15);\n }\n }\n }\n\n .faq-search-icon {\n position: absolute;\n top: 50%;\n left: 1.2rem;\n color: var(--#{$prefix}secondary-color);\n pointer-events: none;\n transform: translateY(-50%);\n }\n\n .faq-search-clear {\n position: absolute;\n top: 50%;\n right: .65rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n color: var(--#{$prefix}secondary-color);\n background: var(--#{$prefix}tertiary-bg);\n border: 0;\n transform: translateY(-50%);\n @include border-radius(50%);\n @include transition(background .15s ease, color .15s ease);\n\n &:hover {\n color: var(--#{$prefix}body-color);\n background: var(--#{$prefix}secondary-bg);\n }\n }\n\n .faq-empty-state {\n max-width: 32rem;\n padding: 1rem;\n margin: 1.5rem auto 0;\n font-size: .95rem;\n color: var(--#{$prefix}secondary-color);\n background: var(--#{$prefix}tertiary-bg);\n @include border-radius($border-radius);\n\n .bi {\n margin-right: .35rem;\n }\n }\n\n // --- Section nav chips ------------------------------------------------\n .faq-chips {\n display: flex;\n flex-wrap: wrap;\n gap: .5rem;\n justify-content: center;\n }\n\n .faq-chip {\n display: inline-flex;\n gap: .45rem;\n align-items: center;\n padding: .45rem .85rem;\n font-size: .875rem;\n font-weight: 500;\n color: var(--#{$prefix}body-color);\n text-decoration: none;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius(50rem);\n @include transition(transform .15s ease, border-color .15s ease, background-color .15s ease, color .15s ease);\n\n &:hover {\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n transform: translateY(-1px);\n }\n\n .bi {\n font-size: 1rem;\n }\n }\n\n .faq-chip-count {\n padding: 0 .45rem;\n font-size: .7rem;\n font-weight: 600;\n color: var(--#{$prefix}secondary-color);\n background: var(--#{$prefix}tertiary-bg);\n @include border-radius(50rem);\n }\n\n // Per-section chip accent on hover/active\n @each $tone in (primary, info, warning, success, danger, secondary) {\n .faq-chip-#{$tone}:hover {\n color: var(--#{$prefix}#{$tone}-text-emphasis);\n background: var(--#{$prefix}#{$tone}-bg-subtle);\n border-color: var(--#{$prefix}#{$tone}-border-subtle);\n\n .faq-chip-count {\n color: var(--#{$prefix}#{$tone}-text-emphasis);\n background: rgba(0, 0, 0, .06);\n }\n }\n }\n\n // --- Sections ---------------------------------------------------------\n .faq-section {\n margin-bottom: 2.5rem;\n scroll-margin-top: 5rem;\n }\n\n .faq-section-header {\n display: flex;\n gap: 1rem;\n align-items: center;\n padding: 1rem 1.25rem;\n margin-bottom: 1rem;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n border-left: 4px solid var(--#{$prefix}primary);\n @include border-radius($border-radius);\n }\n\n .faq-section-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.35rem;\n color: var(--#{$prefix}primary);\n background: var(--#{$prefix}primary-bg-subtle);\n @include border-radius($border-radius);\n }\n\n .faq-section-title {\n margin: 0;\n font-size: 1.4rem;\n font-weight: 600;\n line-height: 1.2;\n color: var(--#{$prefix}emphasis-color);\n }\n\n .faq-section-count {\n margin: .1rem 0 0;\n font-size: .8rem;\n color: var(--#{$prefix}secondary-color);\n }\n\n // Per-section tone accents\n @each $tone in (primary, info, warning, success, danger, secondary) {\n .faq-section-#{$tone} {\n border-left-color: var(--#{$prefix}#{$tone});\n\n .faq-section-icon {\n color: var(--#{$prefix}#{$tone}-text-emphasis);\n background: var(--#{$prefix}#{$tone}-bg-subtle);\n }\n }\n }\n\n // --- FAQ items (override the generic .docs-page details styling) ------\n .faq-section-items .faq-item {\n margin-bottom: .5rem;\n overflow: hidden;\n background: var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius);\n @include transition(border-color .15s ease, box-shadow .15s ease, transform .15s ease);\n\n &:hover {\n border-color: var(--#{$prefix}primary-border-subtle);\n transform: translateX(2px);\n }\n\n &[open] {\n border-color: var(--#{$prefix}primary-border-subtle);\n box-shadow: 0 2px 8px rgba(0, 0, 0, .04);\n transform: none;\n }\n\n summary {\n display: flex;\n gap: .85rem;\n align-items: center;\n padding: 1rem 1.25rem;\n font-size: 1rem;\n font-weight: 500;\n color: var(--#{$prefix}emphasis-color);\n list-style: none;\n cursor: pointer;\n user-select: none;\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &::marker {\n content: \"\";\n }\n\n &::after {\n content: none; // disable the generic chevron, we use our own\n }\n }\n\n .faq-q-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n font-size: .85rem;\n color: var(--#{$prefix}primary);\n background: var(--#{$prefix}primary-bg-subtle);\n @include border-radius(50%);\n }\n\n .faq-q-text {\n flex-grow: 1;\n }\n\n .faq-q-chevron {\n flex-shrink: 0;\n color: var(--#{$prefix}secondary-color);\n @include transition(transform .2s ease, color .2s ease);\n }\n\n &[open] .faq-q-chevron {\n color: var(--#{$prefix}primary);\n transform: rotate(180deg);\n }\n\n &[open] summary {\n color: var(--#{$prefix}primary);\n border-bottom: 1px solid var(--#{$prefix}border-color);\n }\n\n .faq-answer {\n padding: 1.1rem 1.25rem 1.1rem 3.85rem; // align with the question text (icon + gap)\n font-size: .95rem;\n line-height: 1.65;\n color: var(--#{$prefix}body-color);\n\n p:last-child,\n ul:last-child,\n ol:last-child,\n pre:last-child {\n margin-bottom: 0;\n }\n\n a {\n color: var(--#{$prefix}primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-thickness: 2px;\n }\n }\n\n code {\n padding: .12em .35em;\n font-size: .875em;\n color: var(--#{$prefix}emphasis-color);\n background: var(--#{$prefix}tertiary-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-sm);\n }\n\n pre.astro-code,\n pre {\n padding: .85rem 1rem;\n margin-top: .75rem;\n margin-bottom: .75rem;\n overflow-x: auto;\n font-size: .85rem;\n line-height: 1.55;\n @include border-radius($border-radius-sm);\n\n code {\n padding: 0;\n background: transparent;\n border: 0;\n }\n }\n }\n }\n\n // --- CTA footer -------------------------------------------------------\n .faq-cta {\n padding: 2.5rem 1.5rem;\n text-align: center;\n background: radial-gradient(ellipse at top, rgba(var(--#{$prefix}primary-rgb), .08), transparent 60%), var(--#{$prefix}body-bg);\n border: 1px solid var(--#{$prefix}border-color);\n @include border-radius($border-radius-xl);\n }\n\n .faq-cta-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 3.5rem;\n height: 3.5rem;\n margin-bottom: 1rem;\n font-size: 1.6rem;\n color: var(--#{$prefix}primary);\n background: var(--#{$prefix}primary-bg-subtle);\n @include border-radius(50%);\n }\n\n .faq-cta h2 {\n margin: 0 0 .5rem;\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--#{$prefix}emphasis-color);\n }\n\n .faq-cta p {\n max-width: 32rem;\n margin: 0 auto 1.5rem;\n color: var(--#{$prefix}secondary-color);\n }\n\n .faq-cta-actions {\n display: inline-flex;\n flex-wrap: wrap;\n gap: .5rem;\n justify-content: center;\n }\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@charset "UTF-8";/*!
|
|
2
|
-
* AdminLTE v4.
|
|
2
|
+
* AdminLTE v4.3.1 — documentation styles
|
|
3
3
|
* Styles for the documentation and FAQ pages only (body.docs-page /
|
|
4
4
|
* body.faq-page). Applications never need this file; it is loaded by the
|
|
5
5
|
* docs pages in addition to adminlte.css.
|