admin-lte 4.2.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +17 -1
  3. package/dist/css/adminlte-docs.css +1 -1
  4. package/dist/css/adminlte-docs.css.map +1 -1
  5. package/dist/css/adminlte-docs.min.css +1 -1
  6. package/dist/css/adminlte-docs.min.css.map +1 -1
  7. package/dist/css/adminlte-docs.rtl.css +1 -1
  8. package/dist/css/adminlte-docs.rtl.css.map +1 -1
  9. package/dist/css/adminlte-docs.rtl.min.css +1 -1
  10. package/dist/css/adminlte-docs.rtl.min.css.map +1 -1
  11. package/dist/css/adminlte-select2.css +329 -0
  12. package/dist/css/adminlte-select2.css.map +1 -0
  13. package/dist/css/adminlte-select2.min.css +12 -0
  14. package/dist/css/adminlte-select2.min.css.map +1 -0
  15. package/dist/css/adminlte-select2.rtl.css +328 -0
  16. package/dist/css/adminlte-select2.rtl.css.map +1 -0
  17. package/dist/css/adminlte-select2.rtl.min.css +12 -0
  18. package/dist/css/adminlte-select2.rtl.min.css.map +1 -0
  19. package/dist/css/adminlte.css +202 -1
  20. package/dist/css/adminlte.css.map +1 -1
  21. package/dist/css/adminlte.min.css +2 -2
  22. package/dist/css/adminlte.min.css.map +1 -1
  23. package/dist/css/adminlte.rtl.css +202 -1
  24. package/dist/css/adminlte.rtl.css.map +1 -1
  25. package/dist/css/adminlte.rtl.min.css +2 -2
  26. package/dist/css/adminlte.rtl.min.css.map +1 -1
  27. package/dist/js/adminlte.esm.js +231 -81
  28. package/dist/js/adminlte.esm.js.map +1 -1
  29. package/dist/js/adminlte.esm.min.js +2 -2
  30. package/dist/js/adminlte.esm.min.js.map +1 -1
  31. package/dist/js/adminlte.js +231 -80
  32. package/dist/js/adminlte.js.map +1 -1
  33. package/dist/js/adminlte.min.js +2 -2
  34. package/dist/js/adminlte.min.js.map +1 -1
  35. package/dist/js/types/adminlte.d.ts +2 -1
  36. package/dist/js/types/sidebar-search.d.ts +46 -0
  37. package/package.json +1 -1
  38. package/src/scss/_app-sidebar.scss +12 -0
  39. package/src/scss/_ribbon.scss +75 -0
  40. package/src/scss/_variables.scss +28 -0
  41. package/src/scss/_widgets.scss +192 -0
  42. package/src/scss/adminlte-docs.scss +1 -1
  43. package/src/scss/adminlte-select2.scss +31 -0
  44. package/src/scss/adminlte.scss +1 -1
  45. package/src/scss/compat/_select2.scss +476 -0
  46. package/src/scss/parts/_extra-components.scss +2 -0
  47. package/src/ts/accessibility.ts +25 -13
  48. package/src/ts/adminlte.ts +3 -1
  49. package/src/ts/sidebar-search.ts +252 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,45 @@ 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
+ ## [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
+
8
47
  ## [4.2.0] - 2026-08-06
9
48
 
10
49
  ### Added
package/README.md CHANGED
@@ -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 19 questions
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
 
@@ -1,6 +1,6 @@
1
1
  @charset "UTF-8";
2
2
  /*!
3
- * AdminLTE v4.2.0 — documentation styles
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.2.0 — 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.2.0 — 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.0 — documentation styles
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.