Files
short-drama-agent-front/src/admin.css
T

1497 lines
32 KiB
CSS

/* 管理后台视口边界:document 不滚动,各个工作区和面板独立滚动。 */
:root {
--app-ink: #191919;
--app-muted: #707070;
--app-body: #ededed;
--app-surface: #ffffff;
--app-subtle: #f7f7f7;
--app-control: #f0f0f0;
--app-control-hover: #e5e5e5;
--app-field: #ffffff;
--app-field-hover: #ffffff;
--app-border: #e5e5e5;
--app-inverse: #ffffff;
--app-accent: #07c160;
--app-accent-hover: #2dcb79;
--app-accent-text: #087c42;
--app-on-accent: #ffffff;
--app-button-primary: #078640;
--app-button-hover: #087c42;
--app-button-pressed: #066b36;
--app-disabled-bg: #e4e4e4;
--app-disabled-text: #8c8c8c;
--app-selected: #e4f4e9;
--app-shadow: #00000018;
--app-danger: #a93232;
--app-success: #087c42;
}
:root[data-theme='dark'] {
--app-ink: #d9d9d9;
--app-muted: #a3a3a3;
--app-body: #111111;
--app-surface: #191919;
--app-subtle: #232323;
--app-control: #2b2b2b;
--app-control-hover: #353535;
--app-field: #2b2b2b;
--app-field-hover: #353535;
--app-disabled-bg: #303030;
--app-disabled-text: #808080;
--app-border: #333333;
--app-inverse: #111111;
--app-accent-text: #5cd693;
--app-selected: #173527;
--app-shadow: #00000055;
--app-danger: #fa7373;
--app-success: #5cd693;
}
html,
body,
#app,
.app-provider {
height: 100%;
min-height: 0;
overflow: hidden;
}
html {
background: var(--app-body);
}
body {
margin: 0;
}
.admin-layout {
height: 100dvh;
overflow: hidden;
}
.admin-main {
min-width: 0;
height: 100%;
}
.admin-main > .n-layout-scroll-container {
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
.admin-sider {
height: 100%;
}
/* 外壳固定品牌与底部设置;只有菜单自身使用 NScrollbar 滚动。 */
.admin-sider-content {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
overflow: hidden;
}
.admin-nav-scroll.n-scrollbar {
flex: 1;
min-height: 0;
}
.admin-sider-footer {
flex-shrink: 0;
padding-block: 8px max(8px, env(safe-area-inset-bottom));
}
.n-button.admin-settings-button {
justify-content: flex-start;
height: 44px;
padding-inline: 20px;
}
.n-button.admin-settings-button.is-collapsed {
justify-content: center;
padding-inline: 0;
width: 44px;
min-width: 44px;
height: 44px;
margin-inline: auto;
}
.admin-settings-button.is-collapsed .n-button__icon {
margin: 0;
}
/* Naive 菜单背景默认左右内缩 8px;只铺满导航行,不改图标与文字缩进。 */
.admin-sider .n-menu .n-menu-item-content::before {
left: 0;
right: 0;
border-radius: 0;
}
.admin-brand {
display: flex;
flex-shrink: 0;
align-items: center;
gap: 12px;
height: 74px;
padding: 0 20px;
color: var(--app-ink);
white-space: nowrap;
}
.admin-brand > svg {
flex-shrink: 0;
}
.admin-brand span {
font-size: 15px;
font-weight: 600;
}
.admin-brand small {
display: block;
font-size: 8px;
letter-spacing: 1px;
font-weight: 400;
color: var(--app-muted);
margin-top: 3px;
}
.admin-topbar {
display: flex;
align-items: center;
justify-content: space-between;
flex-shrink: 0;
height: 44px;
padding: 0 20px;
gap: 12px;
}
/* 按钮保持直角,单图标按钮以 Naive 当前尺寸为边长,加载时也不改变宽度。 */
.n-button {
border-radius: 0;
}
.n-button.icon-button {
width: var(--n-height);
min-width: var(--n-height);
height: var(--n-height);
padding: 0;
flex: 0 0 auto;
}
.n-button.icon-button .n-button__icon {
margin: 0;
}
.n-button:focus-visible {
outline: 2px solid var(--app-accent-text);
outline-offset: 2px;
}
.admin-sider .n-menu-divider {
height: 12px;
background: transparent;
}
.workspace-tools-drawer .n-drawer-header,
.workspace-tools-drawer .n-drawer-footer {
background: var(--app-subtle);
}
.workspace-tools-drawer .n-drawer-body {
background: var(--app-body);
}
.n-button.theme-toggle {
flex-shrink: 0;
width: 34px;
height: 34px;
}
.admin-content {
flex: 1;
min-height: 0;
min-width: 0;
overflow: hidden;
outline: none;
}
.project-frame {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
overflow: hidden;
}
.project-header {
flex-shrink: 0;
padding: 9px 20px;
background: var(--app-surface);
}
.project-header .n-page-header__main,
.project-header .n-page-header__title {
min-width: 0;
overflow: hidden;
}
.project-title {
max-width: 100%;
font-size: 16px;
font-weight: 600;
}
.project-notices.n-scrollbar {
flex-shrink: 0;
height: auto;
max-height: 100px;
overflow: hidden;
}
.project-notices-content {
padding: 8px 24px;
display: grid;
gap: 5px;
}
.project-notices .n-alert {
padding: 7px 12px;
font-size: 12px;
}
.project-view {
flex: 1;
min-height: 0;
overflow: hidden;
}
/* 标题移除额外按钮后让名称使用剩余空间;未完成项目的引导仍留在内容区。 */
.project-header .n-page-header-wrapper {
min-width: 0;
}
.project-access-gate {
height: 100%;
}
.app-dialog {
--app-field: var(--app-control);
--app-field-hover: var(--app-control-hover);
}
.workspace-page {
position: relative;
height: 100%;
display: flex;
flex-direction: column;
min-height: 0;
overflow: hidden;
}
.workspace-heading-scroll.n-scrollbar {
flex-shrink: 0;
height: auto;
max-height: min(35dvh, 260px);
overflow: hidden;
}
.workspace-heading {
padding: 16px 24px 12px;
}
/* 常用工具固定在滚动区外;低频操作使用局部抽屉,不叠加占高面板。 */
.content-first-workspace .workspace-heading {
padding: 8px 20px;
}
.content-first-workspace .workspace-split {
padding: 0 20px 12px;
gap: 8px;
}
.content-first-workspace .workspace-scroll-content {
padding: 0 20px 16px;
}
.workspace-toolbar {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px 16px;
min-height: 34px;
}
.toolbar-episode {
display: flex;
align-items: center;
gap: 8px;
flex: 0 1 340px;
min-width: 180px;
font-size: 12px;
}
.toolbar-episode .n-select {
min-width: 0;
}
.toolbar-metrics,
.toolbar-summary {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px 16px;
color: var(--app-muted);
font-size: 12px;
line-height: 1.6;
}
.toolbar-actions {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 10px;
margin-left: auto;
}
.toolbar-type-filter {
width: 152px;
}
.workspace-tools-drawer {
max-width: 100%;
}
.workspace-tools-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
width: 100%;
font-size: 15px;
}
.workspace-tools-body {
padding: 20px;
}
/* 身份说明与折叠入口分开,避免正文紧贴下一组操作。 */
.identity-tools-intro {
margin-bottom: 24px;
}
.workspace-tools-body .storyboard-controls,
.workspace-tools-body .production-controls {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: 16px;
margin-block: 20px;
}
/* 与 34px 中号输入框共用一行;不再通过 pb-2 / pb-3 手动垫高复选框。 */
.n-checkbox.control-row-checkbox {
align-self: end;
align-items: center;
min-height: 34px;
padding-block: 0;
}
.control-row-checkbox .n-checkbox-box-wrapper {
align-self: center;
}
.workspace-tools-body .storyboard-coverage {
margin-block: 20px;
}
.workspace-tools-body .generation-row {
display: block;
}
.workspace-tools-body .generation-row > div + div {
margin-top: 14px;
}
.workspace-tools-body .production-pipeline {
grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr));
}
.workspace-inline-status {
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-between;
gap: 8px 16px;
padding: 7px 12px;
flex-shrink: 0;
border-radius: 0;
background: var(--app-subtle);
font-size: 12px;
}
.confirm-action {
display: inline-flex;
align-items: center;
max-width: 100%;
}
.production-pipeline-card > .confirm-action {
margin-block: 16px 4px;
}
.gallery-workspace-page .form-image-filter-region {
margin-block: 10px 0;
}
.workspace-heading h2 {
font-size: 16px;
}
.workspace-heading .text-sm {
font-size: 12px;
}
.workspace-heading .production-controls {
gap: 12px;
}
.workspace-heading .n-input-number {
width: 100%;
}
.workspace-scroll {
flex: 1;
min-height: 0;
}
.workspace-scroll-content {
padding: 4px 24px 24px;
}
.workspace-scroll > .n-scrollbar-container {
overscroll-behavior: contain;
}
.workspace-split {
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
overflow: hidden;
padding: 4px 24px 20px;
gap: 12px;
}
.workspace-split > .my-6 {
margin: 0;
flex-shrink: 0;
}
.workspace-feedback.n-scrollbar {
flex-shrink: 0;
height: auto;
max-height: min(24dvh, 160px);
overflow: hidden;
}
.workspace-feedback .n-alert + .n-alert {
margin-top: 8px;
}
.script-section {
flex: 1;
display: flex;
flex-direction: column;
min-height: 0;
}
.script-section > :first-child {
flex-shrink: 0;
}
.script-section .content-with-history {
flex: 1;
height: auto;
min-height: 0;
}
.script-workspace-page .workspace-split > :not(.script-section) {
flex-shrink: 0;
}
.storyboard-workspace-page .storyboard-workspace {
flex: 1;
height: auto;
min-height: 0;
overflow: hidden;
}
.storyboard-coverage {
flex-shrink: 0;
}
.overview-content {
padding-bottom: 8px;
}
.workspace-loading {
display: grid;
place-content: center;
height: 100%;
}
.production-workspace,
.identity-workspace {
flex: 1;
min-height: 0;
align-items: stretch;
overflow: hidden;
}
.production-workspace,
.identity-workspace,
.storyboard-workspace {
grid-template-columns: clamp(240px, 22%, 280px) minmax(0, 1fr);
}
.production-shot-list {
max-height: none;
overflow: hidden;
min-height: 0;
}
.production-workspace > article {
overflow: hidden;
min-height: 0;
overscroll-behavior: contain;
}
.identity-workspace > div {
min-height: 0;
overflow: hidden;
overscroll-behavior: contain;
}
.identity-subject-list {
max-height: none;
min-height: 0;
flex: 1;
}
.storyboard-workspace {
height: clamp(360px, 65dvh, 850px);
min-height: 0;
}
.storyboard-workspace > article,
.storyboard-workspace .shot-list {
overflow: hidden;
min-height: 0;
height: 100%;
max-height: none;
}
/* 目录统一为固定标题/筛选区和独立滚动列表;不再依赖按钮的默认行高与内边距。 */
.directory-panel {
--app-field: var(--app-surface);
--app-field-hover: var(--app-surface);
display: flex;
flex-direction: column;
min-width: 0;
min-height: 0;
padding: 0;
overflow: hidden;
background: var(--app-subtle);
}
.directory-heading {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
flex-shrink: 0;
gap: 8px;
padding: 18px 16px 14px;
font-size: 11px;
color: var(--app-muted);
}
.directory-heading h3 {
font-size: 13px;
font-weight: 600;
color: var(--app-ink);
}
.directory-heading h3 span {
margin-left: 8px;
font-size: 11px;
font-weight: 400;
color: var(--app-muted);
}
.directory-filters {
display: grid;
gap: 10px;
padding: 0 12px 12px;
flex-shrink: 0;
}
.directory-filters > * {
min-width: 0;
}
.directory-scroll {
flex: 1;
}
.directory-list-content {
display: flex;
flex-direction: column;
gap: 8px;
padding: 8px 0 16px;
}
.directory-group-heading {
position: sticky;
top: 0;
z-index: 1;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-shrink: 0;
padding: 10px 14px;
background: var(--app-control);
font:
600 11px/1.6 ui-monospace,
monospace;
color: var(--app-ink);
}
.directory-group-count {
font-weight: 400;
color: var(--app-muted);
}
.beat-directory-group {
min-width: 0;
}
.beat-directory-items {
display: flex;
flex-direction: column;
}
.directory-mobile-beat {
display: none;
}
.shot-list-content,
.production-shot-list-content {
gap: 12px;
padding: 0 0 12px;
}
.n-button.directory-item {
display: flex;
flex-shrink: 0;
width: 100%;
height: auto;
min-height: 88px;
padding: 12px 14px;
border-radius: 0;
white-space: normal;
text-align: left;
}
.n-button.directory-item .n-button__content {
display: block;
width: 100%;
min-width: 0;
}
.directory-item-body {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 7px;
min-width: 0;
}
/* 可选前导内容用于主体母版,不改变剧集与镜头目录的原有排版。 */
.n-button.directory-item.has-leading .n-button__content {
display: flex;
align-items: center;
gap: 12px;
}
.directory-item-leading {
display: flex;
flex-shrink: 0;
}
.directory-item.has-leading .directory-item-body {
flex: 1;
}
.identity-subject-list-content {
gap: 2px;
padding: 0 0 8px;
}
.n-button.identity-subject-item {
min-height: 86px;
padding: 10px 14px;
}
.n-button.identity-subject-item:not(.selected) {
background: var(--app-surface);
}
.n-button.identity-subject-item:not(.selected):hover {
background: var(--app-subtle);
}
.identity-subject-item .directory-item-body {
gap: 3px;
}
.identity-subject-item .directory-item-title {
order: 0;
font-size: 14px;
font-weight: 600;
}
.identity-subject-item .directory-item-eyebrow {
order: 1;
font-size: 10px;
}
.identity-subject-item .directory-item-meta {
order: 2;
gap: 4px 6px;
font-size: 10px;
}
.identity-thumbnail {
display: flex;
width: 48px;
height: 64px;
overflow: hidden;
background: var(--app-subtle);
}
.identity-thumbnail .n-image,
.identity-thumbnail .n-image img {
width: 100%;
height: 100%;
}
.identity-thumbnail-placeholder {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
gap: 5px;
color: var(--app-muted);
font-size: 10px;
}
.directory-item-eyebrow {
font:
11px/1.5 ui-monospace,
monospace;
color: var(--app-muted);
overflow-wrap: anywhere;
}
.directory-item-title {
font-size: 13px;
line-height: 1.7;
font-weight: 500;
color: var(--app-ink);
overflow-wrap: anywhere;
}
.directory-item-meta {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 6px 8px;
color: var(--app-muted);
font-size: 11px;
line-height: 1.7;
overflow-wrap: anywhere;
}
.directory-status {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 1px 5px;
border-radius: 0;
background: var(--app-control);
}
.directory-status svg {
flex-shrink: 0;
}
.n-button.directory-item.selected {
background: var(--app-selected);
box-shadow: inset 3px 0 var(--app-accent);
}
.n-button.directory-item:focus-visible {
outline: 2px solid var(--app-accent);
outline-offset: -2px;
}
/* 标签与操作由同一 NTabs 导航行管理,suffix 共享底线及垂直中心。 */
.tabs-toolbar {
container: tabs-toolbar / inline-size;
width: 100%;
min-width: 0;
}
.workspace-tabs.n-tabs {
width: 100%;
min-width: 0;
}
.workspace-tabs > .n-tabs-nav {
align-items: stretch;
}
.workspace-tabs .n-tabs-tab {
min-height: 40px;
box-sizing: border-box;
}
.workspace-tabs .n-tabs-nav-scroll-wrapper {
min-width: 0;
}
.workspace-tabs .n-tabs-nav__suffix {
align-items: center;
flex-shrink: 0;
padding-left: 20px;
}
.tabs-toolbar-actions {
display: flex;
align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
gap: 4px 14px;
min-height: 40px;
}
.tabs-toolbar-actions .n-button,
.tabs-toolbar-actions .text-button {
display: inline-flex;
align-items: center;
justify-content: center;
height: 32px;
white-space: nowrap;
}
/* 窄内容区允许 suffix 独占一行;Tabs 本身继续使用组件内置横向滚动。 */
@container tabs-toolbar (max-width: 600px) {
.workspace-tabs > .n-tabs-nav {
flex-wrap: wrap;
}
.workspace-tabs .n-tabs-nav-scroll-wrapper {
flex-basis: 100%;
}
.workspace-tabs .n-tabs-nav__suffix {
width: 100%;
justify-content: flex-end;
padding-left: 0;
}
}
.result-toolbar .n-tabs-tab__label {
display: inline-flex;
gap: 6px;
}
/* 筛选按内容区的实际宽度换行,避免侧栏展开后下拉框把其他控件挤到下一行。 */
.form-image-filter-region {
container-type: inline-size;
margin-block: 16px;
}
.form-image-filters {
display: grid;
grid-template-columns: minmax(200px, 360px) 152px minmax(260px, 1fr) auto;
align-items: center;
gap: 12px 16px;
}
.form-image-filters > * {
min-width: 0;
}
.filter-toggles {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 10px 16px;
font-size: 12px;
}
.filter-toggles .n-checkbox__label {
white-space: nowrap;
}
.filter-result-count {
justify-self: end;
color: var(--app-muted);
font-size: 12px;
white-space: nowrap;
}
@container (max-width: 900px) {
.form-image-filters {
grid-template-columns: minmax(0, 1fr) 152px;
}
}
@container (max-width: 460px) {
.form-image-filters {
grid-template-columns: minmax(0, 1fr) 120px;
column-gap: 10px;
}
}
.content-with-history {
height: clamp(360px, 66dvh, 850px);
min-height: 0;
grid-template-columns: minmax(0, 1fr) 207px;
}
.content-with-history > main,
.content-with-history > aside {
min-height: 0;
overflow: hidden;
overscroll-behavior: contain;
}
/* 拆解结果使用剩余高度,不能再用视口比例定高后隐藏长列表。 */
.breakdown-results-section {
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
min-width: 0;
gap: 8px;
}
.breakdown-results-section > .result-toolbar {
flex-shrink: 0;
}
.breakdown-results-section > .content-with-history {
flex: 1;
height: auto;
min-height: 0;
grid-template-rows: minmax(0, 1fr);
}
.breakdown-results-scroll .n-scrollbar-content {
overflow-wrap: anywhere;
}
/* 剧集选择、统计和下一步入口共用一行,避免空操作行与双层顶部留白。 */
.breakdown-storyboard {
padding: 16px 20px 20px;
}
.breakdown-storyboard-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px 24px;
margin-bottom: 16px;
}
.breakdown-episode-picker {
display: flex;
align-items: center;
gap: 12px;
flex: 0 1 420px;
min-width: 0;
font-size: 14px;
}
.breakdown-episode-picker > span {
flex-shrink: 0;
white-space: nowrap;
}
.breakdown-episode-picker .n-select {
flex: 1;
min-width: 0;
}
.breakdown-storyboard-summary {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px 20px;
min-height: 34px;
margin-left: auto;
}
.breakdown-storyboard-count {
color: var(--app-muted);
font-size: 12px;
white-space: nowrap;
}
.breakdown-storyboard-summary .text-button {
min-height: 34px;
white-space: nowrap;
}
/* 连续阅读区保留双栏,执行记录按需展开,不挤占默认阅读宽度。 */
.script-section .n-tabs-tab__label {
display: inline-flex;
align-items: center;
gap: 8px;
}
.script-section .content-with-history.history-hidden {
grid-template-columns: minmax(0, 1fr);
grid-template-rows: minmax(0, 1fr);
}
.episode-reader {
display: grid;
grid-template-columns: clamp(190px, 22%, 240px) minmax(0, 1fr);
height: 100%;
min-height: 0;
min-width: 0;
overflow: hidden;
container-type: inline-size;
}
.reader-directory {
display: flex;
flex-direction: column;
min-height: 0;
min-width: 0;
background: var(--app-subtle);
}
.reader-directory-heading {
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
gap: 8px;
padding: 22px 20px 14px;
font-size: 13px;
}
.reader-directory-heading h3 {
font-weight: 600;
}
.reader-directory-heading span {
font-size: 11px;
color: var(--app-muted);
white-space: nowrap;
}
.reader-directory-scroll {
flex: 1;
}
.reader-directory-content {
display: flex;
flex-direction: column;
gap: 6px;
padding: 4px 0 18px;
}
.n-button.reader-episode-link {
flex-shrink: 0;
width: 100%;
height: auto;
min-height: 64px;
padding: 12px 14px;
border-radius: 0;
color: var(--app-muted);
white-space: normal;
text-align: left;
}
.n-button.reader-episode-link .n-button__content {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 5px;
width: 100%;
min-width: 0;
}
.reader-episode-label {
font-size: 13px;
font-weight: 600;
line-height: 1.5;
}
.reader-episode-title {
font-size: 12px;
line-height: 1.6;
overflow-wrap: anywhere;
}
.n-button.reader-episode-link.active {
background: var(--app-selected);
color: var(--app-accent-text);
box-shadow: inset 3px 0 var(--app-accent);
}
.reader-page {
min-width: 0;
min-height: 0;
overflow: hidden;
background: var(--app-surface);
}
.reader-scroll .n-scrollbar-container:focus-visible {
outline: 2px solid var(--app-accent);
outline-offset: -3px;
}
.reader-content {
/* 正文紧邻目录左对齐,保留阅读行宽,不在宽屏内容区居中。 */
max-width: 900px;
margin-inline: 0;
padding: 32px;
text-align: left;
}
.reader-chapter + .reader-chapter {
margin-top: 48px;
padding-top: 36px;
}
.reader-chapter:last-child {
/* 末集较短时仍可定位到阅读线,不必把倒数第二集误认为当前集。 */
min-height: max(160px, calc(var(--reader-height) - 64px));
}
.reader-chapter-heading {
margin-bottom: 24px;
}
.reader-chapter-heading p {
color: var(--app-muted);
font-size: 13px;
font-weight: 500;
margin-bottom: 10px;
}
.reader-chapter-heading h2 {
font-size: clamp(18px, 2cqw, 24px);
font-weight: 600;
line-height: 1.6;
overflow-wrap: anywhere;
}
@media (max-width: 1000px) {
.episode-reader {
grid-template-columns: 180px minmax(0, 1fr);
}
}
@media (max-width: 600px) {
.episode-reader {
grid-template-columns: 112px minmax(0, 1fr);
}
.reader-directory-heading {
padding: 16px 12px 12px;
flex-wrap: wrap;
}
.n-button.reader-episode-link {
padding: 12px 10px;
}
.reader-content {
padding-inline: 18px;
}
}
/* 面板只负责尺寸与裁切;滚动和深浅主题滚动条统一交给 Naive UI。 */
.panel-scroll.n-scrollbar {
height: 100%;
min-height: 0;
min-width: 0;
overflow: hidden;
}
.n-scrollbar > .n-scrollbar-container {
overscroll-behavior: contain;
}
.production-shot-list,
.production-detail,
.storyboard-detail,
.shot-list,
.content-with-history > main {
min-width: 0;
min-height: 0;
}
.history-panel,
.production-shot-list,
.shot-list {
padding: 0;
}
.history-content {
padding: 23px 21px;
}
.image-history.n-scrollbar,
.table-scroll.n-scrollbar {
height: auto;
overflow: hidden;
}
.image-history.n-scrollbar {
width: 100%;
max-width: 100%;
min-width: 0;
}
.image-history-heading {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 6px 16px;
margin-block: 16px 8px;
font-size: 12px;
}
.image-history-content {
display: flex;
gap: 12px;
padding: 4px 4px 12px;
width: max-content;
}
.code-scroll.n-scrollbar {
height: auto;
max-height: 420px;
overflow: hidden;
}
.code-scroll .json-view,
.code-scroll .storyboard-json {
max-height: none;
overflow: visible;
}
.project-table-area {
flex: 1;
min-height: 0;
}
.project-data-table {
height: 100%;
}
.project-data-table .n-data-table-base-table {
flex: 1;
min-height: 0;
}
.project-index-heading {
margin: 0;
}
.project-index-heading h1 {
font-size: 22px;
font-weight: 600;
}
.project-index-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 4px;
}
.project-search {
width: 240px;
}
/* 项目筛选与搜索框同高,保留更宽的点击区;窄屏可自然换行。 */
.project-status-filters.n-radio-group {
display: flex;
flex-wrap: wrap;
height: auto;
min-height: var(--n-height);
gap: 4px 1px;
}
.project-status-filters .n-radio-group__splitor {
display: none;
}
.project-status-filters .n-radio-button {
min-width: 76px;
padding-inline: 18px;
text-align: center;
}
/* 状态说明与操作各自成组,避免小标签夹在不同尺寸的按钮之间。 */
.visual-style-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 16px 24px;
margin-block: 20px;
padding: 14px 16px;
background: var(--app-subtle);
}
.visual-style-status {
display: flex;
align-items: center;
gap: 12px;
min-width: 0;
}
.visual-style-status > svg {
flex-shrink: 0;
color: var(--app-muted);
}
.visual-style-status strong {
font-size: 14px;
font-weight: 500;
}
.visual-style-status p {
margin: 4px 0 0;
color: var(--app-muted);
font-size: 12px;
line-height: 1.6;
}
.visual-style-actions {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 10px;
margin-left: auto;
}
.project-name-cell {
display: block;
min-width: 0;
}
.project-name-cell strong,
.project-name-cell small {
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.project-name-cell small {
color: var(--app-muted);
margin-top: 4px;
font-size: 11px;
}
.app-dialog {
max-width: calc(100vw - 32px);
max-height: calc(100dvh - 32px);
}
.app-dialog .n-card-header {
flex-shrink: 0;
}
.dialog-body-scroll {
max-height: calc(100dvh - 154px);
}
.app-dialog .n-card__content {
min-height: 0;
}
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 8px;
padding-top: 16px;
}
.asset-image .n-image {
width: 100%;
height: 100%;
min-height: 0;
min-width: 0;
display: flex;
justify-content: center;
}
.asset-image .n-image img {
width: 100%;
height: 100%;
}
/* 预览尺寸不随原图分辨率增长,历史缩略图也不能被按钮默认宽度覆盖。 */
.asset-image.asset-image-preview {
height: min(42dvh, 420px);
min-height: 0;
aspect-ratio: auto;
}
.n-button__content {
gap: 6px;
}
.n-button:disabled {
opacity: 1;
}
.n-button.image-history-item {
width: 128px;
min-width: 128px;
max-width: 128px;
flex: 0 0 128px;
height: auto;
padding: 6px;
white-space: normal;
background: var(--app-subtle);
}
.n-button.image-history-item.selected {
background: var(--app-selected);
box-shadow: inset 0 0 0 2px var(--app-accent);
}
.n-button.image-history-item .n-button__content {
display: block;
width: 100%;
text-align: left;
overflow: hidden;
}
.image-history-item .asset-image {
height: 88px;
min-height: 0;
aspect-ratio: auto;
}
.image-history-label {
display: block;
margin-top: 6px;
font-size: 11px;
line-height: 1.5;
overflow-wrap: anywhere;
}
.image-history-meta {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 4px;
margin-top: 6px;
color: var(--app-muted);
font-size: 10px;
line-height: 1.5;
}
/* 选角进度按抽屉实际宽度排列;按钮尺寸显式覆盖组件默认值。 */
.casting-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
gap: 12px;
margin-top: 24px;
padding-top: 20px;
}
.n-button.casting-item {
width: 100%;
min-width: 0;
height: auto;
min-height: 76px;
padding: 12px 14px;
white-space: normal;
text-align: left;
background: var(--app-subtle);
}
.n-button.casting-item.selected {
background: var(--app-selected);
box-shadow: inset 3px 0 0 var(--app-accent);
}
.n-button.casting-item .n-button__content {
display: flex;
width: 100%;
min-width: 0;
align-items: center;
justify-content: space-between;
gap: 16px;
text-align: left;
}
.casting-item-identity {
display: flex;
flex-direction: column;
gap: 5px;
min-width: 0;
}
.casting-item-name {
font-size: 14px;
font-weight: 500;
line-height: 1.5;
overflow-wrap: anywhere;
}
.casting-item-ref {
color: var(--app-muted);
font-family: ui-monospace, monospace;
font-size: 11px;
line-height: 1.5;
overflow-wrap: anywhere;
}
.casting-item-status {
flex-shrink: 0;
}
.search-field {
padding: 0;
border: 0;
background: transparent;
min-width: 180px;
}
.search-field input {
width: 100%;
font-size: inherit;
}
.select-control {
min-width: 130px;
}
.n-checkbox {
align-items: flex-start;
}
.n-checkbox .n-checkbox__label {
white-space: normal;
}
.n-alert {
line-height: 1.8;
}
.n-collapse.panel {
padding: 16px;
}
.n-table.project-table th {
background: var(--app-subtle);
}
.empty-state {
min-height: 200px;
padding: 40px 20px;
}
.production-video {
background: #080808;
}
.skip-link:focus {
z-index: 3000;
}
@media (max-width: 1000px) {
.production-controls {
grid-template-columns: minmax(130px, 1fr) 90px;
}
.content-with-history {
grid-template-columns: minmax(0, 1fr) 180px;
}
}
@media (max-width: 760px) {
.admin-topbar {
padding: 0 10px;
}
.admin-sider:not(.n-layout-sider--collapsed) {
position: absolute;
top: 44px;
bottom: 0;
height: auto;
z-index: 20;
box-shadow: 6px 0 24px var(--app-shadow);
}
.project-header {
padding: 8px 12px;
}
.project-title {
font-size: 14px;
}
.workspace-heading {
padding: 12px;
}
.content-first-workspace .workspace-heading {
padding: 8px 12px;
}
.content-first-workspace .workspace-split,
.content-first-workspace .workspace-scroll-content {
padding: 0 12px 12px;
}
.toolbar-episode {
flex: 1;
}
.toolbar-actions {
gap: 8px;
}
.workspace-tools-body {
padding: 14px;
}
.workspace-scroll-content,
.workspace-split {
padding: 0 12px 12px;
}
.workspace-heading .production-controls {
grid-template-columns: minmax(100px, 1fr) 80px;
}
.production-workspace,
.storyboard-workspace {
grid-template-columns: minmax(0, 1fr);
grid-template-rows: 184px minmax(0, 1fr);
}
.directory-panel {
height: 100%;
border-right: 0;
}
.directory-heading {
padding: 12px 14px 8px;
}
.directory-list-content {
flex-direction: row;
width: max-content;
align-items: stretch;
padding-bottom: 12px;
}
.n-button.directory-item {
width: 228px;
min-height: 104px;
}
.directory-group-heading {
display: none;
}
.beat-directory-group,
.beat-directory-items {
display: contents;
}
.directory-mobile-beat {
display: inline;
}
.identity-workspace {
grid-template-columns: minmax(0, 1fr);
grid-template-rows: 250px minmax(0, 1fr);
gap: 10px;
}
.directory-filters {
grid-template-columns: minmax(0, 1fr) 120px;
}
.storyboard-controls {
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
}
.content-with-history {
grid-template-columns: minmax(0, 1fr);
grid-template-rows: minmax(0, 1fr) 130px;
}
.breakdown-results-section > .content-with-history {
grid-template-rows: minmax(0, 1fr) min(25%, 130px);
}
.history-panel {
overflow: hidden;
min-height: 0;
}
.project-search {
width: 100%;
}
.project-index-toolbar .n-radio-group {
width: 100%;
}
.production-pipeline {
grid-template-columns: 1fr;
}
}