administratum 0.3.0 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d52b00e916d3f9e605725152f2852af0c17d1ca26ed2318eb4c12eb98ac2425
4
- data.tar.gz: cc71157a2d3d630db6f5cb5a4b63a046570de9f1eb3b89c0937c3aa0051dba21
3
+ metadata.gz: afdcb241448cb659281eb3e38c1d8a3a812cd706cb1a9e957c8f3f00bb75ee42
4
+ data.tar.gz: d28ae61196c80497d0b84a828753bb5b1fe1df0ce2aa70e81a91ec273d8741bf
5
5
  SHA512:
6
- metadata.gz: 33245f7b5f8c9f350e37e401258abe79952ac679b7fb03f8ad486d818ac0fdc01a1ceba5b3ae5e093ed4e4910983b2a6f9db4f3b8c3bcb2dd862a91a6f095f0f
7
- data.tar.gz: ecff79729da7633a0abadb33d3aed7e241d1e7e5eae81413aa000a39a46e5befb5902f78599b7fc67fdd00f66f50f128b5da469c3115a18fe58f028726874115
6
+ metadata.gz: c0addf08a68ad56884493489f1679a3d97297f16f4b6a14578ad668a95c804f4d29fa19616090ce64e8cc8a3ac4bd6c6c56f948435254968c33ffbb731f280b8
7
+ data.tar.gz: 7edd174c8c5afa2d6f8dffb8c6f6f9f1d40bb3a47263b61b48247bbb7e8aeddd22d229381e1fbfbf25699968e1ba315ea73ad9647d79df6ee4bd350fb5a91c91
data/DESIGN.md CHANGED
@@ -51,6 +51,7 @@ Overrides, in order of precedence:
51
51
  | Buttons | `adm-btn` plus one of `adm-btn-primary`, `-secondary`, `-danger`, `-ghost`; sizes `adm-btn-sm`, `adm-btn-block`; `adm-btn-group`, `adm-icon-btn`, `adm-link` |
52
52
  | Tables | `adm-table-wrap`, `adm-table`, `adm-table-actions`, `adm-table-footer`, `adm-empty`, `adm-pagy` |
53
53
  | Show page | `adm-attributes`, `adm-attribute` |
54
+ | Aside menus | `adm-with-aside`, `adm-with-aside-main`, `adm-aside`, `adm-menu`, `adm-menu-form`, `adm-menu-item`, `adm-menu-item-primary`, `adm-menu-item-danger` (rendered by `with_asides`) |
54
55
  | Forms | `adm-form`, `adm-field`, `adm-field-horizontal`, `adm-field-control`, `adm-label`, `adm-input`, `adm-checkbox`, `adm-check`, `adm-hint`, `adm-error`, `adm-form-footer` |
55
56
  | Feedback | `adm-alert` (see below), `adm-badge` (see below), `adm-flash`, `adm-flash-notice`, `adm-flash-alert` |
56
57
  | Searchable select | `adm-combobox`, `adm-combobox-input`, `adm-combobox-listbox`, `adm-combobox-group`, `adm-combobox-option`, `adm-combobox-option-active`, `adm-combobox-empty` (built by `administratum.js`) |
data/README.md CHANGED
@@ -250,7 +250,7 @@ Path helpers:
250
250
  - `resource_form_path(record)`, `action_path(:write, record)`, `parent_path`
251
251
  - `paths_for(OtherAdmin).index`, for paths to another resource
252
252
 
253
- Layout helpers: `card(title:) { }`, `island`, `record_title`, `format_value`. Reordering: `reorder_form`,
253
+ Layout helpers: `card(title:) { }`, `with_asides(page) { }`, `island`, `record_title`, `format_value`. Reordering: `reorder_form`,
254
254
  `reorder_controls`, `reorder_save_button` (see below). Searchable selects: `adm_combobox_data`.
255
255
 
256
256
  ### Nested resources
@@ -313,6 +313,30 @@ Non-GET buttons render as small forms, so no rails-ujs is needed.
313
313
 
314
314
  A panel partial receives `resource:` and `button:`.
315
315
 
316
+ #### Asides
317
+
318
+ When a page has more actions than fit in the header, move the minor ones into an aside: a menu in a
319
+ column beside the content (below it on narrow screens).
320
+
321
+ ```ruby
322
+ class PostAdmin < Administratum::Resource
323
+ button :write, on: :show, style: :primary # stays in the header
324
+
325
+ aside on: :show, title: "Maintenance" do # title defaults to "Actions"
326
+ button :reindex
327
+ button :history, to: ->(post) { post_versions_path(post) }
328
+ button :purge, style: :danger, confirm: "Purge?", if: ->(post) { post.archived? }
329
+ end
330
+ end
331
+ ```
332
+
333
+ - `on:` takes `:index`, `:show`, `:new` or `:edit`, or several of them. A page can have more than one aside.
334
+ - Buttons inside take the same options as `button`, except `on:`. They render as menu items, and `style:` only
335
+ colours them (`:primary` and `:danger`).
336
+ - An aside whose buttons are all hidden by `if:` isn't rendered, and the page keeps its full width.
337
+ - In your own templates, wrap the content in `<%= with_asides(:show) do %> … <% end %>`, or render just the
338
+ menus with `asides_for(:show)`.
339
+
316
340
  ### Ordering records
317
341
 
318
342
  ```ruby
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-divide-y-reverse:0;--tw-leading:initial;--tw-duration:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-3xl:48rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-relaxed:1.625;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-adm-bg:oklch(97.5% .004 255);--color-adm-surface:oklch(100% 0 0);--color-adm-surface-muted:oklch(96.5% .006 255);--color-adm-border:oklch(91% .008 255);--color-adm-text:oklch(24% .02 260);--color-adm-muted:oklch(52% .02 260);--color-adm-primary:oklch(52% .18 262);--color-adm-primary-fg:oklch(99% 0 0);--color-adm-danger:oklch(54% .2 25);--color-adm-danger-fg:oklch(99% 0 0);--color-adm-success:oklch(52% .14 155);--color-adm-warning:oklch(52% .13 70);--color-adm-ring:oklch(52% .18 262/.35);--color-adm-overlay:oklch(20% .02 260/.45);--radius-adm:.5rem;--font-adm:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-adm-mono:ui-monospace, SFMono-Regular, Menlo, monospace}:root{color-scheme:light dark}:root.light{color-scheme:light}:root.dark{color-scheme:dark;--color-adm-bg:oklch(18% .012 260);--color-adm-surface:oklch(23% .014 260);--color-adm-surface-muted:oklch(27% .014 260);--color-adm-border:oklch(33% .014 260);--color-adm-text:oklch(93% .008 260);--color-adm-muted:oklch(70% .015 260);--color-adm-primary:oklch(68% .15 262);--color-adm-primary-fg:oklch(16% .02 260);--color-adm-danger:oklch(80% .13 25);--color-adm-danger-fg:oklch(16% .02 260);--color-adm-success:oklch(78% .14 155);--color-adm-warning:oklch(82% .14 80);--color-adm-ring:oklch(68% .15 262/.4);--color-adm-overlay:oklch(5% 0 0/.6)}@media (prefers-color-scheme:dark){:root:not(.light){--color-adm-bg:oklch(18% .012 260);--color-adm-surface:oklch(23% .014 260);--color-adm-surface-muted:oklch(27% .014 260);--color-adm-border:oklch(33% .014 260);--color-adm-text:oklch(93% .008 260);--color-adm-muted:oklch(70% .015 260);--color-adm-primary:oklch(68% .15 262);--color-adm-primary-fg:oklch(16% .02 260);--color-adm-danger:oklch(80% .13 25);--color-adm-danger-fg:oklch(16% .02 260);--color-adm-success:oklch(78% .14 155);--color-adm-warning:oklch(82% .14 80);--color-adm-ring:oklch(68% .15 262/.4);--color-adm-overlay:oklch(5% 0 0/.6)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}.adm-body{background-color:var(--color-adm-bg);min-height:100vh;font-family:var(--font-adm);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-adm-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.adm-scroll-lock{overflow:hidden}}@layer components{.adm-container{width:100%;max-width:var(--container-7xl);padding-inline:calc(var(--spacing) * 4);margin-inline:auto}@media (min-width:40rem){.adm-container{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:64rem){.adm-container{padding-inline:calc(var(--spacing) * 8)}}.adm-main{padding-bottom:calc(var(--spacing) * 12);flex-direction:column;display:flex}.adm-page-body{gap:calc(var(--spacing) * 6);padding-top:calc(var(--spacing) * 6);flex-direction:column;display:flex}.adm-grid{gap:calc(var(--spacing) * 4);display:grid}@media (min-width:40rem){.adm-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.adm-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}.adm-sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.adm-muted{color:var(--color-adm-muted)}.adm-topbar{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface)}.adm-topbar-inner{height:calc(var(--spacing) * 14);align-items:center;gap:calc(var(--spacing) * 3);display:flex}.adm-brand{align-items:center;gap:calc(var(--spacing) * 2);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text);text-decoration-line:none;display:flex}.adm-brand-name{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.adm-logo{height:calc(var(--spacing) * 7);width:auto}.adm-topbar-actions{align-items:center;gap:var(--spacing);margin-left:auto;display:flex}.adm-nav{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);display:none}@media (min-width:48rem){.adm-nav{display:block}}.adm-nav.adm-open{display:block}.adm-nav-list{gap:var(--spacing);padding-block:calc(var(--spacing) * 2);flex-direction:column;margin-bottom:-1px;display:flex}@media (min-width:48rem){.adm-nav-list{gap:calc(var(--spacing) * 6);flex-direction:row;padding-block:0}}.adm-nav-link{border-bottom-style:var(--tw-border-style);padding-block:calc(var(--spacing) * 3);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-color:#0000;border-bottom-width:2px;text-decoration-line:none;display:block}@media (hover:hover){.adm-nav-link:hover{color:var(--color-adm-text)}}.adm-nav-link-active{border-color:var(--color-adm-primary);color:var(--color-adm-text)}.adm-dropdown{position:relative}.adm-dropdown-menu{z-index:30;margin-top:calc(var(--spacing) * 2);min-width:calc(var(--spacing) * 44);border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);padding-block:var(--spacing);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);position:absolute;right:0;overflow:hidden}.adm-dropdown-item{cursor:pointer;width:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);text-align:left;color:var(--color-adm-text);display:block}@media (hover:hover){.adm-dropdown-item:hover{background-color:var(--color-adm-surface-muted)}}.adm-page-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface)}.adm-page-header-inner{align-items:flex-end;gap:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 5);flex-wrap:wrap;display:flex}.adm-page-heading{flex:1;min-width:0}.adm-page-title{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--color-adm-text);overflow:hidden}.adm-page-actions{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.adm-breadcrumb{margin-bottom:var(--spacing);align-items:center;gap:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-adm-muted);flex-wrap:wrap;display:flex}.adm-breadcrumb-item a{color:var(--color-adm-muted);text-decoration-line:none}@media (hover:hover){.adm-breadcrumb-item a:hover{color:var(--color-adm-text)}}.adm-breadcrumb-item+.adm-breadcrumb-item:before{content:"/";margin-right:calc(var(--spacing) * 1.5);color:var(--color-adm-border)}.adm-card{border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);overflow:hidden}.adm-card-header{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3.5);display:flex}.adm-card-title{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text)}.adm-card-body{padding:calc(var(--spacing) * 5)}.adm-card-footer{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3)}.adm-tile{gap:var(--spacing);padding:calc(var(--spacing) * 5);transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));flex-direction:column;text-decoration-line:none;display:flex}@media (hover:hover){.adm-tile:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.adm-tile-label{color:var(--color-adm-muted)}.adm-tile-value{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.adm-btn{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-adm);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;text-decoration-line:none;display:inline-flex}.adm-btn:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-adm-ring);--tw-outline-style:none;outline-style:none}.adm-btn:disabled{cursor:not-allowed;opacity:.5}.adm-btn-primary{border-color:var(--color-adm-primary);background-color:var(--color-adm-primary);color:var(--color-adm-primary-fg)}@media (hover:hover){.adm-btn-primary:hover{opacity:.9}}.adm-btn-secondary{border-color:var(--color-adm-border);background-color:var(--color-adm-surface);color:var(--color-adm-text)}@media (hover:hover){.adm-btn-secondary:hover{background-color:var(--color-adm-surface-muted)}}.adm-btn-danger{border-color:var(--color-adm-border);background-color:var(--color-adm-surface);color:var(--color-adm-danger)}@media (hover:hover){.adm-btn-danger:hover{border-color:var(--color-adm-danger);background-color:var(--color-adm-danger);color:var(--color-adm-danger-fg)}}.adm-btn-ghost{color:var(--color-adm-text);background-color:#0000;border-color:#0000}@media (hover:hover){.adm-btn-ghost:hover{background-color:var(--color-adm-surface-muted)}}.adm-btn-sm{padding-inline:calc(var(--spacing) * 2.5);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.adm-btn-block{width:100%}.adm-btn-group{justify-content:flex-end;align-items:center;gap:var(--spacing);display:flex}.adm-inline-form{display:inline-flex}.adm-icon-btn{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);cursor:pointer;border-radius:var(--radius-adm);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));color:var(--color-adm-muted);justify-content:center;align-items:center;display:inline-flex}@media (hover:hover){.adm-icon-btn:hover{background-color:var(--color-adm-surface-muted);color:var(--color-adm-text)}}.adm-icon-btn:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-adm-ring);--tw-outline-style:none;outline-style:none}.adm-icon{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.adm-link{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-primary);text-decoration-line:none}@media (hover:hover){.adm-link:hover{text-decoration-line:underline}}.adm-table-wrap{overflow-x:auto}.adm-table{border-collapse:collapse;text-align:left;width:100%}.adm-table th{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);white-space:nowrap;color:var(--color-adm-muted);text-transform:uppercase}.adm-table th a{color:var(--color-adm-muted);text-decoration-line:none}@media (hover:hover){.adm-table th a:hover{color:var(--color-adm-text)}}.adm-table td{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);vertical-align:middle}.adm-table tbody tr:last-child td{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.adm-table tbody tr:hover td{background-color:var(--color-adm-surface-muted)}.adm-table-actions{text-align:right;white-space:nowrap;width:1px}.adm-table-footer{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 3);flex-wrap:wrap;display:flex}.adm-empty{padding-block:calc(var(--spacing) * 10);text-align:center;color:var(--color-adm-muted)}.adm-tabs{margin-bottom:calc(var(--spacing) * -2);column-gap:calc(var(--spacing) * 6);row-gap:var(--spacing);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);flex-wrap:wrap;display:flex}.adm-tab{align-items:center;gap:calc(var(--spacing) * 2);border-bottom-style:var(--tw-border-style);padding-block:calc(var(--spacing) * 2);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted);border-color:#0000;border-bottom-width:2px;margin-bottom:-1px;text-decoration-line:none;display:inline-flex}@media (hover:hover){.adm-tab:hover{color:var(--color-adm-text)}}.adm-tab-active{border-color:var(--color-adm-primary);color:var(--color-adm-text)}.adm-tab-count{background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-adm-muted);border-radius:3.40282e38px}.adm-pagy .pagy{align-items:center;gap:var(--spacing);display:flex}.adm-pagy .pagy a{border-radius:var(--radius-adm);padding-inline:calc(var(--spacing) * 2.5);padding-block:var(--spacing);color:var(--color-adm-text);text-decoration-line:none}@media (hover:hover){.adm-pagy .pagy a:hover{background-color:var(--color-adm-surface)}}.adm-pagy .pagy a.current,.adm-pagy .pagy a[aria-current=page]{background-color:var(--color-adm-primary);color:var(--color-adm-primary-fg)}.adm-pagy .pagy a:not([href]){color:var(--color-adm-muted)}:where(.adm-attributes>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--color-adm-border)}.adm-attribute{gap:var(--spacing);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);display:grid}@media (min-width:40rem){.adm-attribute{gap:calc(var(--spacing) * 6);grid-template-columns:12rem 1fr}}.adm-attribute dt{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted)}.adm-attribute dd{overflow-wrap:break-word;min-width:0;color:var(--color-adm-text)}.adm-form{gap:calc(var(--spacing) * 5);flex-direction:column;display:flex}.adm-form-flush{gap:0}.adm-form .field_with_errors{display:contents}.adm-form-errors{padding-inline:calc(var(--spacing) * 6);padding-top:calc(var(--spacing) * 6)}.adm-form-body{gap:calc(var(--spacing) * 6);padding:calc(var(--spacing) * 6);flex-direction:column;display:flex}.adm-field{gap:calc(var(--spacing) * 2);flex-direction:column;display:flex}.adm-field-horizontal{gap:calc(var(--spacing) * 2)}@media (min-width:40rem){.adm-field-horizontal{column-gap:calc(var(--spacing) * 8);grid-template-columns:minmax(0,13rem) minmax(0,1fr);display:grid}}.adm-field-label{flex-direction:column;display:flex}@media (min-width:40rem){.adm-field-label{padding-top:calc(var(--spacing) * 2.5)}}.adm-field-control{width:100%;max-width:var(--container-3xl);gap:calc(var(--spacing) * 2);flex-direction:column;min-width:0;display:flex}.adm-field-row{gap:calc(var(--spacing) * 2);display:flex}.adm-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-text)}.adm-required{margin-left:calc(var(--spacing) * .5);color:var(--color-adm-danger)}.adm-hint{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--color-adm-muted)}.adm-error{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-danger)}.adm-input{min-height:calc(var(--spacing) * 10);border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);width:100%;padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-adm-text);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));display:block}.adm-input::placeholder{color:#626975b3}@supports (color:color-mix(in lab, red, red)){.adm-input::placeholder{color:color-mix(in oklab, var(--color-adm-muted) 70%, transparent)}}.adm-input:focus{border-color:var(--color-adm-primary);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-adm-ring);--tw-outline-style:none;outline-style:none}textarea.adm-input{min-height:calc(var(--spacing) * 24);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}select[multiple].adm-input{padding-block:calc(var(--spacing) * 1.5)}select.adm-input:not([multiple]),.adm-combobox-input{appearance:none;padding-right:calc(var(--spacing) * 9);background-repeat:no-repeat;background-image:linear-gradient(45deg, transparent 50%, var(--color-adm-muted) 50%), linear-gradient(135deg, var(--color-adm-muted) 50%, transparent 50%);background-position:calc(100% - 1.125rem) 52%,calc(100% - .8125rem) 52%;background-size:.3125rem .3125rem}.adm-field-invalid .adm-input{border-color:var(--color-adm-danger)}.adm-checkbox{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5);accent-color:var(--color-adm-primary);border-radius:.25rem}@media (min-width:40rem){.adm-field-horizontal .adm-field-control>.adm-checkbox{margin-top:calc(var(--spacing) * 3)}}.adm-form-actions{align-items:center;gap:calc(var(--spacing) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 6);padding-block:calc(var(--spacing) * 4);flex-wrap:wrap;display:flex}@media (min-width:40rem){.adm-form-actions{padding-left:16.5rem}}.adm-combobox{position:relative}.adm-combobox-listbox{z-index:30;margin-top:var(--spacing);max-height:calc(var(--spacing) * 72);border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);padding-block:var(--spacing);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);inset-inline:0;position:absolute;top:100%;overflow-y:auto}.adm-combobox-group{padding-inline:calc(var(--spacing) * 3.5);padding-top:calc(var(--spacing) * 2.5);padding-bottom:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-adm-muted);text-transform:uppercase}.adm-combobox-option{cursor:pointer;padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 1.5);color:var(--color-adm-text)}.adm-combobox-option[aria-selected=true]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.adm-combobox-option-active,.adm-combobox-option:hover{background-color:var(--color-adm-surface-muted)}.adm-combobox-option-active{--tw-shadow:inset 2px 0 0 var(--tw-shadow-color,var(--color-adm-primary));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.adm-combobox-empty{padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 2);color:var(--color-adm-muted)}.adm-sortable-controls{align-items:center;gap:var(--spacing);display:inline-flex}.adm-sortable-handle{cursor:grab;touch-action:none}.adm-sortable-controls .adm-icon-btn:disabled{cursor:not-allowed;opacity:.4}@media (hover:hover){.adm-sortable-controls .adm-icon-btn:disabled:hover{background-color:#0000}}.adm-sortable-position{width:calc(var(--spacing) * 20)}.adm-sortable-dragging{z-index:10;opacity:.8;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);position:relative}.adm-sortable-dragging>td{background-color:var(--color-adm-surface-muted)}.adm-check{align-items:center;gap:calc(var(--spacing) * 2);color:var(--color-adm-text);display:flex}.adm-code{font-family:var(--font-adm-mono);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.adm-form-footer{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.adm-alert{border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:#c9222b66}@supports (color:color-mix(in lab, red, red)){.adm-alert{border-color:color-mix(in oklab, var(--color-adm-danger) 40%, transparent)}}.adm-alert{background-color:#c9222b1a}@supports (color:color-mix(in lab, red, red)){.adm-alert{background-color:color-mix(in oklab, var(--color-adm-danger) 10%, transparent)}}.adm-alert{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);color:var(--color-adm-text)}.adm-alert-title{margin-bottom:var(--spacing);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-danger)}.adm-alert ul{padding-left:calc(var(--spacing) * 5);list-style-type:disc}.adm-alert-danger{border-color:#c9222b66}@supports (color:color-mix(in lab, red, red)){.adm-alert-danger{border-color:color-mix(in oklab, var(--color-adm-danger) 40%, transparent)}}.adm-alert-danger{background-color:#c9222b1a}@supports (color:color-mix(in lab, red, red)){.adm-alert-danger{background-color:color-mix(in oklab, var(--color-adm-danger) 10%, transparent)}}.adm-alert-danger .adm-alert-title{color:var(--color-adm-danger)}.adm-alert-warning{border-color:#925b0066}@supports (color:color-mix(in lab, red, red)){.adm-alert-warning{border-color:color-mix(in oklab, var(--color-adm-warning) 40%, transparent)}}.adm-alert-warning{background-color:#925b001a}@supports (color:color-mix(in lab, red, red)){.adm-alert-warning{background-color:color-mix(in oklab, var(--color-adm-warning) 10%, transparent)}}.adm-alert-warning .adm-alert-title{color:var(--color-adm-warning)}.adm-alert-info{border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted)}.adm-alert-info .adm-alert-title{color:var(--color-adm-text)}.adm-badge{background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted);border-radius:3.40282e38px;align-items:center;display:inline-flex}.adm-badge-success{background-color:#007e461a}@supports (color:color-mix(in lab, red, red)){.adm-badge-success{background-color:color-mix(in oklab, var(--color-adm-success) 10%, transparent)}}.adm-badge-success{color:var(--color-adm-success)}.adm-badge-warning{background-color:#925b001a}@supports (color:color-mix(in lab, red, red)){.adm-badge-warning{background-color:color-mix(in oklab, var(--color-adm-warning) 10%, transparent)}}.adm-badge-warning{color:var(--color-adm-warning)}.adm-badge-danger{background-color:#c9222b1a}@supports (color:color-mix(in lab, red, red)){.adm-badge-danger{background-color:color-mix(in oklab, var(--color-adm-danger) 10%, transparent)}}.adm-badge-danger{color:var(--color-adm-danger)}.adm-offcanvas{z-index:40;position:fixed;inset:0}.adm-offcanvas-backdrop{background-color:var(--color-adm-overlay);opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s;position:absolute;inset:0}.adm-offcanvas-panel{width:100%;max-width:var(--container-sm);--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:var(--color-adm-surface);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;inset-block:0;flex-direction:column;transition-duration:.2s;display:flex;position:absolute;right:0}.adm-offcanvas-open .adm-offcanvas-backdrop{opacity:1}.adm-offcanvas-open .adm-offcanvas-panel{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.adm-offcanvas-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3.5);justify-content:space-between;align-items:center;display:flex}.adm-offcanvas-body{padding:calc(var(--spacing) * 5);flex:1;overflow-y:auto}.adm-flash-stack{pointer-events:none;inset-inline:0;top:calc(var(--spacing) * 4);z-index:50;align-items:center;gap:calc(var(--spacing) * 2);padding-inline:calc(var(--spacing) * 4);flex-direction:column;display:flex;position:fixed}.adm-flash{pointer-events:auto;max-width:var(--container-lg);align-items:center;gap:calc(var(--spacing) * 3);border-radius:var(--radius-adm);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);border-width:1px;display:flex}.adm-flash-notice{border-color:var(--color-adm-border);background-color:var(--color-adm-text);color:var(--color-adm-surface)}.adm-flash-alert{border-color:var(--color-adm-danger);background-color:var(--color-adm-danger);color:var(--color-adm-danger-fg)}.adm-flash-close{cursor:pointer;font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:1;opacity:.7;line-height:1}@media (hover:hover){.adm-flash-close:hover{opacity:1}}.adm-auth{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 16);justify-content:center;align-items:center;display:flex}.adm-auth-panel{width:100%;max-width:var(--container-sm);gap:calc(var(--spacing) * 6);flex-direction:column;display:flex}.adm-auth-brand{text-align:center;font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text)}.adm-auth-title{margin-bottom:calc(var(--spacing) * 4);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text)}.adm-auth-lead{margin-bottom:calc(var(--spacing) * 4)}.adm-auth-footer{margin-top:calc(var(--spacing) * 4);text-align:center}}@layer utilities{.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.block{display:block}.hidden{display:none}.table{display:table}.w-px{width:1px}.whitespace-nowrap{white-space:nowrap}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}@media (min-width:48rem){.md\:hidden{display:none}}}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-divide-y-reverse:0;--tw-leading:initial;--tw-duration:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-3xl:48rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-relaxed:1.625;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-adm-bg:oklch(97.5% .004 255);--color-adm-surface:oklch(100% 0 0);--color-adm-surface-muted:oklch(96.5% .006 255);--color-adm-border:oklch(91% .008 255);--color-adm-text:oklch(24% .02 260);--color-adm-muted:oklch(52% .02 260);--color-adm-primary:oklch(52% .18 262);--color-adm-primary-fg:oklch(99% 0 0);--color-adm-danger:oklch(54% .2 25);--color-adm-danger-fg:oklch(99% 0 0);--color-adm-success:oklch(52% .14 155);--color-adm-warning:oklch(52% .13 70);--color-adm-ring:oklch(52% .18 262/.35);--color-adm-overlay:oklch(20% .02 260/.45);--radius-adm:.5rem;--font-adm:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-adm-mono:ui-monospace, SFMono-Regular, Menlo, monospace}:root{color-scheme:light dark}:root.light{color-scheme:light}:root.dark{color-scheme:dark;--color-adm-bg:oklch(18% .012 260);--color-adm-surface:oklch(23% .014 260);--color-adm-surface-muted:oklch(27% .014 260);--color-adm-border:oklch(33% .014 260);--color-adm-text:oklch(93% .008 260);--color-adm-muted:oklch(70% .015 260);--color-adm-primary:oklch(68% .15 262);--color-adm-primary-fg:oklch(16% .02 260);--color-adm-danger:oklch(80% .13 25);--color-adm-danger-fg:oklch(16% .02 260);--color-adm-success:oklch(78% .14 155);--color-adm-warning:oklch(82% .14 80);--color-adm-ring:oklch(68% .15 262/.4);--color-adm-overlay:oklch(5% 0 0/.6)}@media (prefers-color-scheme:dark){:root:not(.light){--color-adm-bg:oklch(18% .012 260);--color-adm-surface:oklch(23% .014 260);--color-adm-surface-muted:oklch(27% .014 260);--color-adm-border:oklch(33% .014 260);--color-adm-text:oklch(93% .008 260);--color-adm-muted:oklch(70% .015 260);--color-adm-primary:oklch(68% .15 262);--color-adm-primary-fg:oklch(16% .02 260);--color-adm-danger:oklch(80% .13 25);--color-adm-danger-fg:oklch(16% .02 260);--color-adm-success:oklch(78% .14 155);--color-adm-warning:oklch(82% .14 80);--color-adm-ring:oklch(68% .15 262/.4);--color-adm-overlay:oklch(5% 0 0/.6)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}.adm-body{background-color:var(--color-adm-bg);min-height:100vh;font-family:var(--font-adm);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-adm-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.adm-scroll-lock{overflow:hidden}}@layer components{.adm-container{width:100%;max-width:var(--container-7xl);padding-inline:calc(var(--spacing) * 4);margin-inline:auto}@media (min-width:40rem){.adm-container{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:64rem){.adm-container{padding-inline:calc(var(--spacing) * 8)}}.adm-main{padding-bottom:calc(var(--spacing) * 12);flex-direction:column;display:flex}.adm-page-body{gap:calc(var(--spacing) * 6);padding-top:calc(var(--spacing) * 6);flex-direction:column;display:flex}.adm-grid{gap:calc(var(--spacing) * 4);display:grid}@media (min-width:40rem){.adm-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.adm-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}.adm-sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.adm-muted{color:var(--color-adm-muted)}.adm-topbar{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface)}.adm-topbar-inner{height:calc(var(--spacing) * 14);align-items:center;gap:calc(var(--spacing) * 3);display:flex}.adm-brand{align-items:center;gap:calc(var(--spacing) * 2);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text);text-decoration-line:none;display:flex}.adm-brand-name{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.adm-logo{height:calc(var(--spacing) * 7);width:auto}.adm-topbar-actions{align-items:center;gap:var(--spacing);margin-left:auto;display:flex}.adm-nav{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);display:none}@media (min-width:48rem){.adm-nav{display:block}}.adm-nav.adm-open{display:block}.adm-nav-list{gap:var(--spacing);padding-block:calc(var(--spacing) * 2);flex-direction:column;margin-bottom:-1px;display:flex}@media (min-width:48rem){.adm-nav-list{gap:calc(var(--spacing) * 6);flex-direction:row;padding-block:0}}.adm-nav-link{border-bottom-style:var(--tw-border-style);padding-block:calc(var(--spacing) * 3);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-color:#0000;border-bottom-width:2px;text-decoration-line:none;display:block}@media (hover:hover){.adm-nav-link:hover{color:var(--color-adm-text)}}.adm-nav-link-active{border-color:var(--color-adm-primary);color:var(--color-adm-text)}.adm-dropdown{position:relative}.adm-dropdown-menu{z-index:30;margin-top:calc(var(--spacing) * 2);min-width:calc(var(--spacing) * 44);border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);padding-block:var(--spacing);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);position:absolute;right:0;overflow:hidden}.adm-dropdown-item{cursor:pointer;width:100%;padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);text-align:left;color:var(--color-adm-text);display:block}@media (hover:hover){.adm-dropdown-item:hover{background-color:var(--color-adm-surface-muted)}}.adm-page-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface)}.adm-page-header-inner{align-items:flex-end;gap:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 5);flex-wrap:wrap;display:flex}.adm-page-heading{flex:1;min-width:0}.adm-page-title{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--color-adm-text);overflow:hidden}.adm-page-actions{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.adm-breadcrumb{margin-bottom:var(--spacing);align-items:center;gap:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-adm-muted);flex-wrap:wrap;display:flex}.adm-breadcrumb-item a{color:var(--color-adm-muted);text-decoration-line:none}@media (hover:hover){.adm-breadcrumb-item a:hover{color:var(--color-adm-text)}}.adm-breadcrumb-item+.adm-breadcrumb-item:before{content:"/";margin-right:calc(var(--spacing) * 1.5);color:var(--color-adm-border)}.adm-card{border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);overflow:hidden}.adm-card-header{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3.5);display:flex}.adm-card-title{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text)}.adm-card-body{padding:calc(var(--spacing) * 5)}.adm-card-footer{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3)}.adm-tile{gap:var(--spacing);padding:calc(var(--spacing) * 5);transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));flex-direction:column;text-decoration-line:none;display:flex}@media (hover:hover){.adm-tile:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.adm-tile-label{color:var(--color-adm-muted)}.adm-tile-value{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text);--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.adm-btn{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-adm);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;text-decoration-line:none;display:inline-flex}.adm-btn:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-adm-ring);--tw-outline-style:none;outline-style:none}.adm-btn:disabled{cursor:not-allowed;opacity:.5}.adm-btn-primary{border-color:var(--color-adm-primary);background-color:var(--color-adm-primary);color:var(--color-adm-primary-fg)}@media (hover:hover){.adm-btn-primary:hover{opacity:.9}}.adm-btn-secondary{border-color:var(--color-adm-border);background-color:var(--color-adm-surface);color:var(--color-adm-text)}@media (hover:hover){.adm-btn-secondary:hover{background-color:var(--color-adm-surface-muted)}}.adm-btn-danger{border-color:var(--color-adm-border);background-color:var(--color-adm-surface);color:var(--color-adm-danger)}@media (hover:hover){.adm-btn-danger:hover{border-color:var(--color-adm-danger);background-color:var(--color-adm-danger);color:var(--color-adm-danger-fg)}}.adm-btn-ghost{color:var(--color-adm-text);background-color:#0000;border-color:#0000}@media (hover:hover){.adm-btn-ghost:hover{background-color:var(--color-adm-surface-muted)}}.adm-btn-sm{padding-inline:calc(var(--spacing) * 2.5);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.adm-btn-block{width:100%}.adm-btn-group{justify-content:flex-end;align-items:center;gap:var(--spacing);display:flex}.adm-inline-form{display:inline-flex}.adm-icon-btn{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);cursor:pointer;border-radius:var(--radius-adm);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));color:var(--color-adm-muted);justify-content:center;align-items:center;display:inline-flex}@media (hover:hover){.adm-icon-btn:hover{background-color:var(--color-adm-surface-muted);color:var(--color-adm-text)}}.adm-icon-btn:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-adm-ring);--tw-outline-style:none;outline-style:none}.adm-icon{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.adm-link{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-primary);text-decoration-line:none}@media (hover:hover){.adm-link:hover{text-decoration-line:underline}}.adm-with-aside{align-items:flex-start;gap:calc(var(--spacing) * 6);display:grid}@media (min-width:64rem){.adm-with-aside{grid-template-columns:minmax(0,1fr) 16rem}}.adm-with-aside-main{gap:calc(var(--spacing) * 6);flex-direction:column;min-width:0;display:flex}.adm-aside{gap:calc(var(--spacing) * 6);flex-direction:column;display:flex}.adm-menu{padding-block:var(--spacing)}.adm-menu-form{display:block}.adm-menu-item{cursor:pointer;width:100%;padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 2);text-align:left;color:var(--color-adm-text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));text-decoration-line:none;display:block}@media (hover:hover){.adm-menu-item:hover{background-color:var(--color-adm-surface-muted)}}.adm-menu-item:focus-visible{background-color:var(--color-adm-surface-muted);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-adm-ring);--tw-outline-style:none;--tw-ring-inset:inset;outline-style:none}.adm-menu-item-primary{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-primary)}.adm-menu-item-danger{color:var(--color-adm-danger)}@media (hover:hover){.adm-menu-item-danger:hover{background-color:#c9222b1a}@supports (color:color-mix(in lab, red, red)){.adm-menu-item-danger:hover{background-color:color-mix(in oklab, var(--color-adm-danger) 10%, transparent)}}}.adm-table-wrap{overflow-x:auto}.adm-table{border-collapse:collapse;text-align:left;width:100%}.adm-table th{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);white-space:nowrap;color:var(--color-adm-muted);text-transform:uppercase}.adm-table th a{color:var(--color-adm-muted);text-decoration-line:none}@media (hover:hover){.adm-table th a:hover{color:var(--color-adm-text)}}.adm-table td{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);vertical-align:middle}.adm-table tbody tr:last-child td{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.adm-table tbody tr:hover td{background-color:var(--color-adm-surface-muted)}.adm-table-actions{text-align:right;white-space:nowrap;width:1px}.adm-table-footer{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 3);flex-wrap:wrap;display:flex}.adm-empty{padding-block:calc(var(--spacing) * 10);text-align:center;color:var(--color-adm-muted)}.adm-tabs{margin-bottom:calc(var(--spacing) * -2);column-gap:calc(var(--spacing) * 6);row-gap:var(--spacing);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);flex-wrap:wrap;display:flex}.adm-tab{align-items:center;gap:calc(var(--spacing) * 2);border-bottom-style:var(--tw-border-style);padding-block:calc(var(--spacing) * 2);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted);border-color:#0000;border-bottom-width:2px;margin-bottom:-1px;text-decoration-line:none;display:inline-flex}@media (hover:hover){.adm-tab:hover{color:var(--color-adm-text)}}.adm-tab-active{border-color:var(--color-adm-primary);color:var(--color-adm-text)}.adm-tab-count{background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-adm-muted);border-radius:3.40282e38px}.adm-pagy .pagy{align-items:center;gap:var(--spacing);display:flex}.adm-pagy .pagy a{border-radius:var(--radius-adm);padding-inline:calc(var(--spacing) * 2.5);padding-block:var(--spacing);color:var(--color-adm-text);text-decoration-line:none}@media (hover:hover){.adm-pagy .pagy a:hover{background-color:var(--color-adm-surface)}}.adm-pagy .pagy a.current,.adm-pagy .pagy a[aria-current=page]{background-color:var(--color-adm-primary);color:var(--color-adm-primary-fg)}.adm-pagy .pagy a:not([href]){color:var(--color-adm-muted)}:where(.adm-attributes>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--color-adm-border)}.adm-attribute{gap:var(--spacing);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);display:grid}@media (min-width:40rem){.adm-attribute{gap:calc(var(--spacing) * 6);grid-template-columns:12rem 1fr}}.adm-attribute dt{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted)}.adm-attribute dd{overflow-wrap:break-word;min-width:0;color:var(--color-adm-text)}.adm-form{gap:calc(var(--spacing) * 5);flex-direction:column;display:flex}.adm-form-flush{gap:0}.adm-form .field_with_errors{display:contents}.adm-form-errors{padding-inline:calc(var(--spacing) * 6);padding-top:calc(var(--spacing) * 6)}.adm-form-body{gap:calc(var(--spacing) * 6);padding:calc(var(--spacing) * 6);flex-direction:column;display:flex}.adm-field{gap:calc(var(--spacing) * 2);flex-direction:column;display:flex}.adm-field-horizontal{gap:calc(var(--spacing) * 2)}@media (min-width:40rem){.adm-field-horizontal{column-gap:calc(var(--spacing) * 8);grid-template-columns:minmax(0,13rem) minmax(0,1fr);display:grid}}.adm-field-label{flex-direction:column;display:flex}@media (min-width:40rem){.adm-field-label{padding-top:calc(var(--spacing) * 2.5)}}.adm-field-control{width:100%;max-width:var(--container-3xl);gap:calc(var(--spacing) * 2);flex-direction:column;min-width:0;display:flex}.adm-field-row{gap:calc(var(--spacing) * 2);display:flex}.adm-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-text)}.adm-required{margin-left:calc(var(--spacing) * .5);color:var(--color-adm-danger)}.adm-hint{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--color-adm-muted)}.adm-error{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-danger)}.adm-input{min-height:calc(var(--spacing) * 10);border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);width:100%;padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-adm-text);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));display:block}.adm-input::placeholder{color:#626975b3}@supports (color:color-mix(in lab, red, red)){.adm-input::placeholder{color:color-mix(in oklab, var(--color-adm-muted) 70%, transparent)}}.adm-input:focus{border-color:var(--color-adm-primary);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-adm-ring);--tw-outline-style:none;outline-style:none}textarea.adm-input{min-height:calc(var(--spacing) * 24);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}select[multiple].adm-input{padding-block:calc(var(--spacing) * 1.5)}select.adm-input:not([multiple]),.adm-combobox-input{appearance:none;padding-right:calc(var(--spacing) * 9);background-repeat:no-repeat;background-image:linear-gradient(45deg, transparent 50%, var(--color-adm-muted) 50%), linear-gradient(135deg, var(--color-adm-muted) 50%, transparent 50%);background-position:calc(100% - 1.125rem) 52%,calc(100% - .8125rem) 52%;background-size:.3125rem .3125rem}.adm-field-invalid .adm-input{border-color:var(--color-adm-danger)}.adm-checkbox{width:calc(var(--spacing) * 4.5);height:calc(var(--spacing) * 4.5);accent-color:var(--color-adm-primary);border-radius:.25rem}@media (min-width:40rem){.adm-field-horizontal .adm-field-control>.adm-checkbox{margin-top:calc(var(--spacing) * 3)}}.adm-form-actions{align-items:center;gap:calc(var(--spacing) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 6);padding-block:calc(var(--spacing) * 4);flex-wrap:wrap;display:flex}@media (min-width:40rem){.adm-form-actions{padding-left:16.5rem}}.adm-combobox{position:relative}.adm-combobox-listbox{z-index:30;margin-top:var(--spacing);max-height:calc(var(--spacing) * 72);border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-adm-border);background-color:var(--color-adm-surface);padding-block:var(--spacing);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);inset-inline:0;position:absolute;top:100%;overflow-y:auto}.adm-combobox-group{padding-inline:calc(var(--spacing) * 3.5);padding-top:calc(var(--spacing) * 2.5);padding-bottom:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-adm-muted);text-transform:uppercase}.adm-combobox-option{cursor:pointer;padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 1.5);color:var(--color-adm-text)}.adm-combobox-option[aria-selected=true]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.adm-combobox-option-active,.adm-combobox-option:hover{background-color:var(--color-adm-surface-muted)}.adm-combobox-option-active{--tw-shadow:inset 2px 0 0 var(--tw-shadow-color,var(--color-adm-primary));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.adm-combobox-empty{padding-inline:calc(var(--spacing) * 3.5);padding-block:calc(var(--spacing) * 2);color:var(--color-adm-muted)}.adm-sortable-controls{align-items:center;gap:var(--spacing);display:inline-flex}.adm-sortable-handle{cursor:grab;touch-action:none}.adm-sortable-controls .adm-icon-btn:disabled{cursor:not-allowed;opacity:.4}@media (hover:hover){.adm-sortable-controls .adm-icon-btn:disabled:hover{background-color:#0000}}.adm-sortable-position{width:calc(var(--spacing) * 20)}.adm-sortable-dragging{z-index:10;opacity:.8;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);position:relative}.adm-sortable-dragging>td{background-color:var(--color-adm-surface-muted)}.adm-check{align-items:center;gap:calc(var(--spacing) * 2);color:var(--color-adm-text);display:flex}.adm-code{font-family:var(--font-adm-mono);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.adm-form-footer{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.adm-alert{border-radius:var(--radius-adm);border-style:var(--tw-border-style);border-width:1px;border-color:#c9222b66}@supports (color:color-mix(in lab, red, red)){.adm-alert{border-color:color-mix(in oklab, var(--color-adm-danger) 40%, transparent)}}.adm-alert{background-color:#c9222b1a}@supports (color:color-mix(in lab, red, red)){.adm-alert{background-color:color-mix(in oklab, var(--color-adm-danger) 10%, transparent)}}.adm-alert{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);color:var(--color-adm-text)}.adm-alert-title{margin-bottom:var(--spacing);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-danger)}.adm-alert ul{padding-left:calc(var(--spacing) * 5);list-style-type:disc}.adm-alert-danger{border-color:#c9222b66}@supports (color:color-mix(in lab, red, red)){.adm-alert-danger{border-color:color-mix(in oklab, var(--color-adm-danger) 40%, transparent)}}.adm-alert-danger{background-color:#c9222b1a}@supports (color:color-mix(in lab, red, red)){.adm-alert-danger{background-color:color-mix(in oklab, var(--color-adm-danger) 10%, transparent)}}.adm-alert-danger .adm-alert-title{color:var(--color-adm-danger)}.adm-alert-warning{border-color:#925b0066}@supports (color:color-mix(in lab, red, red)){.adm-alert-warning{border-color:color-mix(in oklab, var(--color-adm-warning) 40%, transparent)}}.adm-alert-warning{background-color:#925b001a}@supports (color:color-mix(in lab, red, red)){.adm-alert-warning{background-color:color-mix(in oklab, var(--color-adm-warning) 10%, transparent)}}.adm-alert-warning .adm-alert-title{color:var(--color-adm-warning)}.adm-alert-info{border-color:var(--color-adm-border);background-color:var(--color-adm-surface-muted)}.adm-alert-info .adm-alert-title{color:var(--color-adm-text)}.adm-badge{background-color:var(--color-adm-surface-muted);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-adm-muted);border-radius:3.40282e38px;align-items:center;display:inline-flex}.adm-badge-success{background-color:#007e461a}@supports (color:color-mix(in lab, red, red)){.adm-badge-success{background-color:color-mix(in oklab, var(--color-adm-success) 10%, transparent)}}.adm-badge-success{color:var(--color-adm-success)}.adm-badge-warning{background-color:#925b001a}@supports (color:color-mix(in lab, red, red)){.adm-badge-warning{background-color:color-mix(in oklab, var(--color-adm-warning) 10%, transparent)}}.adm-badge-warning{color:var(--color-adm-warning)}.adm-badge-danger{background-color:#c9222b1a}@supports (color:color-mix(in lab, red, red)){.adm-badge-danger{background-color:color-mix(in oklab, var(--color-adm-danger) 10%, transparent)}}.adm-badge-danger{color:var(--color-adm-danger)}.adm-offcanvas{z-index:40;position:fixed;inset:0}.adm-offcanvas-backdrop{background-color:var(--color-adm-overlay);opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s;position:absolute;inset:0}.adm-offcanvas-panel{width:100%;max-width:var(--container-sm);--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:var(--color-adm-surface);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;inset-block:0;flex-direction:column;transition-duration:.2s;display:flex;position:absolute;right:0}.adm-offcanvas-open .adm-offcanvas-backdrop{opacity:1}.adm-offcanvas-open .adm-offcanvas-panel{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.adm-offcanvas-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-adm-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3.5);justify-content:space-between;align-items:center;display:flex}.adm-offcanvas-body{padding:calc(var(--spacing) * 5);flex:1;overflow-y:auto}.adm-flash-stack{pointer-events:none;inset-inline:0;top:calc(var(--spacing) * 4);z-index:50;align-items:center;gap:calc(var(--spacing) * 2);padding-inline:calc(var(--spacing) * 4);flex-direction:column;display:flex;position:fixed}.adm-flash{pointer-events:auto;max-width:var(--container-lg);align-items:center;gap:calc(var(--spacing) * 3);border-radius:var(--radius-adm);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);border-width:1px;display:flex}.adm-flash-notice{border-color:var(--color-adm-border);background-color:var(--color-adm-text);color:var(--color-adm-surface)}.adm-flash-alert{border-color:var(--color-adm-danger);background-color:var(--color-adm-danger);color:var(--color-adm-danger-fg)}.adm-flash-close{cursor:pointer;font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:1;opacity:.7;line-height:1}@media (hover:hover){.adm-flash-close:hover{opacity:1}}.adm-auth{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 16);justify-content:center;align-items:center;display:flex}.adm-auth-panel{width:100%;max-width:var(--container-sm);gap:calc(var(--spacing) * 6);flex-direction:column;display:flex}.adm-auth-brand{text-align:center;font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text)}.adm-auth-title{margin-bottom:calc(var(--spacing) * 4);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-adm-text)}.adm-auth-lead{margin-bottom:calc(var(--spacing) * 4)}.adm-auth-footer{margin-top:calc(var(--spacing) * 4);text-align:center}}@layer utilities{.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.block{display:block}.hidden{display:none}.table{display:table}.w-px{width:1px}.whitespace-nowrap{white-space:nowrap}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}@media (min-width:48rem){.md\:hidden{display:none}}}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
@@ -81,6 +81,18 @@
81
81
  .adm-icon { @apply size-5; }
82
82
  .adm-link { @apply font-medium text-adm-primary no-underline hover:underline; }
83
83
 
84
+ /* Aside menus (`aside` DSL): content beside a column of menu cards. */
85
+ .adm-with-aside { @apply grid items-start gap-6 lg:grid-cols-[minmax(0,1fr)_16rem]; }
86
+ .adm-with-aside-main { @apply flex min-w-0 flex-col gap-6; }
87
+ .adm-aside { @apply flex flex-col gap-6; }
88
+ .adm-menu { @apply py-1; }
89
+ .adm-menu-form { @apply block; }
90
+ .adm-menu-item {
91
+ @apply block w-full cursor-pointer px-5 py-2 text-left text-adm-text no-underline transition-colors hover:bg-adm-surface-muted focus-visible:bg-adm-surface-muted focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-adm-ring focus-visible:ring-inset;
92
+ }
93
+ .adm-menu-item-primary { @apply font-medium text-adm-primary; }
94
+ .adm-menu-item-danger { @apply text-adm-danger hover:bg-adm-danger/10; }
95
+
84
96
  /* Tables ---------------------------------------------------------------- */
85
97
  .adm-table-wrap { @apply overflow-x-auto; }
86
98
  .adm-table { @apply w-full border-collapse text-left; }
@@ -9,6 +9,13 @@ module Administratum
9
9
  ghost: "adm-btn adm-btn-ghost"
10
10
  }.freeze
11
11
 
12
+ MENU_STYLES = {
13
+ primary: "adm-menu-item adm-menu-item-primary",
14
+ secondary: "adm-menu-item",
15
+ danger: "adm-menu-item adm-menu-item-danger",
16
+ ghost: "adm-menu-item"
17
+ }.freeze
18
+
12
19
  # The display name of any record: its resource's title attribute, else to_s.
13
20
  def record_title(record)
14
21
  return "" if record.nil?
@@ -86,28 +93,49 @@ module Administratum
86
93
  safe_join(buttons, " ")
87
94
  end
88
95
 
89
- def render_button(button, record = @resource)
96
+ # `menu: true` renders it as an item of an aside menu instead of a button.
97
+ def render_button(button, record = @resource, menu: false)
90
98
  return unless button_visible?(button, record)
91
99
 
92
100
  label = button.label || t("administratum.actions.#{button.name}", default: button.name.to_s.humanize)
93
- classes = BUTTON_STYLES.fetch(button.style, BUTTON_STYLES[:secondary])
101
+ styles = menu ? MENU_STYLES : BUTTON_STYLES
102
+ classes = styles.fetch(button.style, styles[:secondary])
94
103
 
95
104
  return panel_button(button, label, classes, record) if button.panel || button.upload
96
105
 
97
106
  url, http_method = button_target(button, record)
98
- administratum_button(label, url, method: http_method, confirm: button.confirm, class: classes)
107
+ administratum_button(label, url, method: http_method, confirm: button.confirm, class: classes,
108
+ form_class: (menu ? "adm-menu-form" : "adm-inline-form"))
99
109
  end
100
110
 
101
111
  # A link for GET, otherwise a one-button form (no rails-ujs needed).
102
- def administratum_button(label, url, method: :get, confirm: nil, **options)
112
+ def administratum_button(label, url, method: :get, confirm: nil, form_class: "adm-inline-form", **options)
103
113
  if method.to_sym == :get
104
114
  link_to label, url, **options
105
115
  else
106
116
  form = { data: confirm ? { adm_confirm: confirm } : {} }
107
- button_to label, url, method:, form:, form_class: "adm-inline-form", **options
117
+ button_to label, url, method:, form:, form_class:, **options
118
+ end
119
+ end
120
+
121
+ # Lays the block out beside the page's asides, or returns it as is when the
122
+ # page has none (or every button in them is hidden by `if:`).
123
+ def with_asides(page, record = @resource, &)
124
+ content = capture(&)
125
+ asides = asides_for(page, record)
126
+ return content if asides.blank?
127
+
128
+ tag.div(class: "adm-with-aside") do
129
+ tag.div(content, class: "adm-with-aside-main") + tag.aside(asides, class: "adm-aside")
108
130
  end
109
131
  end
110
132
 
133
+ # The aside menus for a page, without the surrounding layout.
134
+ def asides_for(page, record = @resource)
135
+ menus = definition.asides_for(page).filter_map { |aside| render_aside(aside, record) }
136
+ safe_join(menus) if menus.any?
137
+ end
138
+
111
139
  # Tabs for the resource's index scopes. Switching tab keeps filters and sorting
112
140
  # but goes back to the first page.
113
141
  def index_scope_tabs
@@ -169,6 +197,17 @@ module Administratum
169
197
  class: class_names("adm-btn adm-btn-danger", "adm-btn-sm" => small))
170
198
  end
171
199
 
200
+ def render_aside(aside, record)
201
+ items = aside.buttons.filter_map { |button| render_button(button, record, menu: true) }
202
+ return if items.empty?
203
+
204
+ title = aside.title || t("administratum.actions.title")
205
+ tag.nav(class: "adm-card", "aria-label": title) do
206
+ tag.header(tag.h2(title, class: "adm-card-title"), class: "adm-card-header") +
207
+ tag.ul(safe_join(items.map { |item| tag.li(item) }), class: "adm-menu")
208
+ end
209
+ end
210
+
172
211
  def button_visible?(button, record)
173
212
  condition_met?(button.condition, record)
174
213
  end
@@ -3,5 +3,7 @@
3
3
  <% end %>
4
4
 
5
5
  <div class="adm-container adm-page-body">
6
- <%= render definition.form_template || "form" %>
6
+ <%= with_asides(:edit) do %>
7
+ <%= render definition.form_template || "form" %>
8
+ <% end %>
7
9
  </div>
@@ -6,8 +6,10 @@
6
6
  <% end %>
7
7
 
8
8
  <div class="adm-container adm-page-body">
9
- <%= index_scope_tabs %>
10
- <%= render "table" %>
9
+ <%= with_asides(:index, nil) do %>
10
+ <%= index_scope_tabs %>
11
+ <%= render "table" %>
12
+ <% end %>
11
13
  </div>
12
14
 
13
15
  <% if filters? %>
@@ -3,5 +3,7 @@
3
3
  <% end %>
4
4
 
5
5
  <div class="adm-container adm-page-body">
6
- <%= render definition.form_template || "form" %>
6
+ <%= with_asides(:new) do %>
7
+ <%= render definition.form_template || "form" %>
8
+ <% end %>
7
9
  </div>
@@ -3,5 +3,7 @@
3
3
  <% end %>
4
4
 
5
5
  <div class="adm-container adm-page-body">
6
- <%= render "attributes" %>
6
+ <%= with_asides(:show) do %>
7
+ <%= render "attributes" %>
8
+ <% end %>
7
9
  </div>
@@ -87,6 +87,9 @@ module Administratum
87
87
  Button = Struct.new(:name, :label, :pages, :action, :to, :http_method, :confirm, :condition, :style, :panel, :upload,
88
88
  keyword_init: true)
89
89
 
90
+ # A side menu of buttons beside a page's content, for actions that don't belong in the header.
91
+ Aside = Struct.new(:pages, :title, :buttons, keyword_init: true)
92
+
90
93
  Parent = Struct.new(:name, :class_name, :shallow, :association, keyword_init: true) do
91
94
  def model = class_name.constantize
92
95
  def param = :"#{name}_id"
@@ -102,7 +105,8 @@ module Administratum
102
105
 
103
106
  attr_accessor :model, :title_attribute, :permitted, :parent, :form_template, :scope_block, :route_key, :label,
104
107
  :plural_label, :per_page, :default_sort, :csv, :reorder_column
105
- attr_reader :fields, :columns, :custom_actions, :buttons, :show_attributes, :enabled_actions, :menu, :index_scopes
108
+ attr_reader :fields, :columns, :custom_actions, :buttons, :asides, :show_attributes, :enabled_actions, :menu,
109
+ :index_scopes
106
110
 
107
111
  def initialize
108
112
  @fields = []
@@ -110,6 +114,7 @@ module Administratum
110
114
  @filters = nil
111
115
  @custom_actions = {}
112
116
  @buttons = []
117
+ @asides = []
113
118
  @show_attributes = []
114
119
  @index_scopes = []
115
120
  @enabled_actions = BUILT_IN_ACTIONS.dup
@@ -124,6 +129,7 @@ module Administratum
124
129
  @filters = source.declared_filters && rebind(source.declared_filters)
125
130
  @custom_actions = source.custom_actions.dup
126
131
  @buttons = source.buttons.map(&:dup)
132
+ @asides = source.asides.map { |aside| aside.dup.tap { |copy| copy.buttons = aside.buttons.map(&:dup) } }
127
133
  @show_attributes = rebind(source.show_attributes)
128
134
  @index_scopes = source.index_scopes.dup
129
135
  @enabled_actions = source.enabled_actions.dup
@@ -240,16 +246,31 @@ module Administratum
240
246
  enabled_actions.include?(name.to_sym)
241
247
  end
242
248
 
243
- def add_button(name, on:, label: nil, action: nil, to: nil, method: nil, confirm: nil, condition: nil, style: :secondary,
244
- panel: nil, upload: false)
245
- buttons << Button.new(name: name.to_sym, label:, pages: Array(on).map(&:to_sym), action: (action || name).to_sym, to:,
246
- http_method: method&.to_sym, confirm:, condition:, style: style.to_sym, panel:, upload:)
249
+ def add_button(name, on:, **)
250
+ buttons << build_button(name, on:, **)
251
+ end
252
+
253
+ def build_button(name, on:, label: nil, action: nil, to: nil, method: nil, confirm: nil, condition: nil,
254
+ style: :secondary, panel: nil, upload: false)
255
+ Button.new(name: name.to_sym, label:, pages: Array(on).map(&:to_sym), action: (action || name).to_sym, to:,
256
+ http_method: method&.to_sym, confirm:, condition:, style: style.to_sym, panel:, upload:)
247
257
  end
248
258
 
249
259
  def buttons_for(page)
250
260
  buttons.select { |button| button.pages.include?(page.to_sym) }
251
261
  end
252
262
 
263
+ def add_aside(on:, title: nil)
264
+ pages = Array(on).map(&:to_sym)
265
+ raise Administratum::Error, "An aside can't go on :row" if pages.include?(:row)
266
+
267
+ Aside.new(pages:, title:, buttons: []).tap { |aside| asides << aside }
268
+ end
269
+
270
+ def asides_for(page)
271
+ asides.select { |aside| aside.pages.include?(page.to_sym) }
272
+ end
273
+
253
274
  def add_index_scope(name, label: nil, default: false, count: true, &block)
254
275
  index_scopes.reject! { |index_scope| index_scope.name == name.to_sym }
255
276
  index_scopes << IndexScope.new(name: name.to_sym, label:, block:, default:, count:)
@@ -35,6 +35,21 @@ module Administratum
35
35
 
36
36
  include Common
37
37
 
38
+ # Builds `aside do ... end` button lists. Buttons take the same options as
39
+ # `button`, except `on:`, which comes from the aside.
40
+ class AsideBuilder
41
+ def initialize(definition, aside)
42
+ @definition = definition
43
+ @aside = aside
44
+ end
45
+
46
+ def button(name, label: nil, action: nil, to: nil, method: nil, confirm: nil, if: nil, style: :secondary, panel: nil,
47
+ upload: false)
48
+ @aside.buttons << @definition.build_button(name, on: @aside.pages, label:, action:, to:, method:, confirm:,
49
+ condition: binding.local_variable_get(:if), style:, panel:, upload:)
50
+ end
51
+ end
52
+
38
53
  # Builds `form do ... end` field lists.
39
54
  class FormBuilder
40
55
  def initialize(definition)
@@ -124,6 +139,12 @@ module Administratum
124
139
  ShowBuilder.new(definition).instance_eval(&)
125
140
  end
126
141
 
142
+ # A menu of buttons beside the content of :index, :show, :new or :edit,
143
+ # for actions too minor for the page header. `title:` defaults to "Actions".
144
+ def aside(on:, title: nil, &)
145
+ AsideBuilder.new(definition, definition.add_aside(on:, title:)).instance_eval(&)
146
+ end
147
+
127
148
  # Strong-params style list of writable attributes. Defaults to the form fields.
128
149
  def permit(*attributes)
129
150
  definition.permitted = attributes
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Administratum
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: administratum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - buffpojken