@import 'tailwindcss'; @source '../../../packages/shared/src/components'; @import '@genarrative/shared/styles.css'; @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; } .app-update-notice { position: fixed; z-index: 40; top: calc(var(--window-chrome-height) + 12px); right: 16px; display: flex; align-items: center; gap: 16px; max-width: min(520px, calc(100vw - 32px)); padding: 12px 14px; border: 1px solid #efc9ae; border-radius: 12px; background: #fffaf5; box-shadow: 0 8px 24px rgb(100 49 26 / 16%); } .app-update-notice > div { display: grid; gap: 3px; min-width: 0; } .app-update-notice strong { color: #4a220f; font-size: 13px; } .app-update-notice span, .app-update-notice p { margin: 0; color: #8d6a58; font-size: 11px; } .app-update-notice p { max-width: 320px; max-height: 120px; overflow-y: auto; overflow-wrap: anywhere; white-space: pre-wrap; } .app-update-notice button { flex: 0 0 auto; padding: 7px 12px; border: 0; border-radius: 8px; background: #c7653d; color: white; cursor: pointer; font-size: 12px; font-weight: 700; } .app-update-notice button:disabled { cursor: wait; opacity: 0.65; } .app-update-notice .app-update-close { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 6px; background: transparent; color: #8d6a58; cursor: pointer; } .app-update-notice .app-update-close:hover { background: rgb(199 101 61 / 12%); color: #4a220f; } .app-update-notice .app-update-close:disabled { cursor: wait; opacity: 0.5; } .app-update-overlay { position: fixed; z-index: 260; inset: 0; display: grid; padding: 24px; background: rgb(35 20 12 / 48%); place-items: center; pointer-events: auto; } .app-update-progress-dialog { display: grid; width: min(420px, calc(100vw - 48px)); gap: 12px; padding: 28px; border: 1px solid #efc9ae; border-radius: 18px; background: #fffaf5; box-shadow: 0 20px 60px rgb(38 18 8 / 28%); color: #4a220f; text-align: center; } .app-update-progress-icon { display: grid; width: 52px; height: 52px; margin: 0 auto; border-radius: 16px; background: #f6dfd0; color: #c7653d; place-items: center; } .app-update-progress-icon .is-spinning { animation: app-update-spin 0.9s linear infinite; } @keyframes app-update-spin { to { transform: rotate(360deg); } } .app-update-progress-dialog h2, .app-update-progress-dialog p, .app-update-progress-dialog small { margin: 0; } .app-update-progress-dialog h2 { font-size: 18px; } .app-update-progress-dialog p, .app-update-progress-dialog small { color: #8d6a58; font-size: 12px; } .app-update-progress-track { height: 8px; overflow: hidden; border-radius: 99px; background: #f1ded2; } .app-update-progress-track span { display: block; height: 100%; border-radius: inherit; background: #c7653d; transition: width 180ms ease; } .app-update-progress-dialog button { justify-self: center; min-width: 96px; padding: 8px 16px; border: 0; border-radius: 8px; background: #c7653d; color: #fff; cursor: pointer; font-weight: 700; } .app-update-progress-actions { display: flex; justify-content: center; gap: 10px; } :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 { display: flex; flex-direction: column; gap: 18px; width: calc(100vw - var(--launcher-sidebar-width)); max-width: none; flex: 1 1 auto; height: 100dvh; min-height: 0; margin: 0; padding: 92px 28px 24px; overflow: hidden; } .launcher-main:has(.launcher-projects-page) { display: flex; flex-direction: column; 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: flex; flex-direction: column; flex: 1 1 auto; 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) 104px; align-items: center; min-width: 0; } .launcher-project-table-header { height: 42px; flex-shrink: 0; 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; flex: 1 1 auto; 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-rename { display: flex; align-items: center; justify-content: flex-start; width: 100%; height: 100%; min-width: 0; gap: 12px; } .launcher-project-rename label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } .launcher-project-rename input { width: min(100%, 320px); min-width: 0; min-height: 30px; padding: 0 8px; border: 1px solid var(--platform-surface-border); border-radius: 7px; color: var(--platform-text-strong); font-size: 13px; font-weight: 700; } .launcher-project-rename input:focus-visible { border-color: var(--platform-warm-text); outline: 2px solid transparent; } .launcher-project-rename-error { color: #a64735 !important; } .launcher-project-rename-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; justify-self: end; width: 100%; } .launcher-project-rename-actions button { display: inline-flex; align-items: center; justify-content: center; min-height: 28px; gap: 3px; padding: 0 7px; border-radius: 7px; font-size: 11px; font-weight: 700; } .launcher-project-rename-actions button:first-child { border: 0; background: var(--platform-warm-text); color: #fff; } .launcher-project-rename-actions button:last-child { border: 1px solid var(--platform-surface-border); background: transparent; color: var(--platform-text-strong); } .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 { position: relative; isolation: isolate; display: grid; gap: 9px; margin-top: 12px; padding: 12px 14px; border: 1px solid #b9d8c5; border-radius: 8px; background: #f1f8f3; color: #1f3d2a; overflow: hidden; } .project-supervisor-process-card::after { content: ''; position: absolute; z-index: -1; inset: 0 auto 0 -35%; width: 28%; background: linear-gradient( 90deg, transparent, rgb(255 255 255 / 28%), transparent ); pointer-events: none; opacity: 0; } .project-supervisor-process-card.is-active::after { opacity: 1; animation: project-supervisor-process-sweep 1.8s ease-in-out infinite; } @keyframes project-supervisor-process-sweep { from { transform: translateX(0); } to { transform: translateX(520%); } } .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.is-active::after { animation: none; } } .project-supervisor-process-card p { margin: 0; color: #263142; font-size: 13px; line-height: 1.55; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; max-height: 1.55em; white-space: pre-wrap; overflow-wrap: anywhere; overflow: hidden; } .project-supervisor-process-card p.is-expanded { display: block; max-height: 180px; overflow: auto; scrollbar-color: rgb(47 111 75 / 58%) transparent; } .project-supervisor-process-card p.is-expanded::-webkit-scrollbar-track, .project-supervisor-process-card p.is-expanded::-webkit-scrollbar-corner { background: transparent; } .project-supervisor-process-detail { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 8px; } .project-supervisor-process-toggle { align-self: start; padding: 0; border: 0; background: transparent; color: #2f6f4b; font: inherit; font-size: 12px; cursor: pointer; white-space: nowrap; } .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 - var(--window-chrome-height) - 48px)); max-height: calc(100dvh - var(--window-chrome-height) - 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-section-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 7px; } .runtime-settings-section-actions button, .runtime-settings-extension-actions button { display: inline-flex; align-items: center; justify-content: center; gap: 5px; min-height: 30px; padding: 0 9px; border: 1px solid var(--platform-surface-border); border-radius: 8px; background: var(--platform-button-ghost-fill); color: var(--platform-text-base); font-size: 11px; cursor: pointer; } .runtime-settings-section-actions button:hover, .runtime-settings-extension-actions button:hover { border-color: var(--platform-surface-hover-border); background: var(--platform-button-ghost-fill); } .runtime-settings-section-actions button:disabled, .runtime-settings-extension-actions button:disabled { cursor: default; opacity: 0.55; } .runtime-settings-extensions { display: grid; gap: 10px; } .runtime-settings-inline-status { margin: 0; color: var(--platform-text-soft); font-size: 11px; } .runtime-settings-extension-list { display: grid; gap: 8px; } .runtime-settings-extension-item { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px; border: 1px solid var(--platform-subpanel-border); border-radius: 12px; background: var(--runtime-settings-subpanel-fill); } .runtime-settings-extension-main { display: grid; min-width: 0; gap: 3px; } .runtime-settings-extension-main strong, .runtime-settings-extension-main input { min-width: 0; color: var(--platform-text-strong); font-size: 13px; font-weight: 800; } .runtime-settings-extension-main input { width: min(100%, 300px); padding: 6px 8px; border: 1px solid var(--platform-surface-border); border-radius: 7px; background: var(--platform-input-fill); } .runtime-settings-extension-main > span, .runtime-settings-extension-main > small, .runtime-settings-extension-actions > span { overflow: hidden; color: var(--platform-text-soft); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .runtime-settings-extension-main > small { color: var(--platform-danger, #b45309); } .runtime-settings-extension-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 6px; flex-shrink: 0; } .runtime-settings-extension-actions > span { margin-right: 2px; } .runtime-settings-empty-state { display: grid; gap: 4px; padding: 24px 14px; border: 1px dashed var(--platform-subpanel-border); border-radius: 12px; color: var(--platform-text-soft); text-align: center; } .runtime-settings-empty-state strong { color: var(--platform-text-base); font-size: 13px; } .runtime-settings-empty-state span { 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-settings-about-update { display: flex; align-items: center; gap: 12px; } .runtime-settings-about-update button { padding: 8px 14px; border: 0; border-radius: 8px; background: var(--platform-accent); color: #fff; cursor: pointer; font-weight: 700; } .runtime-settings-about-update button:disabled { cursor: wait; opacity: 0.65; } .runtime-settings-about-update span { color: var(--platform-text-soft); font-size: 12px; } .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; overflow: auto; } .runtime-settings-toast { top: 12px; right: 12px; left: 12px; max-width: none; } .runtime-settings-panel { width: 100%; height: calc(100dvh - var(--window-chrome-height)); max-height: calc(100dvh - var(--window-chrome-height)); 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-settings-section-header { align-items: flex-start; flex-direction: column; } .runtime-settings-section-actions { justify-content: flex-start; } .runtime-settings-extension-item { align-items: stretch; flex-direction: column; } .runtime-settings-extension-actions { justify-content: flex-start; } .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: visible; 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; border-radius: inherit; 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-type-badge { position: absolute; top: 8px; right: 8px; z-index: 2; display: inline-flex; max-width: calc(100% - 16px); align-items: center; min-width: 0; padding: 4px 8px; overflow: hidden; border: 1px solid rgb(255 255 255 / 72%); border-radius: 999px; background: rgb(75 48 38 / 84%); color: #fff; font-size: 10px; font-weight: 900; line-height: 1; letter-spacing: 0.02em; pointer-events: none; text-overflow: ellipsis; white-space: nowrap; box-shadow: 0 8px 18px rgb(96 62 47 / 20%); transform: scale(var(--genarrative-image-canvas-inverse-scale, 1)); transform-origin: top right; } .game-resource-card-media-control { transform: scale(var(--genarrative-image-canvas-inverse-scale, 1)); transform-origin: bottom right; } /* CanvasWorld 使用 CANVAS_RENDER_SUPERSAMPLE 超采样;这些 Lucide 卡片图标需保持屏幕级描边宽度。 */ .game-resource-card-placeholder > svg *, .game-resource-card-version-visual > svg *, .game-resource-card-audio-visual > svg * { stroke-width: calc(2px * var(--genarrative-image-canvas-inverse-scale, 1)); } .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` 一样给它自己的上限加内部滚动,而不是 让它去挤别人。 */ /* 策划链路的会话列比另外两条多一个成员:策划面(阶段进度 + 审批卡)。#193(5802048c3 「Codex/agent chat layout fix」)把这个容器从基础规则继承来的 `display: grid` 改成 `display: block`、并把消息列表从 `flex: 1 1 auto` 改成 `height: 100%`,于是列表独吞 整列高度,排在它后面的策划窄条、待确认命令、输入框和状态行全部被 `overflow: hidden` 静默裁掉——组件照常渲染、DOM 里查得到,只是位置落在裁剪线外,屏幕上什么都没有。 实测:窄条 top=858 而容器 bottom=788,超出 384px;scrollHeight 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; } .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select { position: absolute; bottom: 10px; right: 48px; display: flex; align-items: center; justify-content: flex-end; gap: 4px; max-width: calc(100% - 64px); pointer-events: auto; } .home-input-model-select { position: relative; min-width: 0; } .conversation-model-trigger { display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 180px; height: 30px; padding: 0 6px; border: 0; border-radius: 7px; background: transparent; color: var(--platform-text-soft, #6b7280); font: inherit; font-size: 12px; cursor: pointer; } .conversation-model-trigger:hover, .conversation-model-trigger:focus-visible, .conversation-model-trigger[aria-expanded='true'] { background: color-mix( in srgb, var(--platform-button-ghost-fill, #f3f4f6) 80%, transparent ); color: var(--platform-text-strong, #30343b); outline: none; } .conversation-model-trigger-status { width: 7px; height: 7px; flex: 0 0 auto; border: 1px solid currentColor; border-radius: 50%; opacity: 0.65; } .conversation-model-trigger-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .conversation-model-menu { position: absolute; right: 0; bottom: calc(100% + 8px); z-index: 20; display: grid; min-width: 150px; max-width: 190px; padding: 5px; border: 1px solid var(--platform-surface-border, #e5e7eb); border-radius: 10px; background: var(--platform-input-fill, #fff) !important; box-shadow: 0 14px 30px rgb(31 41 55 / 13%), 0 2px 6px rgb(31 41 55 / 5%); pointer-events: auto; } .conversation-model-menu button { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-width: 0; min-height: 32px; padding: 0 9px; border: 0; border-radius: 6px; background: transparent; color: var(--platform-text-base, #374151); font: inherit; font-size: 12px; text-align: left; cursor: pointer; } .conversation-model-menu button:hover, .conversation-model-menu button:focus-visible, .conversation-model-menu button[aria-selected='true'] { background: var(--platform-button-ghost-fill, #f3f4f6); color: var(--platform-text-strong, #111827); outline: none; } .conversation-model-menu-option-main { display: flex; align-items: center; gap: 6px; min-width: 0; overflow: hidden; } .conversation-model-menu-default { flex: 0 0 auto; padding: 0 5px; border: 1px solid var(--platform-line-soft, #e2cbb8); border-radius: 5px; background: var(--platform-button-secondary-fill, rgba(255, 253, 250, 0.78)); color: var(--platform-text-soft, #988476); font-size: 10px; font-style: normal; line-height: 1.7; } .conversation-model-menu-loading { display: flex; align-items: center; min-height: 32px; padding: 0 9px; color: var(--platform-text-soft, #6b7280); font-size: 12px; } .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-menu button { position: static !important; display: flex !important; align-items: center !important; justify-content: space-between !important; width: 100% !important; min-width: 0 !important; min-height: 32px !important; height: 32px !important; margin: 0 !important; padding: 0 9px !important; border: 0 !important; border-radius: 6px !important; background: transparent !important; color: var(--platform-text-base, #374151) !important; box-shadow: none !important; font-size: 12px !important; font-weight: 500 !important; white-space: nowrap !important; } .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-menu button:hover, .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-menu button:focus-visible, .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-menu button[aria-selected='true'] { background: #f3f1ee !important; color: var(--platform-text-strong, #1f2937) !important; outline: none !important; } .conversation-model-menu-divider { height: 1px; margin: 4px 5px; background: var(--platform-line-soft, #ece9e5); } .conversation-model-menu-refresh { justify-content: flex-start !important; gap: 7px !important; color: var(--platform-text-soft, #6b7280) !important; } .conversation-model-menu-refresh:hover, .conversation-model-menu-refresh:focus-visible { color: var(--platform-text-strong, #1f2937) !important; } .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-trigger { position: static !important; display: inline-flex !important; width: auto !important; min-width: 0 !important; min-height: 30px !important; height: 30px !important; padding: 0 7px !important; border: 0 !important; border-radius: 7px !important; background: transparent !important; color: var(--platform-text-soft, #6b7280) !important; box-shadow: none !important; font-size: 12px !important; font-weight: 500 !important; } .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-trigger:hover, .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-trigger:focus-visible, .game-workbench-chat .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-trigger[aria-expanded='true'] { background: var(--platform-button-ghost-fill, #f3f4f6) !important; color: var(--platform-text-strong, #30343b) !important; } .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-trigger { min-width: 0; max-width: 180px; height: 30px; } .project-supervisor-surface.is-direct-codex .project-supervisor-composer .conversation-model-select .conversation-model-menu button { position: static; width: auto; min-height: 32px; } .conversation-model-select [role='alert'] { position: absolute; bottom: 36px; right: 0; max-width: 220px; color: #b42318; background: #fff; font-size: 12px; } .conversation-model-select [role='status'] { position: absolute; bottom: 36px; right: 0; max-width: 220px; color: #6b7280; background: #fff; font-size: 12px; }