@xleddyl/nuxt-cms 0.2.2 → 0.2.3
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/README.md +3 -1
- package/dist/module.d.mts +4 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +319 -32
- package/dist/runtime/app/blocks/CmsBlocks.d.vue.ts +45 -0
- package/dist/runtime/app/blocks/CmsBlocks.vue +36 -0
- package/dist/runtime/app/blocks/CmsBlocks.vue.d.ts +45 -0
- package/dist/runtime/app/blocks/resolve.d.ts +21 -0
- package/dist/runtime/app/blocks/resolve.js +37 -0
- package/dist/runtime/app/components/cms/BlockOutline.d.vue.ts +17 -0
- package/dist/runtime/app/components/cms/BlockOutline.vue +99 -0
- package/dist/runtime/app/components/cms/BlockOutline.vue.d.ts +17 -0
- package/dist/runtime/app/components/cms/BlockPalette.d.vue.ts +12 -0
- package/dist/runtime/app/components/cms/BlockPalette.vue +29 -0
- package/dist/runtime/app/components/cms/BlockPalette.vue.d.ts +12 -0
- package/dist/runtime/app/components/cms/BlocksField.d.vue.ts +2 -0
- package/dist/runtime/app/components/cms/BlocksField.vue +83 -3
- package/dist/runtime/app/components/cms/BlocksField.vue.d.ts +2 -0
- package/dist/runtime/app/components/cms/EntryForm.vue +9 -4
- package/dist/runtime/app/components/cms/FieldInput.d.vue.ts +2 -0
- package/dist/runtime/app/components/cms/FieldInput.vue +18 -1
- package/dist/runtime/app/components/cms/FieldInput.vue.d.ts +2 -0
- package/dist/runtime/app/components/cms/SettingsEntry.vue +3 -2
- package/dist/runtime/app/components/cms/SettingsModal.vue +2 -1
- package/dist/runtime/app/components/cms/StatusBadge.d.vue.ts +2 -0
- package/dist/runtime/app/components/cms/StatusBadge.vue +9 -3
- package/dist/runtime/app/components/cms/StatusBadge.vue.d.ts +2 -0
- package/dist/runtime/app/components/cms/VisualEditor.d.vue.ts +37 -0
- package/dist/runtime/app/components/cms/VisualEditor.vue +533 -0
- package/dist/runtime/app/components/cms/VisualEditor.vue.d.ts +37 -0
- package/dist/runtime/app/composables/cms-entry-disabled.d.ts +7 -1
- package/dist/runtime/app/composables/cms-entry-disabled.js +15 -0
- package/dist/runtime/app/composables/cms-entry.d.ts +7 -1
- package/dist/runtime/app/composables/cms-entry.js +51 -1
- package/dist/runtime/app/composables/cms-runtime.d.ts +1 -0
- package/dist/runtime/app/composables/cms-settings.js +8 -2
- package/dist/runtime/app/layouts/cms-admin.vue +5 -0
- package/dist/runtime/app/layouts/cms-editor.d.vue.ts +13 -0
- package/dist/runtime/app/layouts/cms-editor.vue +14 -0
- package/dist/runtime/app/layouts/cms-editor.vue.d.ts +13 -0
- package/dist/runtime/app/pages/admin-collection.vue +33 -4
- package/dist/runtime/app/pages/admin-content.d.vue.ts +3 -0
- package/dist/runtime/app/pages/admin-content.vue +284 -0
- package/dist/runtime/app/pages/admin-content.vue.d.ts +3 -0
- package/dist/runtime/app/pages/admin-preview.d.vue.ts +3 -0
- package/dist/runtime/app/pages/admin-preview.vue +132 -0
- package/dist/runtime/app/pages/admin-preview.vue.d.ts +3 -0
- package/dist/runtime/app/preview/PreviewOverlay.d.vue.ts +15 -0
- package/dist/runtime/app/preview/PreviewOverlay.vue +362 -0
- package/dist/runtime/app/preview/PreviewOverlay.vue.d.ts +15 -0
- package/dist/runtime/app/utils/ui.js +1 -0
- package/dist/runtime/assets/main.css +1 -1
- package/dist/runtime/server/api/collection.get.js +3 -2
- package/dist/runtime/server/api/collection.post.js +4 -1
- package/dist/runtime/server/api/item.delete.js +2 -1
- package/dist/runtime/server/api/item.put.js +2 -1
- package/dist/runtime/server/utils/graphql.js +23 -8
- package/dist/runtime/server/utils/registry.d.ts +1 -0
- package/dist/runtime/server/utils/registry.js +6 -0
- package/dist/runtime/server/utils/visibility.d.ts +4 -0
- package/dist/runtime/server/utils/visibility.js +12 -0
- package/dist/runtime/shared/graphql-sdl.js +4 -1
- package/dist/runtime/shared/index.d.ts +59 -5
- package/dist/runtime/shared/index.js +133 -0
- package/dist/runtime/shared/preview.d.ts +85 -0
- package/dist/runtime/shared/preview.js +219 -0
- package/dist/runtime/shared/validation.d.ts +2 -0
- package/dist/runtime/shared/validation.js +15 -2
- package/package.json +1 -1
|
@@ -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,.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-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:var(--ui-bg-inverted);border-radius:var(--cms-radius-md);color:var(--ui-text-inverted);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:var(--cms-accent);border-radius:9999px;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;justify-content:center;min-height:100dvh;padding:1.5rem}.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-usage-badge{align-items:center;color:var(--cms-accent-text);display:inline-flex;flex:none;font-size:.6875rem;font-weight:500;gap:.25rem;white-space:nowrap}.cms-media-usage-badge.is-unused{color:var(--ui-text-dimmed);font-weight:400}.cms-media-row-cell.is-usage{width:7.5rem}.cms-confirm-groups{display:flex;flex-direction:column;gap:.875rem;max-height:min(50vh,24rem);overflow-y:auto}.cms-confirm-group{display:flex;flex-direction:column;gap:.375rem}.cms-confirm-group-title{color:var(--ui-text-toned);font-family:var(--cms-font-mono);font-size:.75rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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}}
|
|
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-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:var(--ui-bg-inverted);border-radius:var(--cms-radius-md);color:var(--ui-text-inverted);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:var(--cms-accent);border-radius:9999px;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;justify-content:center;min-height:100dvh;padding:1.5rem}.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,.cms-badge.is-scheduled: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-scheduled{background:color-mix(in oklab,var(--cms-warning) 10%,transparent);border-color:color-mix(in oklab,var(--cms-warning) 24%,transparent);color:var(--cms-warning)}.cms-badge.is-scheduled:before{box-shadow:inset 0 0 0 1.5px var(--cms-warning)}.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-usage-badge{align-items:center;color:var(--cms-accent-text);display:inline-flex;flex:none;font-size:.6875rem;font-weight:500;gap:.25rem;white-space:nowrap}.cms-media-usage-badge.is-unused{color:var(--ui-text-dimmed);font-weight:400}.cms-media-row-cell.is-usage{width:7.5rem}.cms-confirm-groups{display:flex;flex-direction:column;gap:.875rem;max-height:min(50vh,24rem);overflow-y:auto}.cms-confirm-group{display:flex;flex-direction:column;gap:.375rem}.cms-confirm-group-title{color:var(--ui-text-toned);font-family:var(--cms-font-mono);font-size:.75rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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}.cms-editor{background:var(--cms-canvas);display:flex;flex-direction:column;height:100dvh}.cms-editor-overlay{animation:cms-fade .16s var(--cms-ease);inset:0;position:fixed;z-index:45}.cms-editor-bar{align-items:center;background:var(--cms-surface);border-bottom:1px solid var(--cms-line);display:grid;gap:.75rem;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);min-height:3.25rem;padding:.5rem .75rem}.cms-editor-bar-center,.cms-editor-bar-end,.cms-editor-bar-start,.cms-editor-heading{align-items:center;display:flex;min-width:0}.cms-editor-bar-start{gap:.375rem}.cms-editor-heading{gap:.625rem}.cms-editor-bar-center{gap:.5rem;justify-content:center}.cms-editor-bar-end{gap:.375rem;justify-content:flex-end}.cms-editor-title{color:var(--ui-text-highlighted);font-size:.875rem;font-weight:600;letter-spacing:-.005em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-editor-dirty{color:var(--ui-text-muted);font-size:.75rem;white-space:nowrap}.cms-editor-devices{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-editor-device{align-items:center;border-radius:var(--cms-radius-xs);color:var(--ui-text-muted);display:flex;height:1.375rem;justify-content:center;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:1.75rem}.cms-editor-device:hover:not(.is-active){color:var(--ui-text-highlighted)}.cms-editor-device.is-active{background:var(--cms-surface);box-shadow:var(--cms-shadow-raised);color:var(--cms-accent-text)}.cms-editor-body{display:flex;flex:1;min-height:0}.cms-editor-canvas{display:flex;flex:1;justify-content:center;min-width:0;overflow:auto;padding:1rem}.cms-editor-frame{background:#fff;border-radius:var(--cms-radius-lg);box-shadow:var(--cms-shadow-raised);height:100%;overflow:hidden;transition:width var(--cms-duration-lg) var(--cms-ease-out);width:100%}.cms-editor-frame.is-mobile{flex:none;max-width:100%;width:390px}.cms-editor-iframe{border:0;display:block;height:100%;width:100%}.cms-editor-panel{background:var(--cms-surface);border-left:1px solid var(--cms-line);display:flex;flex-direction:column;flex-shrink:0;min-height:0;width:22rem}.cms-editor-tabs{padding:.75rem .875rem 0}.cms-editor-tabs .cms-tabs{margin-bottom:0}.cms-editor-tab-dot{background:var(--cms-error);border-radius:9999px;display:inline-block;height:6px;margin-left:.375rem;vertical-align:middle;width:6px}.cms-editor-panel-body{container-type:inline-size;display:flex;flex:1;flex-direction:column;gap:1rem;min-height:0;overflow-y:auto;padding:.875rem}.cms-editor-fields{display:flex;flex-direction:column;gap:1.125rem}.cms-editor-section{display:flex;flex-direction:column;gap:.5rem}.cms-editor-section-title{border-top:1px solid var(--cms-line);display:flex;flex-direction:column;gap:.25rem;padding-top:.75rem}.cms-editor-section-title:first-child{border-top:0;padding-top:0}.cms-editor-block-head{align-items:center;display:flex;justify-content:space-between;margin:-.25rem -.25rem 0}.cms-editor-block-position{color:var(--ui-text-dimmed);font-family:var(--cms-font-mono);font-size:.6875rem}.cms-editor-block-title{align-items:center;color:var(--ui-text-highlighted);display:flex;font-size:.9375rem;font-weight:600;gap:.5rem}.cms-editor-block-actions{border-bottom:1px solid var(--cms-line);display:flex;flex-wrap:wrap;gap:.375rem;padding-bottom:1rem}.cms-editor-schedule .cms-popover{right:0;top:100%;transform-origin:top right}.cms-editor-schedule-panel{display:flex;flex-direction:column;gap:.875rem;padding:.875rem;width:18rem}.cms-outline{display:flex;flex-direction:column;gap:2px;list-style:none;margin:0;padding:0}.cms-outline-row{align-items:center;border:1px solid transparent;border-radius:var(--cms-radius-md);display:flex;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease),opacity var(--cms-duration) var(--cms-ease)}.cms-outline-row:hover{background:var(--cms-hover)}.cms-outline-row.is-selected{background:var(--cms-accent-soft);border-color:var(--cms-accent-line)}.cms-outline-row.is-dragging{opacity:.4}.cms-outline-row.is-drop-target{box-shadow:inset 0 2px 0 var(--cms-accent)}.cms-outline-grip{align-items:center;color:var(--ui-text-dimmed);cursor:grab;display:flex;padding:0 .125rem 0 .5rem}.cms-outline-main{align-items:center;border-radius:var(--cms-radius-md);color:var(--ui-text-toned);display:flex;flex:1;gap:.5rem;min-width:0;padding:.4375rem .5rem .4375rem .25rem;text-align:left}.cms-outline-row.is-hidden .cms-outline-main{opacity:.55}.cms-outline-text{display:flex;flex:1;flex-direction:column;gap:.125rem;min-width:0}.cms-outline-label{color:var(--ui-text-highlighted);font-size:.8125rem;font-weight:500}.cms-outline-summary{color:var(--ui-text-muted);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cms-outline-hidden{color:var(--ui-text-dimmed)}.cms-palette{display:grid;gap:.375rem}.cms-palette-item{align-items:flex-start;background:var(--cms-surface);border:1px solid var(--cms-line);border-radius:var(--cms-radius-lg);display:flex;gap:.625rem;padding:.625rem;text-align:left;transition:background-color var(--cms-duration) var(--cms-ease),border-color var(--cms-duration) var(--cms-ease)}.cms-palette-item:hover{background:var(--cms-accent-soft);border-color:var(--cms-accent-line)}.cms-palette-icon{align-items:center;background:var(--cms-fill);border-radius:var(--cms-radius-md);color:var(--ui-text-toned);display:flex;flex-shrink:0;height:2rem;justify-content:center;width:2rem}.cms-palette-item:hover .cms-palette-icon{color:var(--cms-accent-text)}.cms-palette-text{display:flex;flex-direction:column;gap:.1875rem;min-width:0;padding-top:.0625rem}.cms-palette-label{color:var(--ui-text-highlighted);font-size:.8125rem;font-weight:600}.cms-palette-description{color:var(--ui-text-muted);font-size:.75rem;line-height:1.4}@media (max-width:767px){.cms-editor-bar{grid-template-columns:minmax(0,1fr) auto}.cms-editor-bar-center{grid-column:1/-1;grid-row:2}.cms-editor-body{flex-direction:column}.cms-editor-canvas{flex:0 0 50%;padding:.5rem}.cms-editor-panel{border-left:0;border-top:1px solid var(--cms-line);flex:1;width:auto}}::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}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { asc, count, desc, sql } from "drizzle-orm";
|
|
2
2
|
import { defineEventHandler, getValidatedQuery } from "h3";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import { useDb } from "#cms-db";
|
|
4
|
+
import { cmsDialect, useDb } from "#cms-db";
|
|
5
5
|
import { pageRoutes } from "../../shared/index.js";
|
|
6
6
|
import { decodeRows, getRegistryEntry, idColumn, tableColumns } from "../utils/registry.js";
|
|
7
7
|
import { readPages } from "../utils/page-storage.js";
|
|
@@ -54,7 +54,8 @@ export default defineEventHandler(async (event) => {
|
|
|
54
54
|
let where;
|
|
55
55
|
if (search) {
|
|
56
56
|
const column = titleColumn ?? idColumn(table);
|
|
57
|
-
|
|
57
|
+
const text = cmsDialect === "postgres" ? sql`cast(${column} as text)` : sql`${column}`;
|
|
58
|
+
where = sql`lower(${text}) like ${likePattern(search.toLowerCase())} escape '\\'`;
|
|
58
59
|
}
|
|
59
60
|
const selection = light ? Object.fromEntries([
|
|
60
61
|
["id", idColumn(table)],
|
|
@@ -7,8 +7,10 @@ import {
|
|
|
7
7
|
decodeRows,
|
|
8
8
|
encodeColumnValues,
|
|
9
9
|
getRegistryEntry,
|
|
10
|
+
withContentDefaults,
|
|
10
11
|
withTimestamps
|
|
11
12
|
} from "../utils/registry.js";
|
|
13
|
+
import { isCollectionKind } from "../../shared/index.js";
|
|
12
14
|
import {
|
|
13
15
|
assertRelationTargets,
|
|
14
16
|
attachManyToMany,
|
|
@@ -19,13 +21,14 @@ import { requireAdmin } from "../utils/require-admin.js";
|
|
|
19
21
|
export default defineEventHandler(async (event) => {
|
|
20
22
|
await requireAdmin(event);
|
|
21
23
|
const { name, entry, table } = getRegistryEntry(event);
|
|
22
|
-
if (entry
|
|
24
|
+
if (!isCollectionKind(entry)) {
|
|
23
25
|
throw createError({ statusCode: 405, statusMessage: "Single objects are updated with PUT" });
|
|
24
26
|
}
|
|
25
27
|
const body = await readValidatedBody(event, buildValidator(entry).parse);
|
|
26
28
|
const { values, lists } = splitRelationValues(entry, encodeColumnValues(entry, body));
|
|
27
29
|
await assertRelationTargets(entry, lists);
|
|
28
30
|
if (entry.drafts) values.status ??= "draft";
|
|
31
|
+
withContentDefaults(entry, values);
|
|
29
32
|
const id = customId(entry.id);
|
|
30
33
|
values.id = id;
|
|
31
34
|
return mapConstraintErrors(async () => {
|
|
@@ -3,11 +3,12 @@ import { createError, defineEventHandler } from "h3";
|
|
|
3
3
|
import { useDb } from "#cms-db";
|
|
4
4
|
import { mapConstraintErrors } from "../utils/db-errors.js";
|
|
5
5
|
import { getRegistryEntry, idColumn, parseId } from "../utils/registry.js";
|
|
6
|
+
import { isCollectionKind } from "../../shared/index.js";
|
|
6
7
|
import { requireAdmin } from "../utils/require-admin.js";
|
|
7
8
|
export default defineEventHandler(async (event) => {
|
|
8
9
|
await requireAdmin(event);
|
|
9
10
|
const { entry, table } = getRegistryEntry(event);
|
|
10
|
-
if (entry
|
|
11
|
+
if (!isCollectionKind(entry)) {
|
|
11
12
|
throw createError({
|
|
12
13
|
statusCode: 405,
|
|
13
14
|
statusMessage: "Only collection entries can be deleted"
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
idColumn,
|
|
10
10
|
parseId,
|
|
11
11
|
requirePageRoute,
|
|
12
|
+
withContentDefaults,
|
|
12
13
|
withUpdatedAt
|
|
13
14
|
} from "../utils/registry.js";
|
|
14
15
|
import { pageFields } from "../../shared/index.js";
|
|
@@ -48,7 +49,7 @@ export default defineEventHandler(async (event) => {
|
|
|
48
49
|
encodeColumnValues(entry, body)
|
|
49
50
|
);
|
|
50
51
|
await assertRelationTargets(entry, lists);
|
|
51
|
-
const set = withUpdatedAt(table, values);
|
|
52
|
+
const set = withUpdatedAt(table, withContentDefaults(entry, values));
|
|
52
53
|
const [existing] = await useDb().select({ id: idColumn(table) }).from(table).where(eq(idColumn(table), id)).limit(1);
|
|
53
54
|
if (!existing) throw createError({ statusCode: 404, statusMessage: "Row not found" });
|
|
54
55
|
return mapConstraintErrors(async () => {
|
|
@@ -20,6 +20,8 @@ import { cmsDialect, useDb } from "#cms-db";
|
|
|
20
20
|
import * as cmsTables from "#cms-tables";
|
|
21
21
|
import { useRuntimeConfig } from "#imports";
|
|
22
22
|
import {
|
|
23
|
+
CONTENT_SLUG_FIELD,
|
|
24
|
+
CONTENT_PUBLISHED_AT_FIELD,
|
|
23
25
|
decodeTranslatableMedia,
|
|
24
26
|
entryFieldsFor,
|
|
25
27
|
hasTranslatableBlockFields,
|
|
@@ -29,6 +31,7 @@ import {
|
|
|
29
31
|
mediaPublicUrl,
|
|
30
32
|
mediaTypeFor,
|
|
31
33
|
pickTranslatedMedia,
|
|
34
|
+
publicBlocks,
|
|
32
35
|
translatableFieldKeys
|
|
33
36
|
} from "../../shared/index.js";
|
|
34
37
|
import {
|
|
@@ -41,6 +44,7 @@ import { normalizeTimestampFields } from "../../shared/timestamps.js";
|
|
|
41
44
|
import { useMediaIndex } from "./media-index.js";
|
|
42
45
|
import { readPages } from "./page-storage.js";
|
|
43
46
|
import { getContentI18n, resolveTable, tableColumns } from "./registry.js";
|
|
47
|
+
import { visibilityConditions } from "./visibility.js";
|
|
44
48
|
const MAX_LIMIT = 100;
|
|
45
49
|
const DEFAULT_LIMIT = 50;
|
|
46
50
|
const LOCALE = Symbol("locale");
|
|
@@ -85,9 +89,7 @@ function tableFor(name) {
|
|
|
85
89
|
return table;
|
|
86
90
|
}
|
|
87
91
|
function publishedFilter(entry, table) {
|
|
88
|
-
|
|
89
|
-
const status = tableColumns(table).status;
|
|
90
|
-
return status ? [eq(status, "published")] : [];
|
|
92
|
+
return visibilityConditions(entry, tableColumns(table));
|
|
91
93
|
}
|
|
92
94
|
function localeOf(parent) {
|
|
93
95
|
return parent[LOCALE] ?? getContentI18n().defaultLocale;
|
|
@@ -116,8 +118,9 @@ function localizeRow(entry, row, locale) {
|
|
|
116
118
|
result[key] = value?.[locale] ?? value?.[defaultLocale] ?? null;
|
|
117
119
|
}
|
|
118
120
|
for (const [key, field] of Object.entries(fields)) {
|
|
119
|
-
if (isPrivateField(field) ||
|
|
120
|
-
|
|
121
|
+
if (isPrivateField(field) || field.type !== "blocks") continue;
|
|
122
|
+
const visible = publicBlocks(field, result[key]);
|
|
123
|
+
result[key] = hasTranslatableBlockFields(field) ? localizeBlocks(field, visible, locale, defaultLocale) : visible;
|
|
121
124
|
}
|
|
122
125
|
return result;
|
|
123
126
|
}
|
|
@@ -162,7 +165,7 @@ function filterConditions(table, filters) {
|
|
|
162
165
|
}
|
|
163
166
|
return conditions;
|
|
164
167
|
}
|
|
165
|
-
function sortOrder(table, sort) {
|
|
168
|
+
function sortOrder(entry, table, sort) {
|
|
166
169
|
const order = [];
|
|
167
170
|
for (const part of sort ?? []) {
|
|
168
171
|
const column = columnFor(table, part.field);
|
|
@@ -170,7 +173,10 @@ function sortOrder(table, sort) {
|
|
|
170
173
|
order.push(part.direction === "desc" ? desc(column) : asc(column));
|
|
171
174
|
}
|
|
172
175
|
if (!order.length) {
|
|
173
|
-
const
|
|
176
|
+
const columns = tableColumns(table);
|
|
177
|
+
const published = entry.kind === "content" ? columns[CONTENT_PUBLISHED_AT_FIELD] : void 0;
|
|
178
|
+
if (published) order.push(desc(published));
|
|
179
|
+
const fallback = columns.createdAt ?? columns.id;
|
|
174
180
|
if (fallback) order.push(desc(fallback));
|
|
175
181
|
}
|
|
176
182
|
return order;
|
|
@@ -350,7 +356,7 @@ export function buildCmsSchema() {
|
|
|
350
356
|
const where = [...publishedFilter(entry, table), ...filterConditions(table, args.filters)];
|
|
351
357
|
const limit = Math.min(MAX_LIMIT, Math.max(0, args.limit ?? DEFAULT_LIMIT));
|
|
352
358
|
const offset = Math.max(0, args.offset ?? 0);
|
|
353
|
-
const rows = await useDb().select().from(table).where(where.length ? and(...where) : void 0).orderBy(...sortOrder(table, args.sort)).limit(limit).offset(offset);
|
|
359
|
+
const rows = await useDb().select().from(table).where(where.length ? and(...where) : void 0).orderBy(...sortOrder(entry, table, args.sort)).limit(limit).offset(offset);
|
|
354
360
|
return rows.map((row) => localizeRow(entry, row, locale));
|
|
355
361
|
};
|
|
356
362
|
queryResolvers[`${name}ById`] = async (_, args) => {
|
|
@@ -359,6 +365,15 @@ export function buildCmsSchema() {
|
|
|
359
365
|
const [row] = await useDb().select().from(table).where(and(eq(tableColumns(table).id, args.id), ...publishedFilter(entry, table))).limit(1);
|
|
360
366
|
return row ? localizeRow(entry, row, locale) : null;
|
|
361
367
|
};
|
|
368
|
+
if (entry.kind === "content") {
|
|
369
|
+
queryResolvers[`${name}BySlug`] = async (_, args) => {
|
|
370
|
+
const locale = resolveLocaleArg(args.locale);
|
|
371
|
+
const table = tableFor(name);
|
|
372
|
+
const slug = tableColumns(table)[CONTENT_SLUG_FIELD];
|
|
373
|
+
const [row] = await useDb().select().from(table).where(and(eq(slug, args.slug), ...publishedFilter(entry, table))).limit(1);
|
|
374
|
+
return row ? localizeRow(entry, row, locale) : null;
|
|
375
|
+
};
|
|
376
|
+
}
|
|
362
377
|
queryResolvers[`${name}Count`] = async (_, args) => {
|
|
363
378
|
const table = tableFor(name);
|
|
364
379
|
const where = [...publishedFilter(entry, table), ...filterConditions(table, args.filters)];
|
|
@@ -23,4 +23,5 @@ export declare function buildValidator(entry: CmsEntry, path?: string): z.ZodObj
|
|
|
23
23
|
export declare function requirePageRoute(entry: CmsEntry, key: string): CmsPageRoute;
|
|
24
24
|
export declare function encodeColumnValues(entry: CmsEntry, values: Record<string, unknown>): Record<string, unknown>;
|
|
25
25
|
export declare function decodeRows<T extends Record<string, unknown>>(entry: CmsEntry, rows: T[]): T[];
|
|
26
|
+
export declare function withContentDefaults(entry: CmsEntry, values: Record<string, unknown>): Record<string, unknown>;
|
|
26
27
|
export declare function parseId(event: H3Event): string;
|
|
@@ -4,6 +4,7 @@ import cmsConfig from "#cms-config";
|
|
|
4
4
|
import * as cmsTables from "#cms-tables";
|
|
5
5
|
import { useRuntimeConfig } from "#imports";
|
|
6
6
|
import {
|
|
7
|
+
CONTENT_PUBLISHED_AT_FIELD,
|
|
7
8
|
decodeEntryTranslatableMedia,
|
|
8
9
|
encodeEntryTranslatableMedia,
|
|
9
10
|
pageFields,
|
|
@@ -69,6 +70,11 @@ export function decodeRows(entry, rows) {
|
|
|
69
70
|
for (const row of rows) normalizeTimestampFields(row);
|
|
70
71
|
return decodeEntryTranslatableMedia(entry, rows, getContentI18n().defaultLocale);
|
|
71
72
|
}
|
|
73
|
+
export function withContentDefaults(entry, values) {
|
|
74
|
+
if (entry.kind !== "content" || values.status !== "published") return values;
|
|
75
|
+
if (!values[CONTENT_PUBLISHED_AT_FIELD]) values[CONTENT_PUBLISHED_AT_FIELD] = nowTimestamp();
|
|
76
|
+
return values;
|
|
77
|
+
}
|
|
72
78
|
export function parseId(event) {
|
|
73
79
|
return z.string().min(1).parse(getRouterParam(event, "id"));
|
|
74
80
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SQL } from 'drizzle-orm';
|
|
2
|
+
import type { AnySQLiteColumn } from 'drizzle-orm/sqlite-core';
|
|
3
|
+
import type { CmsEntry } from '../../shared/index.js';
|
|
4
|
+
export declare function visibilityConditions(entry: Pick<CmsEntry, 'kind' | 'drafts'>, columns: Record<string, AnySQLiteColumn>, now?: string): SQL[];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { eq, isNotNull, lte } from "drizzle-orm";
|
|
2
|
+
import { CONTENT_PUBLISHED_AT_FIELD } from "../../shared/index.js";
|
|
3
|
+
import { nowTimestamp } from "../../shared/timestamps.js";
|
|
4
|
+
export function visibilityConditions(entry, columns, now = nowTimestamp()) {
|
|
5
|
+
if (!entry.drafts) return [];
|
|
6
|
+
const conditions = [];
|
|
7
|
+
if (columns.status) conditions.push(eq(columns.status, "published"));
|
|
8
|
+
const publishedAt = columns[CONTENT_PUBLISHED_AT_FIELD];
|
|
9
|
+
if (entry.kind === "content" && publishedAt)
|
|
10
|
+
conditions.push(isNotNull(publishedAt), lte(publishedAt, now));
|
|
11
|
+
return conditions;
|
|
12
|
+
}
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
PAGE_PATH_FIELD,
|
|
3
3
|
blockTypeName,
|
|
4
4
|
blocksFieldTypeName,
|
|
5
|
+
isCollectionKind,
|
|
5
6
|
isPrivateField,
|
|
6
7
|
isRequiredField,
|
|
7
8
|
isTranslatableField,
|
|
@@ -72,7 +73,7 @@ function entrySdl(config, name, entry) {
|
|
|
72
73
|
if (isPrivateField(field)) continue;
|
|
73
74
|
lines.push(fieldSdl(config, name, key, field));
|
|
74
75
|
}
|
|
75
|
-
if (entry
|
|
76
|
+
if (isCollectionKind(entry)) lines.push(" createdAt: String!");
|
|
76
77
|
lines.push(" updatedAt: String!");
|
|
77
78
|
return `type ${typeName(name)} {
|
|
78
79
|
${lines.join("\n")}
|
|
@@ -171,6 +172,8 @@ export function renderGraphqlSdl(config) {
|
|
|
171
172
|
);
|
|
172
173
|
queryLines.push(` ${name}ById(id: ID!, locale: String): ${gqlType}`);
|
|
173
174
|
queryLines.push(` ${name}Count(filters: ${gqlType}Filters): Int!`);
|
|
175
|
+
if (entry.kind === "content")
|
|
176
|
+
queryLines.push(` ${name}BySlug(slug: String!, locale: String): ${gqlType}`);
|
|
174
177
|
}
|
|
175
178
|
return [
|
|
176
179
|
...COMMON_SDL,
|