Files
Genarrative/apps/ai-game-creator-shell/src/styles.css
T
kdletters 30e6c309ae
Project CI / Backend tests (push) Successful in 13m29s
Project CI / Repository checks (push) Successful in 14m56s
Project CI / Frontend tests (push) Successful in 21m28s
Project CI / Native shell tests (push) Successful in 14m6s
修复自绘标题栏让位后底部内容超出可视框
window-chrome 下 launcher-main 移除旧版悬浮账户条的 42px padding-bottom,页面容器填满内容区。

首页根容器统一按 platform-theme 覆盖高度与内部滚动,覆盖 h-screen 与 h-[calc] 变体,避免高度基于视口导致底部溢出。

固定弹层样式静态守门补充 launcher-main 与首页容器断言。
2026-08-27 00:12:57 +08:00

7869 lines
156 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@import 'tailwindcss';
@source '../../../packages/shared/src/components';
@import '../../../packages/shared/src/theme.css';
:root {
color: #18202f;
background: #f5f7fb;
font-family: Inter, 'PingFang SC', 'Microsoft YaHei', system-ui, sans-serif;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
}
#root {
height: 100dvh;
min-height: 0;
}
:root {
/* 网页内自绘标题栏占用的顶部高度;portal 到 body 的固定弹层也要从它下方开始。 */
--window-chrome-height: 50px;
}
/* portal 到 body 的全屏固定弹层从标题栏下方开始,避免与自绘标题栏重叠。 */
.fixed.inset-0 {
top: var(--window-chrome-height);
}
/* 桌面壳统一承载标题栏,让 Tauri 与浏览器预览共用同一表面。 */
.window-chrome {
--window-chrome-height: 50px;
--window-chrome-title-side-space: 300px;
position: relative;
display: block;
width: 100%;
height: 100dvh;
min-height: 0;
overflow: hidden;
background: var(--platform-body-fill, #fffdf9);
color: var(--platform-text-strong, #3d1f10);
}
.window-chrome__bar {
position: absolute;
top: 0;
right: 0;
left: 0;
z-index: 30;
display: grid;
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
align-items: center;
min-width: 0;
height: var(--window-chrome-height);
padding: 0;
overflow: visible;
border-bottom: 1px solid var(--platform-surface-border, #ead8cb);
background: radial-gradient(
circle at 16% -80%,
rgb(255 255 255 / 88%),
transparent 38%
),
radial-gradient(circle at 72% 0%, rgb(237 190 151 / 20%), transparent 28%),
var(
--platform-desktop-topbar-fill,
linear-gradient(180deg, #fffefa, #fbf1e9)
);
box-shadow: 0 5px 18px rgb(112 57 30 / 7%);
user-select: none;
-webkit-app-region: drag;
}
.window-chrome__bar::after {
position: absolute;
right: 0;
bottom: -1px;
left: 0;
height: 1px;
background: linear-gradient(
90deg,
transparent,
rgb(199 101 61 / 22%),
transparent
);
content: '';
pointer-events: none;
}
.window-chrome__leading,
.window-chrome__trailing,
.window-chrome__controls,
.window-chrome__brand,
.window-chrome__wallet-slot {
-webkit-app-region: no-drag;
}
.window-chrome__leading,
.window-chrome__trailing {
display: flex;
align-items: center;
min-width: 0;
}
.window-chrome__leading {
grid-column: 1;
position: relative;
z-index: 1;
justify-self: start;
gap: 12px;
padding-left: 12px;
}
.window-chrome__brand {
display: inline-flex;
align-items: center;
flex: 0 0 auto;
gap: 8px;
min-width: 132px;
color: var(--platform-text-strong, #3d1f10);
}
.window-chrome__brand-mark {
display: grid;
width: 32px;
height: 32px;
place-items: center;
border: 1px solid rgb(199 101 61 / 20%);
border-radius: 11px;
background: linear-gradient(145deg, #fffaf2 5%, #f4d8c3 100%);
box-shadow:
0 5px 12px rgb(182 98 63 / 14%),
inset 0 1px 0 rgb(255 255 255 / 90%);
}
.window-chrome__brand-mark img {
width: 27px;
height: 27px;
object-fit: contain;
filter: drop-shadow(0 3px 4px rgb(139 69 39 / 14%));
}
.window-chrome__brand-copy {
display: grid;
gap: 1px;
line-height: 1;
}
.window-chrome__brand-copy strong {
color: var(--platform-brand-logo-title, #4a220f);
font-size: 14px;
font-weight: 800;
letter-spacing: 0.02em;
}
.window-chrome__brand-copy span {
color: var(--platform-brand-logo-subtitle, #c7653d);
font-size: 9px;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.window-chrome__drag-region {
position: absolute;
z-index: 0;
inset: 0;
display: grid;
place-items: center;
width: auto;
min-width: 0;
color: var(--platform-text-muted, #a38f80);
font-size: 11px;
font-weight: 650;
letter-spacing: 0.04em;
cursor: default;
padding-inline: var(--window-chrome-title-side-space);
-webkit-app-region: drag;
}
.window-chrome__title-wrap {
position: relative;
display: block;
min-width: 0;
max-width: min(42vw, 460px, 100%);
}
.window-chrome__title {
display: block;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.window-chrome__workspace-dot {
position: absolute;
top: 50%;
right: calc(100% + 9px);
width: 6px;
height: 6px;
margin: 0;
border-radius: 50%;
background: var(--platform-accent, #c7653d);
box-shadow: 0 0 0 4px rgb(199 101 61 / 10%);
transform: translateY(-50%);
}
.window-chrome__trailing {
grid-column: 3;
position: relative;
z-index: 1;
justify-self: end;
flex: 0 0 auto;
gap: 12px;
padding-left: 8px;
}
.window-chrome__wallet-slot {
display: flex;
align-items: center;
min-width: 0;
}
.window-chrome__wallet-slot > .launcher-account-bar {
position: static;
top: auto;
right: auto;
}
.window-chrome__controls {
display: flex;
align-self: stretch;
}
.window-chrome__control {
display: grid;
width: 44px;
height: var(--window-chrome-height);
place-items: center;
border: 0;
border-radius: 0;
background: transparent;
color: var(--platform-text-base, #6f5848);
cursor: pointer;
transition:
background 150ms ease,
color 150ms ease;
}
.window-chrome__control:hover,
.window-chrome__control:focus-visible {
background: rgb(204 117 76 / 12%);
color: var(--platform-text-strong, #3d1f10);
outline: none;
}
.window-chrome__control--close:hover,
.window-chrome__control--close:focus-visible {
background: #c7653d;
color: #fffaf5;
}
.window-chrome__content {
position: relative;
z-index: 0;
box-sizing: border-box;
height: 100%;
padding-top: var(--window-chrome-height);
min-width: 0;
min-height: 0;
overflow: hidden;
}
.window-chrome__content > .client-auth-shell,
.window-chrome__content > .launcher-shell,
.window-chrome__content > .app-shell {
height: 100%;
min-height: 0;
}
.window-chrome__content > .launcher-shell > aside {
height: 100%;
min-height: 0;
}
.window-chrome__content > .launcher-shell .launcher-main,
.window-chrome__content > .app-shell.app-shell--dev {
min-height: 0;
}
.window-chrome__content > .app-shell.app-shell--user .chat-pane {
min-height: calc(100% - 48px);
}
.window-chrome__content .launcher-projects-page,
.window-chrome__content .launcher-main:has(.launcher-projects-page) {
height: 100%;
}
.window-chrome__content > .launcher-shell .launcher-main {
height: 100%;
min-height: 0;
padding-bottom: 0;
}
.window-chrome__content
> .launcher-shell
.launcher-main
> .platform-theme {
height: 100%;
min-height: 0;
overflow: auto;
}
.window-chrome__content .launcher-main:has(.game-project-workbench) {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
padding-bottom: 0;
}
.window-chrome__content .game-project-workbench {
flex: 1 1 auto;
height: auto;
min-height: 0;
}
.window-chrome__content .game-workbench-layout {
height: 100%;
min-height: 0;
}
@media (max-width: 760px) {
:root {
--window-chrome-height: 46px;
}
.window-chrome {
--window-chrome-height: 46px;
}
.window-chrome__bar {
padding: 0;
}
.window-chrome__brand {
min-width: 38px;
}
.window-chrome__brand-copy,
.window-chrome__title {
display: none;
}
.window-chrome__drag-region {
display: none;
padding-inline: 0;
}
.window-chrome__leading {
gap: 5px;
padding-left: 8px;
}
.window-chrome__trailing {
padding-left: 2px;
}
.window-chrome__control {
width: 40px;
}
}
button,
input,
select,
textarea {
font: inherit;
}
@keyframes ui-editor-status-attention-arrive {
0%,
100% {
transform: scale(1);
}
16%,
50% {
transform: scale(1.012);
}
32%,
68% {
transform: scale(0.996);
}
}
@keyframes ui-editor-status-attention-ring {
0%,
100% {
opacity: 0;
transform: scale(0.96);
}
16%,
48% {
opacity: 0.78;
transform: scale(1.01);
}
32%,
68% {
opacity: 0.2;
transform: scale(1.025);
}
}
@keyframes ui-editor-status-attention-breathe {
0%,
100% {
opacity: 0.32;
transform: scale(0.995);
}
50% {
opacity: 0.7;
transform: scale(1.018);
}
}
.ui-editor-status-attention {
position: relative;
z-index: 0;
isolation: isolate;
border: 2px solid rgb(var(--ui-editor-status-attention-rgb) / 88%);
background: rgb(var(--ui-editor-status-attention-rgb) / 8%);
box-shadow:
0 0 0 4px rgb(var(--ui-editor-status-attention-rgb) / 16%),
0 8px 20px rgb(var(--ui-editor-status-attention-rgb) / 12%);
animation: ui-editor-status-attention-arrive 820ms
cubic-bezier(0.2, 0.8, 0.2, 1);
}
.ui-editor-status-attention::after {
position: absolute;
z-index: -1;
inset: -6px;
border: 2px solid rgb(var(--ui-editor-status-attention-rgb) / 85%);
border-radius: 12px;
content: '';
pointer-events: none;
animation:
ui-editor-status-attention-ring 820ms ease-out,
ui-editor-status-attention-breathe 1.8s ease-in-out 820ms infinite;
}
.ui-editor-status-attention--review {
--ui-editor-status-attention-rgb: 245 158 11;
}
.ui-editor-status-attention--blocked {
--ui-editor-status-attention-rgb: 239 68 68;
}
@media (prefers-reduced-motion: reduce) {
.ui-editor-status-attention,
.ui-editor-status-attention::after {
animation: none;
}
.ui-editor-status-attention::after {
opacity: 0.7;
transform: scale(1.01);
}
}
.client-auth-shell {
display: grid;
min-height: 100vh;
padding: 24px;
overflow-x: hidden;
overflow-y: auto;
background: var(--platform-body-fill);
color: var(--platform-text-strong);
place-items: center;
}
.client-auth-panel {
position: relative;
display: grid;
width: min(360px, 100%);
gap: 16px;
padding: 28px;
overflow: hidden;
border: 1px solid var(--platform-surface-border);
border-radius: 24px;
background: var(--platform-panel-fill);
box-shadow: var(--platform-panel-shadow);
}
.client-auth-panel::before {
position: absolute;
top: -94px;
right: -76px;
width: 204px;
height: 204px;
border-radius: 50%;
background: radial-gradient(
circle,
var(--platform-hero-glow-b),
transparent 68%
);
content: '';
pointer-events: none;
}
.client-auth-logo {
position: relative;
z-index: 1;
width: 56px;
height: 56px;
object-fit: contain;
filter: drop-shadow(0 9px 15px rgb(182 98 63 / 18%));
}
.client-auth-panel h1 {
position: relative;
z-index: 1;
margin: 0;
font-size: 24px;
letter-spacing: 0;
}
.client-auth-panel p {
position: relative;
z-index: 1;
margin: 6px 0 0;
color: var(--platform-text-soft);
font-size: 13px;
}
.client-auth-panel label {
position: relative;
z-index: 1;
display: grid;
gap: 7px;
color: var(--platform-text-base);
font-size: 13px;
font-weight: 700;
}
.client-auth-panel input {
height: 38px;
min-width: 0;
padding: 0 11px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 12px;
background: var(--platform-input-fill);
color: var(--platform-text-strong);
font: inherit;
transition:
border-color 160ms ease,
box-shadow 160ms ease,
background 160ms ease;
}
.client-auth-panel select {
height: 38px;
min-width: 0;
padding: 0 11px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 12px;
background: var(--platform-input-fill);
color: var(--platform-text-strong);
font: inherit;
transition:
border-color 160ms ease,
box-shadow 160ms ease,
background 160ms ease;
}
.client-auth-panel select:focus {
border-color: var(--platform-surface-hover-border);
outline: 2px solid var(--platform-input-focus-ring);
background: var(--platform-input-fill-focus);
}
.client-auth-panel input:focus {
border-color: var(--platform-surface-hover-border);
outline: 2px solid var(--platform-input-focus-ring);
background: var(--platform-input-fill-focus);
}
.client-auth-panel button {
position: relative;
z-index: 1;
height: 38px;
border: 1px solid var(--platform-button-primary-border);
border-radius: 12px;
background: var(--platform-button-primary-fill);
box-shadow: var(--platform-profile-action-shadow);
color: var(--platform-button-primary-text);
font-weight: 700;
cursor: pointer;
transition:
transform 160ms ease,
box-shadow 160ms ease,
filter 160ms ease;
}
.client-auth-panel button:not(:disabled):hover {
filter: brightness(1.04);
transform: translateY(-1px);
}
.client-auth-panel button:not(:disabled):active {
transform: translateY(0);
}
.client-auth-panel button:disabled {
cursor: default;
opacity: 0.62;
}
.client-auth-tabs {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 6px;
padding: 4px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 14px;
background: var(--platform-subpanel-fill);
}
.client-auth-tabs button {
border-color: transparent;
background: transparent;
box-shadow: none;
color: var(--platform-text-soft);
}
.client-auth-tabs button.is-active {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
box-shadow: 0 8px 18px rgb(182 98 63 / 18%);
color: var(--platform-button-primary-text);
}
.client-auth-code-row {
display: grid;
grid-template-columns: minmax(0, 1fr) 104px;
gap: 10px;
align-items: end;
}
.client-auth-code-row button {
padding: 0 10px;
white-space: nowrap;
}
.client-auth-status {
min-height: 18px;
overflow-wrap: anywhere;
}
@media (max-width: 480px) {
.client-auth-shell {
padding: 16px;
}
.client-auth-panel {
padding: 24px;
border-radius: 20px;
}
}
.launcher-shell {
--launcher-sidebar-width: 64px;
display: grid;
grid-template-columns: var(--launcher-sidebar-width) minmax(0, 1fr);
min-height: 100vh;
background: #fff;
color: #171717;
}
.launcher-shell.platform-theme {
background: var(--platform-body-fill);
color: var(--platform-text-strong);
}
.launcher-shell.platform-theme .launcher-main {
background: var(--platform-body-fill);
}
.launcher-shell.platform-theme .launcher-promo {
background: var(--platform-warm-bg);
color: var(--platform-warm-text);
}
.launcher-shell.platform-theme .launcher-promo button {
color: var(--platform-warm-text);
}
.launcher-shell.platform-theme .launcher-countdown {
border-color: var(--platform-subpanel-border);
background: var(--platform-subpanel-fill);
color: var(--platform-text-strong);
}
.launcher-promo button {
border: 0;
cursor: pointer;
}
.launcher-main {
position: relative;
display: grid;
grid-template-columns: minmax(0, 1fr);
grid-template-rows: auto auto auto;
align-content: start;
min-width: 0;
min-height: 100vh;
padding: 0 0 42px;
overflow: hidden;
}
.launcher-promo {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
min-height: 32px;
padding: 0 220px 0 24px;
background: #dfff4b;
color: #111;
font-size: 13px;
white-space: nowrap;
}
.launcher-promo strong {
font-weight: 700;
}
.launcher-promo button {
padding: 0;
background: transparent;
color: #111;
font-weight: 700;
text-decoration: underline;
}
.launcher-countdown {
display: grid;
min-width: 18px;
height: 20px;
padding: 0 5px;
border-radius: 7px;
background: #fff;
place-items: center;
}
.launcher-account-bar {
position: absolute;
top: 16px;
right: 22px;
display: flex;
align-items: center;
gap: 0;
z-index: 2;
}
.launcher-main-with-promo .launcher-account-bar {
top: 44px;
}
.launcher-project-list-actions {
display: flex;
align-items: center;
gap: 10px;
}
.launcher-project-create > button {
display: grid;
border-style: dashed;
color: #777;
place-items: center;
}
.launcher-project-thumb {
display: grid;
place-items: center;
}
.launcher-project-thumb span {
display: grid;
width: 54px;
height: 54px;
border-radius: 14px;
background: #fff;
color: #f26d2d;
font-size: 18px;
font-weight: 800;
place-items: center;
box-shadow: 0 8px 22px rgb(242 109 45 / 16%);
}
.launcher-page {
display: grid;
gap: 22px;
width: min(1054px, calc(100vw - 122px));
margin: 0 auto;
padding: 118px 0 0;
}
.launcher-projects-page {
align-content: start;
grid-template-rows: auto minmax(0, 1fr);
gap: 18px;
width: calc(100vw - var(--launcher-sidebar-width));
max-width: none;
height: 100dvh;
min-height: 0;
margin: 0;
padding: 92px 28px 24px;
overflow: hidden;
}
.launcher-main:has(.launcher-projects-page) {
height: 100dvh;
min-height: 0;
padding-bottom: 0;
}
.launcher-page header {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 24px;
}
.launcher-page h1 {
margin: 0;
color: #111827;
font-size: 28px;
letter-spacing: 0;
}
.launcher-page p {
margin: 8px 0 0;
color: #8b8b8b;
font-size: 13px;
}
.launcher-project-runtime-summary {
display: block;
margin-top: 5px;
color: #687386;
font-size: 11px;
overflow-wrap: anywhere;
}
.launcher-page-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.launcher-page-actions button,
.launcher-page .launcher-project-list-actions button,
.launcher-empty-projects button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
min-height: 36px;
padding: 0 12px;
border: 1px solid var(--platform-surface-border);
border-radius: 9px;
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
font-size: 12px;
font-weight: 700;
white-space: nowrap;
cursor: pointer;
}
.launcher-page .launcher-project-list-actions button:disabled,
.launcher-empty-projects button:disabled {
cursor: not-allowed;
opacity: 0.55;
}
.launcher-projects-page button:focus-visible,
.launcher-project-search input:focus-visible {
outline: 3px solid var(--platform-warm-text);
outline-offset: 2px;
}
.launcher-projects-toolbar {
display: grid;
grid-template-columns: minmax(160px, 1fr) auto;
align-items: center;
gap: 24px;
}
.launcher-projects-heading {
min-width: 0;
}
.launcher-projects-controls {
display: flex;
align-items: center;
gap: 10px;
}
.launcher-project-search {
display: flex;
align-items: center;
width: clamp(260px, 28vw, 390px);
height: 38px;
gap: 8px;
padding: 0 10px;
border: 1px solid var(--platform-surface-border);
border-radius: 9px;
background: var(--platform-input-fill);
color: var(--platform-text-soft);
}
.launcher-project-search:focus-within {
border-color: var(--platform-surface-hover-border);
box-shadow: 0 0 0 3px var(--platform-input-focus-ring);
}
.launcher-project-search input {
min-width: 0;
flex: 1;
border: 0;
outline: 0;
background: transparent;
color: var(--platform-text-strong);
font: inherit;
font-size: 13px;
}
.launcher-project-search button {
display: grid;
width: 24px;
height: 24px;
padding: 0;
border: 0;
border-radius: 6px;
background: transparent;
color: var(--platform-text-soft);
cursor: pointer;
place-items: center;
}
.launcher-project-actions {
display: flex;
align-items: center;
gap: 8px;
}
.launcher-project-actions button {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 38px;
gap: 7px;
padding: 0 14px;
border: 1px solid var(--platform-surface-border);
border-radius: 9px;
font-size: 12px;
font-weight: 800;
white-space: nowrap;
cursor: pointer;
}
.launcher-project-actions button:disabled {
cursor: not-allowed;
opacity: 0.55;
}
.launcher-project-actions .launcher-project-open-action {
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
}
.launcher-project-actions .launcher-project-create-action {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
.launcher-project-page-status {
min-height: 18px;
}
.launcher-project-list-shell {
display: grid;
grid-template-rows: 42px minmax(0, 1fr);
min-height: 0;
overflow: hidden;
border: 1px solid var(--platform-surface-border);
border-radius: 12px;
background: var(--platform-subpanel-fill);
box-shadow: var(--platform-panel-shadow);
}
.launcher-project-table-header,
.launcher-project-table article {
display: grid;
grid-template-columns:
minmax(360px, 1fr) minmax(120px, 160px) minmax(150px, 190px)
56px;
align-items: center;
min-width: 0;
}
.launcher-project-table-header {
height: 42px;
padding: 0 14px;
border-bottom: 1px solid var(--platform-surface-border);
background: color-mix(
in srgb,
var(--platform-subpanel-fill) 82%,
var(--platform-warm-bg)
);
color: var(--platform-text-soft);
font-size: 11px;
font-weight: 800;
letter-spacing: 0.03em;
}
.launcher-project-table-header span:last-child {
text-align: center;
}
.launcher-project-table {
display: grid;
align-content: start;
min-height: 0;
overflow-y: auto;
}
.launcher-project-table article {
min-height: 66px;
padding: 0 14px;
border-bottom: 1px solid var(--platform-surface-border);
background: var(--platform-subpanel-fill);
transition: background 120ms ease;
}
.launcher-project-table article:last-child {
border-bottom: 0;
}
.launcher-project-table
article:has(.launcher-project-row-main:not(:disabled)):hover {
background: var(--platform-nav-item-hover-fill);
}
.launcher-project-table article > .launcher-project-row-main {
display: flex;
align-items: center;
justify-content: flex-start;
width: 100%;
height: 100%;
min-width: 0;
gap: 12px;
padding: 0;
border: 0;
background: transparent;
color: inherit;
text-align: left;
cursor: pointer;
}
.launcher-project-table article > .launcher-project-row-main:disabled {
cursor: not-allowed;
opacity: 0.62;
}
.launcher-project-kind-icon {
display: grid;
width: 34px;
height: 34px;
flex: 0 0 auto;
border-radius: 9px;
background: var(--platform-warm-bg);
color: var(--platform-warm-text);
place-items: center;
}
.launcher-project-name-cell {
display: grid;
min-width: 0;
gap: 4px;
}
.launcher-project-table article strong {
display: block;
overflow: hidden;
color: var(--platform-text-strong);
font-size: 13px;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-project-table article small {
display: block;
width: 100%;
min-width: 0;
max-width: 100%;
margin: 0;
color: var(--platform-text-soft);
font-size: 11px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-project-kind-cell {
overflow: hidden;
padding-right: 16px;
color: var(--platform-text-base);
font-size: 12px;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-project-status {
display: inline-flex;
align-items: center;
justify-self: start;
max-width: calc(100% - 12px);
min-height: 24px;
gap: 5px;
overflow: hidden;
padding: 0 8px;
border-radius: 999px;
font-size: 11px;
font-weight: 700;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-project-status-ready {
background: color-mix(in srgb, #2d9d62 12%, transparent);
color: #237b4d;
}
.launcher-project-status-checking {
background: color-mix(in srgb, var(--platform-warm-text) 12%, transparent);
color: var(--platform-warm-text);
}
.launcher-project-status-warning {
background: color-mix(in srgb, #d15f45 12%, transparent);
color: #a64735;
}
.launcher-project-more {
position: relative;
display: grid;
justify-self: center;
}
.launcher-project-more-trigger {
display: grid;
width: 34px;
height: 34px;
padding: 0;
border: 0;
border-radius: 8px;
background: transparent;
color: var(--platform-text-soft);
cursor: pointer;
place-items: center;
}
.launcher-project-more-trigger:hover,
.launcher-project-more-trigger[aria-expanded='true'] {
background: var(--platform-nav-item-hover-fill);
color: var(--platform-text-strong);
}
.launcher-project-more-menu {
position: absolute;
top: 38px;
right: 0;
z-index: 20;
display: grid;
width: 164px;
gap: 4px;
padding: 6px;
border: 1px solid var(--platform-surface-border);
border-radius: 10px;
background: var(--platform-subpanel-fill);
box-shadow: 0 16px 34px rgb(75 47 32 / 18%);
}
.launcher-project-more-menu-drop-up {
top: auto;
bottom: 38px;
}
.launcher-project-more-menu button {
display: flex;
align-items: center;
justify-content: flex-start;
min-height: 34px;
gap: 8px;
padding: 0 9px;
border: 0;
border-radius: 7px;
background: transparent;
color: var(--platform-text-strong);
font-size: 12px;
font-weight: 700;
cursor: pointer;
}
.launcher-project-more-menu button:hover {
background: var(--platform-nav-item-hover-fill);
}
.launcher-project-more-menu button:disabled {
cursor: not-allowed;
opacity: 0.45;
}
.launcher-project-more-menu .launcher-project-remove-action {
color: #a64735;
}
.launcher-empty-projects {
display: grid;
justify-items: center;
gap: 12px;
min-height: 260px;
padding: 48px;
color: var(--platform-text-soft);
}
.launcher-empty-projects strong {
color: #111827;
font-size: 15px;
}
.launcher-help-cards {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.launcher-help-cards article {
display: grid;
min-height: 118px;
padding: 18px;
border: 1px solid #e5e7eb;
border-radius: 8px;
background: #fff;
color: #111827;
font-size: 14px;
font-weight: 700;
align-content: end;
}
.launcher-agent-chat-page {
padding-top: 92px;
}
.launcher-agent-chat-page > header .launcher-project-list-actions button {
height: 34px;
padding: 0 12px;
border: 1px solid #d8dde5;
border-radius: 6px;
background: #fff;
color: #111827;
font-size: 12px;
white-space: nowrap;
}
.launcher-agent-chat-page
> header
.launcher-project-list-actions
button:last-child {
border-color: #111827;
background: #111827;
color: #fff;
}
.launcher-agent-chat-layout {
display: grid;
grid-template-columns: minmax(220px, 0.3fr) minmax(0, 1fr);
align-items: start;
gap: 12px;
width: 100%;
min-width: 0;
min-height: min(620px, calc(100vh - 168px));
}
.launcher-agent-chat-sidebar,
.launcher-agent-chat-main {
min-width: 0;
border: 1px solid #e5e7eb;
border-radius: 8px;
background: #fff;
}
.launcher-agent-chat-sidebar {
display: grid;
align-content: start;
gap: 12px;
padding: 12px;
}
.launcher-agent-chat-project {
display: grid;
gap: 10px;
}
.launcher-agent-chat-project label {
display: grid;
gap: 6px;
color: #6b7280;
font-size: 12px;
}
.launcher-agent-chat-project input {
min-width: 0;
height: 34px;
padding: 0 10px;
border: 1px solid #d8dde5;
border-radius: 8px;
color: #111827;
background: #fff;
}
.launcher-agent-picker {
display: grid;
gap: 8px;
max-height: 450px;
overflow: auto;
}
.launcher-agent-picker button {
display: grid;
justify-items: start;
gap: 5px;
min-width: 0;
padding: 10px;
border: 1px solid #e5e7eb;
border-radius: 8px;
background: #fff;
color: #111827;
text-align: left;
}
.launcher-agent-picker .launcher-agent-active {
border-color: #8b5cf6;
background: #f8f2ff;
}
.launcher-agent-picker strong,
.launcher-agent-picker span,
.launcher-agent-picker small {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-agent-picker strong {
font-size: 13px;
}
.launcher-agent-picker span,
.launcher-agent-picker small {
color: #6b7280;
font-size: 11px;
}
.launcher-agent-chat-main {
display: grid;
grid-template-rows: auto auto auto auto clamp(260px, 40vh, 380px) auto;
align-content: start;
width: 100%;
overflow: visible;
}
.launcher-agent-chat-main > header {
display: flex;
justify-content: space-between;
gap: 12px;
padding: 14px;
border-bottom: 1px solid #e5e7eb;
}
.launcher-agent-chat-main h2,
.launcher-agent-chat-main p {
margin: 0;
}
.launcher-agent-chat-main h2 {
color: #111827;
font-size: 16px;
}
.launcher-agent-chat-main p,
.launcher-agent-chat-main small {
color: #6b7280;
font-size: 12px;
}
.launcher-agent-session-bar {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
align-items: center;
gap: 8px;
min-width: 0;
padding: 8px 12px;
border-bottom: 1px solid #e5e7eb;
background: #f8fafc;
}
.launcher-agent-session-actions,
.launcher-agent-session-list {
display: flex;
align-items: center;
gap: 6px;
}
.launcher-agent-session-actions button {
display: grid;
width: 30px;
height: 30px;
padding: 0;
border: 1px solid #d8dde5;
border-radius: 6px;
background: #fff;
color: #374151;
place-items: center;
}
.launcher-agent-session-list {
min-width: 0;
overflow-x: auto;
}
.launcher-agent-session-list button {
display: flex;
flex: 0 0 auto;
align-items: center;
gap: 7px;
max-width: 190px;
height: 30px;
padding: 0 9px;
border: 1px solid #d8dde5;
border-radius: 6px;
background: #fff;
color: #374151;
}
.launcher-agent-session-list button span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-agent-session-list button small {
flex: 0 0 auto;
}
.launcher-agent-session-list .launcher-agent-session-active {
border-color: #7c3aed;
background: #f5f0ff;
color: #5b21b6;
}
.launcher-agent-session-list .launcher-agent-session-archived {
border-style: dashed;
color: #6b7280;
}
.launcher-agent-session-status {
max-width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-agent-chat-messages {
grid-row: 5;
display: grid;
align-content: start;
gap: 10px;
height: clamp(260px, 40vh, 380px);
min-height: 260px;
max-height: 380px;
padding: 14px;
overflow-y: auto;
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.launcher-agent-chat-messages .message {
max-width: min(720px, 88%);
margin: 0;
padding: 9px 12px;
border-radius: 14px;
line-height: 1.55;
}
.launcher-agent-chat-messages .message--user {
justify-self: end;
border: 1px solid #d8c4a8;
border-radius: 14px 14px 4px;
background: #fff7ed;
color: #8a4b08;
}
.launcher-agent-chat-waiting {
position: sticky;
bottom: 0;
display: flex;
align-items: center;
gap: 9px;
width: fit-content;
max-width: 100%;
padding: 9px 11px;
border: 1px solid #d8dde5;
border-radius: 8px;
background: #f8fafc;
box-shadow: 0 4px 12px rgb(15 23 42 / 8%);
color: #374151;
}
.launcher-agent-chat-waiting > span {
width: 14px;
height: 14px;
flex: 0 0 auto;
border: 2px solid #cbd5e1;
border-top-color: #111827;
border-radius: 50%;
animation: launcher-agent-chat-spin 0.8s linear infinite;
}
.launcher-agent-chat-waiting strong {
display: block;
min-width: 0;
font-size: 12px;
overflow-wrap: anywhere;
}
.launcher-agent-chat-waiting small {
display: block;
margin-top: 2px;
color: #6b7280;
font-size: 11px;
}
@keyframes launcher-agent-chat-spin {
to {
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: reduce) {
.launcher-agent-chat-waiting > span {
animation: none;
}
}
.launcher-agent-chat-composer {
grid-row: 6;
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
align-items: center;
gap: 8px;
padding: 12px;
border-top: 1px solid #e5e7eb;
}
.launcher-agent-chat-composer input {
min-width: 0;
height: 36px;
padding: 0 12px;
border: 1px solid #d8dde5;
border-radius: 8px;
color: #111827;
background: #fff;
}
.launcher-agent-chat-composer button {
height: 36px;
padding: 0 14px;
border: 0;
border-radius: 8px;
background: #111827;
color: #fff;
}
.launcher-agent-chat-mode {
display: grid;
grid-template-columns: repeat(3, auto);
gap: 2px;
padding: 2px;
border: 1px solid #d8dde5;
border-radius: 8px;
background: #f3f4f6;
}
.launcher-agent-chat-mode button {
height: 30px;
padding: 0 9px;
border-radius: 6px;
background: transparent;
color: #6b7280;
font-size: 12px;
}
.launcher-agent-chat-mode button.is-active {
background: #fff;
box-shadow: 0 1px 2px rgb(15 23 42 / 10%);
color: #111827;
}
.launcher-agent-goal-composer-summary {
min-width: 0;
height: 36px;
padding: 0 12px;
border: 1px solid #d8dde5;
border-radius: 8px;
background: #f8fafc;
color: #44536a;
font-size: 12px;
line-height: 34px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-agent-runtime-stack {
display: grid;
gap: 8px;
}
.launcher-agent-runtime-stack .agent-runtime-status {
margin-top: 0;
}
.launcher-agent-goal-status {
display: grid;
gap: 7px;
margin: 12px 14px 0;
padding: 10px 12px;
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #fff;
color: #111827;
}
.launcher-agent-goal-status header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 10px;
}
.launcher-agent-goal-status header > div:first-child,
.launcher-agent-goal-copy {
display: grid;
min-width: 0;
gap: 3px;
}
.launcher-agent-goal-status strong {
font-size: 13px;
}
.launcher-agent-goal-status p,
.launcher-agent-goal-status small {
margin: 0;
color: #647084;
font-size: 12px;
overflow-wrap: anywhere;
}
.launcher-agent-goal-actions {
display: flex;
flex: 0 0 auto;
flex-wrap: wrap;
justify-content: flex-end;
gap: 6px;
}
.launcher-agent-goal-actions button {
display: inline-flex;
align-items: center;
gap: 5px;
height: 28px;
padding: 0 9px;
border: 1px solid #d8dde5;
border-radius: 7px;
background: #fff;
color: #111827;
font-size: 12px;
}
.launcher-agent-goal-actions button:disabled {
background: #eef2f7;
color: #9aa3b2;
}
.agent-llm-warning {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin: 12px 14px 0;
padding: 10px 12px;
border: 1px solid #f4c7a1;
border-radius: 8px;
background: #fff7ed;
color: #8a3b12;
font-size: 13px;
}
.agent-llm-warning strong {
min-width: 0;
font-weight: 700;
overflow-wrap: anywhere;
}
.agent-llm-warning button {
flex: 0 0 auto;
height: 30px;
padding: 0 10px;
border: 1px solid #f4c7a1;
border-radius: 7px;
background: #fff;
color: #8a3b12;
}
.agent-runtime-status {
display: grid;
gap: 6px;
margin: 12px 14px 0;
padding: 10px 12px;
border: 1px solid #d8dde5;
border-radius: 8px;
background: #f8fafd;
color: #111827;
}
.agent-conversation-panel > .agent-runtime-status {
margin: 0;
}
.agent-runtime-status header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.agent-runtime-status .agent-runtime-status-header-actions {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
}
.agent-runtime-status-header-actions small {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.agent-runtime-status .agent-runtime-collapse-toggle {
display: grid;
width: 28px;
height: 28px;
flex: 0 0 auto;
padding: 0;
border: 1px solid #d8dde5;
border-radius: 7px;
background: #fff;
color: #44536a;
cursor: pointer;
place-items: center;
}
.agent-runtime-status .agent-runtime-collapse-toggle:hover,
.agent-runtime-status .agent-runtime-collapse-toggle:focus-visible {
border-color: #aeb8c7;
background: #f3f6fa;
}
.agent-runtime-status .agent-runtime-status-details {
display: grid;
gap: 6px;
}
.agent-runtime-status .agent-runtime-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.agent-runtime-status .agent-runtime-actions button {
height: 28px;
padding: 0 10px;
border: 1px solid #d8dde5;
border-radius: 7px;
background: #fff;
color: #111827;
font-size: 12px;
}
.agent-runtime-status .agent-runtime-actions button:disabled {
color: #9aa3b2;
background: #eef2f7;
}
.agent-runtime-status strong {
font-size: 13px;
}
.agent-runtime-status p,
.agent-runtime-status ol {
margin: 0;
}
.agent-runtime-status p,
.agent-runtime-status li,
.agent-runtime-status small {
color: #647084;
font-size: 12px;
overflow-wrap: anywhere;
}
.agent-runtime-status ol {
display: grid;
gap: 3px;
padding-left: 18px;
}
.agent-runtime-status div {
display: grid;
gap: 3px;
}
.agent-runtime-status .agent-runtime-event-toggle {
justify-self: start;
min-height: 24px;
padding: 0;
border: 0;
background: transparent;
color: #44536a;
font-size: 12px;
text-decoration: underline;
text-underline-offset: 2px;
}
.agent-runtime-status .agent-runtime-user-input {
display: grid;
gap: 10px;
padding-top: 10px;
border-top: 1px solid #d8dde5;
}
.agent-runtime-user-input header small {
color: #8a3b12;
}
.agent-runtime-user-input fieldset {
display: grid;
min-width: 0;
gap: 8px;
margin: 0;
padding: 0;
border: 0;
}
.agent-runtime-user-input legend {
padding: 0;
color: #111827;
font-size: 12px;
font-weight: 700;
}
.agent-runtime-user-input-options {
grid-template-columns: repeat(auto-fit, minmax(168px, 1fr));
gap: 8px;
}
.agent-runtime-user-input-options button {
display: grid;
min-height: 56px;
gap: 3px;
padding: 8px 10px;
border: 1px solid #cfd6e1;
border-radius: 7px;
background: #fff;
color: #111827;
text-align: left;
cursor: pointer;
}
.agent-runtime-user-input-options button:hover,
.agent-runtime-user-input-options button:focus-visible {
border-color: #9da8b8;
background: #f5f7fa;
}
.agent-runtime-user-input-options button[aria-pressed='true'] {
border-color: #e46f2c;
background: #fff7ed;
box-shadow: inset 0 0 0 1px #e46f2c;
}
.agent-runtime-user-input-options button:disabled {
cursor: default;
opacity: 0.68;
}
.agent-runtime-user-input textarea {
width: 100%;
min-height: 58px;
padding: 8px 10px;
border: 1px solid #cfd6e1;
border-radius: 7px;
background: #fff;
color: #111827;
font: inherit;
line-height: 1.45;
resize: vertical;
}
.agent-runtime-user-input textarea:focus-visible {
border-color: #e46f2c;
outline: 2px solid rgb(228 111 44 / 16%);
outline-offset: 1px;
}
.agent-runtime-user-input .agent-runtime-user-input-submit {
justify-self: end;
min-height: 32px;
padding: 0 12px;
border: 1px solid #cf5f22;
border-radius: 7px;
background: #e46f2c;
color: #fff;
font-size: 12px;
font-weight: 700;
}
.agent-runtime-user-input .agent-runtime-user-input-submit:disabled {
border-color: #cfd6e1;
background: #e8ecf2;
color: #8b95a5;
}
.agent-runtime-status .agent-runtime-user-input-missing {
padding-top: 8px;
border-top: 1px solid #d8dde5;
color: #9a3412;
}
.launcher-project-development {
padding-top: 92px;
}
.launcher-development-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.launcher-development-grid article,
.launcher-development-canvas,
.launcher-development-assets {
border: 1px solid #e5e7eb;
border-radius: 8px;
background: #fff;
}
.launcher-development-grid article {
display: grid;
align-content: start;
gap: 8px;
min-height: 108px;
padding: 14px;
}
.launcher-development-grid span,
.launcher-development-assets h2 {
color: #6b7280;
font-size: 12px;
font-weight: 500;
}
.launcher-development-grid strong {
min-width: 0;
color: #111827;
font-size: 15px;
overflow-wrap: anywhere;
}
.launcher-development-grid small {
color: #8b8b8b;
font-size: 11px;
}
.launcher-development-canvas {
display: grid;
min-height: 300px;
background: linear-gradient(#f3f4f6 1px, transparent 1px),
linear-gradient(90deg, #f3f4f6 1px, transparent 1px), #fff;
background-size: 24px 24px;
place-items: center;
}
.launcher-development-canvas > div {
display: grid;
justify-items: center;
gap: 8px;
color: #6b7280;
}
.launcher-development-canvas strong {
color: #111827;
font-size: 16px;
}
.launcher-development-assets {
display: grid;
gap: 8px;
padding: 14px;
}
.launcher-development-assets h2,
.launcher-development-assets p {
margin: 0;
}
.launcher-development-assets div {
display: grid;
grid-template-columns: minmax(0, 0.45fr) minmax(0, 1fr);
gap: 12px;
min-height: 32px;
align-items: center;
}
.launcher-development-assets span,
.launcher-development-assets small {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-development-assets span {
color: #111827;
font-size: 12px;
}
.launcher-development-assets small,
.launcher-development-assets p {
color: #6b7280;
font-size: 12px;
}
.supervisor-chat-only-shell {
display: grid;
grid-template-rows: 64px minmax(0, 1fr) auto;
width: 100%;
height: 100vh;
min-width: 0;
min-height: 480px;
overflow: hidden;
background: #f5f6f8;
color: #111827;
}
.supervisor-chat-only-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
min-width: 0;
padding: 0 18px;
border-bottom: 1px solid #e1e5eb;
background: #fff;
}
.supervisor-chat-only-header > div,
.supervisor-chat-only-header-status {
display: flex;
align-items: center;
min-width: 0;
}
.supervisor-chat-only-header > div:first-child {
gap: 10px;
}
.supervisor-chat-only-header strong {
flex: 0 0 auto;
font-size: 15px;
}
.supervisor-chat-only-header span {
min-width: 0;
overflow: hidden;
color: #6b7280;
font-size: 12px;
text-overflow: ellipsis;
white-space: nowrap;
}
.supervisor-chat-only-header-status {
justify-content: flex-end;
gap: 10px;
max-width: 52%;
}
.supervisor-chat-only-header-status button {
display: grid;
width: 34px;
height: 34px;
flex: 0 0 auto;
padding: 0;
border: 1px solid #d8dde5;
border-radius: 6px;
background: #fff;
color: #374151;
place-items: center;
}
.supervisor-chat-only-message-list {
display: flex;
flex-direction: column;
gap: 10px;
min-width: 0;
min-height: 0;
padding: 22px clamp(16px, 4vw, 40px);
border: 0;
overflow-y: auto;
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.supervisor-chat-only-message-list .message {
display: grid;
gap: 5px;
align-self: flex-start;
width: fit-content;
max-width: min(720px, 86%);
margin: 0;
padding: 10px 12px;
border: 1px solid #dfe3e9;
border-radius: 8px;
background: #fff;
color: #263142;
line-height: 1.55;
}
.supervisor-chat-only-message-list .message--user {
align-self: flex-end;
border-color: #cfd6df;
background: #e9edf2;
color: #111827;
}
.supervisor-chat-only-message-list .supervisor-chat-only-stream {
border-color: #b9d8c5;
}
.supervisor-chat-only-waiting {
position: static;
align-self: flex-start;
}
.supervisor-chat-only-runtime-controls {
align-self: stretch;
width: 100%;
max-width: 720px;
}
.supervisor-chat-only-runtime-controls .agent-runtime-user-input {
display: grid;
gap: 10px;
padding: 14px;
border: 1px solid #d8dde5;
border-radius: 8px;
background: #f7f8fa;
}
.supervisor-chat-only-runtime-controls .agent-runtime-user-input header {
display: grid;
gap: 3px;
}
.supervisor-chat-only-runtime-controls .pending-command,
.supervisor-chat-only-runtime-controls .agent-runtime-user-input {
margin: 0;
}
.supervisor-chat-only-runtime-controls .pending-command {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
}
.pending-command-actions {
display: flex;
align-items: center;
gap: 8px;
flex: 0 0 auto;
}
.supervisor-chat-only-composer {
display: grid;
grid-template-columns: minmax(0, 1fr) 42px;
align-items: end;
gap: 10px;
padding: 14px clamp(16px, 4vw, 40px) 18px;
border-top: 1px solid #e1e5eb;
background: #fff;
}
.supervisor-chat-only-composer textarea {
width: 100%;
min-width: 0;
height: 74px;
max-height: 74px;
padding: 11px 12px;
overflow-y: auto;
resize: none;
border: 1px solid #cfd6df;
border-radius: 8px;
background: #fff;
color: #111827;
font: inherit;
line-height: 1.5;
}
.supervisor-chat-only-composer textarea:focus-visible {
border-color: #6b7280;
outline: 2px solid rgb(107 114 128 / 18%);
outline-offset: 1px;
}
.supervisor-chat-only-composer button {
display: grid;
width: 42px;
height: 42px;
padding: 0;
border: 0;
border-radius: 8px;
background: #111827;
color: #fff;
place-items: center;
}
.supervisor-chat-only-composer button:disabled,
.supervisor-chat-only-composer textarea:disabled {
cursor: not-allowed;
opacity: 0.55;
}
.local-game-preview-frame {
position: relative;
width: 100%;
height: 100%;
min-width: 0;
min-height: 0;
overflow: hidden;
background: #05070b;
}
.local-game-preview-frame iframe {
position: absolute;
top: 50%;
left: 50%;
display: block;
max-width: none;
max-height: none;
border: 0;
background: #fff;
transform-origin: center;
}
@media (max-width: 600px) {
.supervisor-chat-only-header {
padding: 0 12px;
}
.supervisor-chat-only-header > div:first-child > span {
display: none;
}
.supervisor-chat-only-header-status {
max-width: 58%;
}
.supervisor-chat-only-message-list .message {
max-width: 92%;
}
.supervisor-chat-only-composer {
padding-right: 12px;
padding-left: 12px;
}
}
.project-supervisor-surface {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(220px, 280px);
gap: 18px;
min-width: 0;
min-height: 560px;
}
.project-supervisor-conversation {
display: grid;
grid-template-rows: minmax(340px, 1fr) auto auto auto;
align-content: stretch;
gap: 10px;
min-width: 0;
}
.project-supervisor-message-list {
min-height: 340px;
max-height: calc(100vh - 330px);
border-radius: 8px;
background: #fff;
}
.project-supervisor-process-card {
display: grid;
gap: 9px;
margin-top: 12px;
padding: 12px 14px;
border: 1px solid #b9d8c5;
border-radius: 8px;
background: #f1f8f3;
color: #1f3d2a;
}
.project-supervisor-process-card > header {
display: flex;
align-items: center;
gap: 8px;
}
.project-supervisor-process-card > header > span {
width: 8px;
height: 8px;
flex: 0 0 auto;
border-radius: 50%;
background: #2f855a;
box-shadow: 0 0 0 4px rgb(47 133 90 / 14%);
animation: project-supervisor-process-pulse 1.2s ease-in-out infinite;
}
@keyframes project-supervisor-process-pulse {
50% {
opacity: 0.42;
transform: scale(0.76);
}
}
@media (prefers-reduced-motion: reduce) {
.project-supervisor-process-card > header > span {
animation: none;
}
}
.project-supervisor-process-card p {
margin: 0;
color: #263142;
font-size: 13px;
line-height: 1.55;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.game-workbench-chat .project-supervisor-process-card {
border-color: var(--platform-surface-border);
background: var(--platform-warm-bg);
color: var(--platform-text-strong);
}
.game-workbench-chat .project-supervisor-process-card p {
color: var(--platform-text-base);
}
.project-supervisor-surface .agent-runtime-status {
margin: 0;
}
.project-supervisor-surface .agent-runtime-status header,
.project-supervisor-collaboration header {
align-items: center;
}
.project-runtime-title {
display: inline-flex;
align-items: center;
gap: 7px;
min-width: 0;
}
.project-runtime-live-dot {
width: 8px;
height: 8px;
flex: 0 0 auto;
border-radius: 50%;
background: #94a3b8;
}
.project-runtime-live-dot.is-running {
background: #22a35a;
box-shadow: 0 0 0 4px rgb(34 163 90 / 13%);
animation: project-runtime-pulse 1.6s ease-in-out infinite;
}
.project-runtime-live-dot.is-waiting {
background: #df8a16;
box-shadow: 0 0 0 4px rgb(223 138 22 / 13%);
}
.project-runtime-live-dot.is-failed {
background: #d64545;
box-shadow: 0 0 0 4px rgb(214 69 69 / 13%);
}
.project-runtime-live-dot.is-completed {
background: #2878d4;
}
@keyframes project-runtime-pulse {
50% {
opacity: 0.5;
transform: scale(0.82);
}
}
.agent-runtime-status .project-runtime-overview {
gap: 5px;
padding: 9px 10px;
border-radius: 8px;
background: #eef4ff;
}
.project-runtime-overview > span {
color: #53657c;
font-size: 11px;
}
.agent-runtime-status .project-runtime-plan-progress {
grid-template-columns: auto minmax(0, 1fr);
align-items: center;
gap: 8px;
}
.project-runtime-plan-progress span {
color: #53657c;
font-size: 10px;
}
.project-runtime-plan-progress progress {
width: 100%;
height: 6px;
accent-color: #2c73d2;
}
.agent-runtime-status .project-runtime-professional-list {
gap: 7px;
padding-top: 7px;
border-top: 1px solid #d8dde5;
}
.project-runtime-professional-list article {
display: grid;
gap: 4px;
padding: 8px 9px;
border: 1px solid #dfe5ed;
border-left-width: 3px;
border-radius: 8px;
background: #fff;
}
.project-runtime-professional-list article.is-running {
border-left-color: #22a35a;
}
.project-runtime-professional-list article.is-waiting {
border-left-color: #df8a16;
background: #fffaf0;
}
.project-runtime-professional-list article.is-failed {
border-left-color: #d64545;
background: #fff7f7;
}
.project-runtime-professional-list article.is-completed {
border-left-color: #2878d4;
}
.project-runtime-professional-list article > header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.project-runtime-professional-list article > header span {
color: #475569;
font-size: 10px;
font-weight: 700;
}
.project-runtime-professional-list article p {
display: -webkit-box;
overflow: hidden;
color: #334155;
font-size: 11px;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.agent-runtime-status .project-runtime-professional-actions {
grid-template-columns: minmax(0, 1fr) auto auto;
align-items: center;
gap: 6px;
margin-top: 3px;
}
.project-runtime-professional-actions span {
min-width: 0;
overflow: hidden;
color: #8a5a12;
font-size: 10px;
text-overflow: ellipsis;
white-space: nowrap;
}
.project-runtime-professional-actions button {
height: 25px;
padding: 0 8px;
border: 1px solid #d8b677;
border-radius: 6px;
background: #fff;
color: #785012;
font-size: 10px;
}
.project-runtime-professional-actions button:last-child {
border-color: #2c73d2;
background: #2c73d2;
color: #fff;
}
.project-runtime-professional-actions button:disabled {
opacity: 0.55;
}
.agent-runtime-status .project-runtime-error {
color: #b42323;
}
.agent-runtime-status .project-runtime-retry-feedback {
display: block;
margin-top: 4px;
color: #2c5f9f;
font-size: 10px;
}
.agent-runtime-status .project-runtime-recovery {
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: 7px;
padding: 8px;
border: 1px solid #efc3bd;
border-radius: 8px;
background: #fff7f5;
}
.project-runtime-recovery > span {
display: grid;
min-width: 0;
gap: 2px;
color: #7f2f2a;
font-size: 11px;
}
.project-runtime-recovery > span small {
color: #775b58;
font-size: 10px;
}
.project-runtime-recovery > button {
min-height: 30px;
padding: 0 10px;
border: 1px solid #d6614f;
border-radius: 7px;
background: #d6614f;
color: #fff;
font-size: 10px;
font-weight: 700;
white-space: nowrap;
}
.project-runtime-recovery > button:disabled {
opacity: 0.58;
}
.project-runtime-recovery > .project-runtime-retry-feedback {
grid-column: 1 / -1;
margin: 0;
}
.agent-runtime-status .project-runtime-pending-command {
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: 12px;
margin-top: 4px;
padding: 10px 12px;
border: 1px solid var(--platform-surface-border);
border-radius: 10px;
background: var(--platform-warm-bg);
}
.agent-runtime-status .project-runtime-pending-command button {
min-width: 52px;
height: 34px;
flex: 0 0 auto;
border: 1px solid var(--platform-surface-border);
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
font-size: 11px;
font-weight: 800;
}
.agent-runtime-status .project-runtime-pending-command small {
font-size: 10px;
}
.project-supervisor-composer {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: end;
gap: 10px;
}
.project-supervisor-composer textarea {
min-width: 0;
min-height: 72px;
max-height: 180px;
padding: 10px 12px;
resize: vertical;
border: 1px solid #cfd7e6;
border-radius: 8px;
background: #fff;
color: #111827;
font: inherit;
line-height: 1.5;
}
.project-supervisor-composer button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
min-width: 84px;
height: 40px;
padding: 0 16px;
border: 1px solid #1f6feb;
border-radius: 8px;
background: #1f6feb;
color: #fff;
}
.project-supervisor-composer button:disabled {
border-color: #cfd6e1;
background: #e8ecf2;
color: #8b95a5;
}
.project-supervisor-workspace-status {
color: #7b8492;
font-size: 11px;
overflow-wrap: anywhere;
}
.project-supervisor-collaboration {
min-width: 0;
padding-left: 18px;
border-left: 1px solid #e5e7eb;
}
.project-supervisor-collaboration header {
display: flex;
justify-content: space-between;
gap: 10px;
margin-bottom: 8px;
}
.project-supervisor-collaboration h2,
.project-supervisor-collaboration p {
margin: 0;
}
.project-supervisor-collaboration h2 {
color: #111827;
font-size: 14px;
}
.project-supervisor-collaboration header small,
.project-supervisor-collaboration p {
color: #8b8b8b;
font-size: 11px;
}
.project-supervisor-collaboration > div {
display: grid;
}
.project-supervisor-collaboration article {
display: grid;
gap: 5px;
min-width: 0;
padding: 10px 0;
border-top: 1px solid #eef0f3;
}
.project-supervisor-collaboration article strong {
color: #111827;
font-size: 12px;
}
.project-supervisor-collaboration article span,
.project-supervisor-collaboration article small {
color: #647084;
font-size: 11px;
overflow-wrap: anywhere;
}
.launcher-card-collage {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 2px;
}
.launcher-card-collage span:nth-child(1) {
background: radial-gradient(circle at 45% 38%, #6b5c43 0 18%, transparent 19%),
radial-gradient(circle at 62% 54%, #2f2a23 0 25%, transparent 26%),
linear-gradient(135deg, #91a17e, #2c3327);
}
.launcher-card-collage span:nth-child(2) {
background: radial-gradient(circle at 58% 45%, #b28b5a 0 16%, transparent 17%),
radial-gradient(circle at 48% 55%, #302114 0 24%, transparent 25%),
linear-gradient(135deg, #d9e8ef, #9fb0a0);
}
.launcher-card-collage span:nth-child(3) {
background: radial-gradient(circle at 50% 54%, #eac9c0 0 22%, transparent 23%),
linear-gradient(135deg, #f7d9d5, #dab6aa);
}
.launcher-card-collage span:nth-child(4) {
background: radial-gradient(circle at 56% 50%, #32271b 0 22%, transparent 23%),
linear-gradient(135deg, #8e6c4e, #2b211b);
}
.launcher-card-ui > div {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 8px;
padding: 16px;
background: #fff7f2;
}
.launcher-card-ui span {
border-radius: 4px;
background:
linear-gradient(#ff8d5c 0 0) 12px 12px / 40px 4px no-repeat,
linear-gradient(#ffd4c2 0 0) 12px 24px / 70px 4px no-repeat,
linear-gradient(#fee4d8, #fff);
box-shadow: inset 0 0 0 1px #fed7c8;
}
.launcher-card-pattern > div {
display: grid;
grid-template-columns: repeat(2, 1fr);
background: linear-gradient(
45deg,
transparent 46%,
#fff 46% 54%,
transparent 54%
),
linear-gradient(135deg, #55405a, #e4b2a7);
}
.launcher-card-pattern span {
display: grid;
color: #fff;
font-size: 38px;
place-items: center;
text-shadow: 0 2px 8px rgb(0 0 0 / 18%);
}
.launcher-card-orange > div {
display: grid;
grid-template-columns: 1.1fr 1fr;
background: #fff8ee;
}
.launcher-card-orange span:first-child {
display: grid;
color: #ff7a1a;
font-size: 32px;
font-weight: 900;
place-items: start;
padding: 18px;
}
.launcher-card-orange span:last-child {
display: grid;
color: #f06d3d;
font-size: 96px;
font-weight: 900;
line-height: 1;
place-items: center;
}
@media (max-width: 760px) {
.launcher-main {
grid-template-rows: auto auto auto;
overflow: visible;
}
.launcher-promo {
justify-content: flex-start;
min-height: 38px;
padding: 7px 10px;
overflow: hidden;
font-size: 11px;
}
.launcher-promo
span:not(.launcher-countdown):not(:nth-child(3)):not(:nth-child(6)):not(
:nth-child(9)
) {
display: none;
}
.launcher-promo strong {
overflow: hidden;
text-overflow: ellipsis;
}
.launcher-account-bar {
position: static;
justify-content: flex-end;
padding: 18px 14px 0;
}
.launcher-account-bar span {
max-width: 148px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.launcher-page {
width: min(100%, calc(100vw - 76px));
}
.launcher-projects-page {
width: calc(100vw - var(--launcher-sidebar-width));
padding: 72px 18px 20px;
}
.launcher-agent-chat-page > header,
.launcher-agent-chat-main > header {
align-items: stretch;
flex-direction: column;
gap: 10px;
}
.launcher-agent-chat-main > header > small {
max-width: 100%;
overflow-wrap: anywhere;
}
.launcher-development-grid {
grid-template-columns: 1fr;
}
.launcher-agent-chat-layout {
grid-template-columns: 1fr;
min-height: auto;
}
.launcher-agent-picker {
max-height: 240px;
}
.launcher-agent-chat-main {
min-height: 620px;
}
.launcher-agent-chat-composer {
grid-template-columns: minmax(0, 1fr) auto;
}
.launcher-agent-chat-mode {
grid-column: 1 / -1;
justify-self: start;
}
.launcher-agent-goal-status header {
align-items: stretch;
flex-direction: column;
}
.launcher-agent-goal-actions {
justify-content: flex-start;
}
.agent-runtime-user-input-options {
grid-template-columns: 1fr;
}
.agent-runtime-user-input .agent-runtime-user-input-submit {
width: 100%;
justify-self: stretch;
}
.launcher-agent-session-bar {
grid-template-columns: auto minmax(0, 1fr);
}
.launcher-agent-session-status {
display: none;
}
.launcher-development-assets div {
grid-template-columns: 1fr;
}
.project-supervisor-surface {
grid-template-columns: 1fr;
min-height: auto;
}
.project-supervisor-conversation {
grid-template-rows: minmax(320px, auto) auto auto auto;
}
.project-supervisor-message-list {
max-height: 52vh;
}
.project-supervisor-composer {
grid-template-columns: 1fr;
}
.project-supervisor-composer button {
width: 100%;
}
.project-supervisor-collaboration {
padding: 14px 0 0;
border-top: 1px solid #e5e7eb;
border-left: 0;
}
}
.launcher-dialog-backdrop {
position: fixed;
top: var(--window-chrome-height);
right: 0;
bottom: 0;
left: 0;
z-index: 200;
display: grid;
padding: 24px;
background: rgb(0 0 0 / 56%);
place-items: center;
}
.launcher-dialog {
width: min(420px, 100%);
padding: 20px;
border: 1px solid #e5e7eb;
border-radius: 8px;
background: #fff;
color: #171717;
box-shadow: 0 18px 52px rgb(0 0 0 / 18%);
}
.launcher-dialog h2 {
margin: 0 0 10px;
font-size: 18px;
}
.launcher-dialog p {
margin: 0;
color: #6b7280;
overflow-wrap: anywhere;
}
.project-professional-result-dialog {
width: min(760px, 100%);
max-height: min(760px, calc(100vh - 48px));
overflow: hidden;
}
.project-professional-result-dialog header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
margin-bottom: 14px;
}
.project-professional-result-dialog header button {
min-height: 32px;
padding: 0 12px;
border: 1px solid #e1c8bb;
border-radius: 8px;
background: #fff;
color: #7a4c37;
}
.project-professional-result-dialog pre {
max-height: min(620px, calc(100vh - 170px));
margin: 0;
overflow: auto;
padding: 16px;
border-radius: 10px;
background: #f8f2ee;
color: #49372f;
font: inherit;
line-height: 1.65;
white-space: pre-wrap;
overflow-wrap: anywhere;
user-select: text;
}
.launcher-agent-goal-dialog {
width: min(560px, 100%);
max-height: min(760px, calc(100vh - 48px));
overflow-y: auto;
}
.launcher-agent-goal-fields {
display: grid;
gap: 12px;
}
.launcher-agent-goal-fields label {
display: grid;
gap: 6px;
color: #44536a;
font-size: 12px;
font-weight: 700;
}
.launcher-agent-goal-fields textarea {
width: 100%;
min-width: 0;
padding: 9px 10px;
border: 1px solid #d8dde5;
border-radius: 8px;
background: #fff;
color: #111827;
font: inherit;
line-height: 1.5;
resize: vertical;
}
.launcher-agent-goal-fields textarea:focus-visible {
border-color: #64748b;
outline: 2px solid rgb(100 116 139 / 18%);
outline-offset: 1px;
}
.launcher-dialog .launcher-agent-goal-dialog-error {
margin-top: 10px;
color: #b42318;
font-size: 12px;
}
.launcher-dialog-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 18px;
}
.launcher-dialog-actions button {
height: 34px;
padding: 0 14px;
border: 1px solid #d1d5db;
border-radius: 6px;
background: #fff;
color: #171717;
cursor: pointer;
}
.launcher-dialog-actions button:last-child {
border-color: #111827;
background: #111827;
color: #fff;
}
.app-shell {
min-height: 100vh;
background: #f5f7fb;
}
.app-shell--user {
display: flex;
justify-content: center;
padding: 24px;
}
.app-shell--dev {
display: grid;
grid-template-columns: minmax(360px, 0.85fr) minmax(520px, 1.15fr);
gap: 1px;
background: #d9dee8;
}
.chat-pane {
display: flex;
flex-direction: column;
gap: 16px;
min-width: 0;
padding: 18px;
background: #fff;
}
.app-shell--user .chat-pane {
width: min(900px, 100%);
min-height: calc(100vh - 48px);
border: 1px solid #d9dee8;
}
.app-shell--dev .chat-pane {
min-height: 100vh;
}
.chat-header,
.panel-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.chat-header-title {
display: grid;
gap: 4px;
min-width: 0;
}
.chat-header-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.chat-quick-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.panel-header {
margin-bottom: 10px;
}
.panel-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.panel-header button,
.chat-header button,
.chat-quick-actions button,
.local-project-form button,
.panel-actions select {
height: 32px;
padding: 0 12px;
border: 1px solid #cfd7e6;
border-radius: 6px;
}
.panel-header button,
.chat-header button,
.chat-quick-actions button,
.local-project-form button {
color: #fff;
background: #1f6feb;
}
.panel-actions select {
background: #fff;
}
h1,
h2,
p {
margin: 0;
}
h1 {
font-size: 24px;
}
h2 {
margin-bottom: 14px;
font-size: 16px;
}
.chat-header span,
.chat-header small,
.task-pane span,
.log-pane p {
color: #647084;
}
.chat-header small {
overflow-wrap: anywhere;
}
.run-history {
display: flex;
flex-wrap: wrap;
gap: 8px;
max-height: 190px;
overflow: auto;
}
.run-history button {
display: grid;
gap: 2px;
min-width: 150px;
max-width: 100%;
padding: 7px 9px;
border: 1px solid #dce3ee;
border-radius: 6px;
background: #f8fafc;
color: #18202f;
text-align: left;
}
.run-history button[aria-current='true'],
.trace-history button[aria-current='true'] {
border-color: #1f6feb;
background: #eef5ff;
}
.run-history small {
color: #647084;
overflow-wrap: anywhere;
}
.run-history-more {
align-self: center;
}
.settings-overlay {
position: fixed;
top: var(--window-chrome-height);
right: 0;
bottom: 0;
left: 0;
z-index: 220;
display: grid;
place-items: center;
padding: 24px;
background: rgb(24 32 47 / 48%);
backdrop-filter: blur(6px);
}
.runtime-settings-toast {
position: absolute;
top: 24px;
right: 24px;
z-index: 1;
display: inline-flex;
align-items: center;
gap: 8px;
max-width: min(420px, calc(100vw - 48px));
padding: 11px 14px;
border: 1px solid var(--platform-success-border);
border-radius: 12px;
background: #edf8ef;
box-shadow: var(--platform-panel-shadow);
color: var(--platform-success-text);
font-size: 12px;
font-weight: 700;
pointer-events: none;
}
.runtime-settings-toast[data-tone='error'] {
border-color: var(--platform-warm-border);
background: #fff1ea;
color: var(--platform-warm-text);
}
.runtime-settings-toast span {
overflow-wrap: anywhere;
}
.settings-panel {
display: grid;
gap: 10px;
width: min(920px, 100%);
max-height: calc(100vh - 36px);
padding: 18px;
overflow: auto;
border: 1px solid #cfd7e6;
background: #fff;
}
.runtime-settings-panel {
--runtime-settings-fill: #fffdfa;
--runtime-settings-topbar-fill: #fffdf9;
--runtime-settings-nav-fill: #fdf7f1;
--runtime-settings-content-fill: #fffaf6;
--runtime-settings-subpanel-fill: #fffdfb;
grid-template-rows: auto minmax(0, 1fr) auto;
gap: 0;
width: min(1080px, 100%);
height: min(760px, calc(100dvh - 48px));
max-height: calc(100dvh - 48px);
padding: 0;
overflow: hidden;
border-color: var(--platform-modal-border);
border-radius: 18px;
background: var(--runtime-settings-fill);
box-shadow: var(--platform-panel-shadow);
}
.runtime-settings-header,
.runtime-settings-footer,
.runtime-settings-section-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.runtime-settings-header {
min-height: 76px;
padding: 15px 18px 14px 22px;
border-bottom: 1px solid var(--platform-line-soft);
background: var(--runtime-settings-topbar-fill);
}
.runtime-settings-header > div {
display: grid;
gap: 3px;
}
.runtime-settings-eyebrow {
color: var(--platform-accent);
font-size: 9px;
font-weight: 900;
letter-spacing: 0.16em;
}
.runtime-settings-header h2 {
margin: 0;
color: var(--platform-text-strong);
font-size: 20px;
letter-spacing: -0.02em;
}
.runtime-settings-close {
display: grid;
width: 36px;
height: 36px;
padding: 0;
border: 1px solid var(--platform-surface-border);
border-radius: 10px;
background: var(--platform-button-ghost-fill);
color: var(--platform-button-ghost-text);
cursor: pointer;
place-items: center;
}
.runtime-settings-layout {
display: grid;
grid-template-columns: 224px minmax(0, 1fr);
min-height: 0;
overflow: hidden;
}
.runtime-settings-nav {
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 18px;
min-height: 0;
padding: 16px 12px;
overflow-y: auto;
border-right: 1px solid var(--platform-line-soft);
background: var(--runtime-settings-nav-fill);
}
.runtime-settings-nav nav {
display: grid;
gap: 6px;
}
.runtime-settings-nav nav button {
display: grid;
grid-template-columns: 28px minmax(0, 1fr);
align-items: center;
gap: 8px;
min-height: 54px;
padding: 8px 10px;
border: 1px solid transparent;
border-radius: 12px;
background: transparent;
color: var(--platform-text-base);
text-align: left;
cursor: pointer;
}
.runtime-settings-nav nav button > svg {
color: var(--platform-text-soft);
justify-self: center;
}
.runtime-settings-nav nav button > span {
display: grid;
gap: 2px;
min-width: 0;
}
.runtime-settings-nav nav strong {
color: inherit;
font-size: 12px;
}
.runtime-settings-nav nav small {
overflow: hidden;
color: var(--platform-text-soft);
font-size: 9px;
text-overflow: ellipsis;
white-space: nowrap;
}
.runtime-settings-nav nav button:hover {
border-color: var(--platform-surface-border);
background: var(--platform-button-ghost-fill);
}
.runtime-settings-nav nav button.is-active {
border-color: var(--platform-nav-active-border);
background: var(--platform-nav-active-fill);
color: var(--platform-text-strong);
box-shadow: var(--platform-nav-active-shadow);
}
.runtime-settings-nav nav button.is-active > svg {
color: var(--platform-accent);
}
.runtime-settings-config-state {
display: grid;
gap: 3px;
padding: 10px;
border-top: 1px solid var(--platform-line-soft);
}
.runtime-settings-config-state span,
.runtime-settings-config-state small {
color: var(--platform-text-soft);
font-size: 9px;
}
.runtime-settings-config-state strong {
color: var(--platform-text-base);
font-size: 11px;
}
.runtime-settings-config-state small {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.runtime-settings-content {
min-width: 0;
min-height: 0;
padding: 22px 24px 28px;
overflow-y: auto;
background: var(--runtime-settings-content-fill);
}
.runtime-settings-section-header {
min-height: 44px;
margin-bottom: 18px;
}
.runtime-settings-section-header > div {
display: grid;
gap: 4px;
}
.runtime-settings-section-header h3,
.runtime-settings-section-header p {
margin: 0;
}
.runtime-settings-section-header h3 {
color: var(--platform-text-strong);
font-size: 17px;
}
.runtime-settings-section-header p,
.runtime-settings-section-header > span {
color: var(--platform-text-soft);
font-size: 11px;
}
.runtime-settings-fields {
align-content: start;
}
.runtime-settings-fields > label {
padding: 13px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 12px;
background: var(--runtime-settings-subpanel-fill);
color: var(--platform-text-base);
}
.runtime-settings-fields input,
.runtime-settings-fields select {
border-color: var(--platform-surface-border);
background: var(--platform-input-fill);
color: var(--platform-text-strong);
}
.runtime-settings-fields input:focus-visible,
.runtime-settings-fields select:focus-visible {
border-color: var(--platform-surface-hover-border);
outline: none;
box-shadow: 0 0 0 3px var(--platform-input-focus-ring);
}
.runtime-settings-about {
grid-column: 1 / -1;
display: grid;
gap: 14px;
max-width: 680px;
}
.runtime-settings-about-hero {
display: flex;
align-items: center;
gap: 18px;
min-height: 158px;
padding: 24px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 16px;
background: var(--runtime-settings-subpanel-fill);
}
.runtime-settings-about-mark {
display: grid;
flex: 0 0 auto;
width: 72px;
height: 72px;
border: 1px solid var(--platform-nav-active-border);
border-radius: 20px;
background: var(--platform-nav-active-fill);
color: var(--platform-accent);
font-size: 32px;
font-weight: 900;
letter-spacing: -0.08em;
place-items: center;
box-shadow: var(--platform-nav-active-shadow);
}
.runtime-settings-about-mark img {
width: 100%;
height: 100%;
object-fit: contain;
transform: scale(1.35);
}
.runtime-settings-about-hero > div:last-child {
display: grid;
gap: 5px;
min-width: 0;
}
.runtime-settings-about-kicker {
color: var(--platform-accent);
font-size: 10px;
font-weight: 900;
letter-spacing: 0.16em;
}
.runtime-settings-about-hero h4 {
margin: 0;
color: var(--platform-text-strong);
font-size: 20px;
letter-spacing: -0.03em;
}
.runtime-settings-about-hero p {
margin: 0;
color: var(--platform-text-soft);
font-size: 12px;
}
.runtime-settings-about-meta {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
margin: 0;
}
.runtime-settings-about-meta > div {
display: grid;
gap: 7px;
padding: 14px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 12px;
background: var(--runtime-settings-subpanel-fill);
}
.runtime-settings-about-meta dt {
color: var(--platform-text-soft);
font-size: 10px;
}
.runtime-settings-about-meta dd {
margin: 0;
color: var(--platform-text-strong);
font-size: 14px;
font-weight: 800;
}
.runtime-agent-list {
grid-column: 1 / -1;
display: grid;
gap: 8px;
}
.runtime-agent-card {
overflow: hidden;
border: 1px solid var(--platform-subpanel-border);
border-radius: 12px;
background: var(--runtime-settings-subpanel-fill);
}
.runtime-agent-card-summary {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
width: 100%;
min-height: 58px;
padding: 10px 14px;
border: 0;
background: transparent;
color: var(--platform-text-base);
text-align: left;
cursor: pointer;
}
.runtime-agent-card-summary:hover,
.runtime-agent-card-summary[aria-expanded='true'] {
background: var(--platform-button-ghost-fill);
}
.runtime-agent-card-summary:focus-visible {
outline: none;
box-shadow: inset 0 0 0 2px var(--platform-surface-hover-border);
}
.runtime-agent-card-summary > span:first-child {
display: grid;
gap: 2px;
}
.runtime-agent-card-summary strong {
color: var(--platform-text-strong);
font-size: 12px;
}
.runtime-agent-card-summary small,
.runtime-agent-card-summary > span:last-child {
color: var(--platform-text-soft);
font-size: 10px;
}
.runtime-agent-card-fields {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
padding: 14px;
border-top: 1px solid var(--platform-line-soft);
}
.runtime-agent-card-fields label {
display: grid;
gap: 6px;
min-width: 0;
color: var(--platform-text-base);
font-size: 11px;
}
.runtime-agent-card-fields input,
.runtime-agent-card-fields select {
width: 100%;
}
.runtime-settings-footer {
min-height: 66px;
padding: 11px 18px 11px 22px;
border-top: 1px solid var(--platform-line-soft);
background: var(--runtime-settings-topbar-fill);
}
.runtime-settings-footer .status-line {
display: inline-flex;
align-items: center;
gap: 6px;
min-width: 0;
margin: 0;
padding: 6px 9px;
overflow: hidden;
border: 1px solid transparent;
border-radius: 8px;
color: var(--platform-text-soft);
font-size: 10px;
text-overflow: ellipsis;
white-space: nowrap;
}
.runtime-settings-footer .status-line[data-tone='success'] {
border-color: var(--platform-success-border);
background: #edf8ef;
color: var(--platform-success-text);
}
.runtime-settings-footer .status-line[data-tone='warning'] {
border-color: var(--platform-warm-border);
background: var(--platform-warm-bg);
color: var(--platform-warm-text);
}
.runtime-settings-footer .status-line[data-tone='busy'] {
border-color: var(--platform-nav-active-border);
background: var(--platform-nav-active-fill);
color: var(--platform-accent);
}
.runtime-settings-footer .status-line .is-spinning {
animation: runtime-settings-spin 0.9s linear infinite;
}
@keyframes runtime-settings-spin {
to {
transform: rotate(360deg);
}
}
.runtime-settings-footer-actions {
display: flex;
align-items: center;
gap: 7px;
flex: 0 0 auto;
}
.runtime-settings-footer-actions button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
min-height: 34px;
padding: 0 12px;
border: 1px solid var(--platform-surface-border);
border-radius: 9px;
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
font-size: 11px;
font-weight: 700;
cursor: pointer;
}
.runtime-settings-footer-actions button:disabled {
cursor: wait;
opacity: 0.55;
}
.runtime-settings-footer-actions .runtime-settings-save {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
.settings-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.settings-grid label {
display: grid;
gap: 6px;
min-width: 0;
color: #647084;
font-size: 13px;
}
.settings-grid input,
.settings-grid select {
min-width: 0;
height: 36px;
padding: 0 10px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #18202f;
background: #fff;
}
.settings-checkbox {
grid-template-columns: auto 1fr;
align-items: center;
align-self: end;
}
.settings-checkbox input {
width: 18px;
height: 18px;
padding: 0;
}
.message-list {
flex: 1;
border: 1px solid #dde3ee;
padding: 14px;
overflow: auto;
}
.message + .message {
margin-top: 10px;
}
.message-history-more {
width: 100%;
min-height: 32px;
margin-bottom: 10px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #647084;
background: #f8fafd;
}
.message {
overflow-wrap: anywhere;
white-space: pre-wrap;
}
.message--user {
color: #1f6feb;
}
.message-action {
min-height: 32px;
margin-top: 6px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #334155;
background: #f8fafd;
}
.pending-command {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 8px;
padding: 10px;
border: 1px solid #dde3ee;
background: #f8fafd;
}
.pending-command span {
display: grid;
gap: 3px;
min-width: 0;
margin-right: auto;
color: #647084;
}
.pending-command small {
overflow-wrap: anywhere;
font-size: 12px;
}
.pending-command button {
height: 32px;
padding: 0 12px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #fff;
background: #1f6feb;
}
.composer {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
gap: 10px;
}
.composer input,
.composer button,
.composer-upload-button {
height: 40px;
border: 1px solid #cfd7e6;
border-radius: 6px;
}
.composer input {
min-width: 0;
padding: 0 12px;
}
.composer button,
.composer-upload-button {
display: inline-grid;
padding: 0 18px;
place-items: center;
color: #fff;
background: #1f6feb;
cursor: pointer;
}
.composer-upload-button input {
display: none;
}
.agent-status-pane {
display: grid;
gap: 10px;
padding-top: 4px;
}
.agent-status-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 8px;
max-height: 220px;
overflow: auto;
}
.agent-status-list button {
display: grid;
gap: 4px;
min-width: 0;
padding: 9px;
border: 1px solid #dce3ee;
border-radius: 6px;
background: #fff;
color: #18202f;
text-align: left;
}
.agent-status-list span,
.agent-status-list small {
color: #647084;
font-size: 12px;
}
.agent-status-list small {
overflow-wrap: anywhere;
}
.agent-conversation-panel {
display: grid;
gap: 10px;
width: min(640px, 100%);
max-height: calc(100vh - 36px);
padding: 18px;
overflow: auto;
border: 1px solid #cfd7e6;
background: #fff;
}
.agent-conversation-list {
min-height: 220px;
max-height: 420px;
padding: 12px;
overflow: auto;
border: 1px solid #dde3ee;
}
.agent-conversation-list .message {
width: fit-content;
max-width: min(88%, 720px);
margin: 0;
padding: 9px 12px;
border-radius: 14px;
line-height: 1.55;
}
.agent-conversation-list .message + .message {
margin-top: 10px;
}
.agent-conversation-list .message--user {
margin-left: auto;
border: 1px solid #d8c4a8;
border-radius: 14px 14px 4px;
background: #fff7ed;
color: #8a4b08;
}
.agent-memory-box {
display: grid;
gap: 6px;
max-height: 180px;
padding: 10px;
overflow: auto;
border: 1px solid #dde3ee;
background: #f8fafd;
}
.agent-memory-box pre {
margin: 0;
overflow-wrap: anywhere;
white-space: pre-wrap;
}
.agent-memory-box small button {
height: 24px;
margin-left: 8px;
padding: 0 8px;
border: 1px solid #cfd7e6;
border-radius: 6px;
background: #fff;
color: #1f6feb;
cursor: pointer;
}
.agent-conversation-panel .composer {
grid-template-columns: minmax(0, 1fr) auto auto auto;
}
.workspace-panel {
display: grid;
gap: 12px;
width: min(680px, 100%);
max-height: calc(100vh - 36px);
padding: 18px;
overflow: auto;
border: 1px solid #cfd7e6;
background: #fff;
}
.workspace-picker {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 8px;
}
.workspace-picker input,
.workspace-picker button,
.workspace-list button {
min-width: 0;
height: 36px;
border: 1px solid #cfd7e6;
border-radius: 6px;
}
.workspace-picker input {
padding: 0 10px;
}
.workspace-picker button {
padding: 0 14px;
color: #fff;
background: #1f6feb;
}
.workspace-list {
display: grid;
gap: 8px;
}
.workspace-list button {
padding: 0 10px;
overflow: hidden;
background: #fff;
color: #18202f;
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
}
.developer-pane {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
align-content: start;
gap: 1px;
min-width: 0;
background: #d9dee8;
}
.developer-panel {
min-width: 0;
padding: 18px;
background: #fff;
}
.developer-panel--wide {
grid-column: 1 / -1;
}
.task-pane article {
display: grid;
grid-template-columns: 84px 1fr;
gap: 12px;
padding: 10px 0;
border-bottom: 1px solid #edf1f7;
}
.capability-pane article {
display: grid;
grid-template-columns: 1fr auto;
gap: 12px;
padding: 8px 0;
border-bottom: 1px solid #edf1f7;
}
.capability-pane span {
color: #647084;
font-size: 12px;
}
.trace-pane article {
display: grid;
gap: 4px;
padding: 8px 0;
border-bottom: 1px solid #edf1f7;
}
.trace-pane span,
.trace-pane small {
color: #647084;
}
.trace-pane small {
overflow-wrap: anywhere;
font-size: 12px;
}
.trace-error {
margin-bottom: 10px;
padding: 8px;
border: 1px solid #efb3b3;
border-radius: 6px;
color: #8a1f1f;
background: #fff5f5;
overflow-wrap: anywhere;
}
.trace-artifacts {
display: grid;
gap: 4px;
margin-bottom: 10px;
}
.trace-task-graph {
display: grid;
gap: 4px;
margin-bottom: 10px;
padding: 8px;
border: 1px solid #dce3ee;
border-radius: 6px;
background: #f8fafc;
}
.trace-history {
display: flex;
flex-wrap: wrap;
gap: 6px;
max-height: 180px;
margin-bottom: 10px;
overflow: auto;
}
.trace-history button {
min-width: 0;
max-width: 100%;
padding: 5px 8px;
overflow-wrap: anywhere;
border: 1px solid #cfd7e6;
border-radius: 6px;
background: #fff;
color: #18202f;
font-size: 12px;
text-align: left;
}
.asset-pane code {
display: block;
margin-bottom: 10px;
padding: 9px 10px;
border: 1px solid #e1e7f0;
background: #f8fafd;
}
.local-project-form {
display: grid;
grid-template-columns: 1fr auto;
gap: 8px;
margin-bottom: 10px;
}
.local-project-form input,
.local-project-form button {
min-width: 0;
height: 36px;
border: 1px solid #cfd7e6;
border-radius: 6px;
}
.local-project-form input {
padding: 0 10px;
}
.asset-register-form {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
margin-bottom: 10px;
}
.asset-register-form input,
.asset-register-form select,
.asset-register-form button {
min-width: 0;
height: 34px;
border: 1px solid #cfd7e6;
border-radius: 6px;
}
.asset-register-form input,
.asset-register-form select {
padding: 0 10px;
}
.asset-register-form button {
color: #fff;
background: #1f6feb;
}
.status-line,
.manifest-path {
margin-bottom: 10px;
color: #647084;
font-size: 13px;
}
.manifest-path {
overflow-wrap: anywhere;
}
.file-pane input,
.file-pane textarea,
.memory-pane textarea {
display: block;
width: 100%;
margin-bottom: 10px;
padding: 10px;
border: 1px solid #cfd7e6;
border-radius: 6px;
}
.file-pane input {
height: 36px;
}
.file-pane textarea,
.memory-pane textarea {
min-height: 150px;
resize: vertical;
}
.file-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.file-list button {
display: grid;
gap: 2px;
padding: 6px 10px;
border: 1px solid #cfd7e6;
border-radius: 6px;
background: #fff;
text-align: left;
}
.file-list button small {
color: #647084;
}
.checkpoint-list-item {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 8px;
border: 1px solid #cfd7e6;
border-radius: 6px;
background: #fff;
}
.checkpoint-summary {
display: inline-flex;
min-width: 160px;
flex-direction: column;
gap: 2px;
}
.checkpoint-summary small {
color: #64748b;
}
.limited-command-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 10px;
}
.limited-command-list button {
height: 32px;
padding: 0 12px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #fff;
background: #1f6feb;
}
.project-log-content {
max-height: 180px;
margin: 0 0 10px;
padding: 10px;
overflow: auto;
border: 1px solid #dde3ee;
background: #f8fafd;
white-space: pre-wrap;
}
.preview-frame {
display: grid;
width: 100%;
min-height: 180px;
place-items: center;
border: 1px solid #cfd7e6;
background: #101827;
color: #d9e7ff;
}
iframe.preview-frame {
display: block;
height: 180px;
}
@media (max-width: 1100px) {
.app-shell--user {
padding: 0;
}
.app-shell--user .chat-pane {
min-height: 100vh;
border: 0;
}
.app-shell--dev {
grid-template-columns: 1fr;
}
.developer-pane {
grid-template-columns: 1fr;
}
.developer-panel--wide {
grid-column: auto;
}
.settings-grid {
grid-template-columns: 1fr;
}
.composer {
grid-template-columns: 1fr auto;
}
.composer-upload-button {
grid-column: 1 / -1;
}
}
@media (max-width: 760px) {
.settings-overlay {
padding: 0;
}
.runtime-settings-toast {
top: 12px;
right: 12px;
left: 12px;
max-width: none;
}
.runtime-settings-panel {
width: 100%;
height: 100dvh;
max-height: 100dvh;
border: 0;
border-radius: 0;
}
.runtime-settings-layout {
grid-template-columns: 1fr;
grid-template-rows: auto minmax(0, 1fr);
}
.runtime-settings-nav {
display: block;
padding: 8px 10px;
overflow-x: auto;
border-right: 0;
border-bottom: 1px solid var(--platform-line-soft);
}
.runtime-settings-nav nav {
display: flex;
width: max-content;
}
.runtime-settings-nav nav button {
grid-template-columns: 20px auto;
min-height: 40px;
}
.runtime-settings-nav nav small,
.runtime-settings-config-state {
display: none;
}
.runtime-settings-content {
padding: 18px 14px 22px;
}
.runtime-agent-card-fields {
grid-template-columns: 1fr;
}
.runtime-settings-about-hero {
align-items: flex-start;
flex-direction: column;
min-height: 0;
}
.runtime-settings-about-meta {
grid-template-columns: 1fr;
}
.runtime-agent-card-summary > span:last-child {
max-width: 48%;
text-align: right;
}
.runtime-settings-footer {
align-items: stretch;
flex-direction: column;
gap: 8px;
}
.runtime-settings-footer-actions {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.runtime-settings-footer-actions button {
padding: 0 8px;
}
}
/* GameAgent V1.0 project workbench */
.game-project-workbench {
--game-workbench-stage-fill: #fffdfa;
--game-workbench-agent-fill: #fbf7f2;
width: calc(100vw - var(--launcher-sidebar-width));
max-width: none;
min-height: 0;
gap: 0;
margin: 0;
padding: 0;
overflow: hidden;
color: var(--platform-text-base);
}
.launcher-main:has(.game-project-workbench) {
padding-bottom: 0;
}
.game-workbench-layout {
position: relative;
z-index: 0;
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(360px, 0.36fr);
gap: 0;
height: clamp(560px, calc(100dvh - 206px), 780px);
min-width: 0;
min-height: 0;
}
.game-workbench-layout.is-ui-editor {
grid-template-columns: minmax(0, 1fr);
}
.game-workbench-stage,
.game-workbench-chat {
min-width: 0;
overflow: hidden;
border: 0;
border-radius: 0;
border-left: 1px solid var(--platform-line-soft);
background: var(--game-workbench-agent-fill);
box-shadow: none;
}
.game-workbench-stage {
position: relative;
display: grid;
grid-template-rows: auto auto minmax(0, 1fr);
border-left: 0;
background: var(--game-workbench-stage-fill);
box-shadow: none;
}
.game-workbench-editor-shell {
border: 0;
border-radius: 0;
background: var(--game-workbench-stage-fill);
box-shadow: none;
}
.game-workbench-stage > .game-resource-manager {
grid-row: 3;
min-height: 0;
}
.game-workbench-chat {
border-color: var(--platform-line-soft);
box-shadow: var(--platform-nav-active-shadow);
}
.game-workbench-stage[data-resource-view-state^='resources.asset-canvas'],
.game-workbench-stage[data-resource-view-state='resources.ui-editor'] {
grid-template-rows: auto minmax(0, 1fr);
}
.game-workbench-stage[data-resource-view-state='resources.ui-editor']
> div:last-child {
grid-row: 2;
min-height: 0;
}
.game-workbench-stage[data-resource-view-state^='resources.asset-canvas']
> .asset-canvas-surface {
grid-row: 2;
min-height: 0;
}
.game-workbench-toolbar {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
min-height: 48px;
padding: 8px 12px;
background: transparent;
}
.game-workbench-tabs,
.game-workbench-view-actions {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 7px;
}
.game-workbench-tabs {
padding: 3px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 999px;
background: var(--platform-nav-fill);
}
.game-resource-sort-tabs {
flex-wrap: nowrap;
gap: 0;
padding: 0;
overflow: hidden;
}
.game-workbench-tabs.game-resource-sort-tabs button {
min-height: 36px;
border: 0;
border-radius: 0;
}
.game-workbench-tabs.game-resource-sort-tabs button + button {
border-left: 1px solid var(--platform-subpanel-border);
}
.game-workbench-tabs.game-resource-sort-tabs button.is-active {
border-color: transparent;
}
.game-workbench-tabs button,
.game-workbench-view-actions button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 5px;
min-height: 30px;
padding: 0 11px;
border: 1px solid transparent;
border-radius: 999px;
background: transparent;
color: var(--platform-button-ghost-text);
font-size: 12px;
font-weight: 700;
white-space: nowrap;
cursor: pointer;
}
.game-workbench-tabs button:focus-visible,
.game-workbench-view-actions button:focus-visible,
.game-workbench-approval-trigger:focus-visible,
.game-agent-dock-more:focus-visible {
outline: none;
box-shadow: 0 0 0 3px var(--platform-input-focus-ring);
}
.game-workbench-tabs.game-resource-sort-tabs button:focus-visible {
box-shadow: inset 0 0 0 3px var(--platform-input-focus-ring);
}
.game-workbench-tabs button.is-active,
.game-workbench-view-actions button.is-active {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
.game-workbench-tabs button:disabled,
.game-workbench-tabs button[data-unavailable='true'] {
color: var(--platform-text-muted);
cursor: not-allowed;
opacity: 0.6;
}
.game-workbench-view-actions button {
border-color: var(--platform-surface-border);
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
}
.game-workbench-view-actions .game-workbench-play-button {
position: absolute;
left: 50%;
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
transform: translateX(-50%);
}
.game-workbench-view-actions .game-workbench-play-button:disabled {
border-color: var(--platform-surface-border);
background: var(--platform-button-secondary-fill);
color: var(--platform-text-muted);
cursor: not-allowed;
opacity: 0.6;
}
.game-resource-reorder-status {
min-width: 0;
color: #9a725f;
font-size: 10px;
white-space: nowrap;
}
.game-run-unavailable {
margin: 0;
padding: 7px 14px;
border-bottom: 1px solid #f0dfd7;
background: #fffaf0;
color: #9b6c45;
font-size: 11px;
}
.game-resource-manager {
display: flex;
flex-direction: column;
flex: 1 1 auto;
min-height: 0;
}
.game-resource-search {
display: none;
align-items: center;
gap: 8px;
margin: 10px 12px 0;
padding: 0 10px;
border: 1px solid #ecdcd4;
border-radius: 10px;
background: #fff;
color: #a08073;
}
.game-resource-search input {
width: 100%;
min-width: 0;
height: 34px;
padding: 0;
border: 0;
outline: 0;
background: transparent;
color: #50382f;
font-size: 12px;
}
.game-resource-live-notice {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin: 8px 12px 0;
padding: 8px 10px;
border: 1px solid #edc7b5;
border-radius: 10px;
background: #fff7f1;
color: #8d5b45;
font-size: 11px;
}
.game-resource-live-notice button {
flex: 0 0 auto;
border: 1px solid #dc9b7d;
border-radius: 8px;
background: #fff;
color: #9b5537;
}
.game-attachment-errors {
display: grid;
gap: 4px;
margin: 8px 12px 0;
padding: 8px 10px;
border: 1px solid #edc1ad;
border-radius: 10px;
background: #fff3ed;
}
.game-attachment-errors p {
display: flex;
align-items: baseline;
gap: 8px;
margin: 0;
color: #9e4d2f;
font-size: 10px;
}
.game-attachment-errors span {
min-width: 0;
overflow-wrap: anywhere;
}
.game-resource-canvas {
position: relative;
flex: 1;
display: flex;
flex-direction: column;
min-height: 0;
padding: 12px;
overflow: auto;
background-color: #fffdfa;
background-image: radial-gradient(#eaded8 0.8px, transparent 0.8px);
background-size: 18px 18px;
user-select: none;
}
.game-resource-canvas--dependency {
overflow: hidden;
cursor: grab;
overscroll-behavior: none;
touch-action: none;
}
.game-resource-canvas--dependency:active {
cursor: grabbing;
}
.game-resource-canvas--paged {
overflow: hidden;
cursor: grab;
overscroll-behavior: none;
touch-action: none;
}
.game-resource-canvas--paged:active {
cursor: grabbing;
}
.game-resource-canvas-content {
position: relative;
display: grid;
align-content: start;
width: 100%;
min-width: max(100%, 620px);
min-height: 100%;
}
.game-resource-canvas--dependency .game-resource-canvas-content {
display: block;
min-width: 0;
min-height: 0;
}
.game-resource-canvas-content--paged {
display: block;
flex: 1 1 auto;
min-width: 0;
min-height: 0;
}
.game-resource-page-shell {
position: relative;
width: 100%;
height: 100%;
}
.game-resource-outline {
position: absolute;
top: 50%;
left: 12px;
z-index: 4;
display: flex;
flex-direction: column;
gap: 4px;
width: max-content;
max-width: 180px;
max-height: calc(100% - 24px);
padding: 6px;
overflow: auto;
border: 1px solid transparent;
border-radius: 14px;
background: transparent;
box-shadow: none;
opacity: 0.68;
transform: translateY(-50%) scale(0.86);
transform-origin: left center;
transition:
border-color 160ms ease,
opacity 160ms ease,
transform 160ms ease,
box-shadow 160ms ease;
backdrop-filter: none;
}
.game-resource-outline:hover,
.game-resource-outline:has(> button:focus-visible) {
border-color: var(--platform-nav-active-border);
background: var(--platform-nav-fill);
box-shadow: var(--platform-nav-active-shadow);
opacity: 1;
transform: translateY(-50%) scale(1);
backdrop-filter: blur(10px);
}
.game-resource-outline button {
display: grid;
grid-template-columns: 0 minmax(0, 1fr);
align-items: center;
gap: 0;
min-height: 34px;
padding: 0 9px;
border: 1px solid transparent;
border-radius: 8px;
background: transparent;
color: var(--platform-nav-item-text);
cursor: pointer;
text-align: left;
transition:
grid-template-columns 160ms ease,
gap 160ms ease;
}
.game-resource-outline:hover button,
.game-resource-outline:has(> button:focus-visible) button {
grid-template-columns: 18px minmax(0, 1fr);
gap: 6px;
}
.game-resource-outline button svg {
width: 0;
min-width: 0;
opacity: 0;
transform: scale(0.65);
transition:
width 160ms ease,
opacity 120ms ease,
transform 160ms ease;
}
.game-resource-outline:hover button svg,
.game-resource-outline:has(> button:focus-visible) button svg {
width: 14px;
opacity: 1;
transform: scale(1);
}
.game-resource-outline button:hover,
.game-resource-outline button:focus-visible {
background: var(--platform-nav-item-hover-fill);
outline: 0;
}
.game-resource-outline button.is-active {
color: var(--platform-nav-item-text-active);
}
.game-resource-outline:hover button.is-active,
.game-resource-outline:has(> button:focus-visible) button.is-active {
border-color: var(--platform-nav-active-border);
background: var(--platform-nav-active-fill);
box-shadow: var(--platform-nav-active-shadow);
}
.game-resource-outline button strong {
overflow: hidden;
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.game-resource-outline button .game-resource-outline-label {
position: relative;
overflow: visible;
}
.game-resource-outline-unread {
position: absolute;
top: -2px;
right: -6px;
width: 6px;
height: 6px;
border: 1px solid var(--platform-nav-fill);
border-radius: 50%;
background: #e5484d;
box-shadow: 0 0 0 1px rgb(229 72 77 / 18%);
pointer-events: none;
}
.game-resource-page {
display: grid;
grid-template-rows: auto minmax(0, 1fr) auto;
gap: 10px;
height: 100%;
min-width: 0;
min-height: 0;
}
.game-resource-page-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
min-height: 36px;
padding: 0 4px;
}
.game-resource-page-heading span {
display: inline-flex;
align-items: center;
gap: 8px;
color: #6d4b3f;
font-size: 13px;
}
.game-resource-page-heading strong {
font-size: 15px;
}
.game-resource-page-heading small {
color: #a98a7c;
font-size: 11px;
font-variant-numeric: tabular-nums;
}
.game-resource-page-canvas {
position: relative;
min-width: 0;
min-height: 0;
overflow: hidden;
border: 1px solid #ecdfd8;
border-radius: 12px;
background:
radial-gradient(#eaded8 0.8px, transparent 0.8px) 0 0 / 18px 18px,
#fffdfa;
}
.game-resource-canvas-reset {
position: absolute;
top: 12px;
right: 12px;
z-index: 3;
display: grid;
width: 30px;
height: 30px;
padding: 0;
border: 1px solid rgb(227 207 197 / 88%);
border-radius: 8px;
background: rgb(255 253 250 / 88%);
color: #8c6252;
cursor: pointer;
place-items: center;
box-shadow: 0 4px 12px rgb(112 70 52 / 10%);
backdrop-filter: blur(4px);
}
.game-resource-canvas-reset:hover,
.game-resource-canvas-reset:focus-visible {
border-color: #ce7650;
color: #bd5f37;
outline: 2px solid rgb(206 118 80 / 22%);
outline-offset: 1px;
}
.game-resource-page-world {
position: absolute;
top: 0;
left: 0;
transform-origin: 0 0;
}
.game-resource-page-empty {
position: absolute;
inset: 0;
display: grid;
padding: 24px;
color: #b0958a;
font-size: 12px;
place-items: center;
pointer-events: none;
}
.game-resource-next-page {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
min-height: 38px;
padding: 0 14px;
border: 1px solid #e8d6cc;
border-radius: 10px;
background: #fff8f4;
color: #725348;
cursor: pointer;
}
.game-resource-next-page:hover,
.game-resource-next-page:focus-visible {
border-color: #d6946f;
color: #a9502a;
outline: 0;
}
.game-resource-next-page span {
color: #a98a7c;
font-size: 10px;
}
.game-resource-next-page strong {
font-size: 12px;
}
.game-resource-section-stack {
display: contents;
}
.game-resource-dependency-overlay {
position: absolute;
inset: 0;
z-index: 0;
width: 100%;
height: 100%;
overflow: visible;
pointer-events: none;
}
.game-resource-dependency-description {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0 0 0 0);
white-space: nowrap;
border: 0;
}
.game-resource-world-section-heading {
position: absolute;
right: 24px;
left: 24px;
z-index: 1;
display: flex;
align-items: center;
justify-content: space-between;
min-height: 32px;
padding: 0 8px;
border-bottom: 1px solid #eaded8;
color: #725348;
font-size: 12px;
font-weight: 800;
pointer-events: none;
}
.game-resource-world-section-heading > span {
display: inline-flex;
align-items: center;
gap: 6px;
}
.game-resource-world-section-heading small {
color: #9b6b56;
font-size: 10px;
font-weight: 700;
}
.game-resource-dependency-edge,
.game-resource-dependency-edge path {
fill: none;
stroke-linecap: round;
stroke-linejoin: round;
vector-effect: non-scaling-stroke;
}
.game-resource-dependency-edge--reference {
stroke: #c45f20;
stroke-width: 2.4px;
opacity: 1;
}
.game-resource-dependency-edge.is-cyclic,
.game-resource-dependency-edge.is-cyclic path {
stroke-dashoffset: 4;
}
.game-resource-dependency-marker--reference path {
fill: #c45f20;
stroke-linejoin: round;
}
.game-resource-section {
position: relative;
z-index: 1;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
gap: 10px;
box-sizing: border-box;
height: var(--resource-section-height);
min-width: 620px;
min-height: 0;
padding: 14px 6px 18px;
overflow: hidden;
border-bottom: 1px solid #eaded8;
}
.game-resource-section:last-of-type {
border-bottom: 0;
}
.game-resource-section > header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
min-height: 22px;
}
.game-resource-section > header span {
display: inline-flex;
align-items: center;
gap: 6px;
color: #725348;
font-size: 12px;
font-weight: 800;
}
.game-resource-section-actions {
display: inline-flex;
align-items: center;
gap: 6px;
}
.game-resource-section-height-actions,
.game-resource-section-zoom-actions {
display: inline-flex;
align-items: center;
gap: 3px;
}
.game-resource-section-actions small {
display: grid;
min-width: 22px;
height: 22px;
padding: 0 6px;
border-radius: 999px;
background: #f3e6df;
color: #9b6b56;
font-size: 10px;
place-items: center;
}
.game-resource-section-actions button {
display: grid;
width: 24px;
height: 24px;
padding: 0;
border: 1px solid #e3cfc5;
border-radius: 7px;
background: rgb(255 255 255 / 88%);
color: #8c6252;
cursor: pointer;
place-items: center;
}
.game-resource-section-actions button:hover:not(:disabled),
.game-resource-section-actions button:focus-visible {
border-color: #ce7650;
outline: 2px solid rgb(206 118 80 / 22%);
outline-offset: 1px;
color: #bd5f37;
}
.game-resource-section-actions button:disabled {
border-color: #eadfd9;
background: #f7f1ed;
color: #c5afa5;
cursor: not-allowed;
opacity: 0.64;
}
.game-resource-section-actions .game-resource-section-zoom-value {
width: auto;
min-width: 40px;
padding: 0 6px;
font-size: 10px;
font-variant-numeric: tabular-nums;
}
.game-resource-section-viewport {
position: relative;
min-width: 0;
min-height: 0;
overflow: auto;
border-radius: 8px;
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.game-resource-canvas--dependency .game-resource-section {
overflow: visible;
}
.game-resource-canvas--dependency .game-resource-section-viewport {
overflow: visible;
scrollbar-gutter: auto;
}
.game-resource-canvas--dependency .game-resource-section-height-actions,
.game-resource-canvas--dependency .game-resource-section-zoom-actions {
display: none;
}
.game-resource-canvas--dependency .game-resource-section {
pointer-events: none;
}
.game-resource-canvas--dependency .game-resource-card,
.game-resource-canvas--dependency .game-resource-section > header {
pointer-events: auto;
}
.game-resource-section-viewport:focus-visible {
outline: 2px solid rgb(206 118 80 / 26%);
outline-offset: -2px;
}
.game-resource-section-viewport > p {
margin: 0;
color: #b0958a;
font-size: 11px;
}
.game-resource-plane-frame {
position: relative;
min-width: 0;
min-height: 0;
}
.game-resource-plane {
position: absolute;
top: 0;
left: 0;
min-width: 620px;
min-height: 108px;
transform: scale(var(--resource-section-zoom, 1));
transform-origin: 0 0;
}
.game-resource-card {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: var(--resource-card-width);
min-width: var(--resource-card-width);
height: var(--resource-card-height);
min-height: var(--resource-card-height);
padding: 0;
overflow: hidden;
border: 1px solid #eadbd4;
border-radius: 12px;
background: #fff;
color: #4e382f;
box-shadow: 0 6px 18px rgb(96 62 47 / 6%);
touch-action: manipulation;
user-select: none;
transform: translate3d(var(--resource-x, 0), var(--resource-y, 0), 0);
}
.game-resource-card {
cursor: grab;
touch-action: none;
}
.game-resource-card.is-dragging {
cursor: grabbing;
box-shadow:
0 14px 32px rgb(195 105 62 / 24%),
0 0 0 2px rgb(216 115 66 / 24%);
}
.game-resource-card:hover,
.game-resource-card:focus-within,
.game-resource-card.is-selected {
border-color: #d57b51;
outline: 0;
box-shadow: 0 8px 22px rgb(195 105 62 / 15%);
}
.game-resource-card.is-relation-version-binding {
border-color: #d87342;
box-shadow:
0 8px 22px rgb(195 105 62 / 18%),
0 0 0 2px rgb(216 115 66 / 14%);
}
.game-resource-card-visual {
position: absolute;
inset: 0;
display: grid;
overflow: hidden;
background: linear-gradient(145deg, #fffaf6, #f6ece6);
color: #c46a40;
place-items: center;
}
.game-resource-card[data-preview-kind='raster-image']
.game-resource-card-visual,
.game-resource-card[data-preview-kind='media-image'] .game-resource-card-visual,
.game-resource-card[data-preview-kind='video'] .game-resource-card-visual {
background: linear-gradient(45deg, #f1ebe7 25%, transparent 25%),
linear-gradient(-45deg, #f1ebe7 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, #f1ebe7 75%),
linear-gradient(-45deg, transparent 75%, #f1ebe7 75%), #faf7f5;
background-position:
0 0,
0 8px,
8px -8px,
-8px 0;
background-size: 16px 16px;
}
.game-resource-card-visual > img,
.game-resource-card-visual > video {
display: block;
width: 100%;
height: 100%;
object-fit: contain;
}
.game-resource-card-visual > video {
visibility: hidden;
background: #211d1b;
}
.game-resource-card-visual > video.is-decoded {
visibility: visible;
}
.game-resource-card-open {
position: absolute;
z-index: 1;
inset: 0;
width: 100%;
height: 100%;
padding: 0;
border: 0;
border-radius: inherit;
background: transparent;
cursor: pointer;
touch-action: manipulation;
}
.game-resource-card-open:focus-visible {
outline: 3px solid rgb(213 123 81 / 55%);
outline-offset: -4px;
}
.game-resource-card-media-control {
position: absolute;
right: 9px;
bottom: 9px;
z-index: 2;
display: grid;
width: 34px;
height: 34px;
padding: 0;
border: 1px solid rgb(255 255 255 / 70%);
border-radius: 50%;
background: rgb(75 48 38 / 82%);
color: #fff;
box-shadow: 0 5px 14px rgb(52 30 22 / 24%);
cursor: pointer;
place-items: center;
}
.game-resource-card-media-control:hover,
.game-resource-card-media-control:focus-visible,
.game-resource-card-media-control[aria-pressed='true'] {
background: #c96f44;
outline: 2px solid rgb(255 255 255 / 92%);
outline-offset: 1px;
}
.game-resource-card-placeholder,
.game-resource-card-version-visual,
.game-resource-card-audio-visual {
display: grid;
width: 100%;
height: 100%;
place-items: center;
}
.game-resource-card-audio-visual {
position: relative;
background: linear-gradient(145deg, #fff8f1, #f2ded2);
}
.game-resource-card-audio-visual > span {
width: 92px;
height: 18px;
margin-top: -24px;
background: repeating-linear-gradient(
90deg,
rgb(196 106 64 / 32%) 0 3px,
transparent 3px 7px
);
mask-image: linear-gradient(
to bottom,
transparent,
#000 25%,
#000 75%,
transparent
);
}
.game-resource-card-audio-visual audio {
display: none;
}
.game-resource-card-document-summary {
display: -webkit-box;
max-height: 100%;
padding: 16px;
overflow: hidden;
color: #674c41;
font-size: 11px;
line-height: 1.55;
text-align: left;
white-space: normal;
-webkit-box-orient: vertical;
-webkit-line-clamp: 5;
}
.game-resource-card-version-visual {
align-content: center;
gap: 10px;
}
.game-resource-card-version-relations {
color: #8e6f62;
font-size: 9px;
font-weight: 700;
}
.game-resource-focus {
position: absolute;
top: 50%;
left: 50%;
z-index: 100;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
min-width: 0;
min-height: 0;
width: min(560px, calc(100% - 32px));
max-height: calc(100% - 32px);
border: 1px solid #ead8cf;
border-radius: 16px;
box-shadow: 0 18px 52px rgb(73 42 29 / 20%);
overflow: hidden;
background: #fffdfa;
color: #563b31;
outline: 0;
transform: translate(-50%, -50%);
}
.game-resource-focus--art {
width: min(920px, calc(100% - 48px));
max-height: calc(100% - 48px);
}
.game-resource-image-preview {
display: grid;
min-height: 160px;
max-height: 280px;
padding: 12px;
border: 1px solid #ead8cf;
border-radius: 8px;
background: #f8f0eb;
place-items: center;
}
.game-resource-focus--art .game-resource-image-preview {
min-height: clamp(320px, 58vh, 720px);
max-height: none;
padding: 18px;
}
.game-resource-image-preview img {
display: block;
width: auto;
max-width: 100%;
height: auto;
max-height: 252px;
object-fit: contain;
outline: 1px solid rgb(0 0 0 / 10%);
outline-offset: -1px;
}
.game-resource-focus--art .game-resource-image-preview img,
.game-resource-focus--art .game-resource-image-preview video {
max-width: 100%;
max-height: min(62vh, 680px);
}
.game-resource-focus--art .game-resource-image-preview video {
display: block;
width: auto;
height: auto;
object-fit: contain;
}
.game-resource-focus-titlebar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
min-height: 58px;
padding: 10px 14px 10px 16px;
border-bottom: 1px solid #ead8cf;
background: #fff8f3;
}
.game-resource-focus-heading {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
}
.game-resource-focus-heading > span:last-child {
display: grid;
min-width: 0;
}
.game-resource-focus-heading small {
color: #a27764;
font-size: 9px;
font-weight: 700;
}
.game-resource-focus-icon {
display: grid;
width: 36px;
height: 36px;
flex: 0 0 auto;
border-radius: 10px;
background: #fae9df;
color: #c46a40;
place-items: center;
}
.game-resource-focus-heading strong {
min-width: 0;
overflow: hidden;
font-size: 15px;
text-overflow: ellipsis;
white-space: nowrap;
}
.game-resource-focus-actions {
display: flex;
align-items: center;
gap: 8px;
flex: 0 0 auto;
}
.game-resource-focus-action {
min-height: 32px;
padding: 0 14px;
border: 1px solid #d78d69;
border-radius: 9px;
background: #fff;
color: #a65331;
font-size: 11px;
font-weight: 700;
cursor: pointer;
}
.game-resource-focus-body {
display: grid;
grid-auto-rows: max-content;
align-content: start;
gap: 6px;
min-height: 0;
padding: 24px 28px 28px;
overflow: auto;
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.game-resource-focus-close {
display: grid;
width: 28px;
height: 28px;
flex: 0 0 auto;
padding: 0;
border: 1px solid #ead8cf;
border-radius: 50%;
background: #fff;
color: #8d6d60;
place-items: center;
cursor: pointer;
}
.game-resource-editor {
display: grid;
grid-template-rows: auto minmax(0, 1fr);
width: 100%;
min-width: 0;
min-height: 0;
overflow: hidden;
background: #fffdfa;
color: #563b31;
}
.game-resource-editor-titlebar {
display: flex;
align-items: center;
gap: 12px;
min-height: 58px;
padding: 10px 16px;
border-bottom: 1px solid #ead8cf;
background: #fff8f3;
}
.game-resource-editor-titlebar > span {
display: grid;
min-width: 0;
}
.game-resource-editor-titlebar small {
color: #a27764;
font-size: 9px;
font-weight: 700;
}
.game-resource-editor-titlebar strong {
overflow: hidden;
font-size: 15px;
text-overflow: ellipsis;
white-space: nowrap;
}
.game-resource-editor-back {
display: inline-flex;
align-items: center;
gap: 4px;
min-height: 32px;
padding: 0 10px;
border: 1px solid #ead8cf;
border-radius: 9px;
background: #fff;
color: #795d52;
cursor: pointer;
}
.game-resource-editor-form {
display: grid;
align-content: start;
gap: 16px;
width: min(680px, calc(100% - 32px));
margin: 0 auto;
padding: 28px 0 36px;
overflow: auto;
}
.game-resource-editor-form label {
display: grid;
gap: 7px;
color: #76594e;
font-size: 11px;
font-weight: 700;
}
.game-resource-editor-form input,
.game-resource-editor-form textarea {
width: 100%;
min-width: 0;
padding: 10px 12px;
border: 1px solid #dfc9bf;
border-radius: 10px;
outline: 0;
background: #fff;
color: #50382f;
font: inherit;
font-size: 12px;
font-weight: 400;
}
.game-resource-editor-form textarea {
min-height: 150px;
resize: vertical;
line-height: 1.6;
}
.game-resource-editor-form input:focus,
.game-resource-editor-form textarea:focus {
border-color: #c8754e;
box-shadow: 0 0 0 3px rgb(200 117 78 / 13%);
}
.game-resource-editor-form input:disabled,
.game-resource-editor-form textarea:disabled {
background: #f7f1ed;
color: #806d64;
}
.game-resource-editor-semantic-note,
.game-resource-editor-error {
margin: 0;
padding: 10px 12px;
border-radius: 10px;
font-size: 11px;
line-height: 1.5;
}
.game-resource-editor-semantic-note {
border: 1px solid #ead8cf;
background: #fff8f3;
color: #80665b;
}
.game-resource-editor-error {
border: 1px solid #e5a78d;
background: #fff1eb;
color: #9e4d2f;
}
.game-resource-editor-actions {
display: flex;
justify-content: flex-end;
}
.game-resource-editor-actions button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
min-height: 36px;
padding: 0 16px;
border: 1px solid #bd603a;
border-radius: 10px;
background: #c96e47;
color: #fff;
font-size: 12px;
font-weight: 700;
cursor: pointer;
}
.game-resource-editor-actions button:disabled,
.game-resource-editor-back:disabled {
cursor: not-allowed;
opacity: 0.55;
}
.game-resource-editor-spinner {
animation: game-resource-editor-spin 0.9s linear infinite;
}
@keyframes game-resource-editor-spin {
to {
transform: rotate(360deg);
}
}
.game-resource-focus-metadata {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px 18px;
margin: 0 0 8px;
padding: 12px 14px;
border: 1px solid #eaded8;
border-radius: 12px;
background: #fff;
}
.game-resource-focus-metadata > div {
display: grid;
grid-template-columns: 72px minmax(0, 1fr);
gap: 8px;
min-width: 0;
}
.game-resource-focus-metadata dt,
.game-resource-focus-metadata dd {
margin: 0;
overflow-wrap: anywhere;
font-size: 10px;
}
.game-resource-focus-metadata dt {
color: #a08377;
}
.game-resource-focus-metadata dd {
color: #5d4339;
}
.game-resource-audio-preview {
position: relative;
display: grid;
min-width: 0;
min-height: 0;
margin-bottom: 8px;
overflow: hidden;
border: 1px solid #ead8cf;
border-radius: 12px;
background: #faf7f5;
place-items: center;
}
.game-resource-audio-preview {
align-content: center;
padding: 28px;
background: linear-gradient(145deg, #fffaf6, #f5e7df);
}
.game-resource-audio-preview audio {
width: min(620px, 100%);
}
.game-resource-audio-load {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
min-height: 38px;
padding: 0 16px;
border: 1px solid #ddb7a5;
border-radius: 999px;
background: #fff;
color: #a95734;
font-size: 12px;
font-weight: 800;
cursor: pointer;
}
.game-resource-audio-load:hover,
.game-resource-audio-load:focus-visible {
border-color: #c96f44;
outline: 2px solid rgb(201 111 68 / 24%);
outline-offset: 2px;
}
.game-resource-audio-preview p {
margin: 0;
padding: 20px;
color: #92776c;
font-size: 12px;
text-align: center;
}
.game-resource-document-body {
min-width: 0;
min-height: 0;
margin-top: 6px;
padding: 14px;
border-radius: 10px;
background: #f8f2ee;
color: #765c51;
font-size: 12px;
line-height: 1.6;
overflow: auto;
overflow-wrap: anywhere;
overscroll-behavior: contain;
scrollbar-gutter: stable;
user-select: text;
}
.game-resource-code-body {
min-width: 0;
overflow: auto;
border: 1px solid #eadbd4;
border-radius: 12px;
background: #2c2021;
color: #ffe8d8;
}
.game-resource-code-body pre {
min-width: max-content;
margin: 0;
padding: 14px;
font:
12px/1.55 ui-monospace,
SFMono-Regular,
Consolas,
monospace;
white-space: pre;
}
.game-resource-document-body > :first-child {
margin-top: 0;
}
.game-resource-document-body > :last-child {
margin-bottom: 0;
}
.game-resource-document-body h1,
.game-resource-document-body h2,
.game-resource-document-body h3,
.game-resource-document-body h4 {
margin: 1.15em 0 0.55em;
color: #63483d;
line-height: 1.35;
}
.game-resource-document-body h1 {
font-size: 17px;
}
.game-resource-document-body h2 {
font-size: 15px;
}
.game-resource-document-body h3,
.game-resource-document-body h4 {
font-size: 13px;
}
.game-resource-document-body p,
.game-resource-document-body ul,
.game-resource-document-body ol,
.game-resource-document-body blockquote,
.game-resource-document-body pre,
.game-resource-document-body table {
margin: 0 0 0.75em;
}
.game-resource-document-body ul,
.game-resource-document-body ol {
padding-left: 1.6em;
}
.game-resource-document-body li + li {
margin-top: 0.24em;
}
.game-resource-document-body blockquote {
padding: 0.55em 0.8em;
border-left: 3px solid #d99a77;
background: rgb(255 255 255 / 52%);
}
.game-resource-document-body code {
padding: 0.12em 0.32em;
border-radius: 4px;
background: #eaded7;
color: #735044;
}
.game-resource-document-body pre {
overflow-x: auto;
padding: 0.75em;
border-radius: 8px;
background: #eaded7;
}
.game-resource-document-body pre code {
padding: 0;
background: transparent;
}
.game-resource-document-body a {
color: #b65d37;
text-decoration: underline;
}
.game-resource-document-link-text {
color: #8f5e49;
text-decoration: underline dotted;
}
.game-resource-document-image-placeholder {
display: inline-block;
padding: 0.2em 0.45em;
border-radius: 5px;
background: #eaded7;
color: #806559;
}
.game-resource-document-body table {
width: 100%;
border-collapse: collapse;
}
.game-resource-document-body th,
.game-resource-document-body td {
padding: 0.45em 0.55em;
border: 1px solid #ddc9be;
text-align: left;
}
.game-run-surface {
display: grid;
grid-template-rows: minmax(300px, 1fr) auto;
grid-row: 2 / -1;
gap: 12px;
height: 100%;
min-height: 0;
padding: 12px;
background: transparent;
}
.game-run-preview {
position: relative;
display: block;
min-height: 300px;
border: 1px dashed #dfb59f;
border-radius: 14px;
background: linear-gradient(145deg, #fffaf6, #f8ebe4);
color: #c06940;
text-align: center;
overflow: hidden;
}
.game-run-preview iframe {
min-height: 0;
}
.game-run-preview-empty {
display: grid;
align-content: center;
justify-items: center;
gap: 9px;
width: 100%;
height: 100%;
min-height: 300px;
}
.game-run-preview strong {
color: #563b31;
font-size: 15px;
}
.game-run-preview span {
max-width: min(480px, 80%);
color: #96796d;
font-size: 11px;
overflow-wrap: anywhere;
}
.game-run-panels {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.game-run-panels > section {
display: grid;
align-content: start;
gap: 8px;
min-width: 0;
min-height: 156px;
padding: 12px;
border: 1px solid #eadbd4;
border-radius: 12px;
background: #fff;
}
.game-run-panels header {
display: flex;
align-items: center;
gap: 6px;
color: #62483d;
font-size: 12px;
font-weight: 800;
}
.game-run-panels p,
.game-run-panels label,
.game-run-panels dt,
.game-run-panels dd {
margin: 0;
color: #927a70;
font-size: 10px;
}
.game-run-panels dl,
.game-run-panels dl div {
display: grid;
gap: 4px;
}
.game-run-panels dl {
margin: 0;
gap: 6px;
}
.game-run-panels dl div {
grid-template-columns: 52px minmax(0, 1fr);
}
.game-run-panels dd {
color: #533d34;
overflow-wrap: anywhere;
}
.game-run-panels label {
display: grid;
grid-template-columns: minmax(0, 1fr) 88px;
align-items: center;
gap: 8px;
}
.game-run-panels input {
min-width: 0;
height: 30px;
padding: 0 8px;
border: 1px solid #eadbd4;
border-radius: 8px;
background: #faf7f5;
color: #8f7d75;
font-size: 10px;
}
.game-workbench-chat {
display: grid;
grid-template-rows: auto minmax(0, 1fr);
min-height: 0;
}
.game-workbench-chat > header {
position: relative;
display: flex;
align-items: center;
gap: 9px;
padding: 4px 14px;
background: transparent;
}
.game-workbench-chat > header > div {
display: grid;
gap: 2px;
}
.launcher-main:has(.game-project-workbench) > .launcher-account-bar {
display: none;
}
.game-workbench-chat-title {
min-width: 0;
justify-items: start;
text-align: left;
}
.game-workbench-chat-wallet {
position: relative;
z-index: 1;
margin-left: auto;
}
.game-workbench-chat-wallet .launcher-account-bar {
position: static;
}
.game-workbench-editor-actions {
display: flex;
align-items: center;
gap: 8px;
}
.game-workbench-editor-wallet .launcher-account-bar {
position: static;
}
.game-workbench-approval-trigger {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 4px;
min-height: 28px;
margin-left: auto;
padding: 0 9px;
border: 1px solid var(--platform-surface-border);
border-radius: 999px;
background: var(--platform-button-ghost-fill);
color: var(--platform-button-ghost-text);
font-size: 10px;
font-weight: 700;
white-space: nowrap;
cursor: pointer;
}
.game-workbench-chat > header strong {
color: var(--platform-text-strong);
font-size: 13px;
}
.game-workbench-chat > header small {
color: var(--platform-text-soft);
font-size: 10px;
}
.game-workbench-chat .supervisor-chat-only-runtime-controls {
max-width: none;
}
.game-workbench-chat .supervisor-chat-only-runtime-controls .pending-command {
gap: 12px;
padding: 10px 12px;
border: 1px solid var(--platform-surface-border);
border-radius: 10px;
background: var(--platform-warm-bg);
}
.game-workbench-chat
.supervisor-chat-only-runtime-controls
.pending-command
> span {
gap: 4px;
min-width: 0;
margin: 0;
overflow-wrap: anywhere;
color: var(--platform-text-strong);
font-size: 12px;
font-weight: 800;
}
.game-workbench-chat
.supervisor-chat-only-runtime-controls
.pending-command
> span
small {
color: var(--platform-text-soft);
font-weight: 500;
line-height: 1.4;
}
.game-workbench-chat .pending-command-actions button {
min-width: 52px;
height: 34px;
flex: 0 0 auto;
border: 1px solid var(--platform-surface-border);
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
font-size: 11px;
font-weight: 800;
}
.game-workbench-chat .pending-command-actions button:last-child {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
.agent-runtime-status .project-runtime-pending-command > span {
min-width: 0;
margin: 0;
overflow-wrap: anywhere;
color: var(--platform-text-strong);
font-size: 12px;
font-weight: 800;
}
.agent-runtime-status .project-runtime-pending-command > span small {
display: block;
margin-top: 4px;
color: var(--platform-text-soft);
font-weight: 500;
line-height: 1.4;
}
.agent-runtime-status
.project-runtime-pending-command
.pending-command-actions {
display: flex;
align-items: center;
gap: 8px;
flex: 0 0 auto;
}
.agent-runtime-status
.project-runtime-pending-command
.pending-command-actions
button:last-child {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
.game-workbench-chat .agent-runtime-status .project-runtime-pending-command {
grid-template-columns: minmax(0, 1fr) 136px;
}
.game-workbench-chat
.agent-runtime-status
.project-runtime-pending-command
.pending-command-actions {
display: grid;
grid-template-columns: repeat(2, 64px);
gap: 8px;
width: 136px;
flex: 0 0 136px;
}
.game-workbench-chat
.agent-runtime-status
.project-runtime-pending-command
.pending-command-actions
button {
width: 64px;
min-width: 64px;
max-width: 64px;
padding: 0;
white-space: nowrap;
}
/* Runtime 确认卡在部分项目状态下位于状态包装层外,工作台样式直接绑定卡片自身,避免回落旧的蓝色按钮样式。 */
.game-workbench-chat .project-runtime-pending-command {
display: grid;
grid-template-columns: minmax(0, 1fr) 136px;
align-items: center;
gap: 12px;
padding: 10px 12px;
border: 1px solid var(--platform-surface-border);
border-radius: 10px;
background: var(--platform-warm-bg);
}
.game-workbench-chat
.project-supervisor-surface
> .project-runtime-pending-command,
.game-workbench-chat
.project-supervisor-conversation
.project-runtime-pending-command {
display: grid;
grid-template-columns: minmax(0, 1fr) 136px;
align-items: center;
gap: 12px;
width: 100%;
margin: 0;
padding: 10px 12px;
border: 1px solid var(--platform-surface-border);
border-radius: 10px;
background: var(--platform-warm-bg);
}
.game-workbench-chat
.project-supervisor-conversation
.project-runtime-pending-command
> span {
min-width: 0;
margin: 0;
overflow-wrap: anywhere;
color: var(--platform-text-strong);
font-size: 12px;
font-weight: 800;
}
.game-workbench-chat
.project-supervisor-conversation
.project-runtime-pending-command
> span
small {
display: block;
margin-top: 4px;
color: var(--platform-text-soft);
font-size: 10px;
font-weight: 500;
line-height: 1.4;
}
.game-workbench-chat
.project-supervisor-conversation
.project-runtime-pending-command
.pending-command-actions {
display: grid;
grid-template-columns: repeat(2, 64px);
gap: 8px;
width: 136px;
flex: 0 0 136px;
}
.game-workbench-chat
.project-supervisor-conversation
.project-runtime-pending-command
.pending-command-actions
button {
width: 64px;
min-width: 64px;
max-width: 64px;
height: 34px;
padding: 0;
border: 1px solid var(--platform-surface-border);
border-radius: 8px;
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
font-size: 11px;
font-weight: 800;
white-space: nowrap;
}
.game-workbench-chat
.project-supervisor-conversation
.project-runtime-pending-command
.pending-command-actions
button:last-child {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
/* 该卡片的两个操作按钮禁止被全局 button 规则压缩,确保“拒绝 / 确认”完整可见。 */
.project-runtime-pending-command .pending-command-actions button {
display: inline-flex !important;
width: 64px !important;
min-width: 64px !important;
max-width: 64px !important;
flex: 0 0 64px !important;
align-items: center;
justify-content: center;
padding: 0 !important;
overflow: visible;
white-space: nowrap;
}
.game-workbench-chat .project-runtime-pending-command > span {
min-width: 0;
margin: 0;
overflow-wrap: anywhere;
color: var(--platform-text-strong);
font-size: 12px;
font-weight: 800;
}
.game-workbench-chat .project-runtime-pending-command > span small {
display: block;
margin-top: 4px;
color: var(--platform-text-soft);
font-size: 10px;
font-weight: 500;
line-height: 1.4;
}
.game-workbench-chat .project-runtime-pending-command .pending-command-actions {
display: grid;
grid-template-columns: repeat(2, 64px);
gap: 8px;
width: 136px;
flex: 0 0 136px;
}
.game-workbench-chat
.project-runtime-pending-command
.pending-command-actions
button {
width: 64px;
min-width: 64px;
max-width: 64px;
height: 34px;
padding: 0;
border: 1px solid var(--platform-surface-border);
border-radius: 8px;
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
font-size: 11px;
font-weight: 800;
white-space: nowrap;
}
.game-workbench-chat
.project-runtime-pending-command
.pending-command-actions
button:last-child {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
.game-workbench-chat .project-supervisor-surface {
grid-template-columns: minmax(0, 1fr);
gap: 0;
height: 100%;
max-height: 100%;
min-height: 0;
padding: 10px;
overflow: hidden;
}
.game-workbench-chat .project-supervisor-conversation {
position: relative;
display: block;
height: 100%;
min-height: 0;
overflow: hidden;
}
.game-workbench-chat .project-supervisor-message-list {
height: 100%;
min-height: 96px;
max-height: none;
overflow-y: auto;
border: 1px solid var(--platform-subpanel-border);
background: var(--platform-input-fill);
padding-bottom: 196px;
scroll-padding-bottom: 196px;
scrollbar-gutter: stable;
}
/* Keep the transcript readable while making the user's turns immediately
distinct from the assistant stream, like a conventional chat surface. */
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list
.message {
width: fit-content;
max-width: min(88%, 720px);
margin: 0;
padding: 9px 12px;
border-radius: 14px;
line-height: 1.55;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list
.message
+ .message {
margin-top: 10px;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list
.message--user {
margin-left: auto;
border: 1px solid var(--platform-button-primary-border);
border-radius: 14px 14px 4px;
background: var(--platform-warm-bg);
color: var(--platform-text-base);
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list
> .project-supervisor-process-card {
width: 100%;
}
.game-workbench-chat .agent-runtime-status {
max-height: clamp(120px, 24dvh, 240px);
min-height: 0;
overflow-y: auto;
border-color: var(--platform-subpanel-border);
background: var(--platform-neutral-bg);
color: var(--platform-text-strong);
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.game-workbench-chat .project-runtime-summary {
position: sticky;
top: -10px;
z-index: 3;
gap: 5px;
padding-bottom: 7px;
border-bottom: 1px solid var(--platform-line-soft);
background: var(--platform-neutral-bg);
}
.project-runtime-empty-state {
display: grid;
min-height: 112px;
place-content: center;
justify-items: center;
gap: 10px;
color: var(--platform-accent);
text-align: center;
}
.project-runtime-empty-state strong {
color: var(--platform-text-strong);
font-size: 13px;
}
.game-workbench-chat
.project-runtime-summary
> small[aria-label='项目总控 Agent 进度'] {
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.game-workbench-chat .project-runtime-professional-list {
gap: 5px;
padding-top: 5px;
border-top: 0;
}
.game-workbench-chat .project-runtime-professional-list article {
gap: 3px;
padding: 7px 8px;
border-color: var(--platform-subpanel-border);
background: var(--platform-input-fill);
}
.game-workbench-chat .project-runtime-overview,
.game-workbench-chat .agent-runtime-status .project-runtime-pending-command {
background: var(--platform-warm-bg);
}
.game-workbench-chat .project-runtime-overview > span,
.game-workbench-chat .project-runtime-plan-progress span,
.game-workbench-chat .project-runtime-professional-list article > header span,
.game-workbench-chat .project-runtime-professional-list article p,
.game-workbench-chat .project-supervisor-workspace-status {
color: var(--platform-text-base);
}
.game-workbench-chat .project-runtime-plan-progress progress {
accent-color: var(--platform-accent);
}
.game-workbench-chat .agent-runtime-status .project-runtime-professional-list {
border-top-color: var(--platform-line-soft);
}
.game-workbench-chat .project-runtime-professional-actions button {
border-color: var(--platform-surface-border);
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
white-space: nowrap;
}
.game-workbench-chat .project-runtime-professional-actions button:last-child,
.game-workbench-chat .project-runtime-recovery > button {
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
}
.game-workbench-chat .agent-runtime-status .project-runtime-recovery {
border-color: var(--platform-button-danger-border);
background: var(--platform-button-danger-fill);
}
.game-workbench-chat .project-runtime-recovery > span {
color: var(--platform-button-danger-text);
}
.game-workbench-chat .project-runtime-recovery > span small {
color: var(--platform-text-base);
}
.game-workbench-chat .message--user {
color: var(--platform-warm-text);
}
.game-workbench-chat .message-action,
.game-workbench-chat .message-history-more {
border-color: var(--platform-surface-border);
background: var(--platform-button-secondary-fill);
color: var(--platform-button-secondary-text);
}
.game-workbench-chat .project-runtime-professional-list .project-runtime-error {
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.game-workbench-chat .project-supervisor-collaboration {
display: none;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer {
grid-template-columns: minmax(0, 1fr) 82px;
align-items: stretch;
position: relative;
z-index: 2;
padding-top: 8px;
background: transparent;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer
textarea {
height: 72px;
min-height: 72px;
max-height: 72px;
resize: none;
border-color: var(--platform-surface-border);
background: var(--platform-input-fill);
color: var(--platform-text-strong);
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer
textarea:focus-visible {
border-color: var(--platform-surface-hover-border);
outline: none;
box-shadow: 0 0 0 3px var(--platform-input-focus-ring);
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer
button {
width: auto;
height: auto;
min-height: 72px;
border-color: var(--platform-button-primary-border);
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
font-weight: 800;
white-space: nowrap;
}
/* 右侧对话采用简洁的 Codex 式消息流与编辑框,减少卡片嵌套和视觉噪音。 */
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list {
position: absolute;
top: 0;
right: 0;
bottom: 104px;
left: 0;
gap: 34px;
height: auto;
padding: 18px 20px 24px;
scroll-padding-bottom: 24px;
border: 1px solid var(--platform-subpanel-border);
border-radius: 12px;
background: var(--platform-input-fill);
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list
.message {
display: block;
width: 100%;
max-width: 100%;
padding: 4px 0;
border: 0;
border-radius: 0;
background: transparent;
color: var(--platform-text-base);
font-size: 14px;
line-height: 1.85;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list
.message
+ .message {
margin-top: 0;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list
.message--user {
width: fit-content;
max-width: min(82%, 640px);
margin-left: auto;
padding: 11px 16px;
border: 1px solid var(--platform-button-primary-border);
border-radius: 14px 14px 4px;
background: var(--platform-warm-bg);
color: var(--platform-text-strong);
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer {
display: block;
position: absolute;
right: 0;
bottom: 0;
left: 0;
z-index: 5;
padding: 0;
pointer-events: none;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer
textarea {
display: block;
width: 100%;
min-height: 88px;
max-height: 180px;
padding: 14px 48px 38px 15px;
border: 1px solid var(--platform-surface-border);
border-radius: 14px;
background: var(--platform-input-fill);
color: var(--platform-text-strong);
font-size: 13px;
line-height: 1.6;
resize: vertical;
pointer-events: auto;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer
button {
position: absolute;
right: 10px;
bottom: 10px;
display: grid;
width: 30px;
min-width: 30px;
height: 30px;
min-height: 30px;
padding: 0;
border: 0;
border-radius: 9px;
background: var(--platform-button-primary-fill);
color: var(--platform-button-primary-text);
place-items: center;
pointer-events: auto;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer
button
svg {
width: 14px;
height: 14px;
}
.game-agent-dock {
position: relative;
z-index: 30;
isolation: isolate;
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
overflow: visible;
min-height: 58px;
padding: 6px 10px;
border: 1px solid var(--platform-line-soft);
border-radius: 14px;
background: var(--platform-subpanel-fill);
box-shadow: var(--platform-nav-active-shadow);
}
.game-agent-dock-more {
flex: 0 0 auto;
min-height: 38px;
padding: 0 12px;
border: 1px solid var(--platform-surface-border);
border-radius: 12px;
background: var(--platform-button-ghost-fill);
color: var(--platform-button-ghost-text);
font-size: 11px;
font-weight: 800;
white-space: nowrap;
cursor: pointer;
}
.game-agent-dock-more:hover {
border-color: var(--platform-surface-hover-border);
color: var(--platform-text-strong);
}
.game-agent-dock-item {
position: relative;
display: grid;
grid-template-columns: 34px minmax(0, 1fr);
flex: 1 1 128px;
align-items: center;
gap: 8px;
min-width: 0;
max-width: 170px;
padding: 6px 8px;
border: 1px solid var(--platform-icon-border);
border-radius: 12px;
background: var(--platform-button-ghost-fill);
color: var(--platform-text-base);
text-align: left;
cursor: default;
}
.game-agent-avatar {
display: grid;
width: 34px;
height: 34px;
border-radius: 12px;
background: var(--platform-nav-active-fill);
color: var(--platform-warm-text);
font-size: 12px;
font-weight: 900;
place-items: center;
}
.game-agent-dock-item > span:nth-child(2) {
display: grid;
min-width: 0;
gap: 2px;
}
.game-agent-dock-item strong {
overflow: hidden;
color: var(--platform-text-strong);
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.game-agent-dock-item small {
overflow: hidden;
color: var(--platform-text-soft);
font-size: 9px;
text-overflow: ellipsis;
white-space: nowrap;
}
.game-agent-dock-item.is-running::after {
position: absolute;
top: 8px;
right: 8px;
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--platform-success-text);
box-shadow: 0 0 0 3px var(--platform-success-border);
content: '';
}
.game-agent-dock-item.is-waiting::after,
.game-agent-dock-item.is-failed::after,
.game-agent-dock-item.is-completed::after {
position: absolute;
top: 8px;
right: 8px;
width: 7px;
height: 7px;
border-radius: 50%;
content: '';
}
.game-agent-dock-item.is-waiting::after {
background: var(--platform-warm-text);
box-shadow: 0 0 0 3px var(--platform-warm-border);
}
.game-agent-dock-item.is-failed::after {
background: var(--platform-button-danger-text);
box-shadow: 0 0 0 3px var(--platform-button-danger-border);
}
.game-agent-dock-item.is-completed::after {
background: var(--platform-accent);
box-shadow: 0 0 0 3px var(--platform-nav-active-border);
}
.game-agent-dock-detail {
position: absolute;
left: 50%;
bottom: calc(100% + 8px);
z-index: 20;
display: none;
width: 220px;
padding: 10px 12px;
border: 1px solid var(--platform-modal-border);
border-radius: 10px;
background: var(--platform-modal-fill);
color: var(--platform-text-strong);
box-shadow: var(--platform-panel-shadow);
transform: translateX(-50%);
}
.game-agent-dock-detail strong,
.game-agent-dock-detail small {
color: inherit;
}
.game-agent-dock-item:hover .game-agent-dock-detail {
display: grid;
gap: 4px;
}
.game-approval-backdrop {
position: fixed;
top: var(--window-chrome-height);
right: 0;
bottom: 0;
left: 0;
z-index: 260;
display: grid;
padding: 20px;
background: rgb(65 43 34 / 42%);
place-items: center;
}
.game-approval-dialog {
display: grid;
gap: 14px;
width: min(430px, 100%);
padding: 18px;
border: 1px solid #e4c8ba;
border-radius: 18px;
background: #fffaf7;
color: #4f362d;
box-shadow: 0 24px 64px rgb(62 37 27 / 24%);
}
.game-approval-dialog > header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
}
.game-approval-dialog h2,
.game-approval-dialog p {
margin: 0;
}
.game-approval-dialog h2 {
font-size: 16px;
}
.game-approval-dialog p {
margin-top: 4px;
color: #9a7d70;
font-size: 11px;
}
.game-resource-recovery-dialog {
width: min(620px, 100%);
max-height: min(720px, calc(100dvh - 40px));
overflow: auto;
}
.game-resource-recovery-list {
display: grid;
gap: 9px;
}
.game-resource-recovery-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 14px;
padding: 12px;
border: 1px solid #ead8cf;
border-radius: 13px;
background: #fff;
}
.game-resource-recovery-item > div {
display: grid;
min-width: 0;
gap: 4px;
}
.game-resource-recovery-item strong,
.game-resource-recovery-item small,
.game-resource-recovery-item span {
overflow-wrap: anywhere;
}
.game-resource-recovery-item small {
color: #9a7d70;
}
.game-resource-recovery-item > button,
.game-resource-recovery-error > button {
min-height: 34px;
padding: 0 13px;
border: 1px solid #ddb9a8;
border-radius: 999px;
background: #fff7f2;
color: #87513b;
cursor: pointer;
}
.game-resource-recovery-item > button:disabled,
.game-resource-recovery-error > button:disabled {
cursor: wait;
opacity: 0.56;
}
.game-resource-recovery-readonly {
flex: 0 0 auto;
padding: 7px 10px;
border-radius: 999px;
background: #f5efec;
color: #846f66;
font-size: 11px;
}
.game-resource-recovery-error {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 10px 12px;
border-radius: 11px;
background: #fff0ea;
color: #9a452d;
font-size: 12px;
}
@media (max-width: 620px) {
.game-resource-recovery-item,
.game-resource-recovery-error {
align-items: stretch;
flex-direction: column;
}
.game-resource-recovery-item > button,
.game-resource-recovery-error > button {
width: 100%;
}
}
.game-approval-dialog > header button {
display: grid;
width: 30px;
height: 30px;
padding: 0;
border: 1px solid #e6d1c7;
border-radius: 50%;
background: #fff;
color: #84675b;
place-items: center;
cursor: pointer;
}
.game-approval-options {
display: grid;
gap: 8px;
}
.game-approval-options > button {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
min-height: 64px;
padding: 10px 12px;
border: 1px solid #e9d8d0;
border-radius: 12px;
background: #fff;
color: #5b4036;
text-align: left;
cursor: pointer;
}
.game-approval-options > button.is-selected {
border-color: #ce744b;
background: #fff3ec;
}
.game-approval-options > button.is-unavailable {
border-style: dashed;
cursor: help;
opacity: 0.62;
}
.game-approval-options > button.is-unavailable:hover {
border-color: #c98361;
opacity: 0.9;
}
.game-approval-notice {
margin: 0;
padding: 9px 11px;
border-radius: 10px;
background: #fff4ec;
color: #9a4c2e;
font-size: 12px;
}
.game-approval-options > button > span:first-child {
display: grid;
gap: 4px;
}
.game-approval-options strong {
font-size: 12px;
}
.game-approval-options small {
color: #9a7e72;
font-size: 10px;
}
.game-approval-check {
display: grid;
width: 24px;
height: 24px;
flex: 0 0 auto;
border: 1px solid #d7b8a8;
border-radius: 50%;
color: #c5673d;
font-size: 12px;
font-weight: 900;
place-items: center;
}
.game-approval-done {
justify-self: end;
min-width: 90px;
height: 34px;
border: 0;
border-radius: 999px;
background: #ca7048;
color: #fff;
cursor: pointer;
}
@media (min-width: 761px) {
.game-project-workbench {
grid-template-rows: minmax(0, 1fr) auto;
height: 100dvh;
}
.launcher-main-with-promo .game-project-workbench {
height: calc(100dvh - 32px);
}
.game-workbench-layout {
height: auto;
}
}
@media (max-width: 1000px) {
.game-workbench-layout {
grid-template-columns: minmax(0, 1fr) minmax(280px, 0.42fr);
}
.game-workbench-toolbar {
align-items: stretch;
flex-direction: column;
}
.game-workbench-view-actions {
justify-content: flex-end;
}
.game-workbench-view-actions .game-workbench-play-button {
position: static;
transform: none;
}
}
@media (max-width: 760px) {
.game-project-workbench {
width: min(100%, calc(100vw - var(--launcher-sidebar-width)));
padding-top: 0;
}
.game-workbench-layout {
grid-template-columns: 1fr;
height: auto;
min-height: auto;
}
.game-workbench-stage,
.game-workbench-chat {
min-height: 560px;
}
.game-workbench-chat {
border-top: 1px solid var(--platform-line-soft);
border-left: 0;
}
.game-workbench-toolbar,
.game-workbench-view-actions {
align-items: stretch;
flex-direction: column;
}
.game-workbench-tabs {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.game-resource-section {
min-width: 460px;
}
.game-run-panels {
grid-template-columns: 1fr;
}
.game-workbench-chat .project-supervisor-message-list {
max-height: 52vh;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-message-list {
position: static;
min-height: 320px;
height: 52vh;
flex: 1 1 auto;
}
.game-workbench-chat
.project-supervisor-surface.is-direct-codex
.project-supervisor-composer {
position: relative;
right: auto;
bottom: auto;
left: auto;
flex: 0 0 auto;
}
.game-workbench-chat .project-supervisor-surface,
.game-workbench-chat .project-supervisor-conversation {
height: auto;
max-height: none;
overflow: visible;
}
.game-workbench-chat .agent-runtime-status {
max-height: none;
overflow: visible;
scrollbar-gutter: auto;
}
.game-agent-dock {
align-items: stretch;
flex-direction: column;
}
.game-agent-dock-item {
width: 100%;
max-width: none;
}
.game-agent-dock-detail {
position: static;
width: auto;
margin-top: 6px;
transform: none;
grid-column: 1 / -1;
}
}
/* ============================================================
立项策划前端样式(PlanGddSurface / 阶段进度 / GDD 审批卡 / 交付行 /
planning-lane-runtime-strip)。
这一段曾在 #193「Codex/agent chat layout fix」重写聊天样式时被整体误删:
组件(TSX)原样保留、选择器全数消失,策划界面裸奔、正文弹层失去 fixed 定位
变成内联平铺。从 5802048c3^ 原样恢复。聊天区样式重构时请勿顺手清理本段——
这些选择器的使用方在 features/project-workspace/GddApprovalCard.tsx 与
PlanningLaneRuntimeStrip.tsx。
============================================================ */
/* 策划区是一个面:阶段进度是标题栏,审批卡是正文。边框和圆角只画在外壳上,里面两块
不再各自带框。 */
.plan-gdd-surface {
display: grid;
min-width: 0;
border: 1px solid #cfd7e6;
border-radius: 10px;
background: #fff;
overflow: hidden;
}
.gdd-approval-card {
display: grid;
gap: 14px;
padding: 16px 18px 18px;
background: #f8fbff;
}
.plan-gdd-surface--with-card .plan-gdd-stage-progress {
border-bottom: 1px solid #dbe4f1;
}
.plan-gdd-stage-progress {
display: grid;
gap: 6px;
padding: 10px 12px;
background: #fff;
color: #526173;
font-size: 12px;
}
.plan-gdd-stage-progress__header,
.plan-gdd-stage-progress__meta {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 8px 14px;
}
/* 批准后的交付行。它是策划阶段唯一的产物出口,所以给一条分隔线把它和上面的状态
区分开,而不是混成第三行元信息。 */
.plan-gdd-stage-progress__delivery {
display: grid;
gap: 8px;
margin-top: 4px;
padding-top: 9px;
border-top: 1px solid #e6ecf5;
}
.plan-gdd-stage-progress__delivery code {
min-width: 0;
color: #3c4a5c;
font-size: 11px;
overflow-wrap: anywhere;
}
.plan-gdd-stage-progress__delivery-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.plan-gdd-stage-progress__delivery-actions button {
min-height: 30px;
padding: 0 12px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #27364a;
background: #fff;
font-size: 12px;
}
.plan-gdd-stage-progress__delivery-actions button:hover:not(:disabled),
.plan-gdd-stage-progress__delivery-actions button:focus-visible {
border-color: #1f6feb;
color: #1f6feb;
}
.plan-gdd-stage-progress__delivery-actions button:disabled {
opacity: 0.58;
}
.plan-gdd-stage-progress__delivery-error {
color: #b42323;
overflow-wrap: anywhere;
}
.plan-gdd-stage-progress__header strong {
color: #27364a;
}
.plan-gdd-stage-progress__header span {
padding: 3px 8px;
border-radius: 999px;
background: #eef6ff;
color: #1f6feb;
}
.gdd-approval-card__header {
display: grid;
gap: 5px;
min-width: 0;
}
.gdd-approval-card h2,
.gdd-approval-card h3,
.gdd-approval-card p {
margin: 0;
}
.gdd-approval-card h2 {
font-size: 18px;
}
.gdd-approval-card__header p {
color: #526173;
overflow-wrap: anywhere;
}
.gdd-approval-card__details-trace {
color: #6b7a8c;
font-size: 11px;
overflow-wrap: anywhere;
}
.gdd-approval-card__details-trigger {
justify-self: start;
min-height: 30px;
padding: 0 10px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #27364a;
background: #fff;
}
.gdd-approval-card__decisions {
display: grid;
gap: 8px;
}
.gdd-approval-card__decisions article {
display: grid;
gap: 3px;
padding: 9px 10px;
border: 1px solid #e2e8f0;
border-radius: 7px;
background: #fff;
}
.gdd-approval-card__decisions article span {
color: #1f6feb;
font-size: 12px;
}
.gdd-approval-card__decisions article small {
color: #526173;
overflow-wrap: anywhere;
}
.gdd-approval-card__actions,
.gdd-approval-card__dialog-actions,
.gdd-approval-card__recovery {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.gdd-approval-card__actions button,
.gdd-approval-card__dialog-actions button,
.gdd-approval-card__recovery button {
min-height: 32px;
padding: 0 12px;
border: 1px solid #cfd7e6;
border-radius: 6px;
color: #fff;
background: #1f6feb;
}
.gdd-approval-card__actions button:nth-child(n + 2),
.gdd-approval-card__dialog-actions button:first-child {
color: #27364a;
background: #fff;
}
.gdd-approval-card button:disabled {
cursor: not-allowed;
opacity: 0.55;
}
.gdd-approval-card__recovery {
justify-content: space-between;
padding: 9px 10px;
border-radius: 7px;
color: #854d0e;
background: #fff7df;
font-size: 13px;
}
.gdd-approval-card__error {
padding: 9px 10px;
border-radius: 7px;
color: #991b1b;
background: #fff1f2;
overflow-wrap: anywhere;
}
.gdd-approval-card__dialog-backdrop {
position: fixed;
top: var(--window-chrome-height);
right: 0;
bottom: 0;
left: 0;
z-index: 220;
display: grid;
padding: 24px;
background: rgb(0 0 0 / 56%);
place-items: center;
}
.gdd-approval-card__dialog {
display: grid;
gap: 12px;
width: min(520px, 100%);
padding: 20px;
border: 1px solid #e5e7eb;
border-radius: 8px;
background: #fff;
box-shadow: 0 18px 52px rgb(0 0 0 / 18%);
}
.gdd-approval-card__details {
max-height: min(760px, calc(100vh - 32px));
overflow: auto;
}
.gdd-approval-card__details header,
.gdd-approval-card__details article {
display: grid;
gap: 5px;
}
.gdd-approval-card__details article {
padding-top: 10px;
border-top: 1px solid #e2e8f0;
}
.gdd-approval-card__details p {
white-space: pre-line;
overflow-wrap: anywhere;
}
.gdd-approval-card__dialog textarea {
width: 100%;
min-height: 110px;
padding: 9px;
border: 1px solid #cfd7e6;
border-radius: 6px;
resize: vertical;
}
.gdd-approval-card__dialog-hint {
padding: 9px 10px;
border-radius: 7px;
color: #854d0e;
background: #fff7df;
font-size: 13px;
}
/* 审批卡是这一列里唯一没有天花板的成员:Fast GDD 的决定项越多它越高,能把消息列表和运行
时面板一起挤出可视区。和 `.agent-runtime-status` 一样给它自己的上限加内部滚动,而不是
让它去挤别人。 */
/* 策划链路的会话列比另外两条多一个成员:策划面(阶段进度 + 审批卡)。#1935802048c3
「Codex/agent chat layout fix」)把这个容器从基础规则继承来的 `display: grid` 改成
`display: block`、并把消息列表从 `flex: 1 1 auto` 改成 `height: 100%`,于是列表独吞
整列高度,排在它后面的策划窄条、待确认命令、输入框和状态行全部被 `overflow: hidden`
静默裁掉——组件照常渲染、DOM 里查得到,只是位置落在裁剪线外,屏幕上什么都没有。
实测:窄条 top=858 而容器 bottom=788,超出 384pxscrollHeight 1235 vs clientHeight 734。
同一批改动还删掉了 `.game-workbench-chat .project-supervisor-composer` 的 4 条规则,
所以列表上那个 `padding-bottom: 196px`(本意是给「浮起来的输入框」留位)从来没有对应
的定位规则,那个模型压根没成立过。
命中判据是两个类的并集,两个都只属于策划链路,做游戏与做素材保持 master 的 block
列原样不动。为什么不能只认策划面:`PlanGddSurface` 在 `planGddState === null` 时整个
返回 null,而 `planGddState` 初值就是 null、要靠一次独立的 IPC 才填上。首帧竞态、以及
hydrate 持续失败时,策划 run 照跑、澄清卡照渲染,只认策划面就会漏掉这一格,裁剪原样
复发。窄条自己在场就等价于「有东西要用户动手」,把它并进来之后,「卡片存在」和「列
布局生效」才是同一件事。
用 flex 列而不是 grid:子元素个数随待确认命令的有无浮动,固定行模板会错位;而且下面
那条 `.plan-gdd-surface { flex: 0 0 auto }` 本来就是照 flex 写的,容器变成 flex 之后它
才真正生效——在此之前它一直是死声明。 */
.game-workbench-chat
.project-supervisor-conversation:has(
.plan-gdd-surface,
.planning-lane-runtime-strip
) {
display: flex;
flex-direction: column;
gap: 10px;
/* 兜底:正常情况下上面的行分配已经让整列放得下,这条不会产生滚动条。但审批卡展开
到 52dvh 且窄条同时在场时仍可能超出,届时给滚动而不是继承 `overflow: hidden`
的裁剪——这个 bug 的全部代价就来自「悄悄裁掉」,宁可多一根滚动条。 */
overflow-y: auto;
}
/* 整列里只有消息列表可收缩:其余成员各自有天花板(策划面按内容、窄条 52dvh 且内滚、
输入框定高),由列表吸收剩余空间。`height: 100%` 必须撤掉,否则它照旧独吞整列;
`padding-bottom` 也一并收回,输入框已经回到文档流里,不再需要给它留空。 */
.game-workbench-chat
.project-supervisor-conversation:has(
.plan-gdd-surface,
.planning-lane-runtime-strip
)
.project-supervisor-message-list {
flex: 1 1 auto;
height: auto;
min-height: 96px;
padding-bottom: 12px;
scroll-padding-bottom: 12px;
}
/* 这三个成员不参与压缩:消息列表变长时不能把它们挤没——它们正是用户唯一需要动手的
地方(澄清卡、输入框)。 */
.game-workbench-chat
.project-supervisor-conversation:has(
.plan-gdd-surface,
.planning-lane-runtime-strip
)
.planning-lane-runtime-strip,
.game-workbench-chat
.project-supervisor-conversation:has(
.plan-gdd-surface,
.planning-lane-runtime-strip
)
.project-supervisor-composer,
.game-workbench-chat
.project-supervisor-conversation:has(
.plan-gdd-surface,
.planning-lane-runtime-strip
)
.project-supervisor-workspace-status {
flex: 0 0 auto;
}
/* 这个面不参与 flex 压缩。它自己不会长高:标题栏是固定几行,审批卡下面有自己的
max-height 和内滚,所以高度天然有界。让它可压缩的话,`overflow: hidden`(画圆角
要的)会把底部切掉——批准后交付行正好在那儿,表现是路径和两个按钮凭空消失。 */
.game-workbench-chat .plan-gdd-surface {
flex: 0 0 auto;
}
/* 只有审批卡在场时才需要「标题栏定高 + 正文占余下」的两行轨道。批准后卡片收掉,
面里只剩标题栏,这条声明会给它套上一个不存在的第二行。 */
.game-workbench-chat .plan-gdd-surface--with-card {
min-height: 0;
grid-template-rows: auto minmax(0, 1fr);
}
.game-workbench-chat .gdd-approval-card {
min-height: 0;
max-height: clamp(240px, 52dvh, 640px);
overflow-y: auto;
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
/* 上面 24dvh/240px 的天花板是给做游戏链路常驻的调试面板设的。策划链路的窄条只在
需要用户动手时出现(澄清卡 / 失败恢复),内容是要读完再回答的题面,给它和审批
卡同级的空间。 */
.game-workbench-chat .planning-lane-runtime-strip {
max-height: clamp(240px, 52dvh, 640px);
}
/* 做方案在拿到第一个已登记资源之前,左边的资源画布是空的;工作台此时收成单栏,
对话铺满。类名由 view/project-development/index.tsx 的 conversationOnlyWorkbench
拼上(planningStartMode && resources.length === 0),画布是 display: none 不是
不渲染——页签、缩放、选中状态都保留,第一个资源登记后自动恢复双栏。
同批规则曾与上面的策划样式一起被 #193 误删。 */
.game-workbench-layout.is-conversation-only {
grid-template-columns: minmax(0, 1fr);
}
.game-workbench-layout.is-conversation-only .game-workbench-stage {
display: none;
}