feat(*): 短剧创作工作台 - 完善章节分镜、资产管理、技能运行与生成任务恢复

This commit is contained in:
ddCat
2026-08-29 23:34:46 +08:00
parent 4f07daae9e
commit 2f6832f99c
113 changed files with 7016 additions and 723 deletions

View File

@@ -755,8 +755,8 @@
--canvas-composer-shadow: var(--elevation-card);
--canvas-composer-settings-width: 138px;
--canvas-mention-menu-max-height: 320px;
--canvas-mention-search-height: 40px;
--canvas-mention-item-height: 34px;
--canvas-mention-search-height: 38px;
--canvas-mention-item-height: 38px;
--canvas-mention-chip-height: 1.68em;
--canvas-mention-chip-preview-size: 1.18em;
--canvas-mention-chip-gap: 0.18em;
@@ -1514,6 +1514,13 @@
-webkit-backdrop-filter: none;
}
.app-workspace-topbar.has-extension {
border-bottom: 1px solid var(--workspace-border);
background: color-mix(in srgb, var(--workspace-nav) 92%, transparent);
backdrop-filter: blur(22px) saturate(120%);
-webkit-backdrop-filter: blur(22px) saturate(120%);
}
.app-workspace-topbar-icon-button {
display: inline-flex;
width: 36px;
@@ -5207,7 +5214,78 @@
/* 项目概览:原本是「有边框的浅色盒子 + 一堆等重小字」,层级读不出来。
改成:主区留白撑开、标题字阶拉高、右栏用背景色而非边框分隔、流水线行给足行高。 */
.workflow-chapter-navigator { display: none; height: 32px; flex: 0 0 auto; align-items: center; overflow: hidden; border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface); }
@media (min-width: 1280px) { .workflow-chapter-navigator { display: flex; } }
.workflow-chapter-navigator > button { display: grid; width: 30px; height: 30px; flex: 0 0 auto; place-items: center; color: color-mix(in srgb, var(--foreground) 48%, transparent); transition: background-color var(--motion-instant), color var(--motion-instant); }
.workflow-chapter-navigator > button:hover:not(:disabled) { background: var(--surface-hover); color: var(--foreground); }
.workflow-chapter-navigator > button:disabled { cursor: not-allowed; opacity: .28; }
.workflow-chapter-navigator > button svg { width: 14px; height: 14px; }
.workflow-chapter-navigator .workflow-chapter-current { display: flex; width: clamp(190px, 19vw, 270px); padding: 0 8px; border-right: 1px solid var(--border); border-left: 1px solid var(--border); gap: 6px; text-align: left; }
.workflow-chapter-current > span { flex: 0 0 auto; color: color-mix(in srgb, var(--foreground) 44%, transparent); font-size: var(--fs-micro); font-variant-numeric: tabular-nums; }
.workflow-chapter-current > strong { min-width: 0; flex: 1 1 auto; overflow: hidden; color: var(--foreground); font-size: var(--fs-label); font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.workflow-chapter-current > em { flex: 0 0 auto; color: color-mix(in srgb, var(--foreground) 35%, transparent); font-size: var(--fs-micro); font-style: normal; font-variant-numeric: tabular-nums; }
.workflow-chapter-current > svg { flex: 0 0 auto; }
.workflow-chapter-modal-head { display: flex; align-items: center; gap: 16px; padding: 16px; border-bottom: 1px solid var(--border); }
.workflow-chapter-modal-head > span { display: flex; min-width: 180px; align-items: center; gap: 7px; }
.workflow-chapter-modal-head > span svg { width: 16px; height: 16px; color: var(--workspace-accent); }
.workflow-chapter-modal-head > span strong { font-size: var(--fs-body); }
.workflow-chapter-modal-head > span em { color: color-mix(in srgb, var(--foreground) 42%, transparent); font-size: var(--fs-label); font-style: normal; }
.workflow-chapter-list { height: min(58vh, 520px); overflow-y: auto; padding: 6px; }
.workflow-chapter-list button { position: absolute; left: 0; top: 0; display: grid; width: 100%; grid-template-columns: 54px minmax(0, 1fr) auto 42px; align-items: center; padding: 0 10px; border-radius: var(--r-sm); color: color-mix(in srgb, var(--foreground) 58%, transparent); text-align: left; }
.workflow-chapter-list button:hover { background: var(--surface-hover); color: var(--foreground); }
.workflow-chapter-list button.is-active { background: var(--workspace-accent-soft); color: var(--foreground); }
.workflow-chapter-list button > span { color: color-mix(in srgb, var(--foreground) 36%, transparent); font-size: var(--fs-label); font-variant-numeric: tabular-nums; }
.workflow-chapter-list button > strong { overflow: hidden; font-size: var(--fs-caption); font-weight: 550; text-overflow: ellipsis; white-space: nowrap; }
.workflow-chapter-list button > em { color: color-mix(in srgb, var(--foreground) 40%, transparent); font-size: var(--fs-micro); font-style: normal; font-variant-numeric: tabular-nums; }
.workflow-chapter-list button > small { color: var(--workspace-accent); font-size: var(--fs-micro); text-align: right; }
.workflow-chapter-empty { display: grid; height: 100%; place-items: center; color: color-mix(in srgb, var(--foreground) 40%, transparent); font-size: var(--fs-caption); }
.project-overview-focus { overflow: hidden; border-radius: var(--r-xl); background: var(--library-surface); box-shadow: none; }
.project-standard-flow { overflow: hidden; border-top: 1px solid var(--library-border); border-bottom: 1px solid var(--library-border); background: var(--library-surface); }
.project-standard-flow-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; padding: 22px 24px 18px; }
.project-standard-flow-head > div { min-width: 0; }
.project-standard-flow-head span { color: var(--workspace-accent); font-size: var(--fs-micro); font-weight: 650; }
.project-standard-flow-head h2 { margin-top: 4px; font-size: 20px; font-weight: 680; }
.project-standard-flow-head p { max-width: 720px; margin-top: 5px; color: color-mix(in srgb, var(--foreground) 48%, transparent); font-size: var(--fs-caption); line-height: 1.6; }
.project-standard-flow-head > a { display: inline-flex; height: 32px; flex: 0 0 auto; align-items: center; gap: 6px; padding: 0 11px; border-radius: var(--r-md); background: var(--btn-solid-bg); color: var(--btn-solid-fg); font-size: var(--fs-label); font-weight: 600; }
.project-standard-flow-head > a svg { width: 14px; height: 14px; }
.project-standard-flow-track { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px; border-top: 1px solid var(--library-border); border-bottom: 1px solid var(--library-border); padding: 14px 16px 16px; background: color-mix(in srgb, var(--foreground) 2%, var(--library-surface)); }
.project-standard-flow-track > a { position: relative; display: grid; min-width: 0; min-height: 176px; grid-template-rows: 24px auto auto 1fr auto; align-content: start; padding: 16px; border: 1px solid var(--library-border); border-radius: var(--r-lg); background: color-mix(in srgb, var(--library-surface) 96%, var(--foreground) 4%); color: var(--foreground); box-shadow: 0 8px 24px color-mix(in srgb, var(--foreground) 4%, transparent), inset 0 1px 0 color-mix(in srgb, white 4%, transparent); transition: border-color var(--motion-instant), background-color var(--motion-instant), box-shadow var(--motion-instant); }
.project-standard-flow-track > a:hover { border-color: color-mix(in srgb, var(--workspace-accent) 40%, var(--library-border)); background: color-mix(in srgb, var(--workspace-accent) 5%, var(--library-surface)); box-shadow: 0 10px 28px color-mix(in srgb, var(--foreground) 7%, transparent), inset 0 1px 0 color-mix(in srgb, white 5%, transparent); }
.project-standard-flow-track > a:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
.project-standard-flow-index { position: absolute; top: 13px; right: 13px; display: grid; width: 20px; height: 20px; place-items: center; border: 1px solid var(--border); border-radius: 50%; color: color-mix(in srgb, var(--foreground) 40%, transparent); font-size: var(--fs-micro); font-variant-numeric: tabular-nums; }
.project-standard-flow-track > a.is-complete { border-color: color-mix(in srgb, var(--status-success) 20%, var(--library-border)); }
.project-standard-flow-track > a.is-complete .project-standard-flow-index { border-color: color-mix(in srgb, var(--status-success) 45%, transparent); background: color-mix(in srgb, var(--status-success) 12%, transparent); color: var(--status-success); }
.project-standard-flow-index svg { width: 12px; height: 12px; }
.project-standard-flow-icon { display: grid; width: 28px; height: 28px; place-items: center; border-radius: var(--r-sm); background: color-mix(in srgb, var(--foreground) 6%, transparent); color: color-mix(in srgb, var(--foreground) 58%, transparent); }
.project-standard-flow-icon svg { width: 15px; height: 15px; }
.project-standard-flow-track > a > strong { margin-top: 10px; overflow: hidden; font-size: var(--fs-caption); font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
.project-standard-flow-track > a > p { margin-top: 5px; color: color-mix(in srgb, var(--foreground) 45%, transparent); font-size: var(--fs-label); line-height: 1.55; }
.project-standard-flow-track > a > em { align-self: end; margin-top: 12px; color: color-mix(in srgb, var(--foreground) 62%, transparent); font-size: var(--fs-micro); font-style: normal; font-weight: 600; font-variant-numeric: tabular-nums; }
.project-standard-flow-arrow { position: absolute; right: -14px; top: 76px; z-index: 2; width: 17px; height: 17px; padding: 3px; border: 1px solid var(--library-border); border-radius: 50%; background: var(--library-surface); color: color-mix(in srgb, var(--foreground) 38%, transparent); }
.project-standard-flow-track > a:last-child .project-standard-flow-arrow { display: none; }
.project-standard-flow-footer { display: grid; grid-template-columns: 1fr auto; gap: 24px; padding: 14px 24px 16px; }
.project-standard-flow-footer > div { display: flex; min-width: 0; align-items: center; gap: 12px; }
.project-standard-flow-footer strong { flex: 0 0 auto; font-size: var(--fs-label); }
.project-standard-flow-footer span { display: inline-flex; min-width: 0; align-items: center; gap: 5px; color: color-mix(in srgb, var(--foreground) 48%, transparent); font-size: var(--fs-micro); }
.project-standard-flow-footer span i { width: 5px; height: 5px; flex: 0 0 auto; border-radius: 50%; background: var(--status-success); }
.project-standard-flow-footer span i.is-attention { background: var(--status-warning); }
.project-standard-flow-footer a { color: color-mix(in srgb, var(--foreground) 58%, transparent); font-size: var(--fs-micro); }
.project-standard-flow-footer a:hover { color: var(--workspace-accent); }
@media (max-width: 1100px) {
.project-standard-flow-track { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.project-standard-flow-track > a:nth-child(3) .project-standard-flow-arrow { display: none; }
.project-standard-flow-footer { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
.project-standard-flow-head { align-items: flex-start; padding: 18px; }
.project-standard-flow-head > a { display: none; }
.project-standard-flow-track { grid-template-columns: 1fr; padding-inline: 12px; }
.project-standard-flow-track > a { min-height: 144px; }
.project-standard-flow-arrow { display: none; }
.project-standard-flow-footer { padding: 14px 18px; }
.project-standard-flow-footer > div { flex-wrap: wrap; }
}
.project-overview-primary { min-width: 0; padding: 30px 32px 32px; }
.project-overview-eyebrow { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; color: color-mix(in srgb, var(--foreground) 44%, transparent); font-size: var(--fs-label); }
.project-overview-eyebrow > span:first-child { color: color-mix(in srgb, var(--foreground) 72%, transparent); font-weight: 560; letter-spacing: .02em; }
@@ -8955,10 +9033,15 @@
flex-direction: column;
overflow: hidden;
border: 1px solid color-mix(in srgb, var(--foreground) 10%, transparent);
border-radius: var(--r-md);
border-radius: var(--r-lg);
background: var(--canvas-composer-surface);
color: var(--cn-text);
box-shadow: var(--elevation-overlay);
transform-origin: top left;
}
.canvas-resource-mention-menu[data-placement="top"] {
transform-origin: bottom left;
}
.canvas-resource-mention-search {
@@ -8967,6 +9050,9 @@
flex: 0 0 auto;
align-items: center;
gap: var(--space-2);
margin: var(--space-2);
border-radius: var(--r-md);
background: var(--canvas-composer-control-surface);
padding-inline: var(--space-2-half);
color: color-mix(in srgb, var(--foreground) 44%, transparent);
}
@@ -8994,24 +9080,35 @@
.canvas-resource-mention-scroll {
min-height: 0;
overflow-y: auto;
padding: 0 var(--space-1) var(--space-1);
border-top: 1px solid color-mix(in srgb, var(--foreground) 8%, transparent);
padding: 0 var(--space-2) var(--space-2);
}
.canvas-resource-mention-section {
padding-top: var(--space-1);
padding-top: var(--space-half);
}
.canvas-resource-mention-section + .canvas-resource-mention-section {
margin-top: var(--space-1);
margin-top: var(--space-2);
}
.canvas-resource-mention-section > h4 {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
margin: 0;
padding: var(--space-1) var(--space-2);
padding: var(--space-1) var(--space-2) var(--space-half);
color: color-mix(in srgb, var(--foreground) 48%, transparent);
font-size: var(--fs-tiny);
font-weight: 600;
line-height: 1.4;
}
.canvas-resource-mention-section > h4 > small {
color: color-mix(in srgb, var(--foreground) 32%, transparent);
font-size: var(--fs-micro);
font-weight: 500;
font-variant-numeric: tabular-nums;
}
.canvas-resource-mention-item,
@@ -9026,18 +9123,126 @@
border: 0;
border-radius: var(--r-md);
background: transparent;
padding: calc(var(--space-1) / 2) var(--space-2);
padding: var(--space-1) var(--space-2);
color: inherit;
text-align: left;
transition: background-color var(--motion-instant) ease-out;
}
.canvas-resource-mention-item.is-skill {
min-height: 56px;
}
.canvas-resource-mention-item.is-active {
background: var(--control-selected-bg);
color: var(--control-selected-fg);
}
.canvas-resource-mention-item:hover,
.canvas-resource-mention-folder:hover,
.canvas-resource-mention-back:hover {
background: var(--canvas-composer-control-hover) !important;
}
.canvas-resource-mention-item:focus-visible,
.canvas-resource-mention-folder:focus-visible,
.canvas-resource-mention-back:focus-visible {
outline: var(--stroke-2) solid var(--control-focus-ring);
outline-offset: -2px;
}
.canvas-resource-mention-preview {
display: grid;
width: var(--space-8);
height: var(--space-8);
flex: 0 0 var(--space-8);
place-items: center;
overflow: hidden;
border-radius: var(--r-md);
background: var(--canvas-composer-control-surface);
object-fit: cover;
}
.canvas-resource-mention-preview > svg {
width: var(--space-4);
height: var(--space-4);
}
.canvas-resource-mention-preview.is-video {
background: var(--color-neutral-950);
}
.canvas-resource-mention-preview.is-character {
object-fit: contain;
}
.canvas-resource-mention-preview.is-skill {
width: 34px;
height: 34px;
flex-basis: 34px;
background: var(--control-selected-bg);
color: var(--control-selected-fg);
}
.canvas-resource-mention-copy {
display: grid;
min-width: 0;
flex: 1 1 auto;
gap: 2px;
}
.canvas-resource-mention-title-row,
.canvas-resource-mention-meta {
display: flex;
min-width: 0;
align-items: center;
gap: var(--space-2);
}
.canvas-resource-mention-title-row > strong,
.canvas-resource-mention-meta > span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.canvas-resource-mention-title-row > strong {
flex: 1 1 auto;
font-size: var(--fs-caption);
font-weight: 600;
line-height: 1.35;
}
.canvas-resource-mention-title-row > em {
flex: 0 0 auto;
border-radius: var(--r-full);
background: var(--canvas-composer-control-surface);
padding: 2px 6px;
color: color-mix(in srgb, currentColor 62%, transparent);
font-size: var(--fs-micro);
font-style: normal;
font-weight: 500;
line-height: 1.2;
}
.canvas-resource-mention-meta {
color: color-mix(in srgb, currentColor 52%, transparent);
font-size: var(--fs-micro);
line-height: 1.35;
}
.canvas-resource-mention-meta > span {
flex: 1 1 auto;
}
.canvas-resource-mention-meta > small {
flex: 0 0 auto;
color: color-mix(in srgb, currentColor 42%, transparent);
font-size: inherit;
font-variant-numeric: tabular-nums;
}
.canvas-resource-mention-folder > svg:first-child,
.canvas-resource-mention-back > svg:first-child {
width: var(--space-4);
@@ -12721,7 +12926,10 @@ html:not(.dark) .creation-history-drawer-root {
backdrop-filter: none !important;
}
:where(.ant-select-item-option, .ant-dropdown-menu-item, .ant-cascader-menu-item) {
:where(.ant-select-item-option, .ant-dropdown-menu-item, .ant-dropdown-menu-submenu-title, .ant-cascader-menu-item, .ant-mentions-dropdown-menu-item) {
min-height: 36px;
margin-block: 2px;
padding-block: 7px !important;
border-radius: var(--r-sm) !important;
color: var(--popover-foreground) !important;
}
@@ -13899,6 +14107,95 @@ html:not(.dark) .creation-history-drawer-root {
}
.library-confirm-modal .ant-modal-body { padding-top: 4px; padding-bottom: 12px; }
.skill-install-modal .ant-modal-container { border: 1px solid color-mix(in srgb, var(--foreground) 10%, transparent); background: var(--popover); }
.skill-install-modal .ant-modal-header { margin-bottom: 8px; background: transparent; }
.skill-install-modal .ant-modal-title { font-size: var(--fs-heading-lg); font-weight: 620; }
.skill-install-modal .ant-upload-wrapper .ant-upload-drag { border-color: color-mix(in srgb, var(--foreground) 14%, transparent); border-radius: var(--r-lg); background: color-mix(in srgb, var(--foreground) 2.5%, transparent); }
.skill-install-modal .ant-upload-wrapper .ant-upload-drag:hover { border-color: color-mix(in srgb, var(--foreground) 28%, transparent); }
.skill-install-mode { padding: 3px; background: color-mix(in srgb, var(--foreground) 5%, transparent); }
.skill-install-mode .ant-segmented-item { min-height: 34px; }
.skill-install-modal .skill-install-form { margin-top: 16px; }
.skill-package-modal .ant-modal-container { border: 1px solid color-mix(in srgb, var(--foreground) 11%, transparent); border-radius: var(--r-xl); background: var(--popover); box-shadow: var(--elevation-panel); }
.skill-package-modal .ant-modal-close { top: 17px; inset-inline-end: 18px; z-index: 3; border-radius: var(--r-full); color: color-mix(in srgb, var(--foreground) 45%, transparent); }
.skill-package-modal .ant-modal-close:hover { background: color-mix(in srgb, var(--foreground) 7%, transparent); color: var(--foreground); }
.skill-package-shell { display: flex; height: 100%; min-height: 0; flex-direction: column; }
.skill-package-header { display: flex; flex: 0 0 auto; align-items: center; gap: 24px; min-height: 112px; border-bottom: 1px solid color-mix(in srgb, var(--foreground) 9%, transparent); padding: 18px 68px 18px 24px; }
.skill-package-actions { display: flex; flex: 0 0 auto; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.skill-package-workspace { display: grid; min-height: 0; flex: 1 1 auto; grid-template-columns: minmax(220px, 26%) minmax(0, 1fr); }
.skill-package-sidebar { display: flex; min-width: 0; min-height: 0; flex-direction: column; gap: 10px; border-right: 1px solid color-mix(in srgb, var(--foreground) 9%, transparent); background: color-mix(in srgb, var(--foreground) 2%, transparent); padding: 14px 12px 10px; }
.skill-package-sidebar-summary, .skill-package-sidebar-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: color-mix(in srgb, var(--foreground) 44%, transparent); font-size: var(--fs-label); font-variant-numeric: tabular-nums; }
.skill-package-sidebar-summary span:first-child { display: inline-flex; align-items: center; gap: 6px; color: color-mix(in srgb, var(--foreground) 62%, transparent); }
.skill-package-sidebar-footer { flex: 0 0 auto; border-top: 1px solid color-mix(in srgb, var(--foreground) 8%, transparent); padding: 9px 2px 0; }
.skill-package-tree { min-height: 0; flex: 1 1 auto; overflow: auto; overscroll-behavior: contain; padding: 3px 0 8px; }
.skill-package-tree .ant-tree { background: transparent; color: color-mix(in srgb, var(--foreground) 70%, transparent); font-size: var(--fs-label); }
.skill-package-tree .ant-tree-treenode { display: flex; width: 100%; min-width: 0; min-height: 30px; align-items: center; padding-block: 0; }
.skill-package-tree .ant-tree-indent-unit { width: 14px; }
.skill-package-tree .ant-tree-switcher { display: grid; width: 20px; height: 30px; flex: 0 0 20px; place-items: center; color: color-mix(in srgb, var(--foreground) 38%, transparent); }
.skill-package-tree .ant-tree-switcher:hover { color: color-mix(in srgb, var(--foreground) 72%, transparent); }
.skill-package-tree-chevron { transition: transform var(--motion-state) ease-out; }
.skill-package-tree-chevron.is-expanded { transform: rotate(90deg); }
.skill-package-tree .ant-tree-node-content-wrapper { display: flex; height: 30px; min-width: 0; flex: 1 1 auto; align-items: center; border-radius: var(--r-sm); padding: 0 7px 0 2px; line-height: 30px; }
.skill-package-tree .ant-tree-node-content-wrapper:hover { background: color-mix(in srgb, var(--foreground) 6%, transparent); }
.skill-package-tree .ant-tree-node-content-wrapper.ant-tree-node-selected { background: color-mix(in srgb, var(--foreground) 9%, transparent) !important; color: var(--foreground); }
.skill-package-tree .ant-tree-node-content-wrapper:focus-visible { outline: 2px solid var(--ring); outline-offset: -1px; }
.skill-package-tree .ant-tree-iconEle { display: grid !important; width: 20px !important; height: 30px !important; flex: 0 0 20px; place-items: center; color: color-mix(in srgb, var(--foreground) 55%, transparent); }
.skill-package-tree .ant-tree-title { display: block; min-width: 0; flex: 1 1 auto; line-height: normal; }
.skill-package-folder-title { display: block; overflow: hidden; color: color-mix(in srgb, var(--foreground) 76%, transparent); font-weight: 540; text-overflow: ellipsis; white-space: nowrap; }
.skill-package-tree-title { display: flex; min-width: 0; height: 30px; align-items: center; justify-content: space-between; gap: 8px; }
.skill-package-tree-title > span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.skill-package-tree-title > span:last-child { flex: 0 0 auto; color: color-mix(in srgb, var(--foreground) 30%, transparent); font-size: var(--fs-micro); font-variant-numeric: tabular-nums; }
.skill-package-preview { display: flex; min-width: 0; min-height: 0; flex-direction: column; background: var(--background); }
.skill-package-preview-toolbar { display: flex; min-height: 48px; flex: 0 0 auto; align-items: center; gap: 10px; border-bottom: 1px solid color-mix(in srgb, var(--foreground) 8%, transparent); padding: 8px 14px 8px 18px; }
.skill-package-raw-link { display: inline-flex; width: 30px; height: 30px; align-items: center; justify-content: center; border-radius: var(--r-sm); color: color-mix(in srgb, var(--foreground) 48%, transparent); }
.skill-package-raw-link:hover { background: color-mix(in srgb, var(--foreground) 7%, transparent); color: var(--foreground); }
.skill-package-raw-link:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
.skill-package-preview-body { min-height: 0; flex: 1 1 auto; overflow: auto; overscroll-behavior: contain; padding: clamp(18px, 2.4vw, 36px); }
.skill-package-empty { display: flex; min-height: 220px; align-items: center; justify-content: center; flex-direction: column; color: color-mix(in srgb, var(--foreground) 42%, transparent); font-size: var(--fs-caption); text-align: center; }
.skill-package-source { min-height: 100%; margin: 0; color: color-mix(in srgb, var(--foreground) 78%, transparent); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; font-size: 12px; line-height: 1.75; tab-size: 4; white-space: pre-wrap; overflow-wrap: anywhere; }
.skill-package-media-stage { display: grid; min-height: 100%; place-items: center; }
.skill-package-media-stage :where(img, video) { max-width: 100%; max-height: calc(82vh - 220px); border-radius: var(--r-md); object-fit: contain; }
.skill-package-media-stage audio { width: min(560px, 100%); }
.skill-package-markdown { max-width: 920px; margin: 0 auto; color: color-mix(in srgb, var(--foreground) 76%, transparent); font-size: 14px; line-height: 1.75; }
.skill-package-markdown :where(h1, h2, h3, h4) { color: var(--foreground); font-weight: 650; line-height: 1.35; text-wrap: balance; }
.skill-package-markdown h1 { margin: 0 0 22px; font-size: 28px; }
.skill-package-markdown h2 { margin: 30px 0 12px; border-bottom: 1px solid color-mix(in srgb, var(--foreground) 9%, transparent); padding-bottom: 7px; font-size: 20px; }
.skill-package-markdown h3 { margin: 24px 0 8px; font-size: 16px; }
.skill-package-markdown h4 { margin: 20px 0 6px; font-size: 14px; }
.skill-package-markdown p { margin: 10px 0; text-wrap: pretty; }
.skill-package-markdown :where(ul, ol) { margin: 10px 0; padding-left: 24px; }
.skill-package-markdown li { margin: 4px 0; }
.skill-package-markdown a { color: var(--foreground); text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--foreground) 30%, transparent); text-underline-offset: 3px; }
.skill-package-markdown a:hover { text-decoration-color: currentColor; }
.skill-package-markdown blockquote { margin: 14px 0; border-left: 3px solid color-mix(in srgb, var(--foreground) 22%, transparent); padding: 2px 0 2px 14px; color: color-mix(in srgb, var(--foreground) 55%, transparent); }
.skill-package-markdown :not(pre) > code { border-radius: var(--r-xs); background: color-mix(in srgb, var(--foreground) 7%, transparent); padding: 2px 5px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; font-size: .9em; }
.skill-package-markdown pre { overflow: auto; border: 1px solid color-mix(in srgb, var(--foreground) 9%, transparent); border-radius: var(--r-md); background: color-mix(in srgb, var(--foreground) 3%, transparent); padding: 14px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; font-size: 12px; line-height: 1.65; }
.skill-package-markdown img { display: block; max-width: 100%; height: auto; margin: 18px auto; border-radius: var(--r-md); }
.skill-package-inline-file { display: inline-flex; align-items: center; gap: 7px; border: 1px solid color-mix(in srgb, var(--foreground) 12%, transparent); border-radius: var(--r-md); background: color-mix(in srgb, var(--foreground) 3%, transparent); padding: 8px 10px; color: var(--foreground); font-size: var(--fs-caption); }
.skill-package-inline-file:hover { background: color-mix(in srgb, var(--foreground) 7%, transparent); }
.skill-package-inline-file:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
.skill-package-inline-missing { color: color-mix(in srgb, var(--foreground) 42%, transparent); font-size: var(--fs-caption); }
.skill-package-table-wrap { overflow-x: auto; margin: 16px 0; }
.skill-package-table-wrap table { width: 100%; border-collapse: collapse; font-size: var(--fs-caption); }
.skill-package-table-wrap :where(th, td) { border: 1px solid color-mix(in srgb, var(--foreground) 11%, transparent); padding: 8px 10px; text-align: left; }
.skill-package-table-wrap th { background: color-mix(in srgb, var(--foreground) 4%, transparent); color: var(--foreground); font-weight: 620; }
@media (max-width: 860px) {
.skill-package-modal { width: 96vw !important; max-width: 96vw; }
.skill-package-modal .ant-modal-container { height: 90vh !important; }
.skill-package-header { min-height: 0; align-items: flex-start; flex-direction: column; gap: 12px; padding: 18px 54px 16px 18px; }
.skill-package-actions { justify-content: flex-start; }
.skill-package-workspace { grid-template-columns: minmax(180px, 34%) minmax(0, 1fr); }
}
@media (max-width: 640px) {
.skill-package-workspace { display: flex; flex-direction: column; }
.skill-package-sidebar { min-height: 190px; max-height: 34%; border-right: 0; border-bottom: 1px solid color-mix(in srgb, var(--foreground) 9%, transparent); }
.skill-package-sidebar-footer { display: none; }
.skill-package-preview-body { padding: 18px; }
.skill-package-actions .ant-btn > span:not(.ant-btn-icon) { display: none; }
}
.library-drawer .ant-drawer-content { overflow: hidden; border: 0 !important; background: var(--popover); box-shadow: var(--elevation-panel) !important; }
.library-drawer .ant-drawer-header { min-height: 70px; border-bottom: 1px solid color-mix(in srgb, var(--foreground) 8%, transparent); background: transparent; padding: 22px 28px 15px; }
.library-drawer .ant-drawer-title { color: var(--foreground); font-size: var(--fs-heading-lg); font-weight: 620; }