@xleddyl/nuxt-cms 0.1.61 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.json +1 -1
- package/dist/module.mjs +133 -14
- package/dist/runtime/app/components/cms/BlocksField.vue +86 -10
- package/dist/runtime/app/components/cms/BrandMark.d.vue.ts +6 -0
- package/dist/runtime/app/components/cms/BrandMark.vue +19 -0
- package/dist/runtime/app/components/cms/BrandMark.vue.d.ts +6 -0
- package/dist/runtime/app/components/cms/Checkbox.d.vue.ts +11 -0
- package/dist/runtime/app/components/cms/Checkbox.vue +21 -0
- package/dist/runtime/app/components/cms/Checkbox.vue.d.ts +11 -0
- package/dist/runtime/app/components/cms/Drawer.vue +5 -9
- package/dist/runtime/app/components/cms/EmptyState.vue +4 -2
- package/dist/runtime/app/components/cms/EntryDrawer.vue +12 -3
- package/dist/runtime/app/components/cms/EntryForm.d.vue.ts +1 -0
- package/dist/runtime/app/components/cms/EntryForm.vue +104 -30
- package/dist/runtime/app/components/cms/EntryForm.vue.d.ts +1 -0
- package/dist/runtime/app/components/cms/FieldInput.vue +20 -5
- package/dist/runtime/app/components/cms/FormField.d.vue.ts +5 -3
- package/dist/runtime/app/components/cms/FormField.vue +8 -2
- package/dist/runtime/app/components/cms/FormField.vue.d.ts +5 -3
- package/dist/runtime/app/components/cms/Icon.vue +1 -1
- package/dist/runtime/app/components/cms/Input.d.vue.ts +0 -1
- package/dist/runtime/app/components/cms/Input.vue +7 -4
- package/dist/runtime/app/components/cms/Input.vue.d.ts +0 -1
- package/dist/runtime/app/components/cms/LocaleSwitch.vue +1 -1
- package/dist/runtime/app/components/cms/MediaFolderPicker.d.vue.ts +0 -1
- package/dist/runtime/app/components/cms/MediaFolderPicker.vue +1 -3
- package/dist/runtime/app/components/cms/MediaFolderPicker.vue.d.ts +0 -1
- package/dist/runtime/app/components/cms/MediaGallery.vue +24 -10
- package/dist/runtime/app/components/cms/MediaUpload.d.vue.ts +1 -0
- package/dist/runtime/app/components/cms/MediaUpload.vue +71 -41
- package/dist/runtime/app/components/cms/MediaUpload.vue.d.ts +1 -0
- package/dist/runtime/app/components/cms/Modal.vue +5 -9
- package/dist/runtime/app/components/cms/PageHeader.d.vue.ts +5 -3
- package/dist/runtime/app/components/cms/PageHeader.vue +16 -6
- package/dist/runtime/app/components/cms/PageHeader.vue.d.ts +5 -3
- package/dist/runtime/app/components/cms/PasswordInput.d.vue.ts +17 -0
- package/dist/runtime/app/components/cms/PasswordInput.vue +81 -0
- package/dist/runtime/app/components/cms/PasswordInput.vue.d.ts +17 -0
- package/dist/runtime/app/components/cms/RelationField.vue +7 -2
- package/dist/runtime/app/components/cms/SelectMenu.d.vue.ts +0 -1
- package/dist/runtime/app/components/cms/SelectMenu.vue +4 -11
- package/dist/runtime/app/components/cms/SelectMenu.vue.d.ts +0 -1
- package/dist/runtime/app/components/cms/SettingsAccount.d.vue.ts +3 -0
- package/dist/runtime/app/components/cms/SettingsAccount.vue +138 -0
- package/dist/runtime/app/components/cms/SettingsAccount.vue.d.ts +3 -0
- package/dist/runtime/app/components/cms/SettingsColumns.d.vue.ts +16 -0
- package/dist/runtime/app/components/cms/SettingsColumns.vue +102 -0
- package/dist/runtime/app/components/cms/SettingsColumns.vue.d.ts +16 -0
- package/dist/runtime/app/components/cms/SettingsEntry.d.vue.ts +6 -0
- package/dist/runtime/app/components/cms/SettingsEntry.vue +126 -0
- package/dist/runtime/app/components/cms/SettingsEntry.vue.d.ts +6 -0
- package/dist/runtime/app/components/cms/SettingsLayout.d.vue.ts +16 -0
- package/dist/runtime/app/components/cms/SettingsLayout.vue +177 -0
- package/dist/runtime/app/components/cms/SettingsLayout.vue.d.ts +16 -0
- package/dist/runtime/app/components/cms/SettingsModal.d.vue.ts +16 -0
- package/dist/runtime/app/components/cms/SettingsModal.vue +174 -0
- package/dist/runtime/app/components/cms/SettingsModal.vue.d.ts +16 -0
- package/dist/runtime/app/components/cms/SettingsUsers.d.vue.ts +3 -0
- package/dist/runtime/app/components/cms/SettingsUsers.vue +274 -0
- package/dist/runtime/app/components/cms/SettingsUsers.vue.d.ts +3 -0
- package/dist/runtime/app/components/cms/Spinner.vue +2 -2
- package/dist/runtime/app/components/cms/Table.d.vue.ts +6 -8
- package/dist/runtime/app/components/cms/Table.vue +42 -47
- package/dist/runtime/app/components/cms/Table.vue.d.ts +6 -8
- package/dist/runtime/app/components/cms/Textarea.d.vue.ts +0 -1
- package/dist/runtime/app/components/cms/Textarea.vue +1 -2
- package/dist/runtime/app/components/cms/Textarea.vue.d.ts +0 -1
- package/dist/runtime/app/components/cms/Toaster.vue +1 -1
- package/dist/runtime/app/components/cms/WelcomeModal.d.vue.ts +3 -0
- package/dist/runtime/app/components/cms/WelcomeModal.vue +69 -0
- package/dist/runtime/app/components/cms/WelcomeModal.vue.d.ts +3 -0
- package/dist/runtime/app/composables/cms-account.d.ts +11 -0
- package/dist/runtime/app/composables/cms-account.js +23 -0
- package/dist/runtime/app/composables/cms-entry-disabled.js +1 -1
- package/dist/runtime/app/composables/cms-media-keys.d.ts +1 -0
- package/dist/runtime/app/composables/cms-media-keys.js +5 -0
- package/dist/runtime/app/composables/cms-media-library.js +3 -0
- package/dist/runtime/app/composables/cms-media-uploader.d.ts +11 -2
- package/dist/runtime/app/composables/cms-media-uploader.js +139 -12
- package/dist/runtime/app/composables/cms-overlay.d.ts +4 -0
- package/dist/runtime/app/composables/cms-overlay.js +23 -0
- package/dist/runtime/app/composables/cms-settings.d.ts +12 -0
- package/dist/runtime/app/composables/cms-settings.js +59 -0
- package/dist/runtime/app/composables/cms-theme.d.ts +9 -0
- package/dist/runtime/app/composables/cms-theme.js +27 -0
- package/dist/runtime/app/layouts/cms-admin.d.vue.ts +2 -2
- package/dist/runtime/app/layouts/cms-admin.vue +71 -17
- package/dist/runtime/app/layouts/cms-admin.vue.d.ts +2 -2
- package/dist/runtime/app/pages/admin-collection.vue +127 -101
- package/dist/runtime/app/pages/admin-entry.vue +2 -0
- package/dist/runtime/app/pages/admin-login.vue +18 -3
- package/dist/runtime/app/pages/admin-media.vue +5 -1
- package/dist/runtime/app/utils/ui.d.ts +2 -0
- package/dist/runtime/app/utils/ui.js +18 -0
- package/dist/runtime/assets/main.css +1 -1
- package/dist/runtime/generate.js +1 -1
- package/dist/runtime/server/api/account-password.put.d.ts +4 -0
- package/dist/runtime/server/api/account-password.put.js +38 -0
- package/dist/runtime/server/api/account-welcome.post.d.ts +4 -0
- package/dist/runtime/server/api/account-welcome.post.js +14 -0
- package/dist/runtime/server/api/account.put.d.ts +3 -0
- package/dist/runtime/server/api/account.put.js +25 -0
- package/dist/runtime/server/api/collection.get.js +1 -1
- package/dist/runtime/server/api/media.delete.js +2 -1
- package/dist/runtime/server/api/media.post.js +2 -1
- package/dist/runtime/server/api/media.put.js +2 -1
- package/dist/runtime/server/api/settings.delete.d.ts +4 -0
- package/dist/runtime/server/api/settings.delete.js +12 -0
- package/dist/runtime/server/api/settings.get.d.ts +3 -0
- package/dist/runtime/server/api/settings.get.js +15 -0
- package/dist/runtime/server/api/settings.put.d.ts +3 -0
- package/dist/runtime/server/api/settings.put.js +14 -0
- package/dist/runtime/server/api/user.delete.d.ts +4 -0
- package/dist/runtime/server/api/user.delete.js +12 -0
- package/dist/runtime/server/api/user.put.d.ts +3 -0
- package/dist/runtime/server/api/user.put.js +27 -0
- package/dist/runtime/server/api/users.get.d.ts +3 -0
- package/dist/runtime/server/api/users.get.js +11 -0
- package/dist/runtime/server/api/users.post.d.ts +3 -0
- package/dist/runtime/server/api/users.post.js +36 -0
- package/dist/runtime/server/plugins/session-validate.d.ts +2 -0
- package/dist/runtime/server/plugins/session-validate.js +13 -0
- package/dist/runtime/server/routes/auth/login.post.js +20 -10
- package/dist/runtime/server/utils/graphql-depth.js +12 -5
- package/dist/runtime/server/utils/graphql.js +2 -2
- package/dist/runtime/server/utils/media-folders.js +10 -2
- package/dist/runtime/server/utils/media.d.ts +1 -0
- package/dist/runtime/server/utils/media.js +4 -1
- package/dist/runtime/server/utils/migrate.js +1 -1
- package/dist/runtime/server/utils/password.d.ts +3 -0
- package/dist/runtime/server/utils/password.js +31 -0
- package/dist/runtime/server/utils/require-admin.d.ts +4 -2
- package/dist/runtime/server/utils/require-admin.js +32 -28
- package/dist/runtime/server/utils/same-origin.d.ts +2 -0
- package/dist/runtime/server/utils/same-origin.js +24 -0
- package/dist/runtime/server/utils/settings.d.ts +16 -0
- package/dist/runtime/server/utils/settings.js +31 -0
- package/dist/runtime/server/utils/users.d.ts +15 -0
- package/dist/runtime/server/utils/users.js +34 -0
- package/dist/runtime/shared/index.d.ts +13 -1
- package/dist/runtime/shared/index.js +2 -0
- package/dist/runtime/shared/layout.d.ts +33 -0
- package/dist/runtime/shared/layout.js +127 -0
- package/dist/runtime/shared/users.d.ts +18 -0
- package/dist/runtime/shared/users.js +1 -0
- package/dist/runtime/shared/validation.js +5 -4
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer theme, base, components, utilities;@import "tailwindcss/theme.css" layer(theme) theme(inline);.cms-scope{@import "tailwindcss/preflight.css" layer(base);@import "tailwindcss/utilities.css" layer(utilities) source(none)}@source "../app";.cms-scope,body:has(.cms-scope){--cms-canvas:#1b1b1e;--cms-surface:#222226;--cms-field:#2a2a2f;--cms-elevated:#2f2f35;--cms-line:#35353b;--cms-line-strong:#46464e;--cms-text:#ededef;--cms-text-toned:#c2c2c8;--cms-text-muted:#9a9aa3;--cms-text-dimmed:#6e6e78;--cms-fern:#8fae8b;--cms-error:#f0857d;--cms-success:#7fb083;--cms-warning:#d4ad76;--cms-font-ui:"Hanken Grotesk Variable","Hanken Grotesk",ui-sans-serif,system-ui,sans-serif;--cms-font-mono:"Fragment Mono",ui-monospace,SFMono-Regular,Menlo,monospace;--cms-radius-sm:6px;--cms-radius-md:8px;--cms-radius-lg:12px;--cms-shadow-overlay:0 8px 24px rgba(0,0,0,.35);--cms-scrim:rgba(0,0,0,.5);--cms-duration:120ms;--cms-duration-lg:250ms;--cms-ease:cubic-bezier(0.2,0,0,1);color-scheme:dark;--ui-text-dimmed:var(--cms-text-dimmed);--ui-text-muted:var(--cms-text-muted);--ui-text-toned:var(--cms-text-toned);--ui-text:var(--cms-text-toned);--ui-text-highlighted:var(--cms-text);--ui-text-inverted:var(--cms-canvas);--ui-bg:var(--cms-surface);--ui-bg-muted:var(--cms-canvas);--ui-bg-elevated:var(--cms-field);--ui-bg-accented:var(--cms-elevated);--ui-bg-inverted:var(--cms-text);--ui-border:var(--cms-line);--ui-border-muted:var(--cms-line);--ui-border-accented:var(--cms-line-strong);--ui-border-inverted:var(--cms-text);--ui-primary:var(--cms-text);--ui-accent:var(--cms-fern);--ui-error:var(--cms-error);--ui-success:var(--cms-success);--ui-warning:var(--cms-warning);--ui-radius:var(--cms-radius-md);color:var(--ui-text);font-family:var(--cms-font-ui);margin:0;padding:0;-webkit-font-smoothing:antialiased}body:has(.cms-scope) ::-moz-selection{background:color-mix(in oklab,var(--cms-fern) 35%,transparent);color:var(--ui-text-highlighted)}body:has(.cms-scope) ::selection{background:color-mix(in oklab,var(--cms-fern) 35%,transparent);color:var(--ui-text-highlighted)}body:has(.cms-scope) :is(.cms-scope,.cms-scope *){scrollbar-color:var(--cms-line-strong) transparent;scrollbar-width:thin}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar{height:10px;width:10px}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar-track{background:transparent}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar-thumb{background:var(--cms-line-strong);background-clip:content-box;border:3px solid transparent;border-radius:9999px}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar-thumb:hover{background:color-mix(in oklab,var(--cms-line-strong) 70%,var(--cms-text));background-clip:content-box}.cms-display,.cms-title{font-family:var(--cms-font-ui);font-weight:650;letter-spacing:-.01em}.cms-title{color:var(--ui-text-highlighted)}.cms-title-sm{font-size:1.125rem;line-height:1.4}.cms-title-md{font-size:1.5rem;line-height:1.25}.cms-title-lg{font-size:1.875rem;line-height:1.2}.cms-subtitle{color:var(--ui-text-muted);font-size:.875rem}.cms-accent{color:var(--cms-fern)}.cms-label{color:var(--ui-text-muted);font-size:.75rem;font-weight:500;line-height:1.4}body:has(.cms-scope) :is(button,a,[role=button],[role=menuitem],[role=option],.__clickable):not(:disabled,[aria-disabled=true]){@apply cursor-pointer select-none}body:has(.cms-scope) :is(button,a,[role=button],[role=menuitem],[role=option]):focus-visible{outline:2px solid var(--cms-fern);outline-offset:2px}.cms-canvas{background-color:var(--cms-canvas)}.cms-card{background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg)}.cms-panel{padding:1.75rem}body:has(.cms-scope),html:has(.cms-scope){overscroll-behavior-y:none}.cms-shell{display:flex;min-height:100vh}.cms-sidebar{background:var(--cms-surface);border-right:1px solid var(--cms-line);display:flex;flex-direction:column;flex-shrink:0;gap:1.75rem;height:100vh;padding:1.75rem 1rem;position:sticky;top:0;width:16rem}.cms-sidebar-brand{color:var(--ui-text-highlighted);font-family:var(--cms-font-ui);font-size:1.25rem;font-weight:650;letter-spacing:-.01em;padding-inline:.75rem}.cms-sidebar-nav{display:flex;flex:1;flex-direction:column;gap:1.5rem;overflow-y:auto;overscroll-behavior-y:none}.cms-sidebar-group{display:flex;flex-direction:column;gap:.25rem}.cms-sidebar-group>.cms-label{margin-bottom:.5rem;padding-inline:.75rem}.cms-sidebar-footer{border-top:1px solid var(--cms-line);display:flex;flex-direction:column;gap:.75rem;padding-top:1rem}.cms-sidebar-footer .cms-btn.is-block{color:var(--ui-text-muted);justify-content:space-between;padding-inline:.75rem}.cms-sidebar-footer .cms-btn.is-block:hover{background:var(--cms-field);color:var(--ui-text)}.cms-main{flex:1;height:100vh;min-width:0;overflow-y:auto;overscroll-behavior-y:none;padding:2.5rem}.cms-main-inner{margin-inline:auto;max-width:64rem;min-height:100%;width:100%}.cms-main-inner,.cms-page{display:flex;flex-direction:column}.cms-page{gap:1.75rem}.cms-page.is-fill{flex:1;min-height:0}.cms-page-header{align-items:flex-end;display:flex;gap:1rem;justify-content:space-between}.cms-page-heading{display:flex;flex-direction:column;gap:.5rem}.cms-breadcrumb{align-items:center;color:var(--ui-text-muted);display:flex;font-size:.75rem;font-weight:500;gap:.375rem;line-height:1.4}.cms-breadcrumb-link{border-radius:.25rem;padding:.0625rem .125rem;transition:color .15s ease}.cms-breadcrumb-link:hover{color:var(--ui-text-highlighted)}.cms-breadcrumb-separator{color:var(--ui-text-dimmed)}.cms-tree-row{align-items:center;display:flex;gap:.75rem;padding:.625rem 1rem;transition:background-color .15s ease}.cms-tree-row:hover{background-color:var(--ui-bg-elevated)}.cms-tree-branch{color:var(--ui-text-dimmed);flex-shrink:0;transform:scaleY(-1) rotate(90deg);width:1rem}.cms-toolbar{align-items:center;display:flex;gap:1.5rem}.cms-toolbar-actions{align-items:center;display:flex;flex-shrink:0;gap:.5rem;margin-left:auto}.cms-actions{align-items:center;display:flex;gap:.75rem}.cms-actions.is-end{justify-content:flex-end}.cms-spinner{color:var(--ui-text-dimmed);flex:1;justify-content:center;padding-block:2.5rem}.cms-empty,.cms-spinner{align-items:center;display:flex}.cms-empty{background:color-mix(in oklab,var(--cms-surface) 55%,transparent);border:1px dashed var(--cms-line-strong);border-radius:var(--cms-radius-lg);flex-direction:column;gap:.5rem;padding:3.5rem;text-align:center}.cms-empty.is-fill{flex:1;justify-content:center}.cms-empty-icon{color:var(--cms-fern);margin-bottom:.25rem}.cms-empty>.cms-btn{margin-top:.75rem}.cms-auth{align-items:center;display:flex;justify-content:center;min-height:100vh;padding:1.5rem}.cms-auth-panel{gap:2rem;max-width:24rem;width:100%}.cms-auth-header,.cms-auth-panel{display:flex;flex-direction:column}.cms-auth-header{align-items:center;gap:.75rem;text-align:center}.cms-auth-card{padding:1.75rem}.cms-navlink{align-items:center;border-radius:var(--cms-radius-md);color:var(--ui-text-toned);display:flex;font-size:.875rem;font-weight:500;gap:.625rem;padding:.5rem .75rem;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-navlink:hover{background:var(--cms-field);color:var(--ui-text-highlighted)}.cms-navlink.is-active{background:var(--cms-field);color:var(--cms-fern)}.cms-navlink-icon{color:var(--ui-text-dimmed)}.cms-navlink.is-active .cms-navlink-icon{color:var(--cms-fern)}.cms-badge{align-items:center;border:1px solid transparent;border-radius:var(--cms-radius-md);display:inline-flex;font-family:var(--cms-font-mono);font-size:.6875rem;letter-spacing:.08em;line-height:1.4;padding:.1875rem .5rem;pointer-events:none;text-transform:uppercase;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-badge.is-published{background:color-mix(in oklab,var(--cms-success) 18%,transparent);border-color:color-mix(in oklab,var(--cms-success) 32%,transparent);color:var(--cms-success)}.cms-badge.is-muted{background:var(--cms-field);border-color:var(--cms-line);color:var(--ui-text-muted)}.cms-badge.is-draft{background:transparent}.cms-badge.is-draft,.cms-dropzone{border:1px dashed var(--cms-line-strong);color:var(--ui-text-muted)}.cms-dropzone{align-items:center;background:color-mix(in oklab,var(--cms-surface) 55%,transparent);border-radius:var(--cms-radius-lg);cursor:pointer;display:flex;flex-direction:column;gap:.5rem;justify-content:center;padding:2rem 1.5rem;transition:border-color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:100%}.cms-dropzone.is-over,.cms-dropzone:hover{background:var(--cms-field);border-color:var(--cms-fern);color:var(--ui-text-highlighted)}.cms-dropzone.is-dense{flex-direction:row;gap:.625rem;padding:.875rem 1.25rem}.cms-dropzone.is-busy{opacity:.7;pointer-events:none}.cms-pill{align-items:center;background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:9999px;color:var(--ui-text-muted);cursor:pointer;display:inline-flex;flex:none;font-size:.8125rem;gap:.35rem;line-height:1.4;padding:.3rem .8rem;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-pill:hover{background:var(--cms-field);color:var(--ui-text-highlighted)}.cms-pill.is-active{background:var(--cms-field);border-color:color-mix(in oklab,var(--cms-fern) 45%,transparent);color:var(--cms-fern)}.cms-pill.is-empty{border-style:dashed}.cms-folder-picker{display:flex;flex-direction:column;gap:.5rem}.cms-folder-picker-list{background:var(--cms-field);border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:flex;flex-direction:column;gap:1px;max-height:16rem;overflow-y:auto;padding:.25rem}.cms-folder-picker-row{align-items:center;border-radius:var(--cms-radius-sm);color:var(--ui-text-toned);cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;min-height:2rem;padding:.25rem .625rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:100%}.cms-folder-picker-row:hover:not(:disabled){background:var(--cms-elevated);color:var(--ui-text-highlighted)}.cms-folder-picker-row.is-active{background:var(--cms-elevated);color:var(--cms-fern)}.cms-folder-picker-row:disabled{cursor:not-allowed;opacity:.4}.cms-folder-picker-check{flex:none;margin-left:auto}.cms-folder-picker-empty{padding:.5rem .625rem}.cms-folder-picker-empty,.cms-form-hint{color:var(--ui-text-dimmed);font-size:.8125rem}.cms-dropzone-hint{align-items:center;color:var(--ui-text-dimmed);display:inline-flex;font-size:.75rem;gap:.3rem}.cms-block-label{color:var(--ui-text-toned);font-size:.875rem;font-weight:550;line-height:1.4;transition:color var(--cms-duration) var(--cms-ease)}.cms-block-label:hover{color:var(--ui-text-highlighted)}@keyframes cms-rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.cms-rise{animation:cms-rise .3s var(--cms-ease) both}.cms-rise.is-delayed{animation-delay:90ms}@media (prefers-reduced-motion:reduce){.cms-rise{animation:none}}.cms-richtext{background:var(--cms-field);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);overflow:hidden}.cms-richtext-toolbar{align-items:center;border-bottom:1px solid var(--cms-line);display:flex;flex-wrap:wrap;gap:2px;padding:4px}.cms-richtext-body{color:var(--ui-text-highlighted);font-size:.875rem;min-height:9rem;outline:none;padding:.75rem 1rem}.cms-richtext-body h2{font-size:1.25rem;font-weight:600;margin:.75em 0 .35em}.cms-richtext-body h3{font-size:1.1rem;font-weight:600;margin:.75em 0 .35em}.cms-richtext-body p{margin:.35em 0}.cms-richtext-body ul{list-style:disc;padding-left:1.25rem}.cms-richtext-body ol{list-style:decimal;padding-left:1.25rem}.cms-richtext-body blockquote{border-left:3px solid var(--cms-line-strong);color:var(--ui-text-muted);padding-left:.75rem}.cms-btn{align-items:center;border:1px solid transparent;border-radius:var(--cms-radius-md);display:inline-flex;font-weight:500;gap:.375rem;justify-content:center;line-height:1;min-height:var(--cms-btn-size);transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease),opacity var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-btn:active:not(:disabled,[aria-disabled=true]){scale:.99}.cms-btn:disabled,.cms-btn[aria-disabled=true]{opacity:.5;pointer-events:none}.cms-btn.is-block{width:100%}.cms-btn.is-icon{justify-content:center;padding-inline:0;width:var(--cms-btn-size)}.cms-btn-xs{--cms-btn-size:1.75rem;font-size:.875rem;padding:.25rem .625rem}.cms-btn-sm{--cms-btn-size:2rem;font-size:.875rem;padding:.25rem .75rem}.cms-btn-md{--cms-btn-size:2.25rem;font-size:.875rem;padding:.25rem .875rem}.cms-btn-lg{--cms-btn-size:2.625rem;font-size:.9375rem;padding:.375rem 1.125rem}.cms-btn-primary.cms-btn-solid{background:var(--ui-primary);color:var(--ui-text-inverted)}.cms-btn-primary.cms-btn-solid:hover{background:color-mix(in oklab,var(--ui-primary) 82%,#fff)}.cms-btn-primary.cms-btn-solid:active{background:color-mix(in oklab,var(--ui-primary) 88%,#000)}.cms-btn-primary.cms-btn-soft{background:var(--cms-field);border-color:var(--cms-line);color:var(--ui-text-highlighted)}.cms-btn-primary.cms-btn-soft:hover{background:var(--cms-elevated);border-color:var(--cms-line-strong)}.cms-btn-primary.cms-btn-soft:active{background:var(--cms-field)}.cms-btn-primary.cms-btn-ghost{background:transparent;color:var(--ui-text-toned)}.cms-btn-primary.cms-btn-ghost:hover{background:var(--cms-field);color:var(--ui-text-highlighted)}.cms-btn-primary.cms-btn-ghost:active{background:var(--cms-elevated)}.cms-btn-neutral.cms-btn-solid{background:var(--cms-line-strong);color:var(--ui-text-highlighted)}.cms-btn-neutral.cms-btn-solid:hover{background:color-mix(in oklab,var(--cms-line-strong) 80%,var(--cms-text))}.cms-btn-neutral.cms-btn-solid:active{background:color-mix(in oklab,var(--cms-line-strong) 90%,#000)}.cms-btn-neutral.cms-btn-soft{background:var(--cms-field);border-color:var(--cms-line);color:var(--ui-text-highlighted)}.cms-btn-neutral.cms-btn-soft:hover{background:var(--cms-elevated);border-color:var(--cms-line-strong)}.cms-btn-neutral.cms-btn-soft:active{background:var(--cms-field)}.cms-btn-neutral.cms-btn-ghost{background:transparent;color:var(--ui-text-toned)}.cms-btn-neutral.cms-btn-ghost:hover{background:var(--cms-field);color:var(--ui-text-highlighted)}.cms-btn-neutral.cms-btn-ghost:active{background:var(--cms-elevated)}.cms-btn-error.cms-btn-solid{background:var(--ui-error);color:var(--cms-canvas)}.cms-btn-error.cms-btn-solid:hover{background:color-mix(in oklab,var(--ui-error) 85%,#fff)}.cms-btn-error.cms-btn-solid:active{background:color-mix(in oklab,var(--ui-error) 88%,#000)}.cms-btn-error.cms-btn-soft{background:color-mix(in oklab,var(--ui-error) 16%,transparent);border-color:color-mix(in oklab,var(--ui-error) 28%,transparent);color:var(--ui-error)}.cms-btn-error.cms-btn-soft:hover{background:color-mix(in oklab,var(--ui-error) 24%,transparent);border-color:color-mix(in oklab,var(--ui-error) 40%,transparent)}.cms-btn-error.cms-btn-soft:active{background:color-mix(in oklab,var(--ui-error) 16%,transparent)}.cms-btn-error.cms-btn-ghost{background:transparent;color:var(--ui-error)}.cms-btn-error.cms-btn-ghost:hover{background:color-mix(in oklab,var(--ui-error) 14%,transparent)}.cms-btn-error.cms-btn-ghost:active{background:color-mix(in oklab,var(--ui-error) 22%,transparent)}.cms-btn-success.cms-btn-solid{background:var(--ui-success);color:var(--cms-canvas)}.cms-btn-success.cms-btn-solid:hover{background:color-mix(in oklab,var(--ui-success) 85%,#fff)}.cms-btn-success.cms-btn-solid:active{background:color-mix(in oklab,var(--ui-success) 88%,#000)}.cms-btn-success.cms-btn-soft{background:color-mix(in oklab,var(--ui-success) 16%,transparent);border-color:color-mix(in oklab,var(--ui-success) 28%,transparent);color:var(--ui-success)}.cms-btn-success.cms-btn-soft:hover{background:color-mix(in oklab,var(--ui-success) 24%,transparent);border-color:color-mix(in oklab,var(--ui-success) 40%,transparent)}.cms-btn-success.cms-btn-soft:active{background:color-mix(in oklab,var(--ui-success) 16%,transparent)}.cms-btn-success.cms-btn-ghost{background:transparent;color:var(--ui-success)}.cms-btn-success.cms-btn-ghost:hover{background:color-mix(in oklab,var(--ui-success) 14%,transparent)}.cms-btn-success.cms-btn-ghost:active{background:color-mix(in oklab,var(--ui-success) 22%,transparent)}.cms-form{display:flex;flex-direction:column;gap:1.25rem}.cms-tabs{align-items:center;border-bottom:1px solid var(--ui-border);display:flex;gap:.25rem;margin-bottom:.25rem;overflow-x:auto}.cms-tab{border-bottom:2px solid transparent;color:var(--ui-text-toned);cursor:pointer;font-size:.875rem;font-weight:500;margin-bottom:-1px;padding:.5rem .875rem;transition:color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-tab:hover{color:var(--ui-text-highlighted)}.cms-tab.is-active{border-bottom-color:var(--cms-fern);color:var(--cms-fern)}.cms-form-field{display:flex;flex-direction:column;gap:.375rem}.cms-form-label-row{align-items:center;display:flex;gap:.75rem;justify-content:space-between;min-height:1.75rem}.cms-form-label{color:var(--ui-text-toned);font-size:.875rem;font-weight:500}.cms-form-error,.cms-form-required{color:var(--ui-error)}.cms-form-error{font-size:.875rem}.cms-form-actions{align-items:center;display:flex;gap:.75rem;justify-content:flex-end;padding-top:.25rem}.cms-field{background:var(--cms-field);border:1px solid var(--cms-line);border-radius:var(--ui-radius);color:var(--ui-text-highlighted);line-height:1.25;transition:border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease);width:100%}textarea.cms-field{line-height:1.5;min-height:0;padding-bottom:.625rem;padding-top:.625rem;resize:vertical}.cms-field::-moz-placeholder{color:var(--ui-text-dimmed)}.cms-field::placeholder{color:var(--ui-text-dimmed)}.cms-field:hover:not(:focus,:focus-within){border-color:var(--cms-line-strong)}.cms-field:focus,.cms-field:focus-within{border-color:var(--cms-fern);box-shadow:0 0 0 3px color-mix(in oklab,var(--cms-fern) 25%,transparent);outline:none}.cms-field.is-error{border-color:var(--ui-error)}.cms-field.is-error:focus,.cms-field.is-error:focus-within{border-color:var(--ui-error);box-shadow:0 0 0 3px color-mix(in oklab,var(--ui-error) 25%,transparent)}.cms-field-sm{font-size:.875rem;min-height:2rem;padding:.25rem .625rem}.cms-field-md{font-size:.875rem;min-height:2.25rem;padding:.25rem .75rem}.cms-field-lg{font-size:.9375rem;min-height:2.625rem;padding:.375rem .875rem}.cms-select-chevron{align-items:center;cursor:pointer;display:inline-flex;transition:transform var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-select-chevron:hover{color:var(--ui-text-muted)}.cms-select-chevron.is-open{transform:rotate(180deg)}.cms-locale-switch{align-items:center;background:var(--cms-field);border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:inline-flex;gap:2px;padding:2px}.cms-locale-option{border-radius:var(--cms-radius-sm);color:var(--ui-text-muted);cursor:pointer;font-family:var(--cms-font-mono);font-size:.6875rem;letter-spacing:.08em;line-height:1.4;padding:.125rem .5rem;text-transform:uppercase;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-locale-option:hover:not(.is-active){color:var(--ui-text-highlighted)}.cms-locale-option.is-empty{color:var(--ui-text-dimmed)}.cms-locale-option.is-active{background:var(--cms-elevated);color:var(--cms-fern)}.cms-input-wrap{align-items:center;display:flex;position:relative;width:100%}.cms-input-wrap .cms-field{width:100%}.cms-input-lead,.cms-input-trail{align-items:center;color:var(--ui-text-dimmed);display:flex;position:absolute}.cms-input-lead{left:.625rem}.cms-input-trail{right:.375rem}.cms-input-wrap.has-lead .cms-field{padding-left:2rem}.cms-switch{align-items:center;background:var(--cms-line-strong);border-radius:9999px;display:inline-flex;flex-shrink:0;height:1.25rem;position:relative;transition:background-color var(--cms-duration) var(--cms-ease);width:2.25rem}.cms-switch.is-on{background:var(--cms-fern)}.cms-switch:after{background:var(--cms-text);border-radius:9999px;content:"";height:.875rem;left:.1875rem;position:absolute;transition:transform var(--cms-duration) var(--cms-ease);width:.875rem}.cms-switch.is-on:after{background:var(--cms-canvas);transform:translateX(1rem)}.cms-overlay{align-items:center;background:var(--cms-scrim);display:flex;inset:0;justify-content:center;overflow-y:auto;padding:2rem 1rem;position:fixed;z-index:60}.cms-modal{background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);display:flex;flex-direction:column;max-height:calc(100dvh - 4rem);max-width:32rem;width:100%}.cms-modal.is-sm{max-width:28rem}.cms-modal.is-lg{max-width:48rem}.cms-modal-header{padding:1.25rem 1.5rem 0}.cms-modal-body{flex:1;min-height:0;overflow-y:auto;padding:1.25rem 1.5rem 1.5rem}.cms-modal-enter-active,.cms-modal-leave-active{transition:opacity var(--cms-duration-lg) var(--cms-ease)}.cms-modal-enter-active .cms-modal,.cms-modal-leave-active .cms-modal{transition:transform var(--cms-duration-lg) var(--cms-ease),opacity var(--cms-duration-lg) var(--cms-ease);will-change:transform}.cms-modal-enter-from,.cms-modal-leave-to{opacity:0}.cms-modal-enter-from .cms-modal,.cms-modal-leave-to .cms-modal{opacity:0;transform:translateY(8px)}.cms-overlay-drawer{align-items:stretch;justify-content:flex-end;overflow:hidden;padding:0;z-index:55}.cms-drawer{background:var(--cms-surface);border-left:1px solid var(--cms-line);border-radius:var(--cms-radius-lg) 0 0 var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);display:flex;flex-direction:column;height:100%;max-width:46rem;width:100%}.cms-drawer-header{align-items:center;border-bottom:1px solid var(--cms-line);display:flex;gap:1rem;justify-content:space-between;padding:1.25rem 1.75rem}.cms-drawer-body{flex:1;min-height:0;overflow-y:auto;padding:1.75rem}.cms-drawer-footer{align-items:center;border-top:1px solid var(--cms-line);display:flex;gap:1rem;justify-content:space-between;padding:1.25rem 1.75rem}.cms-drawer-enter-active,.cms-drawer-leave-active{transition:opacity var(--cms-duration-lg) var(--cms-ease)}.cms-drawer-enter-active .cms-drawer,.cms-drawer-leave-active .cms-drawer{transition:transform var(--cms-duration-lg) var(--cms-ease);will-change:transform}.cms-drawer-enter-from,.cms-drawer-leave-to{opacity:0}.cms-drawer-enter-from .cms-drawer,.cms-drawer-leave-to .cms-drawer{transform:translateX(100%)}@media (prefers-reduced-motion:reduce){.cms-drawer-enter-active,.cms-drawer-enter-active .cms-drawer,.cms-drawer-leave-active,.cms-drawer-leave-active .cms-drawer,.cms-modal-enter-active,.cms-modal-enter-active .cms-modal,.cms-modal-leave-active,.cms-modal-leave-active .cms-modal{transition-duration:.01ms}}.cms-menu{background:var(--cms-elevated);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);margin-top:.375rem;min-width:12rem;padding:.25rem;position:absolute;z-index:50}.cms-menu.align-end{right:0}.cms-menu-item{align-items:center;border-radius:var(--cms-radius-sm);color:var(--ui-text);cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;padding:.4rem .6rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:100%}.cms-menu-item:hover{background:color-mix(in oklab,var(--cms-text) 8%,transparent);color:var(--ui-text-highlighted)}.cms-menu-check{color:var(--cms-fern);margin-left:auto}.cms-popover{background:var(--cms-elevated);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);margin-top:.375rem;position:absolute;z-index:50}.cms-selectmenu-input{background:transparent;color:var(--ui-text-highlighted);flex:1;min-width:4rem;outline:none}.cms-selectmenu-affix{color:var(--ui-text-dimmed);flex-shrink:0}.cms-selectmenu-panel{background:var(--cms-elevated);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);left:0;margin-top:.375rem;max-height:15rem;overflow-y:auto;padding:.25rem;position:absolute;right:0;z-index:50}.cms-tag{align-items:center;background:var(--cms-elevated);border:1px solid var(--cms-line);border-radius:9999px;color:var(--ui-text-highlighted);display:inline-flex;font-size:.8125rem;gap:.25rem;padding:.125rem .5rem}.cms-media-gallery{display:flex;flex-direction:column;gap:1.25rem}.cms-media-source{color:var(--ui-text-muted);font-size:.8125rem;margin-top:-.75rem}.cms-media-filters{align-items:center;display:flex;flex-wrap:wrap;gap:.25rem}.cms-blocks-grid{display:grid;gap:.75rem;grid-template-columns:repeat(2,minmax(0,1fr))}@media (min-width:640px){.cms-blocks-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1024px){.cms-blocks-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}.cms-block-tile{overflow:hidden;transition:opacity var(--cms-duration) var(--cms-ease)}.cms-block-tile.is-muted{opacity:.45}.cms-block-preview{align-items:center;aspect-ratio:4/3;background:var(--cms-field);color:var(--ui-text-dimmed);display:flex;justify-content:center;position:relative;width:100%}.cms-block-preview>img,.cms-block-preview>video{height:100%;inset:0;-o-object-fit:cover;object-fit:cover;position:absolute;width:100%}.cms-block-summary{color:var(--ui-text-muted);font-size:.75rem;line-height:1.5;padding:.75rem;text-align:left}.cms-block-hidden{color:var(--cms-text);filter:drop-shadow(0 1px 2px rgb(0 0 0/.6));left:.5rem;position:absolute;top:.5rem}.cms-block-tile.is-dragging{opacity:.4}.cms-block-tile.is-drop-target{outline:2px solid var(--cms-fern);outline-offset:2px}.cms-block-bar{gap:.25rem;padding:.375rem}.cms-block-bar,.cms-block-grip{align-items:center;display:flex}.cms-block-grip{color:var(--ui-text-dimmed);cursor:grab;justify-content:center;padding:.25rem;transition:color var(--cms-duration) var(--cms-ease)}.cms-block-grip:hover{color:var(--ui-text-muted)}.cms-block-tile.is-dragging .cms-block-grip{cursor:grabbing}.cms-block-bar-name{color:var(--ui-text-muted);flex:1;font-size:.75rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-block-bar-actions{align-items:center;display:flex;gap:.125rem}.cms-block-add{align-items:center;border:1px dashed var(--cms-line-strong);border-radius:var(--cms-radius-md);color:var(--ui-text-muted);display:flex;flex-direction:column;font-size:.8125rem;font-weight:500;gap:.375rem;justify-content:center;min-height:6rem;transition:border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-block-add:hover{border-color:var(--cms-fern);color:var(--ui-text-highlighted)}.cms-media-gallery{position:relative}.cms-media-gallery.is-compact{gap:1rem}.cms-media-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.cms-media-search{flex:1 1 16rem;min-width:0}.cms-media-search-clear{color:var(--ui-text-dimmed);cursor:pointer;display:flex;transition:color var(--cms-duration) var(--cms-ease)}.cms-media-search-clear:hover{color:var(--ui-text-highlighted)}.cms-media-toolbar-actions{align-items:center;display:flex;flex-wrap:wrap;gap:.375rem}.cms-media-view-toggle{border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:inline-flex;gap:1px;padding:1px}.cms-media-nav{gap:.5rem;justify-content:space-between;min-height:1.75rem}.cms-media-crumbs,.cms-media-nav{align-items:center;display:flex;flex-wrap:wrap}.cms-media-crumbs{gap:.125rem;min-width:0}.cms-media-crumb{align-items:center;border:1px solid transparent;border-radius:var(--cms-radius-sm);color:var(--ui-text-muted);cursor:pointer;display:inline-flex;font-size:.875rem;font-weight:500;gap:.375rem;padding:.25rem .5rem;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-media-crumb:hover{background:var(--cms-field);color:var(--ui-text-highlighted)}.cms-media-crumb.is-current,.cms-media-crumb.is-current:hover{background:transparent;color:var(--ui-text-highlighted);cursor:default}.cms-media-crumb.is-drop{background:color-mix(in oklab,var(--cms-fern) 14%,transparent);border-color:var(--cms-fern);color:var(--cms-fern)}.cms-media-folder-actions{align-items:center;display:flex;gap:.25rem}.cms-media-progress{background:var(--cms-field);border-radius:var(--cms-radius-md);color:var(--ui-text-toned);font-size:.8125rem;padding:.5rem .75rem}.cms-media-progress,.cms-media-selection{align-items:center;display:flex;gap:.5rem}.cms-media-selection{background:var(--cms-elevated);border:1px solid color-mix(in oklab,var(--cms-fern) 40%,transparent);border-radius:var(--cms-radius-md);box-shadow:var(--cms-shadow-overlay);flex-wrap:wrap;padding:.375rem .5rem .375rem .875rem;position:sticky;top:.5rem;z-index:5}.cms-media-selection-count{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:600}.cms-media-selection-actions{align-items:center;display:flex;gap:.375rem;margin-left:auto}.cms-media-section{display:flex;flex-direction:column;gap:.625rem}.cms-media-section-title{align-items:center;color:var(--ui-text-dimmed);display:inline-flex;font-size:.75rem;font-weight:600;gap:.375rem;letter-spacing:.06em;text-transform:uppercase}.cms-media-folders{display:grid;gap:.625rem;grid-template-columns:repeat(auto-fill,minmax(12rem,1fr))}.cms-media-gallery.is-compact .cms-media-folders{grid-template-columns:repeat(auto-fill,minmax(10rem,1fr))}.cms-media-folder-tile{align-items:center;background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);cursor:pointer;display:flex;gap:.75rem;min-width:0;padding:.75rem .875rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease)}.cms-media-folder-tile:hover{background:var(--cms-field);border-color:var(--cms-line-strong)}.cms-media-folder-tile.is-drop{background:color-mix(in oklab,var(--cms-fern) 12%,var(--cms-surface));border-color:var(--cms-fern)}.cms-media-folder-tile-icon{color:var(--cms-fern);flex:none}.cms-media-folder-tile-text{display:flex;flex-direction:column;min-width:0}.cms-media-folder-tile-name{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-folder-tile-meta{color:var(--ui-text-dimmed);font-size:.75rem}.cms-media-row.is-checked,.cms-media-tile.is-checked{border-color:var(--cms-fern)}.cms-media-tile.is-checked .cms-media-preview>img,.cms-media-tile.is-checked .cms-media-preview>video{opacity:.8}.cms-media-row.is-dragging,.cms-media-tile.is-dragging{opacity:.45}.cms-media-check{align-items:center;background:rgba(0,0,0,.35);border:1.5px solid hsla(0,0%,100%,.85);border-radius:9999px;color:transparent;cursor:pointer;display:flex;height:1.375rem;justify-content:center;left:.5rem;opacity:0;position:absolute;top:.5rem;transition:opacity var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:1.375rem;z-index:1}.cms-media-check.is-on,.cms-media-check.is-visible,.cms-media-tile:focus-visible .cms-media-check,.cms-media-tile:hover .cms-media-check{opacity:1}.cms-media-check.is-on{background:var(--cms-fern);border-color:var(--cms-fern);color:var(--cms-canvas)}.cms-media-row .cms-media-check{background:transparent;border-color:var(--cms-line-strong);flex:none;position:static}.cms-media-row .cms-media-check.is-on{background:var(--cms-fern);border-color:var(--cms-fern)}.cms-media-grid.is-recent{gap:.5rem;grid-template-columns:repeat(6,minmax(0,1fr))}.cms-media-grid.is-recent .cms-media-tile{border-radius:var(--cms-radius-md)}.cms-media-list{display:flex;flex-direction:column;overflow:hidden}.cms-media-row{align-items:center;border:1px solid transparent;border-bottom:1px solid var(--cms-line);cursor:pointer;display:flex;gap:.875rem;padding:.5rem .875rem;transition:background-color var(--cms-duration) var(--cms-ease)}.cms-media-row:last-child{border-bottom-color:transparent}.cms-media-row:hover{background:var(--cms-field)}.cms-media-row-name{color:var(--ui-text-highlighted);display:flex;flex:1;flex-direction:column;font-size:.875rem;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-row-cell{color:var(--ui-text-muted);flex:none;font-size:.8125rem;text-align:right;width:5.5rem}.cms-media-row-cell.is-mono{font-family:var(--cms-font-mono);font-size:.75rem;text-transform:uppercase;width:3.5rem}@media (max-width:640px){.cms-media-row-cell.is-wide{display:none}.cms-media-grid.is-recent{grid-template-columns:repeat(3,minmax(0,1fr))}}.cms-media-drop-overlay{align-items:center;background:color-mix(in oklab,var(--cms-canvas) 82%,transparent);border:2px dashed var(--cms-fern);border-radius:var(--cms-radius-lg);color:var(--ui-text-highlighted);display:flex;flex-direction:column;font-size:.9375rem;gap:.5rem;inset:-.5rem;justify-content:center;pointer-events:none;position:absolute;z-index:10}.cms-media-drop-overlay strong{color:var(--cms-fern)}.cms-media-upload-hint{margin-top:.75rem;text-align:center}.cms-media-detail{display:flex;flex-direction:column;gap:1.5rem}.cms-media-detail-preview{align-items:center;background:repeating-conic-gradient(var(--cms-field) 0 25%,var(--cms-surface) 0 50%) 50% /1.25rem 1.25rem;border-radius:var(--cms-radius-lg);color:var(--ui-text-dimmed);display:flex;justify-content:center;max-height:24rem;min-height:12rem;overflow:hidden}.cms-media-detail-preview>img,.cms-media-detail-preview>video{max-height:24rem;max-width:100%;-o-object-fit:contain;object-fit:contain}.cms-media-detail-facts{display:grid;font-size:.875rem;gap:.5rem 1.5rem;grid-template-columns:max-content minmax(0,1fr)}.cms-media-detail-facts dt{color:var(--ui-text-dimmed)}.cms-media-detail-facts dd{color:var(--ui-text-toned);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-detail-facts dd.is-mono{font-family:var(--cms-font-mono);font-size:.75rem;line-height:1.6}.cms-media-detail-usage{display:flex;flex-direction:column;gap:.625rem}.cms-media-usage-list{border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:flex;flex-direction:column;overflow:hidden}.cms-media-usage-list li+li{border-top:1px solid var(--cms-line)}.cms-media-usage-link{display:flex;flex-direction:column;gap:.125rem;padding:.5rem .75rem;transition:background-color var(--cms-duration) var(--cms-ease)}.cms-media-usage-link:hover{background:var(--cms-field)}.cms-media-usage-title{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:500}.cms-media-usage-meta{color:var(--ui-text-dimmed);font-family:var(--cms-font-mono);font-size:.75rem}.cms-media-grid{display:grid;gap:1rem;grid-template-columns:repeat(2,minmax(0,1fr))}@media (min-width:640px){.cms-media-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1024px){.cms-media-grid:not(.is-compact){grid-template-columns:repeat(4,minmax(0,1fr))}}.cms-media-tile{overflow:hidden;text-align:left;transition:border-color var(--cms-duration) var(--cms-ease)}.cms-media-tile.is-selectable{cursor:pointer}.cms-media-tile.is-selectable:hover{border-color:var(--cms-line-strong)}.cms-media-preview{align-items:center;aspect-ratio:1;background:var(--cms-field);color:var(--ui-text-dimmed);display:flex;justify-content:center;position:relative}.cms-media-preview>img,.cms-media-preview>video{height:100%;inset:0;-o-object-fit:cover;object-fit:cover;position:absolute;width:100%}.cms-media-info{background:linear-gradient(0deg,rgba(0,0,0,.75),transparent);bottom:0;color:var(--cms-text);font-family:var(--cms-font-mono);font-size:.75rem;left:0;letter-spacing:.08em;line-height:1.4;opacity:0;padding:1.5rem .75rem .5rem;pointer-events:none;position:absolute;right:0;text-transform:uppercase;transition:opacity var(--cms-duration) var(--cms-ease)}.cms-media-tile:focus-visible .cms-media-info,.cms-media-tile:hover .cms-media-info{opacity:1}.cms-media-meta{display:flex;flex-direction:column;gap:.25rem;padding:.625rem .875rem}.cms-media-name{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:500}.cms-media-folder,.cms-media-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-folder{align-items:center;color:var(--ui-text-dimmed);display:inline-flex;font-size:.75rem;gap:.25rem}.cms-media-single{max-width:15rem;width:100%}.cms-block-tile.is-missing{border-color:color-mix(in oklab,var(--ui-warning) 55%,transparent)}.cms-media-missing{align-items:center;font-size:.75rem;gap:.375rem}.cms-media-missing,.cms-media-missing-icon{color:var(--ui-warning);display:flex}.cms-media-thumb{background:var(--cms-field);border-radius:var(--cms-radius-sm);height:2.25rem;-o-object-fit:cover;object-fit:cover;width:2.25rem}.cms-media-thumb.is-fallback{align-items:center;color:var(--ui-text-dimmed);display:flex;justify-content:center}.cms-media-thumb-empty{color:var(--ui-text-dimmed)}.cms-table-shell{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.cms-table-scroll{flex:1;min-height:0;overflow:auto}.cms-table{border-collapse:collapse;min-width:-moz-max-content;min-width:max-content;text-align:left;width:100%}.cms-table td,.cms-table th{white-space:nowrap}.cms-table thead{background:var(--cms-surface);position:sticky;top:0;z-index:10}.cms-table th{background:var(--cms-surface);box-shadow:inset 0 -1px 0 var(--cms-line);color:var(--ui-text-muted);font-family:var(--cms-font-mono);font-size:.6875rem;font-weight:400;letter-spacing:.08em;line-height:1.4;padding:.75rem 1.25rem;text-transform:uppercase;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-table td{color:var(--ui-text);font-size:.875rem;padding:.875rem 1.25rem}.cms-table tbody tr{border-bottom:1px solid var(--cms-line);transition:background-color var(--cms-duration) var(--cms-ease)}.cms-table tbody tr:last-child{border-bottom:0}.cms-table tbody tr:hover{background:var(--cms-field)}.cms-table-cell-actions{display:flex;justify-content:flex-end}.cms-table th[draggable=true]{cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cms-table th[draggable=true]:active{cursor:grabbing}.cms-table th.is-dragging{opacity:.4}.cms-table th.is-drop-target{background:var(--cms-field);box-shadow:inset 0 -1px 0 var(--cms-line),inset 0 0 0 2px color-mix(in oklab,var(--cms-fern) 55%,transparent)}.cms-th-label{align-items:center;display:inline-flex;gap:.35rem}.cms-table th.is-sortable{cursor:pointer}.cms-table th.is-sortable:hover,.cms-table th.is-sorted{color:var(--ui-text-highlighted)}.cms-table th.is-sorted{background:var(--cms-field)}.cms-th-sort{flex:none;opacity:0;transition:opacity var(--cms-duration) var(--cms-ease)}.cms-table th.is-sortable:hover .cms-th-sort,.cms-table th.is-sorted .cms-th-sort{opacity:1}.cms-alert{border:1px solid transparent;border-radius:var(--cms-radius-md);display:flex;flex-direction:column;font-size:.875rem;gap:.125rem;padding:.75rem 1rem}.cms-alert-title{font-weight:550}.cms-alert-error{background:color-mix(in oklab,var(--ui-error) 14%,transparent);border-color:color-mix(in oklab,var(--ui-error) 26%,transparent);color:var(--ui-error)}.cms-alert-success{background:color-mix(in oklab,var(--ui-success) 14%,transparent);border-color:color-mix(in oklab,var(--ui-success) 26%,transparent);color:var(--ui-success)}.cms-alert-warning{background:color-mix(in oklab,var(--ui-warning) 14%,transparent);border-color:color-mix(in oklab,var(--ui-warning) 26%,transparent);color:var(--ui-warning)}.cms-alert-neutral{background:var(--cms-field);border-color:var(--cms-line);color:var(--ui-text-toned)}.cms-alert-neutral .cms-alert-title{color:var(--ui-text-highlighted)}.cms-toaster{bottom:1rem;display:flex;flex-direction:column;gap:.5rem;max-width:calc(100vw - 2rem);position:fixed;right:1rem;width:20rem;z-index:80}.cms-toast{background:var(--cms-elevated);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);padding:.75rem .875rem}.cms-toast-row{align-items:flex-start;display:flex;gap:.625rem}.cms-toast-icon{color:var(--ui-text-muted);flex-shrink:0;margin-top:.0625rem}.cms-toast.is-success .cms-toast-icon{color:var(--ui-success)}.cms-toast.is-error .cms-toast-icon{color:var(--ui-error)}.cms-toast-title{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:500}.cms-toast-description{color:var(--ui-text-muted);font-size:.875rem;margin-top:.125rem}.cms-toast-dismiss{color:var(--ui-text-dimmed);flex-shrink:0;transition:color var(--cms-duration) var(--cms-ease)}.cms-toast-dismiss:hover{color:var(--ui-text-highlighted)}.cms-pagination{align-items:center;display:flex;gap:.25rem;justify-content:center}.cms-page-btn{border-radius:var(--cms-radius-sm);color:var(--ui-text-toned);font-size:.875rem;height:2rem;min-width:2rem;padding:0 .5rem;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-page-btn:hover:not(:disabled){background:var(--cms-field);color:var(--ui-text-highlighted)}.cms-page-btn.is-active{background:var(--cms-field);color:var(--cms-fern);font-weight:600}.cms-page-btn:disabled{opacity:.4}
|
|
1
|
+
@layer theme, base, components, utilities;@import "tailwindcss/theme.css" layer(theme) theme(inline);.cms-scope{@import "tailwindcss/preflight.css" layer(base);@import "tailwindcss/utilities.css" layer(utilities) source(none)}@source "../app";.cms-scope,.cms-theme-preview-app,html:has(.cms-scope){--cms-canvas:light-dark(#f5f5f6,#0d0d0f);--cms-surface:light-dark(#fff,#141416);--cms-subtle:light-dark(#f7f7f8,#18181b);--cms-field:light-dark(#fff,#19191c);--cms-elevated:light-dark(#fff,#1c1c20);--cms-fill:light-dark(#efeff1,#222226);--cms-line:light-dark(#e7e7ea,#232327);--cms-line-strong:light-dark(#d8d8dd,#303036);--cms-field-line:light-dark(#dedee3,#2a2a30);--cms-text:light-dark(#111114,#f2f2f3);--cms-text-toned:light-dark(#3b3b42,#cdcdd3);--cms-text-muted:light-dark(#6b6b75,#9b9ba5);--cms-text-dimmed:light-dark(#9d9da7,#686872);--cms-accent:light-dark(#5b5bd6,#6466e9);--cms-accent-hover:light-dark(#4d4dc8,#7375ee);--cms-accent-text:light-dark(#5050cc,#a0a2f8);--cms-accent-contrast:#fff;--cms-accent-soft:color-mix(in oklab,var(--cms-accent) 11%,transparent);--cms-accent-line:color-mix(in oklab,var(--cms-accent) 34%,transparent);--cms-accent-glow:light-dark(#a78bfa,#8b5cf6);--cms-error:light-dark(#d9383a,#f47a7a);--cms-success:light-dark(#1d8a54,#5ccf90);--cms-warning:light-dark(#b5620b,#efb255);--cms-hover:color-mix(in oklab,var(--cms-text) 5%,transparent);--cms-press:color-mix(in oklab,var(--cms-text) 8%,transparent);--cms-font-ui:"Geist Variable","Geist",ui-sans-serif,system-ui,sans-serif;--cms-font-mono:"Geist Mono Variable","Geist Mono",ui-monospace,SFMono-Regular,Menlo,monospace;--cms-radius-xs:4px;--cms-radius-sm:6px;--cms-radius-md:8px;--cms-radius-lg:12px;--cms-radius-xl:14px;--cms-shadow-tint:light-dark(rgba(20,20,30,.06),rgba(0,0,0,.35));--cms-shadow-tint-strong:light-dark(rgba(20,20,30,.14),rgba(0,0,0,.6));--cms-highlight:light-dark(hsla(0,0%,100%,.9),hsla(0,0%,100%,.05));--cms-shadow-xs:0 1px 2px var(--cms-shadow-tint);--cms-shadow-sm:0 1px 2px var(--cms-shadow-tint),0 3px 8px -3px var(--cms-shadow-tint);--cms-shadow-raised:0 0 0 1px var(--cms-line),0 1px 2px var(--cms-shadow-tint);--cms-shadow-overlay:0 0 0 1px var(--cms-line),0 16px 40px -12px var(--cms-shadow-tint-strong),0 6px 14px -6px var(--cms-shadow-tint);--cms-scrim:light-dark(rgba(22,22,30,.22),rgba(0,0,0,.55));--cms-duration:140ms;--cms-duration-lg:260ms;--cms-ease:cubic-bezier(0.2,0,0,1);--cms-ease-out:cubic-bezier(0.16,1,0.3,1);--cms-ease-drawer:cubic-bezier(0.32,0.72,0,1);--cms-ease-spring:cubic-bezier(0.34,1.4,0.64,1);--ui-text-dimmed:var(--cms-text-dimmed);--ui-text-muted:var(--cms-text-muted);--ui-text-toned:var(--cms-text-toned);--ui-text:var(--cms-text-toned);--ui-text-highlighted:var(--cms-text);--ui-text-inverted:var(--cms-surface);--ui-bg:var(--cms-surface);--ui-bg-muted:var(--cms-canvas);--ui-bg-elevated:var(--cms-subtle);--ui-bg-accented:var(--cms-fill);--ui-bg-inverted:var(--cms-text);--ui-border:var(--cms-line);--ui-border-muted:var(--cms-line);--ui-border-accented:var(--cms-line-strong);--ui-border-inverted:var(--cms-text);--ui-primary:var(--cms-accent);--ui-accent:var(--cms-accent-text);--ui-error:var(--cms-error);--ui-success:var(--cms-success);--ui-warning:var(--cms-warning);--ui-radius:var(--cms-radius-md)}html:has(.cms-scope){background:var(--cms-canvas);color-scheme:light dark;overscroll-behavior-y:none}.cms-scope[data-theme=light],html:has(.cms-scope[data-theme=light]){color-scheme:light}.cms-scope[data-theme=dark],html:has(.cms-scope[data-theme=dark]){color-scheme:dark}.cms-scope,body:has(.cms-scope){color:var(--ui-text);font-family:var(--cms-font-ui);font-feature-settings:"ss01","cv11";font-size:.875rem;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body:has(.cms-scope){background:var(--cms-canvas);overscroll-behavior-y:none}body:has(.cms-scope) ::-moz-selection{background:color-mix(in oklab,var(--cms-accent) 28%,transparent);color:var(--ui-text-highlighted)}body:has(.cms-scope) ::selection{background:color-mix(in oklab,var(--cms-accent) 28%,transparent);color:var(--ui-text-highlighted)}body:has(.cms-scope) :is(.cms-scope,.cms-scope *){scrollbar-color:var(--cms-line-strong) transparent;scrollbar-width:thin}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar{height:10px;width:10px}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar-track{background:transparent}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar-thumb{background:var(--cms-line-strong);background-clip:content-box;border:3px solid transparent;border-radius:9999px}body:has(.cms-scope) :is(.cms-scope,.cms-scope *)::-webkit-scrollbar-thumb:hover{background:var(--cms-text-dimmed);background-clip:content-box}.cms-display{font-weight:650;letter-spacing:-.025em}.cms-display,.cms-title{font-family:var(--cms-font-ui)}.cms-title{color:var(--ui-text-highlighted);font-weight:600;letter-spacing:-.015em}.cms-title-sm{font-size:.9375rem;line-height:1.4}.cms-title-md{font-size:1.5rem;letter-spacing:-.022em;line-height:1.2}.cms-title-lg{font-size:1.625rem;letter-spacing:-.025em;line-height:1.2}.cms-subtitle{color:var(--ui-text-muted);font-size:.875rem}.cms-accent{color:var(--cms-accent-text)}.cms-label{color:var(--ui-text-muted);font-size:.75rem;font-weight:500;line-height:1.4}.cms-mono{font-family:var(--cms-font-mono);font-size:.75rem;letter-spacing:-.01em}body:has(.cms-scope) :is(button,a,[role=button],[role=menuitem],[role=option],.__clickable):not(:disabled,[aria-disabled=true]){@apply cursor-pointer select-none}body:has(.cms-scope) :is(button,a,[role=button],[role=menuitem],[role=option],[role=radio]):focus-visible{outline:2px solid color-mix(in oklab,var(--cms-accent) 70%,transparent);outline-offset:2px}.cms-canvas{background-color:var(--cms-canvas)}.cms-card{background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg)}.cms-panel{padding:1.5rem}.cms-shell,.cms-sidebar{background:var(--cms-canvas);display:flex;height:100dvh}.cms-sidebar{flex-direction:column;flex-shrink:0;gap:1.25rem;padding:.875rem .625rem .625rem;width:15rem}.cms-sidebar-brand{align-items:center;display:flex;gap:.625rem;padding:.25rem .375rem}.cms-brand-mark{background:linear-gradient(145deg,var(--cms-accent-glow),var(--cms-accent) 60%);border-radius:var(--cms-radius-md);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.28),inset 0 -1px 0 rgba(0,0,0,.12),0 1px 2px color-mix(in oklab,var(--cms-accent) 40%,transparent),0 4px 12px -4px color-mix(in oklab,var(--cms-accent) 60%,transparent);color:var(--cms-accent-contrast);display:grid;flex:none;height:1.75rem;place-items:center;position:relative;width:1.75rem}.cms-brand-mark svg{height:62%;width:62%}.cms-brand-mark.is-lg{border-radius:var(--cms-radius-lg);height:2.75rem;width:2.75rem}.cms-brand-text{display:flex;flex-direction:column;line-height:1.2;min-width:0}.cms-brand-name{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:600;letter-spacing:-.01em}.cms-brand-meta{color:var(--ui-text-dimmed);font-size:.75rem}.cms-sidebar-nav{display:flex;flex:1;flex-direction:column;gap:1.125rem;margin-inline:-.25rem;min-height:0;overflow-y:auto;overscroll-behavior-y:none;padding:.125rem .25rem}.cms-sidebar-group{display:flex;flex-direction:column;gap:1px}.cms-sidebar-group>.cms-label{color:var(--ui-text-dimmed);font-size:.6875rem;letter-spacing:.01em;margin-bottom:.25rem;padding-inline:.5rem}.cms-sidebar-footer{display:flex;flex-direction:column;gap:.5rem}.cms-navlink{align-items:center;border-radius:var(--cms-radius-md);color:var(--ui-text-toned);display:flex;font-size:.8125rem;font-weight:450;gap:.5rem;height:1.875rem;padding-inline:.5rem;position:relative;transition:background-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease),scale var(--cms-duration) var(--cms-ease)}.cms-navlink:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-navlink:active{scale:.985}.cms-navlink.is-active{background:var(--cms-surface);box-shadow:var(--cms-shadow-raised);color:var(--ui-text-highlighted);font-weight:500}.cms-navlink-icon{color:var(--ui-text-dimmed);transition:color var(--cms-duration) var(--cms-ease),transform var(--cms-duration-lg) var(--cms-ease-spring)}.cms-navlink:hover .cms-navlink-icon{color:var(--ui-text-muted)}.cms-navlink.is-active .cms-navlink-icon{animation:cms-icon-pop .36s var(--cms-ease-spring);color:var(--cms-accent-text)}.cms-account{align-items:center;border-radius:var(--cms-radius-md);display:flex;gap:.5rem;padding:.375rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease);width:100%}.cms-account.is-open,.cms-account:hover{background:var(--cms-hover)}.cms-account-more{color:var(--ui-text-dimmed);flex:none;transition:color var(--cms-duration) var(--cms-ease)}.cms-account.is-open .cms-account-more,.cms-account:hover .cms-account-more{color:var(--ui-text-highlighted)}.cms-avatar{background:linear-gradient(145deg,var(--cms-accent-glow),var(--cms-accent));border-radius:9999px;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.25);color:var(--cms-accent-contrast);display:grid;flex:none;font-size:.75rem;font-weight:600;height:1.75rem;place-items:center;text-transform:uppercase;width:1.75rem}.cms-avatar.is-lg{font-size:1.0625rem;height:2.75rem;width:2.75rem}.cms-account-card{align-items:center;background:var(--cms-subtle);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);display:flex;gap:.75rem;padding:.875rem 1rem}.cms-password-input .cms-field{font-family:var(--cms-font-mono);font-size:.8125rem;padding-right:5.75rem}.cms-password-input .cms-field::-moz-placeholder{font-family:var(--cms-font-ui)}.cms-password-input .cms-field::placeholder{font-family:var(--cms-font-ui)}.cms-password-actions{align-items:center;display:flex;gap:1px}.cms-password-action{border-radius:var(--cms-radius-sm);color:var(--ui-text-dimmed);display:grid;height:1.625rem;place-items:center;transition:color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease);width:1.625rem}.cms-password-action:hover:not(:disabled){background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-password-action:disabled{opacity:.4}.cms-password-action.is-done{color:var(--ui-success)}.cms-password-action>svg{transition:transform var(--cms-duration-lg) var(--cms-ease-spring)}.cms-password-action:active>svg{transform:scale(.85)}.cms-credentials{animation:cms-enter .26s var(--cms-ease-out) backwards;background:color-mix(in oklab,var(--cms-accent) 4%,var(--cms-surface));border:1px solid var(--cms-accent-line);border-radius:var(--cms-radius-lg);display:flex;flex-direction:column;gap:.875rem;padding:1rem}.cms-credentials-list{display:grid;font-size:.8125rem;gap:.375rem 1.25rem;grid-template-columns:max-content minmax(0,1fr)}.cms-credentials-list dt{color:var(--ui-text-muted)}.cms-credentials-list dd{color:var(--ui-text-highlighted);overflow-wrap:anywhere}.cms-user-row{animation:cms-row-in .32s var(--cms-ease-out) backwards;background:var(--cms-surface);display:flex;flex-direction:column}.cms-user-row+.cms-user-row{border-top:1px solid var(--cms-line)}.cms-user-main{align-items:center;display:flex;gap:.75rem;padding:.625rem .75rem}.cms-user-actions{display:flex;gap:.125rem}.cms-user-reset{padding:0 .75rem .875rem}.cms-account-text{display:flex;flex:1;flex-direction:column;line-height:1.25;min-width:0}.cms-account-name{color:var(--ui-text-highlighted);font-size:.8125rem;font-weight:500}.cms-account-email{color:var(--ui-text-dimmed);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-main{background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-xl);box-shadow:var(--cms-shadow-xs);flex:1;height:calc(100dvh - 1rem);margin:.5rem .5rem .5rem 0;min-width:0;overflow-y:auto;overscroll-behavior-y:none;position:relative}.cms-main-inner{display:flex;flex-direction:column;margin-inline:auto;max-width:72rem;min-height:100%;padding:2.25rem 2.5rem 2.5rem;width:100%}.cms-sidebar-scrim,.cms-topbar{display:none}@media (max-width:767px){.cms-sidebar{border-right:1px solid var(--cms-line);box-shadow:var(--cms-shadow-overlay);inset:0 auto 0 0;position:fixed;transform:translateX(-105%);transition:transform .34s var(--cms-ease-drawer);width:16.5rem;z-index:70}.cms-shell.is-nav-open .cms-sidebar{transform:none}.cms-sidebar-scrim{background:var(--cms-scrim);display:block;inset:0;opacity:0;pointer-events:none;position:fixed;transition:opacity var(--cms-duration-lg) var(--cms-ease);z-index:65}.cms-shell.is-nav-open .cms-sidebar-scrim{opacity:1;pointer-events:auto}.cms-topbar{align-items:center;backdrop-filter:blur(12px);background:color-mix(in oklab,var(--cms-surface) 82%,transparent);border-bottom:1px solid var(--cms-line);display:flex;gap:.5rem;height:3rem;padding-inline:.625rem;position:sticky;top:0;z-index:20}.cms-main{border:0;border-radius:0;box-shadow:none;height:100dvh;margin:0}.cms-main-inner{min-height:calc(100% - 3rem);padding:1.25rem 1rem 2rem}}.cms-page{animation:cms-enter .32s var(--cms-ease-out) backwards;display:flex;flex-direction:column;gap:1.5rem}.cms-page.is-fill{flex:1;min-height:0}.cms-page-header{align-items:flex-end;display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between}.cms-page-heading{display:flex;flex-direction:column;gap:.625rem;min-width:0}.cms-page-title-row{align-items:center;display:flex;gap:.75rem;min-width:0}.cms-page-icon{background:var(--cms-surface);border-radius:var(--cms-radius-md);box-shadow:var(--cms-shadow-raised),inset 0 -2px 0 var(--cms-subtle);color:var(--cms-accent-text);display:grid;flex:none;height:2.25rem;place-items:center;width:2.25rem}.cms-page-title-text{display:flex;flex-direction:column;gap:.1875rem;min-width:0}.cms-page-description{color:var(--ui-text-muted);font-size:.8125rem}.cms-count{animation:cms-fade .4s var(--cms-ease) backwards;background:var(--cms-fill);border-radius:var(--cms-radius-sm);display:inline-flex;font-family:var(--cms-font-mono);font-size:.75rem;font-variant-numeric:tabular-nums;height:1.375rem;padding-inline:.4375rem}.cms-breadcrumb,.cms-count{align-items:center;color:var(--ui-text-muted)}.cms-breadcrumb{display:flex;font-size:.8125rem;font-weight:450;gap:.25rem;line-height:1.4}.cms-breadcrumb-link{border-radius:var(--cms-radius-xs);margin-inline:-.25rem 0;padding:.0625rem .25rem;transition:color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease)}.cms-breadcrumb-link:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-breadcrumb-separator{color:var(--ui-text-dimmed)}.cms-tree{overflow:hidden}.cms-tree-row{align-items:center;animation:cms-row-in .36s var(--cms-ease-out) backwards;animation-delay:var(--cms-row-delay,0s);display:flex;gap:.75rem;min-height:3.25rem;padding:.5rem 1rem;transition:background-color var(--cms-duration) var(--cms-ease)}.cms-tree-row+.cms-tree-row{border-top:1px solid var(--cms-line)}.cms-tree-row:hover{background-color:var(--cms-subtle)}.cms-tree-branch{color:var(--ui-text-dimmed);flex-shrink:0;transform:scaleY(-1) rotate(90deg);width:1rem}.cms-tree-doc{background:var(--cms-subtle);border-radius:var(--cms-radius-sm);box-shadow:inset 0 0 0 1px var(--cms-line);color:var(--ui-text-muted);display:grid;flex:none;height:1.75rem;place-items:center;width:1.75rem}.cms-tree-title{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:500}.cms-tree-path,.cms-tree-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-tree-path{color:var(--ui-text-dimmed);font-family:var(--cms-font-mono);font-size:.71875rem}.cms-tree-meta{font-size:.75rem}.cms-tree-chevron,.cms-tree-meta{color:var(--ui-text-dimmed);flex-shrink:0}.cms-tree-chevron{transition:transform var(--cms-duration-lg) var(--cms-ease-out),color var(--cms-duration) var(--cms-ease)}.cms-tree-row:hover .cms-tree-chevron{color:var(--ui-text-highlighted);transform:translateX(3px)}.cms-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem 1rem}.cms-toolbar-actions{flex-shrink:0;margin-left:auto}.cms-actions,.cms-toolbar-actions{align-items:center;display:flex;gap:.5rem}.cms-actions{flex-wrap:wrap}.cms-actions.is-end{justify-content:flex-end}.cms-spinner{align-items:center;animation:cms-fade .3s var(--cms-ease) .12s backwards;color:var(--ui-text-dimmed);display:flex;flex:1;justify-content:center;padding-block:2.5rem}.cms-spinner-ring{animation:cms-spin .7s linear infinite;border:2px solid var(--cms-line-strong);border-radius:9999px;border-top-color:var(--cms-accent-text);height:1.25rem;width:1.25rem}.cms-empty{align-items:center;animation:cms-fade .36s var(--cms-ease) backwards;background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);display:flex;flex-direction:column;gap:.375rem;isolation:isolate;overflow:hidden;padding:3.5rem 1.5rem;position:relative;text-align:center}.cms-empty:before{background-image:radial-gradient(circle at 1px 1px,var(--cms-line-strong) 1px,transparent 0);background-size:18px 18px;content:"";inset:0;-webkit-mask-image:radial-gradient(ellipse 60% 70% at 50% 45%,#000,transparent 75%);mask-image:radial-gradient(ellipse 60% 70% at 50% 45%,#000,transparent 75%);opacity:.8;position:absolute;z-index:-1}.cms-empty.is-fill{flex:1;justify-content:center}.cms-empty-icon{animation:cms-float 4s ease-in-out infinite;background:var(--cms-surface);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-raised),0 6px 16px -6px var(--cms-shadow-tint-strong);color:var(--ui-text-muted);display:grid;height:2.75rem;margin-bottom:.625rem;place-items:center;width:2.75rem}.cms-empty>.cms-btn{margin-top:1rem}.cms-auth{align-items:center;display:flex;isolation:isolate;justify-content:center;min-height:100dvh;overflow:hidden;padding:1.5rem;position:relative}.cms-auth:before{background-image:linear-gradient(to right,var(--cms-line) 1px,transparent 1px),linear-gradient(to bottom,var(--cms-line) 1px,transparent 1px);background-position:50%;background-size:44px 44px;inset:0;-webkit-mask-image:radial-gradient(ellipse 55% 50% at 50% 42%,#000 10%,transparent 75%);mask-image:radial-gradient(ellipse 55% 50% at 50% 42%,#000 10%,transparent 75%)}.cms-auth:after,.cms-auth:before{content:"";position:absolute;z-index:-1}.cms-auth:after{background:radial-gradient(closest-side,color-mix(in oklab,var(--cms-accent-glow) 34%,transparent),transparent);border-radius:9999px;filter:blur(24px);height:30rem;left:50%;opacity:.9;top:-18rem;translate:-50% 0;width:48rem}.cms-auth-panel{gap:1.75rem;max-width:23rem;width:100%}.cms-auth-header,.cms-auth-panel{display:flex;flex-direction:column}.cms-auth-header{align-items:center;gap:.5rem;text-align:center}.cms-auth-header .cms-brand-mark{margin-bottom:.75rem}.cms-auth-card{border-radius:var(--cms-radius-xl);box-shadow:var(--cms-shadow-sm),0 24px 48px -24px var(--cms-shadow-tint-strong);padding:1.5rem}.cms-auth-footer{color:var(--ui-text-dimmed);font-size:.75rem;text-align:center}.cms-badge{align-items:center;background:var(--cms-subtle);border:1px solid var(--cms-line);border-radius:9999px;color:var(--ui-text-toned);display:inline-flex;font-size:.75rem;font-weight:500;gap:.375rem;height:1.375rem;line-height:1;padding:0 .5rem;pointer-events:none;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-badge.is-draft:before,.cms-badge.is-published:before{border-radius:9999px;content:"";flex:none;height:.375rem;width:.375rem}.cms-badge.is-published{background:color-mix(in oklab,var(--cms-success) 10%,transparent);border-color:color-mix(in oklab,var(--cms-success) 24%,transparent);color:var(--cms-success)}.cms-badge.is-published:before{background:var(--cms-success);box-shadow:0 0 0 3px color-mix(in oklab,var(--cms-success) 22%,transparent)}.cms-badge.is-muted{background:var(--cms-fill);border-color:transparent;border-radius:var(--cms-radius-sm);color:var(--ui-text-muted);font-family:var(--cms-font-mono);font-size:.6875rem;font-weight:400;height:1.25rem;letter-spacing:.02em;padding:0 .4375rem;text-transform:uppercase}.cms-badge.is-draft{background:transparent;color:var(--ui-text-muted)}.cms-badge.is-draft:before{box-shadow:inset 0 0 0 1.5px var(--ui-text-dimmed)}.cms-dropzone{align-items:center;background:var(--cms-subtle);border:1px dashed var(--cms-line-strong);border-radius:var(--cms-radius-lg);color:var(--ui-text-muted);cursor:pointer;display:flex;flex-direction:column;gap:.5rem;justify-content:center;padding:2rem 1.5rem;transition:border-color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:100%}.cms-dropzone>svg{transition:transform var(--cms-duration-lg) var(--cms-ease-spring)}.cms-dropzone.is-over,.cms-dropzone:hover{background:var(--cms-accent-soft);border-color:var(--cms-accent-line);color:var(--ui-text-highlighted)}.cms-dropzone.is-over>svg,.cms-dropzone:hover>svg{color:var(--cms-accent-text);transform:translateY(-2px)}.cms-dropzone.is-dense{flex-direction:row;gap:.625rem;padding:.875rem 1.25rem}.cms-dropzone.is-busy{opacity:.7;pointer-events:none}.cms-pill{align-items:center;background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:9999px;color:var(--ui-text-muted);cursor:pointer;display:inline-flex;flex:none;font-size:.8125rem;font-weight:450;gap:.375rem;height:1.75rem;line-height:1;padding:0 .75rem;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease),scale var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-pill:hover{background:var(--cms-subtle);border-color:var(--cms-line-strong);color:var(--ui-text-highlighted)}.cms-pill:active{scale:.97}.cms-pill.is-active{background:var(--cms-accent-soft);border-color:var(--cms-accent-line);color:var(--cms-accent-text)}.cms-pill.is-empty{border-style:dashed}.cms-folder-picker{display:flex;flex-direction:column;gap:.5rem}.cms-folder-picker-list{background:var(--cms-field);border:1px solid var(--cms-field-line);border-radius:var(--cms-radius-md);box-shadow:var(--cms-shadow-xs);display:flex;flex-direction:column;gap:1px;max-height:16rem;overflow-y:auto;padding:.25rem}.cms-folder-picker-row{align-items:center;border-radius:var(--cms-radius-sm);color:var(--ui-text-toned);cursor:pointer;display:flex;font-size:.8125rem;gap:.5rem;min-height:1.875rem;padding:.25rem .5rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:100%}.cms-folder-picker-row:hover:not(:disabled){background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-folder-picker-row.is-active{background:var(--cms-accent-soft);color:var(--cms-accent-text)}.cms-folder-picker-row:disabled{cursor:not-allowed;opacity:.4}.cms-folder-picker-check{flex:none;margin-left:auto}.cms-folder-picker-empty{padding:.5rem .625rem}.cms-folder-picker-empty,.cms-form-hint{color:var(--ui-text-dimmed);font-size:.8125rem}.cms-dropzone-hint{align-items:center;color:var(--ui-text-dimmed);display:inline-flex;font-size:.75rem;gap:.3rem}@keyframes cms-rise{0%{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:none}}@keyframes cms-enter{0%{opacity:0;transform:translateY(6px)}}@keyframes cms-fade{0%{opacity:0}}@keyframes cms-row-in{0%{opacity:0;transform:translateY(4px)}}@keyframes cms-pop{0%{opacity:0;transform:translateY(-4px) scale(.97)}}@keyframes cms-spin{to{transform:rotate(1turn)}}@keyframes cms-icon-pop{40%{transform:scale(1.18)}}@keyframes cms-icon-spin{0%{opacity:.4;transform:rotate(-60deg) scale(.6)}}@keyframes cms-float{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes cms-toast-in{0%{opacity:0;transform:translateY(14px) scale(.96)}}@keyframes cms-toast-timer{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes cms-shake{20%,60%{transform:translateX(-3px)}40%,80%{transform:translateX(3px)}}.cms-rise{animation:cms-rise .42s var(--cms-ease-out) both}.cms-rise.is-delayed{animation-delay:90ms}.cms-richtext{background:var(--cms-field);border:1px solid var(--cms-field-line);border-radius:var(--cms-radius-md);box-shadow:var(--cms-shadow-xs);overflow:hidden;transition:border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease)}.cms-richtext:hover:not(:focus-within){border-color:var(--cms-line-strong)}.cms-richtext:focus-within{border-color:var(--cms-accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--cms-accent) 18%,transparent)}.cms-richtext-toolbar{align-items:center;background:var(--cms-subtle);border-bottom:1px solid var(--cms-line);display:flex;flex-wrap:wrap;gap:1px;padding:.25rem}.cms-richtext-body{color:var(--ui-text-highlighted);font-size:.875rem;line-height:1.6;min-height:9rem;outline:none;padding:.75rem .875rem}.cms-richtext-body h2{font-size:1.25rem;font-weight:600;letter-spacing:-.015em;margin:.75em 0 .35em}.cms-richtext-body h3{font-size:1.05rem;font-weight:600;margin:.75em 0 .35em}.cms-richtext-body p{margin:.35em 0}.cms-richtext-body ul{list-style:disc;padding-left:1.25rem}.cms-richtext-body ol{list-style:decimal;padding-left:1.25rem}.cms-richtext-body blockquote{border-left:2px solid var(--cms-accent-line);color:var(--ui-text-muted);padding-left:.75rem}.cms-richtext-body a{color:var(--cms-accent-text);text-decoration:underline;text-decoration-color:var(--cms-accent-line);text-underline-offset:2px}.cms-btn{align-items:center;border:1px solid transparent;border-radius:var(--cms-radius-md);display:inline-flex;font-weight:500;gap:.375rem;justify-content:center;letter-spacing:-.005em;line-height:1;min-height:var(--cms-btn-size);position:relative;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease),opacity var(--cms-duration) var(--cms-ease),scale var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-btn:active:not(:disabled,[aria-disabled=true]){scale:.97}.cms-btn:disabled,.cms-btn[aria-disabled=true]{opacity:.5;pointer-events:none}.cms-btn.is-block{width:100%}.cms-btn.is-icon{justify-content:center;padding-inline:0;width:var(--cms-btn-size)}.cms-btn>svg{transition:transform var(--cms-duration-lg) var(--cms-ease-spring)}.cms-btn:hover>svg[data-icon=arrow-left]{transform:translateX(-2px)}.cms-btn:hover>svg[data-icon=arrow-right]{transform:translateX(2px)}.cms-btn-xs{--cms-btn-size:1.5rem;border-radius:var(--cms-radius-sm);font-size:.75rem;padding:.125rem .5rem}.cms-btn-sm{--cms-btn-size:1.75rem;border-radius:7px;font-size:.8125rem;padding:.25rem .625rem}.cms-btn-md{--cms-btn-size:2.125rem;font-size:.8125rem;padding:.25rem .8125rem}.cms-btn-lg{--cms-btn-size:2.5rem;border-radius:10px;font-size:.875rem;padding:.375rem 1.125rem}.cms-btn-primary.cms-btn-solid{background:var(--cms-accent);border-color:color-mix(in oklab,var(--cms-accent) 82%,#000);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.18),0 1px 2px color-mix(in oklab,var(--cms-accent) 35%,transparent);color:var(--cms-accent-contrast)}.cms-btn-primary.cms-btn-solid:hover{background:var(--cms-accent-hover);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.22),0 2px 8px -2px color-mix(in oklab,var(--cms-accent) 60%,transparent)}.cms-btn-primary.cms-btn-solid:active{background:color-mix(in oklab,var(--cms-accent) 90%,#000)}.cms-btn-neutral.cms-btn-soft,.cms-btn-primary.cms-btn-soft{background:var(--cms-surface);border-color:var(--cms-field-line);box-shadow:var(--cms-shadow-xs),inset 0 -1px 0 var(--cms-subtle);color:var(--ui-text-highlighted)}.cms-btn-neutral.cms-btn-soft:hover,.cms-btn-primary.cms-btn-soft:hover{background:var(--cms-subtle);border-color:var(--cms-line-strong)}.cms-btn-neutral.cms-btn-soft:active,.cms-btn-primary.cms-btn-soft:active{background:var(--cms-fill)}.cms-btn-neutral.cms-btn-ghost,.cms-btn-primary.cms-btn-ghost{background:transparent;color:var(--ui-text-muted)}.cms-btn-neutral.cms-btn-ghost:hover,.cms-btn-primary.cms-btn-ghost:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-btn-neutral.cms-btn-ghost:active,.cms-btn-primary.cms-btn-ghost:active{background:var(--cms-press)}.cms-btn-neutral.cms-btn-solid{background:var(--cms-text);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.14);color:var(--cms-surface)}.cms-btn-neutral.cms-btn-solid:hover{background:color-mix(in oklab,var(--cms-text) 86%,var(--cms-surface))}.cms-btn-neutral.cms-btn-solid:active{background:color-mix(in oklab,var(--cms-text) 80%,var(--cms-surface))}.cms-btn-error.cms-btn-solid{background:var(--ui-error);border-color:color-mix(in oklab,var(--ui-error) 82%,#000);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.18);color:#fff}.cms-btn-error.cms-btn-solid:hover{background:color-mix(in oklab,var(--ui-error) 90%,#000)}.cms-btn-error.cms-btn-solid:active{background:color-mix(in oklab,var(--ui-error) 82%,#000)}.cms-btn-error.cms-btn-soft{background:color-mix(in oklab,var(--ui-error) 9%,transparent);border-color:color-mix(in oklab,var(--ui-error) 22%,transparent);color:var(--ui-error)}.cms-btn-error.cms-btn-soft:hover{background:color-mix(in oklab,var(--ui-error) 15%,transparent);border-color:color-mix(in oklab,var(--ui-error) 34%,transparent)}.cms-btn-error.cms-btn-soft:active{background:color-mix(in oklab,var(--ui-error) 20%,transparent)}.cms-btn-error.cms-btn-ghost{background:transparent;color:var(--ui-error)}.cms-btn-error.cms-btn-ghost:hover{background:color-mix(in oklab,var(--ui-error) 10%,transparent)}.cms-btn-error.cms-btn-ghost:active{background:color-mix(in oklab,var(--ui-error) 16%,transparent)}.cms-btn-success.cms-btn-solid{background:var(--ui-success);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.18);color:#fff}.cms-btn-success.cms-btn-solid:hover{background:color-mix(in oklab,var(--ui-success) 90%,#000)}.cms-btn-success.cms-btn-solid:active{background:color-mix(in oklab,var(--ui-success) 82%,#000)}.cms-btn-success.cms-btn-soft{background:color-mix(in oklab,var(--ui-success) 9%,transparent);border-color:color-mix(in oklab,var(--ui-success) 22%,transparent);color:var(--ui-success)}.cms-btn-success.cms-btn-soft:hover{background:color-mix(in oklab,var(--ui-success) 15%,transparent);border-color:color-mix(in oklab,var(--ui-success) 34%,transparent)}.cms-btn-success.cms-btn-soft:active{background:color-mix(in oklab,var(--ui-success) 20%,transparent)}.cms-btn-success.cms-btn-ghost{background:transparent;color:var(--ui-success)}.cms-btn-success.cms-btn-ghost:hover{background:color-mix(in oklab,var(--ui-success) 10%,transparent)}.cms-btn-success.cms-btn-ghost:active{background:color-mix(in oklab,var(--ui-success) 16%,transparent)}.cms-form{container-type:inline-size;display:flex;flex-direction:column;gap:1.375rem}.cms-tabs{align-items:center;align-self:flex-start;background:var(--cms-hover);border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:inline-flex;gap:2px;margin-bottom:.25rem;max-width:100%;overflow-x:auto;padding:2px}.cms-tab{border-radius:var(--cms-radius-sm);color:var(--ui-text-muted);cursor:pointer;font-size:.8125rem;font-weight:500;height:1.75rem;padding:0 .75rem;transition:background-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);white-space:nowrap}.cms-tab.is-active,.cms-tab:hover{color:var(--ui-text-highlighted)}.cms-tab.is-active{background:var(--cms-surface);box-shadow:var(--cms-shadow-raised)}.cms-form-field{display:flex;flex-direction:column;gap:.4375rem}.cms-form-label-row{align-items:center;display:flex;gap:.75rem;justify-content:space-between;min-height:1.5rem}.cms-form-label{align-items:center;color:var(--ui-text-toned);display:inline-flex;font-size:.8125rem;font-weight:500;gap:.4375rem}.cms-form-label-icon{color:var(--ui-text-dimmed);flex:none;transition:color var(--cms-duration) var(--cms-ease)}.cms-form-field:focus-within .cms-form-label-icon{color:var(--cms-accent-text)}.cms-form-error,.cms-form-required{color:var(--ui-error)}.cms-form-required{margin-left:-.25rem}.cms-form-error{align-items:center;animation:cms-enter .26s var(--cms-ease-out) backwards;display:flex;font-size:.8125rem;gap:.375rem}.cms-form-field.is-error .cms-field,.cms-form-field.is-error .cms-richtext{animation:cms-shake .32s var(--cms-ease)}.cms-form-description{color:var(--ui-text-muted);font-size:.75rem;line-height:1.45;margin-top:-.125rem}.cms-form-layout{display:grid;gap:1.5rem;grid-template-columns:minmax(0,1fr)}.cms-form-main{display:flex;flex-direction:column;gap:1.375rem;min-width:0}.cms-form-section.is-titled{background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg)}.cms-form-section-header{align-items:center;border-radius:var(--cms-radius-lg);display:flex;gap:.75rem;padding:.875rem 1rem;text-align:left;width:100%}.cms-form-section-text{display:flex;flex:1;flex-direction:column;gap:.125rem;min-width:0}.cms-form-section-title{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:600}.cms-form-section-description{color:var(--ui-text-muted);font-size:.75rem}.cms-form-section-chevron{color:var(--ui-text-dimmed);flex:none;transition:transform var(--cms-duration-lg) var(--cms-ease-out)}.cms-form-section.is-collapsed .cms-form-section-chevron{transform:rotate(-90deg)}.cms-form-rows{display:flex;flex-direction:column;gap:1.375rem}.cms-form-section.is-titled>.cms-form-rows{border-top:1px solid var(--cms-line);padding:1rem 1rem 1.125rem}.cms-form-row{display:grid;gap:1.375rem 1rem;grid-template-columns:minmax(0,1fr)}@container (min-width: 32rem){.cms-form-row{grid-template-columns:repeat(var(--cms-row-cols,1),minmax(0,1fr))}}.cms-form-actions{align-items:center;display:flex;gap:.5rem;justify-content:flex-end;padding-top:.25rem}.cms-field{background:var(--cms-field);border:1px solid var(--cms-field-line);border-radius:var(--ui-radius);box-shadow:var(--cms-shadow-xs);color:var(--ui-text-highlighted);line-height:1.25;transition:border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease);width:100%}textarea.cms-field{line-height:1.5;min-height:0;padding-bottom:.5rem;padding-top:.5rem;resize:vertical}.cms-field::-moz-placeholder{color:var(--ui-text-dimmed)}.cms-field::placeholder{color:var(--ui-text-dimmed)}.cms-field:hover:not(:focus,:focus-within){border-color:var(--cms-line-strong)}.cms-field:focus,.cms-field:focus-within{border-color:var(--cms-accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--cms-accent) 18%,transparent);outline:none}.cms-field.is-error{border-color:var(--ui-error)}.cms-field:disabled{background:var(--cms-subtle);box-shadow:none;color:var(--ui-text-muted);cursor:not-allowed}.cms-field.is-error:focus,.cms-field.is-error:focus-within{border-color:var(--ui-error);box-shadow:0 0 0 3px color-mix(in oklab,var(--ui-error) 18%,transparent)}.cms-field-sm{font-size:.8125rem;min-height:1.75rem;padding:.25rem .625rem}.cms-field-md{font-size:.875rem;min-height:2.125rem;padding:.25rem .75rem}.cms-field-lg{font-size:.9375rem;min-height:2.5rem;padding:.375rem .875rem}.cms-field[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.5;-webkit-transition:opacity var(--cms-duration) var(--cms-ease);transition:opacity var(--cms-duration) var(--cms-ease)}.cms-field[type=date]::-webkit-calendar-picker-indicator:hover{opacity:.9}.cms-select-chevron{align-items:center;cursor:pointer;display:inline-flex;transition:transform var(--cms-duration-lg) var(--cms-ease-out),color var(--cms-duration) var(--cms-ease)}.cms-select-chevron:hover{color:var(--ui-text-muted)}.cms-select-chevron.is-open{transform:rotate(180deg)}.cms-locale-switch{align-items:center;background:var(--cms-hover);border:1px solid var(--cms-line);border-radius:var(--cms-radius-sm);display:inline-flex;gap:1px;padding:2px}.cms-locale-option{border-radius:var(--cms-radius-xs);color:var(--ui-text-muted);cursor:pointer;font-family:var(--cms-font-mono);font-size:.65625rem;letter-spacing:.04em;line-height:1.4;padding:.125rem .4375rem;position:relative;text-transform:uppercase;transition:background-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-locale-option:hover:not(.is-active){color:var(--ui-text-highlighted)}.cms-locale-option.is-empty{color:var(--ui-text-dimmed)}.cms-locale-option.is-active{background:var(--cms-surface);box-shadow:var(--cms-shadow-raised);color:var(--cms-accent-text)}.cms-input-wrap{align-items:center;display:flex;position:relative;width:100%}.cms-input-wrap .cms-field{width:100%}.cms-input-lead,.cms-input-trail{align-items:center;color:var(--ui-text-dimmed);display:flex;position:absolute;transition:color var(--cms-duration) var(--cms-ease)}.cms-input-lead{left:.6875rem;pointer-events:none}.cms-input-wrap:focus-within .cms-input-lead{color:var(--cms-accent-text)}.cms-input-trail{right:.375rem}.cms-input-wrap.has-lead .cms-field{padding-left:2.0625rem}.cms-switch{align-items:center;background:var(--cms-line-strong);border-radius:9999px;box-shadow:inset 0 1px 2px rgba(0,0,0,.08);display:inline-flex;flex-shrink:0;height:1.25rem;position:relative;transition:background-color .2s var(--cms-ease);width:2.125rem}.cms-switch:hover{background:color-mix(in oklab,var(--cms-line-strong) 80%,var(--cms-text))}.cms-switch.is-on{background:var(--cms-accent)}.cms-switch.is-on:hover{background:var(--cms-accent-hover)}.cms-switch:after{background:#fff;border-radius:9999px;box-shadow:0 1px 2px rgba(0,0,0,.2),0 0 0 .5px rgba(0,0,0,.04);content:"";height:1rem;left:.125rem;position:absolute;transition:transform .3s var(--cms-ease-spring),width .16s var(--cms-ease);width:1rem}.cms-switch.is-on:after{transform:translateX(.875rem)}.cms-switch:active:after{width:1.25rem}.cms-switch.is-on:active:after{transform:translateX(.625rem)}.cms-overlay{align-items:center;backdrop-filter:blur(3px);background:var(--cms-scrim);display:flex;inset:0;justify-content:center;overflow-y:auto;padding:2rem 1rem;position:fixed;z-index:60}.cms-modal{background:var(--cms-surface);border-radius:var(--cms-radius-xl);box-shadow:var(--cms-shadow-overlay);display:flex;flex-direction:column;max-height:calc(100dvh - 4rem);max-width:32rem;width:100%}.cms-modal.is-sm{max-width:26rem}.cms-modal.is-lg{max-width:50rem}.cms-modal-header{padding:1.125rem 1.25rem 0}.cms-modal-body{flex:1;min-height:0;overflow-y:auto;padding:1rem 1.25rem 1.25rem}.cms-modal-enter-active,.cms-modal-leave-active{transition:opacity var(--cms-duration-lg) var(--cms-ease)}.cms-modal-enter-active .cms-modal{transition:transform .36s var(--cms-ease-out),opacity var(--cms-duration-lg) var(--cms-ease);will-change:transform}.cms-modal-leave-active .cms-modal{transition:transform .18s var(--cms-ease),opacity .18s var(--cms-ease)}.cms-modal-enter-from,.cms-modal-leave-to{opacity:0}.cms-modal-enter-from .cms-modal,.cms-modal-leave-to .cms-modal{opacity:0;transform:translateY(8px) scale(.97)}.cms-settings{flex-direction:row;height:min(42rem,calc(100dvh - 4rem));max-width:60rem;overflow:hidden}.cms-settings-nav{background:var(--cms-subtle);border-right:1px solid var(--cms-line);display:flex;flex:none;flex-direction:column;gap:1px;padding:.625rem;width:12.5rem}.cms-settings-close{margin-bottom:.5rem}.cms-settings-tab{align-items:center;border-radius:var(--cms-radius-md);color:var(--ui-text-toned);display:flex;font-size:.8125rem;font-weight:500;gap:.5rem;height:2rem;padding-inline:.5rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:100%}.cms-settings-tab:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-settings-tab.is-active{background:var(--cms-surface);box-shadow:var(--cms-shadow-raised);color:var(--ui-text-highlighted)}.cms-settings-tab.is-danger{color:var(--ui-error)}.cms-settings-tab.is-danger:hover{background:color-mix(in oklab,var(--ui-error) 10%,transparent);color:var(--ui-error)}.cms-settings-nav-list{display:flex;flex:1;flex-direction:column;gap:1px;margin-inline:-.25rem;min-height:0;overflow-y:auto;padding-inline:.25rem}.cms-settings-nav-label{color:var(--ui-text-dimmed);font-size:.6875rem;font-weight:500;margin:.875rem 0 .25rem;padding-inline:.5rem}.cms-settings-entry{display:flex;flex-direction:column;gap:1rem;min-height:100%}.cms-settings-entry>*{flex-shrink:0}.cms-settings-entry-header{align-items:flex-start;border-bottom:1px solid var(--cms-line);display:flex;gap:1rem;justify-content:space-between;padding-bottom:.875rem}.cms-settings-status{color:var(--ui-text-dimmed);flex:none;font-size:.75rem;padding-top:.25rem;transition:color var(--cms-duration) var(--cms-ease)}.cms-settings-status.is-saved{color:var(--ui-success)}.cms-settings-status.is-error{color:var(--ui-error)}.cms-settings-footer{display:flex;justify-content:flex-end;margin-top:auto;padding-top:.5rem}.cms-settings-subtitle{color:var(--ui-text-muted);font-size:.75rem;font-weight:500;margin:.75rem 0 .375rem}.cms-settings-list{border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:flex;flex-direction:column;overflow:hidden}.cms-settings-columns>.cms-settings-list{margin-top:.75rem}.cms-settings-item{align-items:center;background:var(--cms-surface);display:flex;gap:.5rem;min-height:2.5rem;padding:.25rem .75rem;position:relative;transition:background-color var(--cms-duration) var(--cms-ease),opacity var(--cms-duration) var(--cms-ease)}.cms-settings-item+.cms-settings-item{border-top:1px solid var(--cms-line)}.cms-settings-item.is-draggable{cursor:grab}.cms-settings-item.is-draggable:hover{background:var(--cms-subtle)}.cms-settings-item.is-dragging{opacity:.4}.cms-settings-drop-end.is-over:before,.cms-settings-item.is-drop-before:before{background:var(--cms-accent);border-radius:9999px;content:"";height:2px;left:.5rem;position:absolute;right:.5rem;top:-1px}.cms-settings-drop-end{height:.75rem;position:relative}.cms-settings-item.is-muted .cms-settings-item-label{color:var(--ui-text-muted)}.cms-settings-grip,.cms-settings-item-icon{color:var(--ui-text-dimmed);flex:none}.cms-settings-item-label{color:var(--ui-text-highlighted);flex:1;font-size:.8125rem;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-layout-editor{display:flex;flex-direction:column;gap:.25rem}.cms-layout-areas{display:flex;flex-direction:column;margin-top:.5rem}.cms-layout-area{display:flex;flex-direction:column;gap:.5rem;min-width:0}.cms-layout-section{background:var(--cms-subtle);border:1px dashed var(--cms-line-strong);border-radius:var(--cms-radius-md);display:flex;flex-direction:column;padding:.25rem .5rem}.cms-layout-section.is-titled{background:var(--cms-surface);border-color:var(--cms-line);border-style:solid}.cms-layout-section-title{align-items:center;color:var(--ui-text-highlighted);display:flex;font-size:.75rem;font-weight:600;gap:.5rem;padding:.375rem .125rem .125rem}.cms-layout-chip,.cms-layout-row{display:flex;gap:.375rem}.cms-layout-chip{align-items:center;background:var(--cms-field);border:1px solid var(--cms-field-line);border-radius:var(--cms-radius-sm);box-shadow:var(--cms-shadow-xs);cursor:grab;flex:1;height:2.125rem;min-width:0;padding:0 .5rem;position:relative;transition:border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),opacity var(--cms-duration) var(--cms-ease)}.cms-layout-chip:hover{border-color:var(--cms-line-strong)}.cms-layout-chip.is-dragging{opacity:.35}.cms-layout-chip.is-blocked{border-color:var(--ui-error);cursor:not-allowed}.cms-layout-chip.is-drop-after:after,.cms-layout-chip.is-drop-before:before{background:var(--cms-accent);border-radius:9999px;bottom:.25rem;content:"";position:absolute;top:.25rem;width:2px}.cms-layout-chip.is-drop-before:before{left:-.25rem}.cms-layout-chip.is-drop-after:after{right:-.25rem}.cms-layout-chip-label{color:var(--ui-text-highlighted);flex:1;font-size:.75rem;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-layout-chip-tab{background:var(--cms-fill);border-radius:var(--cms-radius-xs);color:var(--ui-text-muted);flex:none;font-size:.625rem;line-height:1rem;padding:0 .3125rem}.cms-layout-gap{height:.375rem;position:relative;transition:height var(--cms-duration) var(--cms-ease)}.cms-layout-editor.is-dragging .cms-layout-gap{height:.75rem}.cms-layout-gap.is-over:before{background:var(--cms-accent);border-radius:9999px;content:"";height:2px;left:0;margin-top:-1px;position:absolute;right:0;top:50%}.cms-layout-editor.is-dragging .cms-layout-gap.is-empty,.cms-layout-gap.is-empty{color:var(--ui-text-dimmed);display:grid;font-size:.75rem;height:2.5rem;place-items:center}.cms-layout-empty{border:1px dashed var(--cms-line-strong);border-radius:var(--cms-radius-md);color:var(--ui-text-dimmed);display:grid;font-size:.75rem;min-height:5rem;padding:1rem;place-items:center;text-align:center;transition:border-color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease)}.cms-layout-empty.is-over{background:var(--cms-accent-soft);border-color:var(--cms-accent);color:var(--cms-accent-text)}.cms-settings-divider{border:0;border-top:1px solid var(--cms-line);margin:.375rem .25rem}.cms-settings-content{display:flex;flex:1;flex-direction:column;gap:1.25rem;min-width:0;overflow-y:auto;padding:1.25rem 1.5rem 1.5rem}.cms-settings-content>.cms-title{border-bottom:1px solid var(--cms-line);padding-bottom:.875rem}.cms-settings-group{display:flex;flex-direction:column;gap:.75rem}.cms-settings-group+.cms-settings-group{border-top:1px solid var(--cms-line);padding-top:1.25rem}.cms-settings-row{align-items:center;display:flex;gap:1rem;justify-content:space-between}.cms-settings-heading{display:flex;flex-direction:column;gap:.125rem;min-width:0}.cms-settings-label{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:500}.cms-settings-hint{color:var(--ui-text-muted);font-size:.8125rem;overflow:hidden;text-overflow:ellipsis}.cms-theme-cards{display:grid;gap:.625rem;grid-template-columns:repeat(3,minmax(0,1fr))}.cms-theme-card{background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);display:flex;flex-direction:column;gap:.5rem;padding:.375rem;text-align:left;transition:border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease)}.cms-theme-card:hover{border-color:var(--cms-line-strong)}.cms-theme-card.is-active{border-color:var(--cms-accent);box-shadow:0 0 0 3px var(--cms-accent-soft)}.cms-theme-preview{border-radius:var(--cms-radius-md);box-shadow:inset 0 0 0 1px var(--cms-line);display:flex;height:4.5rem;overflow:hidden;position:relative}.cms-theme-preview-app{background:var(--cms-canvas);display:flex;flex:1;gap:.25rem;min-width:0;padding:.375rem 0 0 .375rem}.cms-theme-preview-app.is-light{color-scheme:light}.cms-theme-preview-app.is-dark{color-scheme:dark}.cms-theme-preview.is-system .cms-theme-preview-app.is-dark{clip-path:inset(50% 0 0 0);inset:0;position:absolute}.cms-theme-preview.is-system:after{background:var(--cms-line-strong);content:"";height:1px;inset:50% 0 auto;position:absolute}.cms-theme-preview-side{background:var(--cms-fill);border-radius:3px;flex:none;margin-bottom:.375rem;width:22%}.cms-theme-preview-panel{background:var(--cms-surface);border-radius:5px 0 0 0;box-shadow:inset 0 0 0 1px var(--cms-line);display:flex;flex:1;flex-direction:column;gap:.25rem;padding:.5rem .375rem}.cms-theme-preview-line{background:var(--cms-fill);border-radius:9999px;height:.25rem}.cms-theme-preview-line.is-accent{background:var(--cms-accent);width:45%}.cms-theme-preview-line.is-short{width:60%}.cms-theme-card-label{align-items:center;color:var(--ui-text-toned);display:flex;font-size:.8125rem;font-weight:500;gap:.375rem;padding:0 .25rem .125rem}.cms-theme-card.is-active .cms-theme-card-label{color:var(--ui-text-highlighted)}.cms-theme-card-check{animation:cms-icon-pop .3s var(--cms-ease-spring);color:var(--cms-accent-text);margin-left:auto}@media (max-width:639px){.cms-settings{flex-direction:column;height:auto}.cms-settings-nav{align-items:center;border-bottom:1px solid var(--cms-line);border-right:0;flex:none;flex-direction:row;gap:.25rem;overflow-x:auto;width:auto}.cms-settings-nav-list{display:contents}.cms-settings-close,.cms-settings-nav .cms-settings-tab{flex:none;margin-bottom:0;width:auto}.cms-settings-divider,.cms-settings-nav-label{display:none}.cms-theme-cards{grid-template-columns:repeat(3,minmax(5.5rem,1fr))}}.cms-overlay-drawer{align-items:stretch;justify-content:flex-end;overflow:hidden;padding:.5rem;z-index:55}.cms-drawer{background:var(--cms-surface);border-radius:var(--cms-radius-xl);box-shadow:var(--cms-shadow-overlay);display:flex;flex-direction:column;height:100%;max-width:46rem;overflow:hidden;width:100%}.cms-drawer-header{align-items:center;border-bottom:1px solid var(--cms-line);display:flex;gap:1rem;justify-content:space-between;min-height:3.5rem;padding:.625rem .75rem .625rem 1.5rem}.cms-drawer-body{flex:1;min-height:0;overflow-y:auto;padding:1.5rem}.cms-drawer-footer{align-items:center;background:var(--cms-subtle);border-top:1px solid var(--cms-line);display:flex;gap:1rem;justify-content:space-between;padding:.75rem 1rem .75rem 1.25rem}.cms-drawer-enter-active,.cms-drawer-leave-active{transition:opacity var(--cms-duration-lg) var(--cms-ease)}.cms-drawer-enter-active .cms-drawer{transition:transform .42s var(--cms-ease-drawer);will-change:transform}.cms-drawer-leave-active .cms-drawer{transition:transform .26s var(--cms-ease)}.cms-drawer-enter-from,.cms-drawer-leave-to{opacity:0}.cms-drawer-enter-from .cms-drawer,.cms-drawer-leave-to .cms-drawer{transform:translateX(calc(100% + 1rem))}.cms-menu{animation:cms-pop .16s var(--cms-ease-out);background:var(--cms-elevated);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);margin-top:.375rem;min-width:12rem;padding:.25rem;position:absolute;transform-origin:top left;z-index:50}.cms-menu.align-end{right:0;transform-origin:top right}.cms-menu-item{align-items:center;border-radius:var(--cms-radius-sm);color:var(--ui-text);cursor:pointer;display:flex;font-size:.8125rem;gap:.5rem;min-height:1.875rem;padding:.25rem .5rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:100%}.cms-menu-item:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-menu-check{animation:cms-icon-pop .3s var(--cms-ease-spring);color:var(--cms-accent-text);margin-left:auto}.cms-popover{animation:cms-pop .16s var(--cms-ease-out);background:var(--cms-elevated);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);margin-top:.375rem;position:absolute;transform-origin:top left;z-index:50}.cms-selectmenu-input{background:transparent;color:var(--ui-text-highlighted);flex:1 1 0;min-width:4rem;outline:none;width:0}.cms-selectmenu-affix{color:var(--ui-text-dimmed);flex-shrink:0}.cms-selectmenu-panel{animation:cms-pop .16s var(--cms-ease-out);background:var(--cms-elevated);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);left:0;margin-top:.375rem;max-height:15rem;overflow-y:auto;padding:.25rem;position:absolute;right:0;transform-origin:top center;z-index:50}.cms-tag{align-items:center;animation:cms-pop .18s var(--cms-ease-out);background:var(--cms-subtle);border:1px solid var(--cms-line);border-radius:var(--cms-radius-sm);color:var(--ui-text-highlighted);display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;height:1.375rem;padding:0 .3125rem 0 .5rem}.cms-media-gallery{display:flex;flex-direction:column;gap:1.25rem;position:relative}.cms-media-source{color:var(--ui-text-dimmed);font-size:.75rem;margin-top:-.75rem}.cms-media-filters{align-items:center;display:flex;flex-wrap:wrap;gap:.375rem}.cms-blocks-grid{display:grid;gap:.75rem;grid-template-columns:repeat(2,minmax(0,1fr))}@media (min-width:640px){.cms-blocks-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1024px){.cms-blocks-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}.cms-block-tile{overflow:hidden;transition:opacity var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration-lg) var(--cms-ease),transform var(--cms-duration-lg) var(--cms-ease-out)}.cms-block-tile:hover{border-color:var(--cms-line-strong);box-shadow:var(--cms-shadow-sm)}.cms-block-tile.is-muted{opacity:.45}.cms-block-preview{align-items:center;aspect-ratio:4/3;background:var(--cms-subtle);color:var(--ui-text-dimmed);display:flex;justify-content:center;overflow:hidden;position:relative;width:100%}.cms-block-preview>img,.cms-block-preview>video{height:100%;inset:0;-o-object-fit:cover;object-fit:cover;position:absolute;transition:transform .5s var(--cms-ease-out);width:100%}.cms-block-tile:hover .cms-block-preview>img,.cms-block-tile:hover .cms-block-preview>video{transform:scale(1.03)}.cms-block-tile.is-media-only{cursor:grab}.cms-block-tile.is-media-only:focus-visible{outline:2px solid color-mix(in oklab,var(--cms-accent) 70%,transparent);outline-offset:2px}.cms-block-tile.is-media-only.is-dragging{cursor:grabbing}.cms-block-tile.is-media-only .cms-block-preview{aspect-ratio:1}.cms-block-remove{backdrop-filter:blur(6px);background:rgba(0,0,0,.55);border-radius:9999px;color:#fff;display:grid;height:1.5rem;opacity:0;place-items:center;position:absolute;right:.375rem;scale:.85;top:.375rem;transition:opacity var(--cms-duration) var(--cms-ease),scale var(--cms-duration-lg) var(--cms-ease-spring),background-color var(--cms-duration) var(--cms-ease);width:1.5rem;z-index:1}.cms-block-tile:focus-within .cms-block-remove,.cms-block-tile:hover .cms-block-remove{opacity:1;scale:1}.cms-block-remove:hover{background:var(--cms-error)}@media (hover:none){.cms-block-remove{opacity:1;scale:1}}.cms-block-missing{background:var(--ui-warning);border-radius:9999px;bottom:.375rem;color:#fff;display:grid;height:1.5rem;left:.375rem;place-items:center;position:absolute;width:1.5rem}.cms-block-summary{color:var(--ui-text-muted);font-size:.75rem;line-height:1.5;padding:.75rem;text-align:left}.cms-block-hidden{color:#fff;filter:drop-shadow(0 1px 2px rgb(0 0 0/.6));left:.5rem;position:absolute;top:.5rem}.cms-block-tile.is-dragging{opacity:.4;transform:scale(.98)}.cms-block-tile.is-drop-target{outline:2px solid var(--cms-accent);outline-offset:2px}.cms-block-bar{border-top:1px solid var(--cms-line);gap:.25rem;padding:.3125rem}.cms-block-bar,.cms-block-grip{align-items:center;display:flex}.cms-block-grip{border-radius:var(--cms-radius-xs);color:var(--ui-text-dimmed);cursor:grab;justify-content:center;padding:.25rem;transition:color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease)}.cms-block-grip:hover{background:var(--cms-hover);color:var(--ui-text-muted)}.cms-block-tile.is-dragging .cms-block-grip{cursor:grabbing}.cms-block-bar-name{color:var(--ui-text-toned);flex:1;font-size:.75rem;font-weight:500;overflow:hidden;padding-left:.25rem;text-overflow:ellipsis;white-space:nowrap}.cms-block-bar-actions{align-items:center;display:flex;gap:1px}.cms-block-add{align-items:center;background:var(--cms-subtle);border:1px dashed var(--cms-line-strong);border-radius:var(--cms-radius-lg);color:var(--ui-text-muted);display:flex;flex-direction:column;font-size:.8125rem;font-weight:500;gap:.375rem;justify-content:center;min-height:6rem;transition:border-color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-block-add:hover{background:var(--cms-accent-soft);border-color:var(--cms-accent-line);color:var(--cms-accent-text)}.cms-media-gallery.is-compact{gap:1rem}.cms-media-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.cms-media-search{flex:1 1 16rem;min-width:0}.cms-media-search-clear{border-radius:var(--cms-radius-xs);color:var(--ui-text-dimmed);cursor:pointer;display:flex;padding:.1875rem;transition:color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease)}.cms-media-search-clear:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-media-toolbar-actions{align-items:center;display:flex;flex-wrap:wrap;gap:.375rem}.cms-media-view-toggle{background:var(--cms-hover);border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:inline-flex;gap:2px;padding:2px}.cms-media-view-toggle .cms-btn{--cms-btn-size:1.625rem;border-radius:var(--cms-radius-sm)}.cms-media-view-toggle .cms-btn-soft{background:var(--cms-surface);border-color:transparent;box-shadow:var(--cms-shadow-raised)}.cms-media-nav{gap:.5rem;justify-content:space-between;min-height:1.75rem}.cms-media-crumbs,.cms-media-nav{align-items:center;display:flex;flex-wrap:wrap}.cms-media-crumbs{gap:.125rem;min-width:0}.cms-media-crumb{align-items:center;border:1px solid transparent;border-radius:var(--cms-radius-sm);color:var(--ui-text-muted);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;gap:.375rem;height:1.75rem;padding:0 .5rem;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-media-crumb:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-media-crumb.is-current,.cms-media-crumb.is-current:hover{background:transparent;color:var(--ui-text-highlighted);cursor:default}.cms-media-crumb.is-drop{background:var(--cms-accent-soft);border-color:var(--cms-accent-line);color:var(--cms-accent-text)}.cms-media-folder-actions{align-items:center;display:flex;gap:.25rem}.cms-media-progress{animation:cms-enter .26s var(--cms-ease-out) backwards;background:var(--cms-accent-soft);border:1px solid var(--cms-accent-line);border-radius:var(--cms-radius-md);color:var(--cms-accent-text);font-size:.8125rem;overflow:hidden;padding:.5rem .75rem;position:relative}.cms-media-progress,.cms-media-selection{align-items:center;display:flex;gap:.5rem}.cms-media-selection{animation:cms-pop .2s var(--cms-ease-out);background:var(--cms-elevated);border-radius:var(--cms-radius-lg);box-shadow:0 0 0 1px var(--cms-accent-line),0 12px 28px -10px var(--cms-shadow-tint-strong);flex-wrap:wrap;padding:.3125rem .375rem .3125rem .875rem;position:sticky;top:.75rem;z-index:5}.cms-media-selection-count{align-items:center;color:var(--ui-text-highlighted);display:inline-flex;font-size:.8125rem;font-variant-numeric:tabular-nums;font-weight:600;gap:.5rem}.cms-media-selection-count:before{background:var(--cms-accent);border-radius:9999px;box-shadow:0 0 0 3px var(--cms-accent-soft);content:"";height:.5rem;width:.5rem}.cms-media-selection-actions{align-items:center;display:flex;gap:.375rem;margin-left:auto}.cms-media-section{display:flex;flex-direction:column;gap:.625rem}.cms-media-section-title{align-items:center;color:var(--ui-text-muted);display:inline-flex;font-size:.75rem;font-weight:500;gap:.375rem}.cms-media-folders{display:grid;gap:.5rem;grid-template-columns:repeat(auto-fill,minmax(13rem,1fr))}.cms-media-gallery.is-compact .cms-media-folders{grid-template-columns:repeat(auto-fill,minmax(10rem,1fr))}.cms-media-folder-tile{align-items:center;background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);cursor:pointer;display:flex;gap:.75rem;min-width:0;padding:.625rem .75rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration-lg) var(--cms-ease),transform var(--cms-duration-lg) var(--cms-ease-out)}.cms-media-folder-tile:hover{border-color:var(--cms-line-strong);box-shadow:var(--cms-shadow-sm);transform:translateY(-1px)}.cms-media-folder-tile.is-drop{background:var(--cms-accent-soft);border-color:var(--cms-accent-line)}.cms-media-folder-tile-icon{background:var(--cms-accent-soft);border-radius:var(--cms-radius-md);box-sizing:content-box;color:var(--cms-accent-text);flex:none;height:1.125rem;padding:.4375rem;width:1.125rem}.cms-media-folder-tile-text{display:flex;flex-direction:column;min-width:0}.cms-media-folder-tile-name{color:var(--ui-text-highlighted);font-size:.8125rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-folder-tile-meta{color:var(--ui-text-dimmed);font-size:.75rem}.cms-media-row.is-checked,.cms-media-tile.is-checked{border-color:var(--cms-accent)}.cms-media-tile.is-checked{box-shadow:0 0 0 3px var(--cms-accent-soft)}.cms-media-row.is-checked{background:var(--cms-accent-soft)}.cms-media-tile.is-checked .cms-media-preview>img,.cms-media-tile.is-checked .cms-media-preview>video{border-radius:var(--cms-radius-md);transform:scale(.94)}.cms-media-row.is-dragging,.cms-media-tile.is-dragging{opacity:.45}.cms-media-check{align-items:center;backdrop-filter:blur(4px);background:rgba(0,0,0,.3);border:1.5px solid hsla(0,0%,100%,.9);border-radius:9999px;color:transparent;cursor:pointer;display:flex;height:1.25rem;justify-content:center;left:.5rem;opacity:0;position:absolute;scale:.85;top:.5rem;transition:opacity var(--cms-duration) var(--cms-ease),scale var(--cms-duration-lg) var(--cms-ease-spring),background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease);width:1.25rem;z-index:1}.cms-media-check.is-on,.cms-media-check.is-visible,.cms-media-tile:focus-visible .cms-media-check,.cms-media-tile:hover .cms-media-check{opacity:1;scale:1}.cms-media-check.is-on{background:var(--cms-accent);border-color:var(--cms-accent);color:var(--cms-accent-contrast)}.cms-media-row .cms-media-check{backdrop-filter:none;background:var(--cms-field);border-color:var(--cms-line-strong);border-radius:var(--cms-radius-xs);flex:none;height:1rem;position:static;width:1rem}.cms-media-row .cms-media-check.is-on{background:var(--cms-accent);border-color:var(--cms-accent)}.cms-media-grid.is-recent{gap:.5rem;grid-template-columns:repeat(6,minmax(0,1fr))}.cms-media-grid.is-recent .cms-media-tile{border-radius:var(--cms-radius-md)}.cms-media-list{display:flex;flex-direction:column;overflow:hidden}.cms-media-row{align-items:center;animation:cms-row-in .32s var(--cms-ease-out) backwards;border:1px solid transparent;border-bottom:1px solid var(--cms-line);cursor:pointer;display:flex;gap:.875rem;padding:.4375rem .875rem;transition:background-color var(--cms-duration) var(--cms-ease)}.cms-media-row:last-child{border-bottom-color:transparent}.cms-media-row:hover{background:var(--cms-subtle)}.cms-media-row-name{color:var(--ui-text-highlighted);display:flex;flex:1;flex-direction:column;font-size:.8125rem;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-row-cell{color:var(--ui-text-muted);flex:none;font-size:.75rem;font-variant-numeric:tabular-nums;text-align:right;width:5.5rem}.cms-media-row-cell.is-mono{color:var(--ui-text-dimmed);font-family:var(--cms-font-mono);font-size:.6875rem;text-transform:uppercase;width:3.5rem}@media (max-width:640px){.cms-media-row-cell.is-wide{display:none}.cms-media-grid.is-recent{grid-template-columns:repeat(3,minmax(0,1fr))}}.cms-media-drop-overlay{align-items:center;animation:cms-fade .16s var(--cms-ease);backdrop-filter:blur(4px);background:color-mix(in oklab,var(--cms-surface) 84%,transparent);border:1.5px dashed var(--cms-accent);border-radius:var(--cms-radius-xl);color:var(--ui-text-highlighted);display:flex;flex-direction:column;font-size:.875rem;gap:.5rem;inset:-.5rem;justify-content:center;pointer-events:none;position:absolute;z-index:10}.cms-media-drop-overlay>svg{animation:cms-float 1.6s ease-in-out infinite}.cms-media-drop-overlay strong,.cms-media-drop-overlay>svg{color:var(--cms-accent-text)}.cms-media-upload-hint{margin-top:.75rem;text-align:center}.cms-media-detail{display:flex;flex-direction:column;gap:1.5rem}.cms-media-detail-preview{align-items:center;background:repeating-conic-gradient(var(--cms-subtle) 0 25%,var(--cms-surface) 0 50%) 50% /1.25rem 1.25rem;border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);color:var(--ui-text-dimmed);display:flex;justify-content:center;max-height:24rem;min-height:12rem;overflow:hidden}.cms-media-detail-preview>img,.cms-media-detail-preview>video{animation:cms-fade .3s var(--cms-ease);max-height:24rem;max-width:100%;-o-object-fit:contain;object-fit:contain}.cms-media-detail-facts{background:var(--cms-subtle);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);display:grid;font-size:.8125rem;gap:.5rem 1.5rem;grid-template-columns:max-content minmax(0,1fr);padding:.875rem 1rem}.cms-media-detail-facts dt{color:var(--ui-text-muted)}.cms-media-detail-facts dd{color:var(--ui-text-highlighted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-detail-facts dd.is-mono{font-family:var(--cms-font-mono);font-size:.75rem;line-height:1.6}.cms-media-detail-usage{display:flex;flex-direction:column;gap:.625rem}.cms-media-usage-list{border:1px solid var(--cms-line);border-radius:var(--cms-radius-md);display:flex;flex-direction:column;overflow:hidden}.cms-media-usage-list li+li{border-top:1px solid var(--cms-line)}.cms-media-usage-link{display:flex;flex-direction:column;gap:.125rem;padding:.5rem .75rem;transition:background-color var(--cms-duration) var(--cms-ease)}.cms-media-usage-link:hover{background:var(--cms-subtle)}.cms-media-usage-title{color:var(--ui-text-highlighted);font-size:.8125rem;font-weight:500}.cms-media-usage-meta{color:var(--ui-text-dimmed);font-family:var(--cms-font-mono);font-size:.6875rem}.cms-media-grid{display:grid;gap:.875rem;grid-template-columns:repeat(2,minmax(0,1fr))}@media (min-width:640px){.cms-media-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1024px){.cms-media-grid:not(.is-compact){grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1280px){.cms-media-grid:not(.is-compact){grid-template-columns:repeat(5,minmax(0,1fr))}}.cms-media-tile{overflow:hidden;text-align:left;transition:border-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration-lg) var(--cms-ease),transform var(--cms-duration-lg) var(--cms-ease-out)}.cms-media-grid>.cms-media-tile{animation:cms-row-in .38s var(--cms-ease-out) backwards}.cms-media-tile.is-selectable{cursor:pointer}.cms-media-tile.is-selectable:hover{border-color:var(--cms-line-strong);box-shadow:var(--cms-shadow-sm);transform:translateY(-2px)}.cms-media-preview{align-items:center;aspect-ratio:1;background:var(--cms-subtle);color:var(--ui-text-dimmed);display:flex;justify-content:center;overflow:hidden;position:relative}.cms-media-preview>img,.cms-media-preview>video{height:100%;inset:0;-o-object-fit:cover;object-fit:cover;position:absolute;transition:transform .5s var(--cms-ease-out),border-radius var(--cms-duration-lg) var(--cms-ease);width:100%}.cms-media-tile.is-selectable:hover:not(.is-checked) .cms-media-preview>img,.cms-media-tile.is-selectable:hover:not(.is-checked) .cms-media-preview>video{transform:scale(1.04)}.cms-media-info{background:linear-gradient(0deg,rgba(0,0,0,.7),transparent);bottom:0;color:#fff;font-family:var(--cms-font-mono);font-size:.6875rem;left:0;letter-spacing:.02em;line-height:1.4;opacity:0;padding:1.75rem .625rem .5rem;pointer-events:none;position:absolute;right:0;text-transform:uppercase;transform:translateY(4px);transition:opacity var(--cms-duration-lg) var(--cms-ease),transform var(--cms-duration-lg) var(--cms-ease-out)}.cms-media-tile:focus-visible .cms-media-info,.cms-media-tile:hover .cms-media-info{opacity:1;transform:none}.cms-media-meta{border-top:1px solid var(--cms-line);display:flex;flex-direction:column;gap:.25rem;padding:.5625rem .75rem}.cms-media-name{color:var(--ui-text-highlighted);font-size:.8125rem;font-weight:500}.cms-media-folder,.cms-media-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-media-folder{align-items:center;color:var(--ui-text-dimmed);display:inline-flex;font-size:.75rem;font-weight:400;gap:.25rem}.cms-media-single{max-width:15rem;width:100%}.cms-block-tile.is-missing{border-color:color-mix(in oklab,var(--ui-warning) 55%,transparent)}.cms-media-missing{align-items:center;font-size:.75rem;gap:.375rem}.cms-media-missing,.cms-media-missing-icon{color:var(--ui-warning);display:flex}.cms-media-thumb{background:var(--cms-subtle);border-radius:var(--cms-radius-sm);box-shadow:inset 0 0 0 1px var(--cms-line);height:2rem;-o-object-fit:cover;object-fit:cover;width:2rem}.cms-media-thumb.is-fallback{align-items:center;color:var(--ui-text-dimmed);display:flex;justify-content:center}.cms-media-thumb-empty{color:var(--ui-text-dimmed)}.cms-table-shell{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.cms-table-scroll{flex:1;min-height:0;overflow:auto}.cms-table{border-collapse:collapse;min-width:-moz-max-content;min-width:max-content;text-align:left;width:100%}.cms-table td,.cms-table th{white-space:nowrap}.cms-table thead{background:var(--cms-subtle);position:sticky;top:0;z-index:10}.cms-table th{background:var(--cms-subtle);box-shadow:inset 0 -1px 0 var(--cms-line);color:var(--ui-text-muted);font-size:.75rem;font-weight:500;height:2.375rem;line-height:1.4;padding:0 1rem;transition:background-color var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease)}.cms-table td{color:var(--ui-text);font-size:.8125rem;height:3rem;padding:0 1rem}.cms-table td.cms-table-check-cell+td,.cms-table td:first-child:not(.cms-table-check-cell){color:var(--ui-text-highlighted);font-weight:500}.cms-table tbody tr{animation:cms-row-in .36s var(--cms-ease-out) backwards;animation-delay:var(--cms-row-delay,0s);border-bottom:1px solid var(--cms-line);transition:background-color var(--cms-duration) var(--cms-ease)}.cms-table tbody tr:last-child{border-bottom:0}.cms-table tbody tr:hover{background:var(--cms-subtle)}.cms-table td.cms-table-check-cell,.cms-table th.cms-table-check-cell{padding:0 0 0 1rem;width:2.75rem}.cms-table td.cms-table-check-cell+td,.cms-table th.cms-table-check-cell+th{padding-left:.75rem}.cms-table tbody tr.is-selected,.cms-table tbody tr.is-selected:hover{background:var(--cms-accent-soft)}.cms-checkbox{background:var(--cms-field);border:1px solid var(--cms-line-strong);border-radius:var(--cms-radius-xs);box-shadow:var(--cms-shadow-xs);color:var(--cms-accent-contrast);display:grid;height:1rem;place-items:center;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),scale var(--cms-duration) var(--cms-ease);vertical-align:middle;width:1rem}.cms-checkbox:hover{border-color:var(--cms-text-dimmed)}.cms-checkbox:active{scale:.9}.cms-checkbox.is-on{background:var(--cms-accent);border-color:var(--cms-accent)}.cms-checkbox>svg{animation:cms-icon-pop .26s var(--cms-ease-spring);height:.75rem;stroke-width:3;width:.75rem}.cms-bulk-actions{animation:cms-pop .2s var(--cms-ease-out)}.cms-bulk-count{align-items:center;color:var(--ui-text-highlighted);display:inline-flex;font-size:.8125rem;font-variant-numeric:tabular-nums;font-weight:600;gap:.5rem}.cms-bulk-count:before{background:var(--cms-accent);border-radius:9999px;box-shadow:0 0 0 3px var(--cms-accent-soft);content:"";height:.5rem;width:.5rem}.cms-th-label{align-items:center;display:inline-flex;gap:.35rem}.cms-table th.is-sortable{cursor:pointer}.cms-table th.is-sortable:hover,.cms-table th.is-sorted{color:var(--ui-text-highlighted)}.cms-table th.is-sorted{background:var(--cms-fill)}.cms-th-sort{flex:none;opacity:0;transition:opacity var(--cms-duration) var(--cms-ease),transform var(--cms-duration-lg) var(--cms-ease-spring)}.cms-table th.is-sortable:hover .cms-th-sort,.cms-table th.is-sorted .cms-th-sort{opacity:1}.cms-alert{animation:cms-enter .26s var(--cms-ease-out) backwards;border:1px solid transparent;border-radius:var(--cms-radius-md);display:flex;flex-direction:column;font-size:.8125rem;gap:.125rem;padding:.625rem .875rem}.cms-alert-title{font-weight:550}.cms-alert-error{background:color-mix(in oklab,var(--ui-error) 8%,transparent);border-color:color-mix(in oklab,var(--ui-error) 24%,transparent);color:var(--ui-error)}.cms-alert-success{background:color-mix(in oklab,var(--ui-success) 8%,transparent);border-color:color-mix(in oklab,var(--ui-success) 24%,transparent);color:var(--ui-success)}.cms-alert-warning{background:color-mix(in oklab,var(--ui-warning) 8%,transparent);border-color:color-mix(in oklab,var(--ui-warning) 24%,transparent);color:var(--ui-warning)}.cms-alert-neutral{background:var(--cms-subtle);border-color:var(--cms-line);color:var(--ui-text-toned)}.cms-alert-neutral .cms-alert-title{color:var(--ui-text-highlighted)}.cms-toaster{bottom:1rem;display:flex;flex-direction:column;gap:.5rem;max-width:calc(100vw - 2rem);position:fixed;right:1rem;width:22rem;z-index:80}.cms-toast{animation:cms-toast-in .42s var(--cms-ease-out) both;background:var(--cms-elevated);border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-overlay);overflow:hidden;padding:.75rem .75rem .8125rem;position:relative}.cms-toast:after{animation:cms-toast-timer 4s linear forwards;background:var(--cms-line-strong);bottom:0;content:"";height:2px;left:0;position:absolute;right:0;transform-origin:left}.cms-toast.is-success:after{background:color-mix(in oklab,var(--ui-success) 60%,transparent)}.cms-toast.is-error:after{background:color-mix(in oklab,var(--ui-error) 60%,transparent)}.cms-toast-row{align-items:flex-start;display:flex;gap:.625rem}.cms-toast-icon{animation:cms-icon-pop .42s var(--cms-ease-spring) .12s;background:var(--cms-fill);border-radius:9999px;box-sizing:content-box;color:var(--ui-text-muted);flex-shrink:0;padding:.1875rem}.cms-toast.is-success .cms-toast-icon{background:color-mix(in oklab,var(--ui-success) 14%,transparent);color:var(--ui-success)}.cms-toast.is-error .cms-toast-icon{background:color-mix(in oklab,var(--ui-error) 14%,transparent);color:var(--ui-error)}.cms-toast-title{color:var(--ui-text-highlighted);font-size:.8125rem;font-weight:500;padding-top:.0625rem}.cms-toast-description{color:var(--ui-text-muted);font-size:.8125rem;margin-top:.125rem}.cms-toast-dismiss{border-radius:var(--cms-radius-xs);color:var(--ui-text-dimmed);flex-shrink:0;padding:.125rem;transition:color var(--cms-duration) var(--cms-ease),background-color var(--cms-duration) var(--cms-ease)}.cms-toast-dismiss:hover{background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-pagination{align-items:center;display:flex;gap:.25rem;justify-content:center}.cms-page-btn{border-radius:var(--cms-radius-sm);color:var(--ui-text-muted);font-size:.8125rem;font-variant-numeric:tabular-nums;height:1.75rem;min-width:1.75rem;padding:0 .4375rem;transition:background-color var(--cms-duration) var(--cms-ease),box-shadow var(--cms-duration) var(--cms-ease),color var(--cms-duration) var(--cms-ease),scale var(--cms-duration) var(--cms-ease)}.cms-page-btn>svg{margin-inline:auto}.cms-page-btn:hover:not(:disabled){background:var(--cms-hover);color:var(--ui-text-highlighted)}.cms-page-btn:active:not(:disabled){scale:.94}.cms-page-btn.is-active{background:var(--cms-surface);box-shadow:var(--cms-shadow-raised);color:var(--ui-text-highlighted);font-weight:600}.cms-page-btn:disabled{opacity:.35}::view-transition-new(root),::view-transition-old(root){animation-duration:.28s;animation-timing-function:var(--cms-ease)}@media (prefers-reduced-motion:reduce){.cms-scope *,.cms-scope :after,.cms-scope :before{animation-delay:0s!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
|
package/dist/runtime/generate.js
CHANGED
|
@@ -7,7 +7,7 @@ export async function generateMigrations(opts = {}) {
|
|
|
7
7
|
const configPath = opts.configPath ?? join(root, ".nuxt/cms/drizzle.config.ts");
|
|
8
8
|
if (!existsSync(configPath)) {
|
|
9
9
|
throw new Error(
|
|
10
|
-
`[nuxt-cms] drizzle config not found at ${configPath}
|
|
10
|
+
`[nuxt-cms] drizzle config not found at ${configPath}. Run \`nuxi prepare\` first.`
|
|
11
11
|
);
|
|
12
12
|
}
|
|
13
13
|
const require = createRequire(import.meta.url);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { createError, defineEventHandler, readValidatedBody } from "h3";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { useDb } from "#cms-db";
|
|
5
|
+
import { cms_users } from "#cms-tables";
|
|
6
|
+
import { replaceUserSession } from "#imports";
|
|
7
|
+
import { MIN_PASSWORD_LENGTH } from "../../shared/index.js";
|
|
8
|
+
import { hashPassword, verifyPassword } from "../utils/password.js";
|
|
9
|
+
import { requireAdmin } from "../utils/require-admin.js";
|
|
10
|
+
import { findUserById, sessionUserFor } from "../utils/users.js";
|
|
11
|
+
const bodySchema = z.object({
|
|
12
|
+
currentPassword: z.string().max(256).optional(),
|
|
13
|
+
newPassword: z.string().min(MIN_PASSWORD_LENGTH).max(256)
|
|
14
|
+
});
|
|
15
|
+
export default defineEventHandler(async (event) => {
|
|
16
|
+
const user = await requireAdmin(event);
|
|
17
|
+
if (!user.id) {
|
|
18
|
+
throw createError({
|
|
19
|
+
statusCode: 403,
|
|
20
|
+
statusMessage: "The super admin password is set by environment variables"
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const body = await readValidatedBody(event, bodySchema.parse);
|
|
24
|
+
const row = await findUserById(user.id);
|
|
25
|
+
if (!row) throw createError({ statusCode: 401, statusMessage: "Authentication required" });
|
|
26
|
+
if (!user.firstLogin) {
|
|
27
|
+
const ok = !!body.currentPassword && await verifyPassword(row.passwordHash, body.currentPassword);
|
|
28
|
+
if (!ok)
|
|
29
|
+
throw createError({ statusCode: 400, statusMessage: "The current password is wrong" });
|
|
30
|
+
}
|
|
31
|
+
const [updated] = await useDb().update(cms_users).set({
|
|
32
|
+
passwordHash: await hashPassword(body.newPassword),
|
|
33
|
+
mustChangePassword: false,
|
|
34
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
35
|
+
}).where(eq(cms_users.id, user.id)).returning();
|
|
36
|
+
await replaceUserSession(event, { user: sessionUserFor(updated) });
|
|
37
|
+
return { ok: true };
|
|
38
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { defineEventHandler } from "h3";
|
|
3
|
+
import { useDb } from "#cms-db";
|
|
4
|
+
import { cms_users } from "#cms-tables";
|
|
5
|
+
import { replaceUserSession } from "#imports";
|
|
6
|
+
import { requireAdmin } from "../utils/require-admin.js";
|
|
7
|
+
import { sessionUserFor } from "../utils/users.js";
|
|
8
|
+
export default defineEventHandler(async (event) => {
|
|
9
|
+
const user = await requireAdmin(event);
|
|
10
|
+
if (!user.id) return { ok: true };
|
|
11
|
+
const [row] = await useDb().update(cms_users).set({ mustChangePassword: false }).where(eq(cms_users.id, user.id)).returning();
|
|
12
|
+
if (row) await replaceUserSession(event, { user: sessionUserFor(row) });
|
|
13
|
+
return { ok: true };
|
|
14
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { createError, defineEventHandler, readValidatedBody } from "h3";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { useDb } from "#cms-db";
|
|
5
|
+
import { cms_users } from "#cms-tables";
|
|
6
|
+
import { replaceUserSession } from "#imports";
|
|
7
|
+
import { requireAdmin } from "../utils/require-admin.js";
|
|
8
|
+
import { sessionUserFor, toAccount } from "../utils/users.js";
|
|
9
|
+
const bodySchema = z.object({
|
|
10
|
+
name: z.string().trim().max(120).nullable()
|
|
11
|
+
});
|
|
12
|
+
export default defineEventHandler(async (event) => {
|
|
13
|
+
const user = await requireAdmin(event);
|
|
14
|
+
if (!user.id) {
|
|
15
|
+
throw createError({
|
|
16
|
+
statusCode: 403,
|
|
17
|
+
statusMessage: "The super admin account is set by environment variables"
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const body = await readValidatedBody(event, bodySchema.parse);
|
|
21
|
+
const name = body.name || null;
|
|
22
|
+
const [row] = await useDb().update(cms_users).set({ name, updatedAt: (/* @__PURE__ */ new Date()).toISOString() }).where(eq(cms_users.id, user.id)).returning();
|
|
23
|
+
await replaceUserSession(event, { user: sessionUserFor(row) });
|
|
24
|
+
return toAccount(row);
|
|
25
|
+
});
|
|
@@ -54,7 +54,7 @@ export default defineEventHandler(async (event) => {
|
|
|
54
54
|
let where;
|
|
55
55
|
if (search) {
|
|
56
56
|
const column = titleColumn ?? idColumn(table);
|
|
57
|
-
where = sql
|
|
57
|
+
where = sql`lower(${column}) like ${likePattern(search.toLowerCase())} escape '\\'`;
|
|
58
58
|
}
|
|
59
59
|
const selection = light ? Object.fromEntries([
|
|
60
60
|
["id", idColumn(table)],
|
|
@@ -3,6 +3,7 @@ import { createError, defineEventHandler, getValidatedQuery } from "h3";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { useDb } from "#cms-db";
|
|
5
5
|
import { cms_media } from "#cms-tables";
|
|
6
|
+
import { isMediaFolderMarker } from "../../shared/index.js";
|
|
6
7
|
import { objectKeySchema } from "../../shared/validation.js";
|
|
7
8
|
import { useMediaStorage } from "../utils/media.js";
|
|
8
9
|
import { requireAdmin } from "../utils/require-admin.js";
|
|
@@ -13,7 +14,7 @@ export default defineEventHandler(async (event) => {
|
|
|
13
14
|
const { key } = await getValidatedQuery(event, querySchema.parse);
|
|
14
15
|
const db = useDb();
|
|
15
16
|
const [row] = await db.select().from(cms_media).where(eq(cms_media.key, key)).limit(1);
|
|
16
|
-
if (!row) {
|
|
17
|
+
if (!row || isMediaFolderMarker(key)) {
|
|
17
18
|
throw createError({ statusCode: 404, statusMessage: "Media not found" });
|
|
18
19
|
}
|
|
19
20
|
await store.remove(key);
|
|
@@ -9,6 +9,7 @@ import { requireMediaFilePath } from "../utils/media-fs.js";
|
|
|
9
9
|
import {
|
|
10
10
|
assertMediaWritable,
|
|
11
11
|
assertUploadContentType,
|
|
12
|
+
baseContentType,
|
|
12
13
|
toMediaItem,
|
|
13
14
|
useMediaConfig
|
|
14
15
|
} from "../utils/media.js";
|
|
@@ -33,7 +34,7 @@ export default defineEventHandler(async (event) => {
|
|
|
33
34
|
}
|
|
34
35
|
const values = {
|
|
35
36
|
key: body.key,
|
|
36
|
-
mime: body.mime
|
|
37
|
+
mime: body.mime ? baseContentType(body.mime) : null,
|
|
37
38
|
size: body.size ?? null,
|
|
38
39
|
width: body.width ?? null,
|
|
39
40
|
height: body.height ?? null,
|
|
@@ -4,11 +4,12 @@ import { z } from "zod";
|
|
|
4
4
|
import { useDb } from "#cms-db";
|
|
5
5
|
import { cms_media } from "#cms-tables";
|
|
6
6
|
import { normalizeMediaFolder } from "../../shared/index.js";
|
|
7
|
+
import { objectKeySchema } from "../../shared/validation.js";
|
|
7
8
|
import { useMediaIndex } from "../utils/media-index.js";
|
|
8
9
|
import { assertMediaWritable, toMediaItem, useMediaConfig } from "../utils/media.js";
|
|
9
10
|
import { requireAdmin } from "../utils/require-admin.js";
|
|
10
11
|
const bodySchema = z.object({
|
|
11
|
-
key:
|
|
12
|
+
key: objectKeySchema,
|
|
12
13
|
alt: z.string().max(1024).nullish(),
|
|
13
14
|
folder: z.string().max(255).nullish()
|
|
14
15
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { defineEventHandler } from "h3";
|
|
3
|
+
import { useDb } from "#cms-db";
|
|
4
|
+
import { cms_settings } from "#cms-tables";
|
|
5
|
+
import { requireAdmin } from "../utils/require-admin.js";
|
|
6
|
+
import { requireSettingsKey } from "../utils/settings.js";
|
|
7
|
+
export default defineEventHandler(async (event) => {
|
|
8
|
+
await requireAdmin(event);
|
|
9
|
+
const key = requireSettingsKey(event);
|
|
10
|
+
await useDb().delete(cms_settings).where(eq(cms_settings.key, key));
|
|
11
|
+
return { ok: true };
|
|
12
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineEventHandler } from "h3";
|
|
2
|
+
import { useDb } from "#cms-db";
|
|
3
|
+
import { cms_settings } from "#cms-tables";
|
|
4
|
+
import { requireAdmin } from "../utils/require-admin.js";
|
|
5
|
+
import { parseSettingsValue } from "../utils/settings.js";
|
|
6
|
+
export default defineEventHandler(async (event) => {
|
|
7
|
+
await requireAdmin(event);
|
|
8
|
+
const rows = await useDb().select().from(cms_settings);
|
|
9
|
+
return Object.fromEntries(
|
|
10
|
+
rows.flatMap((row) => {
|
|
11
|
+
const value = parseSettingsValue(row.value);
|
|
12
|
+
return value ? [[row.key, value]] : [];
|
|
13
|
+
})
|
|
14
|
+
);
|
|
15
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineEventHandler, readValidatedBody } from "h3";
|
|
2
|
+
import { useDb } from "#cms-db";
|
|
3
|
+
import { cms_settings } from "#cms-tables";
|
|
4
|
+
import { requireAdmin } from "../utils/require-admin.js";
|
|
5
|
+
import { entrySettingsSchema, requireSettingsKey } from "../utils/settings.js";
|
|
6
|
+
export default defineEventHandler(async (event) => {
|
|
7
|
+
await requireAdmin(event);
|
|
8
|
+
const key = requireSettingsKey(event);
|
|
9
|
+
const body = await readValidatedBody(event, entrySettingsSchema.parse);
|
|
10
|
+
const value = JSON.stringify(body);
|
|
11
|
+
const updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
12
|
+
await useDb().insert(cms_settings).values({ key, value, updatedAt }).onConflictDoUpdate({ target: cms_settings.key, set: { value, updatedAt } });
|
|
13
|
+
return body;
|
|
14
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { createError, defineEventHandler, getRouterParam } from "h3";
|
|
3
|
+
import { useDb } from "#cms-db";
|
|
4
|
+
import { cms_users } from "#cms-tables";
|
|
5
|
+
import { requireSuperAdmin } from "../utils/require-admin.js";
|
|
6
|
+
export default defineEventHandler(async (event) => {
|
|
7
|
+
await requireSuperAdmin(event);
|
|
8
|
+
const id = getRouterParam(event, "id") ?? "";
|
|
9
|
+
const [row] = await useDb().delete(cms_users).where(eq(cms_users.id, id)).returning();
|
|
10
|
+
if (!row) throw createError({ statusCode: 404, statusMessage: "User not found" });
|
|
11
|
+
return { ok: true };
|
|
12
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { createError, defineEventHandler, getRouterParam, readValidatedBody } from "h3";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { useDb } from "#cms-db";
|
|
5
|
+
import { cms_users } from "#cms-tables";
|
|
6
|
+
import { MIN_PASSWORD_LENGTH } from "../../shared/index.js";
|
|
7
|
+
import { hashPassword } from "../utils/password.js";
|
|
8
|
+
import { requireSuperAdmin } from "../utils/require-admin.js";
|
|
9
|
+
import { toAccount } from "../utils/users.js";
|
|
10
|
+
const bodySchema = z.object({
|
|
11
|
+
name: z.string().trim().max(120).nullish(),
|
|
12
|
+
password: z.string().min(MIN_PASSWORD_LENGTH).max(256).optional()
|
|
13
|
+
});
|
|
14
|
+
export default defineEventHandler(async (event) => {
|
|
15
|
+
await requireSuperAdmin(event);
|
|
16
|
+
const id = getRouterParam(event, "id") ?? "";
|
|
17
|
+
const body = await readValidatedBody(event, bodySchema.parse);
|
|
18
|
+
const set = { updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
19
|
+
if (body.name !== void 0) set.name = body.name || null;
|
|
20
|
+
if (body.password) {
|
|
21
|
+
set.passwordHash = await hashPassword(body.password);
|
|
22
|
+
set.mustChangePassword = true;
|
|
23
|
+
}
|
|
24
|
+
const [row] = await useDb().update(cms_users).set(set).where(eq(cms_users.id, id)).returning();
|
|
25
|
+
if (!row) throw createError({ statusCode: 404, statusMessage: "User not found" });
|
|
26
|
+
return toAccount(row);
|
|
27
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { asc } from "drizzle-orm";
|
|
2
|
+
import { defineEventHandler } from "h3";
|
|
3
|
+
import { useDb } from "#cms-db";
|
|
4
|
+
import { cms_users } from "#cms-tables";
|
|
5
|
+
import { requireSuperAdmin } from "../utils/require-admin.js";
|
|
6
|
+
import { toAccount } from "../utils/users.js";
|
|
7
|
+
export default defineEventHandler(async (event) => {
|
|
8
|
+
await requireSuperAdmin(event);
|
|
9
|
+
const rows = await useDb().select().from(cms_users).orderBy(asc(cms_users.createdAt));
|
|
10
|
+
return rows.map(toAccount);
|
|
11
|
+
});
|