:root { color-scheme: dark; --nodedc-component-accent-rgb: 247 248 244; --nodedc-component-on-accent-rgb: 11 17 23; --nodedc-on-accent-rgb: 11 17 23; --launcher-radius-modal: 1.75rem; --launcher-radius-card: 1.35rem; --launcher-radius-control: 1.25rem; --launcher-radius-circle: 999px; --nodedc-shell-padding-x: 1.25rem; --nodedc-shell-padding-top: 1rem; --nodedc-shell-padding-bottom: 0.75rem; --nodedc-shell-frame-gutter-x: 18px; --nodedc-shell-height: 4.25rem; --nodedc-shell-row-height: 3rem; --nodedc-shell-logo-width: 7.25rem; --nodedc-shell-logo-height: 1.79rem; --nodedc-shell-pill-height: 3.45rem; --nodedc-shell-pill-padding: 0.32rem; --nodedc-shell-control-height: 2.78rem; --admin-nav-width: clamp(20.75rem, 19.5vw, 22rem); --admin-nav-pad: 1.1rem; --admin-panel-gap: 1.25rem; --admin-control-ring: 2.78rem; --admin-control-inset: 5px; --surface-base: rgba(8, 8, 11, 0.78); --surface-strong: rgba(8, 8, 11, 0.9); --surface-soft: rgba(255, 255, 255, 0.08); --field: rgba(255, 255, 255, 0.06); --text-primary: #f7f8f4; --text-secondary: rgba(247, 248, 244, 0.72); --text-muted: rgba(247, 248, 244, 0.48); --danger: #ff7474; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } * { box-sizing: border-box; } html, body { min-height: 100%; background: #050506; } body { margin: 0; min-height: 100vh; overflow: hidden; color: var(--text-primary); font-family: inherit; font-synthesis: none; -webkit-font-smoothing: antialiased; } button, input, textarea, select { font: inherit; outline: none; } button { border: 0; cursor: pointer; } a { color: inherit; text-decoration: none; } button:disabled, input:disabled, textarea:disabled { cursor: not-allowed; opacity: 0.42; } h1, h2, h3, p { margin: 0; letter-spacing: 0; } .admin-backdrop { position: fixed; inset: 0; background: #050506; } .nodedc-expanded-toolbar-shell { position: relative; z-index: 80; width: min(100%, calc(100vw - var(--nodedc-shell-frame-gutter-x))); margin-inline: auto; flex-shrink: 0; padding: var(--nodedc-shell-padding-top) var(--nodedc-shell-padding-x) var(--nodedc-shell-padding-bottom); } .nodedc-expanded-toolbar { display: flex; min-height: var(--nodedc-shell-height); width: 100%; flex-direction: column; } .nodedc-expanded-toolbar-top { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); min-height: var(--nodedc-shell-row-height); width: 100%; align-items: center; gap: 1rem; } .nodedc-expanded-toolbar-left, .nodedc-expanded-toolbar-center, .nodedc-expanded-toolbar-right { display: flex; min-width: 0; align-items: center; gap: 0.75rem; } .nodedc-expanded-toolbar-left { justify-content: flex-start; } .nodedc-expanded-toolbar-center { justify-content: center; } .nodedc-expanded-toolbar-right { justify-content: flex-end; } .nodedc-expanded-brand-link { display: inline-flex; width: var(--nodedc-shell-logo-width); height: var(--nodedc-shell-logo-height); flex: 0 0 auto; align-items: center; justify-content: flex-start; line-height: 0; } .nodedc-expanded-brand-logo { display: block; width: 100%; height: 100%; object-fit: contain; } .nodedc-expanded-workspace-button { position: relative; display: flex; width: 3rem; min-width: 3rem; max-width: 3rem; height: 3rem; min-height: 3rem; max-height: 3rem; flex: 0 0 3rem; align-items: center; justify-content: center; overflow: hidden; border-radius: 999px; background: #000; padding: 0; } .nodedc-expanded-workspace-avatar { display: block; width: 100%; height: 100%; border-radius: inherit; object-fit: cover; } .nodedc-expanded-nav-group, .nodedc-expanded-user-group { display: inline-flex; min-height: var(--nodedc-shell-pill-height); align-items: center; gap: 0.18rem; border-radius: 999px; background: rgba(64, 64, 64, 0.48); padding: var(--nodedc-shell-pill-padding); user-select: none; } .nodedc-expanded-user-group { gap: 0.22rem; } .nodedc-expanded-nav-button { position: relative; display: inline-flex; min-height: var(--nodedc-shell-control-height); align-items: center; justify-content: center; border-radius: 999px; background: transparent; color: rgba(255, 255, 255, 0.68); padding: 0.2rem 1.22rem; font-size: 0.74rem; font-weight: 760; line-height: 1; white-space: nowrap; transition: background-color 160ms ease, color 160ms ease, opacity 160ms ease; } .nodedc-expanded-nav-button:hover { background: rgba(255, 255, 255, 0.07); color: rgba(255, 255, 255, 0.96); } .nodedc-expanded-nav-button[data-active="true"] { background: rgba(255, 255, 255, 0.92); color: rgba(8, 8, 10, 0.96); } .nodedc-toolbar-icon-button { display: inline-grid; width: var(--nodedc-shell-control-height); height: var(--nodedc-shell-control-height); place-items: center; border-radius: 999px; background: transparent; color: rgba(255, 255, 255, 0.72); font-size: 0.82rem; } .nodedc-expanded-profile-trigger { display: inline-flex; align-items: center; gap: 0.22rem; border-radius: 999px; } .nodedc-expanded-user-avatar-button, .nodedc-expanded-user-avatar { display: grid; width: var(--nodedc-shell-control-height); height: var(--nodedc-shell-control-height); place-items: center; border-radius: 999px; } .nodedc-expanded-user-avatar { background: radial-gradient(circle at 70% 18%, rgba(255, 255, 255, 0.8), transparent 24%), linear-gradient(135deg, #c8c9cb, #8d8f96 55%, #f1f1f1); color: rgba(8, 8, 10, 0.96); font-size: 0.74rem; font-weight: 850; } .admin-shell { position: relative; z-index: 1; display: grid; grid-template-columns: var(--admin-nav-width) minmax(0, 1fr); gap: var(--admin-panel-gap); width: min(94rem, calc(100vw - 2.5rem)); height: min(calc(100vh - 6.65rem), 52rem); margin: 0 auto 1.25rem; overflow: visible; } .sidebar, .editor { min-width: 0; min-height: 0; border-radius: var(--launcher-radius-card); background: linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0.012)), rgba(10, 10, 13, 0.88); box-shadow: 0 34px 110px rgba(0, 0, 0, 0.52); backdrop-filter: blur(28px); -webkit-backdrop-filter: blur(28px); } .sidebar { position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 1.05rem; overflow: hidden; padding: var(--admin-nav-pad); } .sidebar-head { position: relative; display: grid; gap: 1.05rem; padding: 0.42rem 0 0; } .sidebar-head h1 { margin-top: 0.35rem; font-size: 1.15rem; line-height: 1.1; } .admin-panel-close { position: absolute; top: var(--admin-control-inset); right: var(--admin-control-inset); display: grid; width: var(--admin-control-ring); height: var(--admin-control-ring); place-items: center; border: 1px solid rgba(255, 255, 255, 0.22); border-radius: var(--launcher-radius-circle); background: transparent; color: rgba(255, 255, 255, 0.8); font-size: 1.25rem; line-height: 1; } .admin-panel-close:hover { border-color: rgba(255, 255, 255, 0.3); background: rgba(255, 255, 255, 0.07); color: var(--text-primary); } .workspace-card, .admin-panel-client-select { position: relative; display: flex; width: calc(100% + (var(--admin-nav-pad) * 2)); min-height: calc(var(--admin-control-ring) + (var(--admin-control-inset) * 2)); margin-inline: calc(var(--admin-nav-pad) * -1); align-items: center; gap: 0.65rem; overflow: hidden; border-radius: var(--launcher-radius-circle); background: rgba(255, 255, 255, 0.04); padding: var(--admin-control-inset); color: rgba(255, 255, 255, 0.66); opacity: 0.82; } .workspace-logo, .empty-icon, .admin-panel-client-select__icon, .block-icon { display: grid; width: var(--admin-control-ring); height: var(--admin-control-ring); place-items: center; flex: 0 0 auto; border-radius: var(--launcher-radius-circle); background: rgba(255, 255, 255, 0.055); color: rgba(255, 255, 255, 0.58); font-size: 0.7rem; font-weight: 850; } .workspace-name { overflow: hidden; color: var(--text-primary); font-size: 0.92rem; font-weight: 820; text-overflow: ellipsis; white-space: nowrap; } .workspace-role, .breadcrumb, .panel-note, .field-path, .block-meta, .group-desc, .status, .empty-state p { color: var(--text-muted); } .workspace-role { margin-top: 0.12rem; font-size: 0.72rem; font-weight: 750; } .regions { display: grid; align-content: start; gap: 1.2rem; min-height: 0; overflow: auto; padding-bottom: 1rem; } .region-title { margin: 0 0 0.48rem; padding-inline: 0.35rem; color: var(--text-muted); font-size: 0.68rem; font-weight: 850; letter-spacing: 0.12em; text-transform: uppercase; } .block-list { display: grid; width: calc(100% + (var(--admin-nav-pad) * 2)); margin-inline: calc(var(--admin-nav-pad) * -1); gap: 0.22rem; } .block-btn { position: relative; display: grid; grid-template-columns: var(--admin-control-ring) minmax(0, 1fr); width: 100%; min-height: calc(var(--admin-control-ring) + (var(--admin-control-inset) * 2)); align-items: center; gap: 0.86rem; border-radius: var(--launcher-radius-circle); background: rgba(255, 255, 255, 0.04); color: rgba(255, 255, 255, 0.66); opacity: 0.66; padding: var(--admin-control-inset) 0.9rem var(--admin-control-inset) var(--admin-control-inset); text-align: left; transition: background 160ms ease, color 160ms ease, opacity 160ms ease, transform 160ms ease, box-shadow 160ms ease; } .block-btn:hover { background: rgba(255, 255, 255, 0.085); color: var(--text-primary); opacity: 0.92; transform: translateY(-1px); } .block-btn.active { background: rgba(255, 255, 255, 0.115); color: var(--text-primary); opacity: 1; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.048), 0 10px 22px rgba(0, 0, 0, 0.12); } .block-btn.active .block-icon { background: rgba(247, 248, 244, 0.96); color: rgb(var(--nodedc-on-accent-rgb)); } .block-btn.disabled { opacity: 0.3; } .block-copy { display: grid; min-width: 0; gap: 0.12rem; } .block-name { overflow: hidden; font-size: 0.91rem; font-weight: 760; text-overflow: ellipsis; white-space: nowrap; } .block-meta { overflow: hidden; font-size: 0.72rem; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; } .editor { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; overflow: hidden; padding: 1rem; font-size: 0.875rem; } .editor-head, .actions, .button-row, .toggle-row, .card-head, .panel-head, .group-head { display: flex; align-items: center; } .editor-head { justify-content: space-between; gap: 1rem; padding: 0.35rem 0.35rem 0.95rem; } .editor-head h1 { color: var(--text-muted); font-size: 0.72rem; font-weight: 850; letter-spacing: 0.12em; line-height: 1.2; text-transform: uppercase; } .breadcrumb { margin-top: 0.34rem; font-size: 0.74rem; line-height: 1.35; } .editor-head h2 { margin-top: 0.68rem; font-size: 1.15rem; font-weight: 850; line-height: 1.12; } .actions, .button-row { gap: 0.55rem; flex-wrap: wrap; justify-content: flex-end; } .primary-btn, .ghost-btn, .danger-btn, .icon-btn { display: inline-flex; min-height: var(--nodedc-shell-control-height); align-items: center; justify-content: center; gap: 0.45rem; border-radius: var(--launcher-radius-circle); padding: 0 1.05rem; font-size: 0.78rem; font-weight: 850; transition: background 160ms ease, color 160ms ease, transform 160ms ease, opacity 160ms ease; } .primary-btn { min-width: 9rem; background: rgba(255, 255, 255, 0.92); color: rgba(8, 8, 10, 0.96); } .ghost-btn, .icon-btn { background: rgba(255, 255, 255, 0.075); color: var(--text-primary); } .danger-btn { background: transparent; color: var(--text-primary); } .primary-btn:hover, .ghost-btn:hover, .danger-btn:hover, .icon-btn:hover { transform: translateY(-1px); } .ghost-btn:hover, .icon-btn:hover, .danger-btn:hover { background: rgba(255, 255, 255, 0.12); } .icon-btn { width: var(--nodedc-shell-control-height); padding: 0; } .empty-state { display: grid; grid-template-columns: 3rem minmax(0, 1fr); align-self: start; gap: 1rem; margin: 1.4rem 0.35rem 0; padding: 1.15rem; border-radius: var(--launcher-radius-card); background: rgba(255, 255, 255, 0.045); } .empty-state h3 { font-size: 1.02rem; line-height: 1.25; } .empty-state p { margin-top: 0.35rem; font-size: 0.84rem; font-weight: 650; line-height: 1.45; } .block-form { display: grid; min-height: 0; overflow: auto; gap: 1rem; padding: 0 0.2rem 5rem; scrollbar-color: rgba(255, 255, 255, 0.25) transparent; } .hidden { display: none !important; } .settings-card, .content-panel, .json-details, .content-group { border-radius: var(--launcher-radius-card); background: rgba(255, 255, 255, 0.045); } .settings-card { padding: 1rem; } .card-head, .panel-head, .group-head { justify-content: space-between; gap: 1rem; } .card-head h3, .panel-head h3, .group-head h3 { color: var(--text-primary); font-size: 1rem; font-weight: 850; line-height: 1.2; } .section-kicker { margin-bottom: 0.32rem; color: var(--text-muted); font-size: 0.72rem; font-weight: 850; letter-spacing: 0.08em; text-transform: uppercase; } .field-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; margin-top: 1rem; } .content-panel { display: grid; gap: 1rem; padding: 1rem; } .panel-note { max-width: 24rem; font-size: 0.8rem; font-weight: 650; line-height: 1.35; text-align: right; } .content-fields { display: grid; gap: 1rem; } .content-group { display: grid; gap: 1rem; padding: 1rem; } .group-desc { margin-top: 0.22rem; font-size: 0.78rem; font-weight: 650; line-height: 1.35; } .group-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; } .field-control { display: grid; min-width: 0; gap: 0.38rem; color: var(--text-muted); font-size: 0.72rem; font-weight: 800; text-transform: uppercase; } .field-control.wide { grid-column: 1 / -1; } .field-label-row { display: flex; min-width: 0; align-items: center; justify-content: space-between; gap: 0.75rem; } .field-label-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .field-kind { flex: 0 0 auto; border-radius: 999px; background: rgba(255, 255, 255, 0.07); color: var(--text-muted); font-size: 0.64rem; font-weight: 820; letter-spacing: 0.04em; padding: 0.18rem 0.42rem; text-transform: uppercase; } .field-path { overflow: hidden; font-size: 0.68rem; font-weight: 600; text-overflow: ellipsis; text-transform: none; white-space: nowrap; } input, textarea { width: 100%; border: 0; border-radius: 1rem; background: var(--field); color: var(--text-primary); padding: 0.75rem 0.85rem; } input:focus, textarea:focus { background: rgba(255, 255, 255, 0.1); box-shadow: none; } textarea { min-height: 8rem; resize: vertical; } .toggle-row { justify-content: flex-start; gap: 0.65rem; color: var(--text-secondary); font-size: 0.82rem; font-weight: 800; } .toggle-row input { width: 2.7rem; height: 1.45rem; margin: 0; appearance: none; border-radius: 999px; background: rgba(255, 255, 255, 0.14); padding: 0.18rem; } .toggle-row input::before { display: block; width: 1.08rem; aspect-ratio: 1; border-radius: 50%; background: rgba(255, 255, 255, 0.82); content: ""; transition: transform 0.16s ease; } .toggle-row input:checked { background: rgba(255, 255, 255, 0.92); } .toggle-row input:checked::before { background: #050506; transform: translateX(1.22rem); } .empty-note { color: var(--text-muted); font-size: 0.86rem; font-weight: 650; line-height: 1.42; } .service-media-field { min-width: 0; } .service-media-control { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; min-height: 3.35rem; gap: 0.22rem; overflow: hidden; border-radius: var(--launcher-radius-circle); background: rgba(255, 255, 255, 0.06); padding: 0.25rem; } .service-media-file-control { display: flex; min-width: 0; height: 100%; align-items: center; gap: 0.7rem; padding-left: 0.15rem; } .service-media-file-control input[type="file"], .service-media-hidden-input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; } .service-media-file-button { display: inline-flex; min-height: 2.78rem; align-items: center; justify-content: center; border-radius: var(--launcher-radius-circle); background: rgba(255, 255, 255, 0.92); color: rgba(8, 8, 10, 0.96); padding: 0 1rem; font-size: 0.78rem; font-weight: 850; text-transform: none; white-space: nowrap; cursor: pointer; } .service-media-file-button:hover { background: #fff; } .service-media-file-name { min-width: 0; overflow: hidden; color: var(--text-muted); font-size: 0.78rem; font-weight: 650; text-overflow: ellipsis; text-transform: none; white-space: nowrap; } .service-media-url-input { min-width: 0; height: 100%; border-radius: var(--launcher-radius-circle); background: transparent; padding: 0 0.82rem; } .service-media-source-switch { display: inline-flex; align-items: center; gap: 0.12rem; } .service-media-source-button { display: grid; width: 2.78rem; height: 2.78rem; place-items: center; border: 1px solid rgba(255, 255, 255, 0.18); border-radius: var(--launcher-radius-circle); background: transparent; color: rgba(255, 255, 255, 0.66); } .service-media-source-button:hover { background: rgba(255, 255, 255, 0.07); color: var(--text-primary); } .service-media-source-button[data-active="true"] { border-color: rgba(255, 255, 255, 0.92); background: rgba(255, 255, 255, 0.92); color: rgba(8, 8, 10, 0.96); } .service-media-preview { position: relative; display: grid; width: 2.78rem; min-width: 2.78rem; height: 2.78rem; place-items: center; overflow: hidden; border-radius: var(--launcher-radius-circle); background: rgba(255, 255, 255, 0.055); color: rgba(255, 255, 255, 0.62); font-size: 0.78rem; text-transform: none; } .service-media-preview img, .service-media-preview video { position: absolute; inset: 0; display: block; width: 100%; height: 100%; border-radius: inherit; object-fit: cover; } .media-upload-error { color: #ffd2d2; font-size: 0.72rem; font-weight: 750; text-transform: none; } .json-details { padding: 1rem; } .json-details summary { cursor: pointer; color: var(--text-secondary); font-size: 0.86rem; font-weight: 800; } .json-field { display: grid; gap: 0.7rem; margin-top: 1rem; color: var(--text-muted); font-size: 0.82rem; font-weight: 720; } .json-field textarea { min-height: 24rem; font-family: "SFMono-Regular", Consolas, monospace; font-size: 0.8rem; line-height: 1.45; } .status { min-height: 1.25rem; margin: 0.8rem 0.35rem 0; overflow: hidden; font-size: 0.78rem; font-weight: 650; line-height: 1.35; text-overflow: ellipsis; white-space: pre-wrap; } @media (max-width: 1100px) { body { overflow: auto; } .nodedc-expanded-toolbar-top { grid-template-columns: 1fr; justify-items: center; } .nodedc-expanded-toolbar-center { width: 100%; justify-content: flex-start; justify-self: stretch; overflow-x: auto; } .nodedc-expanded-nav-group { max-width: 100%; overflow-x: auto; } .nodedc-expanded-toolbar-left, .nodedc-expanded-toolbar-right { display: none; } .admin-shell { grid-template-columns: 1fr; width: min(100vw - 1.5rem, 58rem); height: auto; min-height: calc(100vh - 6rem); } .sidebar { max-height: 38vh; } .editor { min-height: 62vh; } .editor-head { align-items: flex-start; flex-direction: column; } .actions { justify-content: flex-start; } } @media (max-width: 720px) { .nodedc-expanded-toolbar-shell { width: 100%; padding-inline: 0.75rem; } .admin-shell { width: 100vw; min-height: calc(100vh - 5.25rem); margin: 0; gap: 0.75rem; padding: 0 0.75rem 0.75rem; } .field-grid, .group-grid { grid-template-columns: 1fr; } .panel-head, .card-head, .group-head { align-items: flex-start; flex-direction: column; } .panel-note { text-align: left; } .service-media-control { grid-template-columns: minmax(0, 1fr) auto; } .service-media-preview { display: none; } }