:root { color-scheme: dark; --bg: #0b0e14; --surface-0: #0f131b; --surface-1: #151a24; --surface-2: #1b2130; --surface-3: #252c3a; --surface-hover: #202838; --line: #30394a; --line-soft: #222a38; --text: #e7ebf4; --text-muted: #9aa4b6; --text-faint: #6f7a8d; --primary: #8fb4ff; --primary-strong: #5b8ff9; --primary-soft: rgba(91, 143, 249, 0.15); --success: #54ddb0; --success-soft: rgba(84, 221, 176, 0.12); --warning: #f2ba63; --warning-soft: rgba(242, 186, 99, 0.13); --danger: #ff817a; --danger-soft: rgba(255, 129, 122, 0.13); --shadow: 0 18px 70px rgba(0, 0, 0, 0.32); --radius: 7px; --sidebar: 286px; --action-panel: 352px; --font-ui: Inter, "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; --font-mono: "Cascadia Code", "SFMono-Regular", Consolas, "Liberation Mono", monospace; } html[data-theme="light"] { color-scheme: light; --bg: #e9eef7; --surface-0: #f2f6fc; --surface-1: #ffffff; --surface-2: #f3f6fa; --surface-3: #e8edf4; --surface-hover: #edf2f8; --line: #c5d0df; --line-soft: #dce4ef; --text: #172033; --text-muted: #526078; --text-faint: #7b879a; --primary: #2857bf; --primary-strong: #346ee8; --primary-soft: rgba(52, 110, 232, 0.13); --success: #087a57; --success-soft: rgba(8, 122, 87, 0.1); --warning: #9b5b00; --warning-soft: rgba(155, 91, 0, 0.1); --danger: #c73737; --danger-soft: rgba(199, 55, 55, 0.1); --shadow: 0 18px 54px rgba(31, 55, 94, 0.14); } html[data-theme="light"] body, html[data-theme="light"] .app-shell { background: radial-gradient( circle at 82% 2%, rgba(67, 123, 235, 0.13), transparent 31% ), radial-gradient( circle at 20% 100%, rgba(31, 170, 141, 0.08), transparent 33% ), var(--bg); } html[data-theme="light"] .titlebar, html[data-theme="light"] .sidebar { background: rgba(250, 252, 255, 0.92); backdrop-filter: blur(18px); } html[data-theme="light"] .panel, html[data-theme="light"] .summary-card, html[data-theme="light"] .deploy-card, html[data-theme="light"] .settings-group, html[data-theme="light"] .pipeline-card { border-color: rgba(151, 169, 197, 0.48); box-shadow: 0 8px 28px rgba(49, 75, 116, 0.08); } html[data-theme="light"] .nav-button.active { background: linear-gradient( 105deg, rgba(52, 110, 232, 0.16), rgba(48, 181, 151, 0.08) ); box-shadow: inset 3px 0 var(--primary-strong); } html[data-theme="light"] .button.primary { box-shadow: 0 7px 18px rgba(52, 110, 232, 0.22); } * { box-sizing: border-box; } html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; } body { background: var(--bg); color: var(--text); font-family: var(--font-ui); font-size: 13px; } button, input, textarea, select { font: inherit; color: inherit; } button { border: 0; } button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; } ::selection { background: rgba(91, 143, 249, 0.35); } ::-webkit-scrollbar { width: 9px; height: 9px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--text-faint) 38%, transparent); border: 3px solid transparent; background-clip: padding-box; border-radius: 20px; } .boot-screen { height: 100vh; display: grid; place-content: center; justify-items: center; gap: 10px; color: var(--text-muted); } .boot-screen strong { color: var(--text); font-size: 16px; } .boot-brand-logo { width: 72px; height: 56px; object-fit: contain; filter: drop-shadow(0 10px 28px rgba(0, 174, 255, 0.24)); } .brand-mark { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 10px; background: linear-gradient(145deg, var(--primary), var(--primary-strong)); color: #07152e; font-weight: 800; font-size: 20px; box-shadow: 0 8px 30px rgba(91, 143, 249, 0.25); } .app-shell { height: 100vh; display: grid; grid-template-rows: 48px minmax(0, 1fr) 25px; background: var(--bg); } .titlebar { display: flex; align-items: center; justify-content: space-between; padding: 0 10px 0 14px; border-bottom: 1px solid var(--line); background: var(--surface-1); -webkit-app-region: drag; } .titlebar-left, .titlebar-right { display: flex; align-items: center; gap: 9px; min-width: 0; } .titlebar button, .titlebar input { -webkit-app-region: no-drag; } .wordmark { display: flex; align-items: center; gap: 9px; font-size: 15px; font-weight: 720; letter-spacing: -0.02em; } .wordmark .brand-mark { width: 25px; height: 25px; border-radius: 6px; font-size: 13px; box-shadow: none; } .brand-logo { width: 32px; height: 25px; object-fit: contain; display: block; } .wordmark small { color: var(--text-faint); font-size: 9px; font-weight: 620; letter-spacing: 0.01em; margin-left: -4px; } .workspace-name { color: var(--text-muted); border-left: 1px solid var(--line); padding-left: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 280px; } .connection-chip { display: inline-flex; align-items: center; gap: 6px; color: var(--text-muted); font-size: 11px; font-weight: 650; padding: 5px 8px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-0); } .connection-chip .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--success); box-shadow: 0 0 0 3px var(--success-soft); } .global-search { width: clamp(180px, 23vw, 330px); height: 30px; padding: 0 10px 0 31px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-0); color: var(--text); } .search-wrap { position: relative; } .search-wrap .icon { position: absolute; left: 9px; top: 7px; color: var(--text-faint); pointer-events: none; } .app-body { display: grid; grid-template-columns: var(--sidebar) minmax(0, 1fr); min-height: 0; } .sidebar { min-width: 0; display: flex; flex-direction: column; border-right: 1px solid var(--line); background: var(--surface-1); overflow: hidden; } .primary-nav { padding: 10px 8px 8px; border-bottom: 1px solid var(--line-soft); } .nav-button { width: 100%; height: 34px; display: flex; align-items: center; gap: 10px; padding: 0 10px; border-radius: 5px; background: transparent; color: var(--text-muted); cursor: pointer; text-align: left; font-weight: 560; } .nav-button:hover { background: var(--surface-hover); color: var(--text); } .nav-button.active { color: var(--primary); background: var(--primary-soft); } .nav-button .nav-count { margin-left: auto; min-width: 20px; text-align: center; font-family: var(--font-mono); color: var(--text-faint); font-size: 10px; } .sidebar-section { display: flex; align-items: center; justify-content: space-between; padding: 13px 12px 7px; color: var(--text-faint); font-size: 10px; font-weight: 750; letter-spacing: 0.09em; text-transform: uppercase; } .sidebar-section button { background: none; color: inherit; cursor: pointer; padding: 2px; } .repo-filter { margin: 0 9px 8px; width: calc(100% - 18px); height: 29px; border: 1px solid var(--line-soft); border-radius: 5px; background: var(--surface-0); padding: 0 9px; } .repo-list { min-height: 0; overflow: auto; padding: 0 6px 10px; } .repo-row { content-visibility: auto; contain-intrinsic-size: auto 48px; width: 100%; display: grid; grid-template-columns: 18px minmax(0, 1fr) auto; gap: 8px; align-items: center; min-height: 44px; padding: 6px 8px; background: transparent; border-radius: 5px; color: var(--text-muted); cursor: pointer; text-align: left; border: 1px solid transparent; } .repo-row:hover { background: var(--surface-hover); color: var(--text); } .repo-row.active { background: var(--primary-soft); border-color: color-mix(in srgb, var(--primary) 26%, transparent); color: var(--text); } .repo-row.attention .repo-icon { color: var(--warning); } .repo-main { min-width: 0; } .repo-name { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 620; } .repo-sub { display: flex; gap: 6px; margin-top: 3px; color: var(--text-faint); font-family: var(--font-mono); font-size: 10px; overflow: hidden; } .repo-sub span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .repo-badges { display: flex; gap: 3px; align-items: center; } .mini-badge { min-width: 18px; height: 18px; display: inline-grid; place-items: center; padding: 0 5px; border-radius: 9px; font-family: var(--font-mono); font-size: 9px; font-weight: 700; color: var(--text-muted); background: var(--surface-3); } .mini-badge.warning { background: var(--warning-soft); color: var(--warning); } .mini-badge.success { background: var(--success-soft); color: var(--success); } .mini-badge.danger { background: var(--danger-soft); color: var(--danger); } .sidebar-footer { margin-top: auto; border-top: 1px solid var(--line-soft); padding: 10px 11px; } .sidebar-diagnostic-state { display: grid; grid-template-columns: 9px minmax(0, 1fr); gap: 9px; align-items: start; color: var(--text-muted); } .sidebar-diagnostic-state .state-dot { margin-top: 4px; } .sidebar-diagnostic-state strong, .sidebar-diagnostic-state span { display: block; } .sidebar-diagnostic-state strong { color: var(--text); font-size: 10px; font-weight: 650; } .sidebar-diagnostic-state span { margin-top: 2px; color: var(--text-faint); font-size: 9px; line-height: 1.35; } .workspace { min-width: 0; min-height: 0; display: grid; background: var(--surface-0); } .workspace.with-panel { grid-template-columns: minmax(0, 1fr) var(--action-panel); } .main-canvas { min-width: 0; min-height: 0; overflow: auto; } .main-canvas.repository-canvas { overflow: hidden; height: 100%; } .action-panel { min-width: 0; border-left: 1px solid var(--line); background: var(--surface-1); overflow: auto; } .page { min-height: 100%; padding: 22px 24px 40px; } .page.nopad { padding: 0; } .page-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; margin-bottom: 22px; } .page-header h1, .repo-heading h1 { margin: 0; font-size: 20px; line-height: 1.3; letter-spacing: -0.025em; } .page-header p, .repo-heading p { margin: 5px 0 0; color: var(--text-muted); max-width: 720px; } .eyebrow { color: var(--text-faint); font-size: 10px; font-weight: 760; letter-spacing: 0.09em; text-transform: uppercase; } .button { min-height: 32px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 0 11px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-2); color: var(--text); cursor: pointer; font-weight: 620; white-space: nowrap; } .button:hover { background: var(--surface-3); } .button.primary { background: var(--primary-strong); border-color: var(--primary-strong); color: #fff; } .button.primary:hover { filter: brightness(1.07); } .button.success { background: var(--success); border-color: var(--success); color: #06251b; } .button.danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, var(--line)); background: var(--danger-soft); } .button.ghost { background: transparent; border-color: transparent; color: var(--text-muted); } .button.ghost:hover { color: var(--text); background: var(--surface-hover); } .button.block { width: 100%; min-height: 38px; } .button:disabled { opacity: 0.45; cursor: not-allowed; } .icon-button { width: 30px; height: 30px; display: inline-grid; place-items: center; border-radius: 5px; border: 1px solid transparent; background: transparent; color: var(--text-muted); cursor: pointer; } .icon-button:hover { color: var(--text); background: var(--surface-hover); border-color: var(--line-soft); } .icon { width: 16px; height: 16px; display: inline-block; flex: 0 0 auto; } .icon svg { width: 100%; height: 100%; display: block; stroke: currentColor; fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; background: var(--surface-1); } .summary-card { min-height: 118px; padding: 15px; border-right: 1px solid var(--line); position: relative; } .summary-card:last-child { border-right: 0; } .summary-value { margin-top: 18px; font-size: 28px; font-weight: 720; letter-spacing: -0.04em; } .summary-label { color: var(--text-muted); margin-top: 2px; } .summary-card .icon { position: absolute; top: 14px; right: 14px; color: var(--text-faint); } .modal .summary-grid { grid-template-columns: repeat(auto-fit, minmax(112px, 1fr)); } .modal .summary-card { min-height: 108px; } .modal .summary-card > span { display: block; max-width: 12ch; color: var(--text-muted); line-height: 1.35; } .modal .summary-card > strong { display: block; margin-top: 15px; font: 700 27px/1 var(--font-sans); color: var(--text); } .summary-card.warning .summary-value, .summary-card.warning .icon { color: var(--warning); } .summary-card.success .summary-value, .summary-card.success .icon { color: var(--success); } .summary-card.danger .summary-value, .summary-card.danger .icon { color: var(--danger); } .section-block { margin-top: 24px; } .section-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 9px; } .section-heading h2 { margin: 0; font-size: 13px; letter-spacing: -0.01em; } .section-heading .meta { color: var(--text-faint); font-size: 11px; } .action-queue { border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; background: var(--surface-1); } .queue-row { display: grid; grid-template-columns: 28px minmax(160px, 1.2fr) minmax(230px, 2fr) auto; gap: 12px; align-items: center; min-height: 62px; padding: 10px 13px; border-bottom: 1px solid var(--line-soft); } .queue-row:last-child { border-bottom: 0; } .queue-row:hover { background: var(--surface-hover); } .queue-icon { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 6px; background: var(--surface-2); color: var(--text-muted); } .queue-icon.warning { background: var(--warning-soft); color: var(--warning); } .queue-icon.success { background: var(--success-soft); color: var(--success); } .queue-icon.danger { background: var(--danger-soft); color: var(--danger); } .queue-title { font-weight: 640; } .queue-sub { color: var(--text-faint); margin-top: 3px; font-size: 11px; font-family: var(--font-mono); } .queue-reason { color: var(--text-muted); } .queue-reason strong { color: var(--text); display: block; font-weight: 600; } .two-column { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(280px, 1fr); gap: 16px; } .panel { border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface-1); } .panel-header { min-height: 42px; display: flex; align-items: center; justify-content: space-between; padding: 0 13px; border-bottom: 1px solid var(--line-soft); } .panel-header h2, .panel-header h3 { font-size: 12px; margin: 0; } .panel-body { padding: 14px; } .activity-list { padding: 3px 0; } .activity-item { display: grid; grid-template-columns: 10px minmax(0, 1fr) auto; gap: 10px; padding: 10px 13px; align-items: start; } .activity-dot { width: 7px; height: 7px; margin-top: 5px; border-radius: 50%; background: var(--text-faint); } .activity-dot.success { background: var(--success); } .activity-dot.warning { background: var(--warning); } .activity-dot.danger { background: var(--danger); } .activity-title { font-weight: 590; } .activity-sub, .activity-time { color: var(--text-faint); font-size: 11px; } .repo-workspace { height: 100%; min-height: 0; display: grid; grid-template-rows: auto auto 39px minmax(0, 1fr); } .repo-context { min-width: 0; min-height: 0; } .repo-header { padding: 16px 18px 13px; background: var(--surface-1); border-bottom: 1px solid var(--line); display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; } .repo-heading { min-width: 0; } .repo-heading h1 { display: flex; align-items: center; gap: 9px; font-size: 17px; } .repo-heading p { font-family: var(--font-mono); font-size: 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .repo-header-actions { display: flex; gap: 7px; } .release-rail { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); background: var(--surface-0); border-bottom: 1px solid var(--line); } .release-node { min-width: 0; padding: 10px 16px 11px; border-right: 1px solid var(--line-soft); position: relative; } .release-node:last-child { border-right: 0; } .repository-deployment-summary { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 7px 12px; border-bottom: 1px solid var(--line); background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 7%, var(--surface-1)), var(--surface-1) 42%); } .repository-deployment-summary-label { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; color: var(--text-muted); font-size: 10px; font-weight: 760; letter-spacing: 0.06em; text-transform: uppercase; } .repository-deployment-summary-label svg { width: 14px; height: 14px; color: var(--accent); } .repository-deployment-chips { display: flex; gap: 7px; min-width: 0; flex: 1; overflow-x: auto; scrollbar-width: thin; } .repository-deployment-chip { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; max-width: 280px; padding: 6px 9px; border: 1px solid var(--line); border-radius: 8px; background: color-mix(in srgb, var(--surface-2) 88%, transparent); color: var(--text); cursor: pointer; } .repository-deployment-chip:hover { border-color: color-mix(in srgb, var(--accent) 48%, var(--line)); background: color-mix(in srgb, var(--accent) 10%, var(--surface-2)); } .repository-deployment-chip strong, .repository-deployment-chip span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .repository-deployment-chip strong { font-size: 11px; } .repository-deployment-chip span:last-child { color: var(--text-muted); font-size: 10px; } .release-node:not(:last-child)::after { content: "›"; position: absolute; right: -6px; top: 19px; z-index: 2; width: 12px; height: 12px; display: grid; place-items: center; border-radius: 50%; background: var(--surface-0); color: var(--text-faint); } .release-label { color: var(--text-faint); font-size: 9px; font-weight: 760; letter-spacing: 0.08em; text-transform: uppercase; } .release-value { display: flex; align-items: center; gap: 7px; margin-top: 4px; min-width: 0; } .release-value strong { font-family: var(--font-mono); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .release-value span { color: var(--text-muted); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .state-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--text-faint); flex: 0 0 auto; } .state-dot.success { background: var(--success); box-shadow: 0 0 0 3px var(--success-soft); } .state-dot.warning { background: var(--warning); box-shadow: 0 0 0 3px var(--warning-soft); } .state-dot.danger { background: var(--danger); box-shadow: 0 0 0 3px var(--danger-soft); } .tabs { display: flex; align-items: flex-end; gap: 2px; padding: 0 12px; border-bottom: 1px solid var(--line); background: var(--surface-1); min-width: 0; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; } .tab { flex: 0 0 auto; white-space: nowrap; height: 38px; padding: 0 12px; background: transparent; color: var(--text-muted); border-bottom: 2px solid transparent; cursor: pointer; } .tab:hover { color: var(--text); } .tab.active { color: var(--primary); border-bottom-color: var(--primary); } .repo-content { min-height: 0; overflow: hidden; } .repo-content > .tab-page, .repo-content > .validator-page { height: 100%; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; } .repo-content > .validator-empty, .repo-content > .empty-state { max-height: 100%; overflow-y: auto; overscroll-behavior: contain; } .changes-layout { height: 100%; min-height: 0; display: grid; grid-template-columns: 290px minmax(0, 1fr); } .file-panel { min-width: 0; min-height: 0; overflow: hidden; border-right: 1px solid var(--line); background: var(--surface-1); display: flex; flex-direction: column; } .file-panel-tools { min-height: 38px; padding: 0 9px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--line-soft); } .file-list { flex: 1 1 auto; overflow-x: hidden; overflow-y: auto; min-height: 0; padding: 5px; overscroll-behavior: contain; scrollbar-gutter: stable; } .file-row { position: relative; width: 100%; min-height: 38px; display: grid; grid-template-columns: 17px 17px minmax(0, 1fr) 16px; gap: 7px; align-items: center; padding: 4px 8px; border: 1px solid transparent; border-radius: 7px; background: transparent; color: var(--text-muted); cursor: pointer; text-align: left; transition: transform 160ms ease, border-color 160ms ease, background 160ms ease, box-shadow 160ms ease; } .file-row:hover { background: var(--surface-hover); color: var(--text); border-color: color-mix(in srgb, var(--primary) 18%, transparent); transform: translateX(2px); } .file-row.active { background: linear-gradient(90deg, var(--primary-soft), transparent 110%), var(--surface-1); border-color: color-mix(in srgb, var(--primary) 36%, var(--line)); box-shadow: inset 3px 0 0 var(--primary), 0 7px 22px rgba(0, 0, 0, 0.12); color: var(--text); } .file-row > span:last-child { color: var(--text-faint); filter: drop-shadow(0 0 5px transparent); transition: color 160ms ease, filter 160ms ease; } .file-row:hover > span:last-child, .file-row.active > span:last-child { color: var(--primary); filter: drop-shadow( 0 0 5px color-mix(in srgb, var(--primary) 45%, transparent) ); } .file-row input { margin: 0; accent-color: var(--primary-strong); } .file-path { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-family: var(--font-mono); font-size: 11px; } .file-status { display: inline-grid; place-items: center; width: 17px; height: 17px; border-radius: 5px; background: color-mix(in srgb, currentColor 11%, transparent); font-family: var(--font-mono); font-size: 10px; font-weight: 750; color: var(--warning); } .file-status.added, .file-status.untracked { color: var(--success); } .file-status.deleted, .file-status.conflict { color: var(--danger); } .diff-panel { container-type: inline-size; min-width: 0; min-height: 0; display: grid; grid-template-rows: 38px minmax(0, 1fr); background: var(--bg); } .diff-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 0 11px; border-bottom: 1px solid var(--line-soft); background: var(--surface-0); } .diff-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--font-mono); color: var(--text-muted); } .diff-view { position: relative; isolation: isolate; overflow: auto; padding: 8px 0 36px; font-family: var(--font-mono); font-size: 11px; line-height: 19px; white-space: pre; tab-size: 2; background: radial-gradient( circle at 84% 72%, color-mix(in srgb, var(--primary) 8%, transparent), transparent 28% ), radial-gradient( circle at 72% 88%, color-mix(in srgb, var(--success) 5%, transparent), transparent 24% ); } .diff-line { position: relative; z-index: 2; display: block; min-height: 19px; padding: 0 14px; } .diff-atmosphere { --diff-tilt-x: 0deg; --diff-tilt-y: 0deg; position: absolute; right: clamp(24px, 7vw, 110px); bottom: clamp(28px, 8vh, 90px); z-index: 0; width: min(360px, 34vw); color: var(--primary); opacity: 0.38; pointer-events: none; transform: perspective(850px) rotateX(var(--diff-tilt-x)) rotateY(var(--diff-tilt-y)); transform-style: preserve-3d; transition: transform 220ms ease-out, opacity 180ms ease; } .diff-atmosphere.dense { opacity: 0.14; } .diff-atmosphere svg { display: block; width: 100%; overflow: visible; } .code-route { fill: none; stroke: currentColor; stroke-width: 1.2; stroke-dasharray: 4 8; opacity: 0.42; } .code-route.route-b { color: var(--success); } .code-card rect { fill: color-mix(in srgb, var(--surface-2) 72%, transparent); stroke: color-mix(in srgb, var(--primary) 60%, var(--line)); stroke-width: 1.2; filter: drop-shadow(0 18px 28px rgba(0, 0, 0, 0.24)); } .code-card path { fill: none; stroke: currentColor; stroke-linecap: round; stroke-width: 4; opacity: 0.62; } .code-node circle { fill: var(--surface-2); stroke: currentColor; stroke-width: 1.5; } .code-node path { fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2; } .node-one { color: var(--success); animation: code-node-float 5s ease-in-out infinite; } .node-two { animation: code-node-float 5s ease-in-out -2.5s infinite; } .code-packet { fill: var(--primary); filter: drop-shadow(0 0 8px currentColor); offset-path: path("M38 195 C92 84 178 214 318 74"); animation: code-packet-travel 5.4s cubic-bezier(0.4, 0, 0.2, 1) infinite; } .code-packet.packet-two { fill: var(--success); offset-path: path("M52 74 C132 8 230 34 310 156"); animation-delay: -2.7s; } .diff-atmosphere-caption { display: flex; align-items: center; justify-content: space-between; margin: -10px 42px 0; padding-top: 10px; border-top: 1px solid color-mix(in srgb, var(--primary) 32%, transparent); color: var(--text-muted); font: 700 9px/1 var(--font-mono); letter-spacing: 0.11em; text-transform: uppercase; } .diff-atmosphere-caption strong { display: flex; gap: 8px; } .diff-atmosphere-caption i { color: var(--success); font-style: normal; } .diff-atmosphere-caption i + i { color: var(--danger); } @keyframes code-packet-travel { 0% { offset-distance: 0%; opacity: 0; } 12%, 82% { opacity: 1; } 100% { offset-distance: 100%; opacity: 0; } } @keyframes code-node-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } } html[data-theme="light"] .diff-view { background: radial-gradient( circle at 84% 72%, rgba(72, 92, 220, 0.12), transparent 30% ), radial-gradient( circle at 72% 88%, rgba(15, 148, 108, 0.08), transparent 25% ), linear-gradient( 135deg, rgba(248, 251, 255, 0.88), rgba(239, 245, 255, 0.62) ); } html[data-theme="light"] .diff-atmosphere { opacity: 0.46; } html[data-theme="light"] .diff-atmosphere.dense { opacity: 0.18; } @container (max-width: 560px) { .diff-atmosphere { display: none; } } .diff-line.add { background: rgba(38, 166, 115, 0.14); color: #8ef0c6; } .diff-line.remove { background: rgba(229, 83, 75, 0.14); color: #ffaaa5; } html[data-theme="light"] .diff-line.add { color: #006642; } html[data-theme="light"] .diff-line.remove { color: #a31f1f; } .diff-line.meta { color: var(--primary); } .diff-line.hunk { color: #caa7ff; background: rgba(148, 97, 214, 0.08); } .validator-page { container-type: inline-size; padding: 18px; display: grid; gap: 14px; align-content: start; } .validator-empty { min-height: 360px; margin: 18px; padding: 38px; display: flex; align-items: center; justify-content: center; gap: 36px; text-align: left; overflow: hidden; } .validator-empty > div:last-child { max-width: 520px; } .validator-empty h2 { margin: 5px 0 8px; font-size: 24px; } .validator-empty p { margin: 0 0 18px; color: var(--text-muted); line-height: 1.65; } .validator-hero { position: relative; min-height: 160px; padding: 24px; display: grid; grid-template-columns: auto minmax(220px, 1fr) minmax(180px, 260px) auto; align-items: center; gap: 22px; overflow: hidden; background: radial-gradient( circle at 68% 16%, color-mix(in srgb, var(--primary) 16%, transparent), transparent 28% ), linear-gradient( 120deg, var(--surface-1), color-mix(in srgb, var(--surface-2) 84%, var(--primary-soft)) ); } .validator-hero.success { --validator-accent: var(--success); } .validator-hero.warning { --validator-accent: var(--warning); } .validator-hero.danger { --validator-accent: var(--danger); } .validator-score { width: 116px; height: 116px; border-radius: 32px; display: grid; place-content: center; text-align: center; background: color-mix(in srgb, var(--validator-accent) 10%, var(--surface-2)); border: 1px solid color-mix(in srgb, var(--validator-accent) 42%, var(--line)); box-shadow: inset 0 0 34px color-mix(in srgb, var(--validator-accent) 10%, transparent), 0 18px 38px rgba(0, 0, 0, 0.15); } .validator-score strong { color: var(--validator-accent); font-size: 42px; line-height: 0.9; letter-spacing: -0.05em; } .validator-score span { margin-top: 7px; color: var(--text-muted); font: 700 10px/1 var(--font-mono); } .validator-hero h2 { margin: 4px 0 6px; font-size: 24px; } .validator-hero p { margin: 0; color: var(--text-muted); } .validator-hero .project-illustration { width: 220px; opacity: 0.82; } .validator-actions { display: grid; gap: 8px; min-width: 150px; } .validator-groups { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: start; } .validator-group { overflow: hidden; } .validator-checks { display: grid; } .validator-check { min-height: 78px; padding: 13px 14px; display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; gap: 11px; align-items: center; border-top: 1px solid var(--line-soft); transition: background 160ms ease, transform 160ms ease; } .validator-check:hover { background: var(--surface-hover); } .validator-check-icon { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 9px; color: var(--text-muted); background: var(--surface-2); } .validator-check.pass .validator-check-icon { color: var(--success); background: color-mix(in srgb, var(--success) 12%, transparent); } .validator-check.warning .validator-check-icon { color: var(--warning); background: color-mix(in srgb, var(--warning) 12%, transparent); } .validator-check.error .validator-check-icon { color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent); } .validator-check strong { display: block; font-size: 12px; } .validator-check p { margin: 4px 0 0; color: var(--text-muted); font-size: 11px; line-height: 1.45; overflow-wrap: anywhere; } html[data-theme="light"] .validator-hero { background: radial-gradient( circle at 68% 16%, rgba(66, 91, 220, 0.18), transparent 30% ), linear-gradient( 120deg, rgba(255, 255, 255, 0.98), rgba(236, 243, 255, 0.96) ); } @media (max-width: 1180px) { .validator-hero { grid-template-columns: auto 1fr auto; } .validator-hero .project-illustration { display: none; } .validator-groups { grid-template-columns: 1fr; } } @container (max-width: 900px) { .validator-hero { grid-template-columns: auto minmax(0, 1fr); } .validator-hero .project-illustration { display: none; } .validator-actions { grid-column: 1 / -1; grid-template-columns: repeat(2, minmax(0, 1fr)); } .validator-groups { grid-template-columns: 1fr; } } @container (max-width: 520px) { .validator-hero { grid-template-columns: 1fr; } .validator-score { width: 92px; height: 92px; border-radius: 25px; } .validator-actions { grid-template-columns: 1fr; } .validator-check { grid-template-columns: 30px minmax(0, 1fr); } .validator-check > .button, .validator-check > .status-pill { grid-column: 2; justify-self: start; } } .empty-state { height: 100%; min-height: 260px; display: grid; place-content: center; justify-items: center; text-align: center; padding: 30px; color: var(--text-muted); } .empty-state .large-icon { width: 48px; height: 48px; display: grid; place-items: center; border-radius: 12px; background: var(--surface-2); color: var(--text-faint); margin-bottom: 12px; } .empty-state h3 { margin: 0 0 6px; color: var(--text); font-size: 14px; } .empty-state p { margin: 0; max-width: 420px; line-height: 1.55; } .inspector { padding: 16px; } .inspector-header { margin-bottom: 16px; } .inspector-header h2 { margin: 3px 0 0; font-size: 15px; } .inspector-section { padding: 15px 0; border-top: 1px solid var(--line-soft); } .inspector-section:first-of-type { border-top: 0; padding-top: 0; } .inspector-label { color: var(--text-faint); font-size: 9px; font-weight: 760; letter-spacing: 0.09em; text-transform: uppercase; margin-bottom: 8px; } .textarea, .input, .select { width: 100%; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-0); color: var(--text); } .input, .select { height: 33px; padding: 0 9px; } .textarea { min-height: 98px; resize: vertical; padding: 9px 10px; line-height: 1.45; } .field-hint { display: flex; justify-content: space-between; gap: 10px; margin-top: 6px; color: var(--text-faint); font-size: 10px; } .context-summary { padding: 11px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-0); } .context-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 5px 0; color: var(--text-muted); } .context-row strong { color: var(--text); font-family: var(--font-mono); font-size: 11px; text-align: right; overflow: hidden; text-overflow: ellipsis; } .notice { display: flex; align-items: flex-start; gap: 9px; padding: 10px 11px; border-radius: 5px; border: 1px solid var(--line); background: var(--surface-0); color: var(--text-muted); line-height: 1.45; } .notice.warning { border-color: color-mix(in srgb, var(--warning) 35%, var(--line)); background: var(--warning-soft); color: var(--warning); } .notice.danger { border-color: color-mix(in srgb, var(--danger) 35%, var(--line)); background: var(--danger-soft); color: var(--danger); } .notice.success { border-color: color-mix(in srgb, var(--success) 35%, var(--line)); background: var(--success-soft); color: var(--success); } .stack { display: grid; gap: 8px; } .divider-text { display: flex; align-items: center; gap: 9px; color: var(--text-faint); font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700; } .divider-text::before, .divider-text::after { content: ""; height: 1px; background: var(--line-soft); flex: 1; } .data-table { width: 100%; border-collapse: collapse; } .data-table th { height: 34px; padding: 0 11px; color: var(--text-faint); text-align: left; font-size: 9px; letter-spacing: 0.07em; text-transform: uppercase; border-bottom: 1px solid var(--line); } .data-table td { padding: 10px 11px; border-bottom: 1px solid var(--line-soft); vertical-align: middle; } .data-table tr:last-child td { border-bottom: 0; } .data-table tbody tr:hover { background: var(--surface-hover); } .mono { font-family: var(--font-mono); } .status-pill { display: inline-flex; align-items: center; gap: 6px; min-height: 22px; padding: 0 8px; border-radius: 11px; background: var(--surface-3); color: var(--text-muted); font-size: 10px; font-weight: 680; } .status-pill.success { background: var(--success-soft); color: var(--success); } .status-pill.warning { background: var(--warning-soft); color: var(--warning); } .status-pill.danger { background: var(--danger-soft); color: var(--danger); } .settings-layout { display: grid; grid-template-columns: 210px minmax(0, 1fr); min-height: 100%; } .settings-nav { padding: 15px 8px; border-right: 1px solid var(--line); background: var(--surface-1); } .settings-content { padding: 25px 30px 60px; overflow: auto; } .settings-group { max-width: 860px; margin-bottom: 28px; } .settings-group > h2 { font-size: 12px; margin: 0 0 12px; } .form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .field { display: grid; gap: 6px; } .field label { color: var(--text-muted); font-size: 11px; font-weight: 650; } .field.full { grid-column: 1 / -1; } .connection-card { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-1); } .root-row { display: flex; align-items: center; gap: 8px; } .root-row .input { flex: 1; font-family: var(--font-mono); font-size: 11px; } .deploy-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 365px), 1fr)); gap: 14px; } .deploy-card { --card-accent: var(--primary-strong); border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface-1); overflow: hidden; box-shadow: 0 10px 34px rgba(0, 0, 0, 0.1); transition: transform 160ms ease, border-color 160ms ease, box-shadow 160ms ease; } .deploy-card:hover { transform: translateY(-2px); border-color: color-mix(in srgb, var(--card-accent) 42%, var(--line)); box-shadow: 0 16px 42px color-mix(in srgb, var(--card-accent) 12%, transparent); } .deploy-card.accent-0 { --card-accent: #4d7df3; } .deploy-card.accent-1 { --card-accent: #8b5cf6; } .deploy-card.accent-2 { --card-accent: #0ea5a0; } .deploy-card.accent-3 { --card-accent: #e2783f; } .deploy-card.accent-4 { --card-accent: #d24e83; } .deploy-card.accent-5 { --card-accent: #4b9b55; } .container-identity { min-height: 78px; display: flex; align-items: center; gap: 12px; padding: 13px 14px; border-top: 4px solid var(--card-accent); border-bottom: 1px solid var(--line-soft); background: linear-gradient( 110deg, color-mix(in srgb, var(--card-accent) 15%, var(--surface-1)), var(--surface-1) 68% ); } .container-avatar { width: 44px; height: 44px; flex: 0 0 44px; display: grid; place-items: center; border-radius: 12px; color: #fff; background: linear-gradient( 145deg, color-mix(in srgb, var(--card-accent) 72%, #fff), var(--card-accent) ); box-shadow: 0 8px 20px color-mix(in srgb, var(--card-accent) 28%, transparent); font-size: 19px; font-weight: 780; } .container-identity > div { flex: 1 1 auto; min-width: 0; } .container-identity span:not(.container-avatar):not(.sync-proof), .container-identity small { display: block; color: var(--text-faint); font-size: 10px; } .container-identity strong { display: block; margin: 2px 0 3px; overflow: hidden; font-size: 16px; text-overflow: ellipsis; white-space: nowrap; } .container-identity small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sync-proof { margin-left: auto; padding: 6px 8px; border-radius: 6px; background: var(--surface-2); font-size: 10px; font-weight: 700; white-space: nowrap; } .sync-proof.success { color: var(--success); background: var(--success-soft); } .sync-proof.warning { color: var(--warning); background: var(--warning-soft); } .sync-proof .icon { width: 12px; height: 12px; vertical-align: -2px; } .deploy-card-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 14px; border-bottom: 1px solid var(--line-soft); } .deploy-card-body { padding: 13px 14px; } .deploy-metadata { display: grid; grid-template-columns: 1fr auto; gap: 7px 15px; color: var(--text-muted); } .deploy-metadata strong { font-family: var(--font-mono); font-size: 11px; color: var(--text); } .deployment-view { min-height: 100%; padding: 22px; } .pipeline-card { border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface-1); overflow: hidden; } .pipeline-head { display: flex; justify-content: space-between; gap: 15px; padding: 16px; border-bottom: 1px solid var(--line-soft); } .pipeline-head h2 { margin: 0; font-size: 16px; } .pipeline-head p { margin: 5px 0 0; color: var(--text-muted); font-family: var(--font-mono); font-size: 11px; } .pipeline-stages { display: grid; grid-template-columns: repeat(5, 1fr); padding: 25px 20px 20px; } .pipeline-stage { position: relative; display: grid; justify-items: center; gap: 8px; color: var(--text-faint); text-align: center; font-size: 10px; font-weight: 680; } .pipeline-stage::before { content: ""; position: absolute; height: 2px; left: -50%; right: 50%; top: 15px; background: var(--line); } .pipeline-stage:first-child::before { display: none; } .pipeline-stage.complete::before, .pipeline-stage.active::before { background: var(--success); } .stage-icon { width: 32px; height: 32px; display: grid; place-items: center; border-radius: 9px; background: var(--surface-3); border: 1px solid var(--line); z-index: 1; } .pipeline-stage.complete { color: var(--success); } .pipeline-stage.complete .stage-icon { background: var(--success); border-color: var(--success); color: #06251b; } .pipeline-stage.active { color: var(--primary); } .pipeline-stage.active .stage-icon { background: var(--primary-strong); border-color: var(--primary); color: #fff; box-shadow: 0 0 0 5px var(--primary-soft); } .log-view { margin-top: 14px; border: 1px solid var(--line); border-radius: var(--radius); background: #080b11; overflow: hidden; } .log-toolbar { height: 35px; display: flex; align-items: center; justify-content: space-between; padding: 0 11px; border-bottom: 1px solid #262d3b; color: #9aa4b6; } .log-lines { min-height: 290px; max-height: 500px; overflow: auto; padding: 12px 14px; font: 11px/19px var(--font-mono); color: #c3cada; white-space: pre-wrap; } .log-lines .ok { color: #54ddb0; } .log-lines .warn { color: #f2ba63; } .log-lines .err { color: #ff817a; } .setup-backdrop { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: 25px; background: rgba(4, 7, 12, 0.75); backdrop-filter: blur(8px); } .setup-window { width: min(920px, 96vw); min-height: 590px; max-height: 92vh; display: grid; grid-template-columns: 230px minmax(0, 1fr); border: 1px solid var(--line); border-radius: 10px; overflow: hidden; background: var(--surface-1); box-shadow: var(--shadow); } .setup-sidebar { padding: 24px 17px; border-right: 1px solid var(--line); background: var(--surface-0); } .setup-sidebar h2 { margin: 16px 0 5px; font-size: 18px; } .setup-sidebar p { margin: 0 0 22px; color: var(--text-muted); line-height: 1.5; } .setup-step { min-height: 38px; display: flex; align-items: center; gap: 9px; padding: 0 9px; border-radius: 5px; color: var(--text-faint); margin-bottom: 3px; } .setup-step .step-number { width: 22px; height: 22px; display: grid; place-items: center; border-radius: 50%; border: 1px solid var(--line); font-family: var(--font-mono); font-size: 9px; } .setup-step.active { background: var(--primary-soft); color: var(--primary); } .setup-step.complete { color: var(--success); } .setup-content { min-width: 0; padding: 34px 38px 24px; display: grid; grid-template-rows: minmax(0, 1fr) auto; overflow: auto; } .setup-body h1 { margin: 0; font-size: 22px; } .setup-body > p { color: var(--text-muted); line-height: 1.55; max-width: 620px; } .setup-actions { display: flex; justify-content: space-between; gap: 10px; padding-top: 22px; border-top: 1px solid var(--line-soft); } .discovery-list { border: 1px solid var(--line); border-radius: 6px; overflow: hidden; max-height: 260px; overflow-y: auto; } .discovery-row { min-height: 45px; display: grid; grid-template-columns: 20px minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 7px 10px; border-bottom: 1px solid var(--line-soft); } .discovery-row:last-child { border-bottom: 0; } .discovery-row strong { display: block; font-size: 12px; } .discovery-row span { display: block; margin-top: 2px; color: var(--text-faint); font: 10px var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .modal-backdrop { position: fixed; inset: 0; z-index: 60; display: grid; align-items: center; justify-items: center; padding: clamp(8px, 2vh, 20px); overflow: auto; overscroll-behavior: contain; background: rgba(4, 7, 12, 0.7); backdrop-filter: blur(4px); } .modal { width: min(520px, 94vw); max-height: calc(100dvh - clamp(16px, 4vh, 40px)); min-height: 0; display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-1); box-shadow: var(--shadow); overflow: hidden; } .modal-header { flex: 0 0 auto; display: flex; justify-content: space-between; align-items: center; padding: 15px 17px; border-bottom: 1px solid var(--line); background: var(--surface-1); } .modal-header h2 { margin: 0; font-size: 15px; } .modal-body { min-height: 0; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; padding: 17px; } .modal-footer { flex: 0 0 auto; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; padding: 12px 17px; border-top: 1px solid var(--line-soft); background: var(--surface-0); box-shadow: 0 -8px 18px rgba(0, 0, 0, 0.08); } .statusbar { display: flex; align-items: center; justify-content: space-between; gap: 15px; padding: 0 9px; border-top: 1px solid var(--line); background: var(--surface-1); color: var(--text-faint); font-size: 10px; font-weight: 620; } .statusbar-left, .statusbar-right { display: flex; align-items: center; gap: 13px; min-width: 0; } .statusbar-item { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; } .statusbar .success { color: var(--success); } .statusbar .warning { color: var(--warning); } .statusbar .danger { color: var(--danger); } .toast-root { position: fixed; right: 15px; bottom: 38px; z-index: 90; display: grid; gap: 8px; pointer-events: none; } .toast { width: min(380px, calc(100vw - 30px)); display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 9px; padding: 11px 12px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-2); box-shadow: var(--shadow); pointer-events: auto; animation: toast-in 0.18s ease-out; } .toast.success { border-color: color-mix(in srgb, var(--success) 35%, var(--line)); } .toast.error { border-color: color-mix(in srgb, var(--danger) 40%, var(--line)); } .toast strong { display: block; margin-bottom: 2px; } .toast span { color: var(--text-muted); line-height: 1.4; } @keyframes toast-in { from { transform: translateY(8px); opacity: 0; } } .loading-overlay { position: absolute; inset: 0; z-index: 20; display: grid; place-items: center; background: color-mix(in srgb, var(--surface-0) 72%, transparent); backdrop-filter: blur(2px); } .spinner { width: 22px; height: 22px; border: 2px solid var(--line); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } @media (max-width: 1250px) { :root { --sidebar: 250px; --action-panel: 320px; } .summary-grid { grid-template-columns: repeat(2, 1fr); } .summary-card:nth-child(2) { border-right: 0; } .summary-card:nth-child(-n + 2) { border-bottom: 1px solid var(--line); } .queue-row { grid-template-columns: 28px minmax(130px, 1fr) minmax(180px, 1.5fr) auto; } } @media (max-width: 1120px) { :root { --sidebar: 220px; --action-panel: 300px; } .global-search { width: 190px; } .changes-layout { grid-template-columns: 245px minmax(0, 1fr); } .page { padding-left: 18px; padding-right: 18px; } } /* ForgeFlow v0.2 interaction and workflow refinements */ .command-trigger { height: 30px; display: inline-flex; align-items: center; gap: 7px; padding: 0 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-0); color: var(--text-muted); cursor: pointer; -webkit-app-region: no-drag; } .command-trigger:hover { color: var(--text); background: var(--surface-hover); } kbd { min-width: 24px; padding: 2px 5px; border: 1px solid var(--line); border-bottom-width: 2px; border-radius: 4px; background: var(--surface-2); color: var(--text-faint); font: 9px var(--font-mono); text-align: center; } .repo-group-label { padding: 10px 8px 4px; color: var(--text-faint); font-size: 9px; font-weight: 750; letter-spacing: 0.08em; text-transform: uppercase; } .favorite-button { width: 25px; height: 25px; display: inline-grid; place-items: center; margin-left: -5px; border-radius: 5px; background: transparent; color: var(--text-faint); cursor: pointer; } .favorite-button:hover, .favorite-button.active { color: var(--warning); background: var(--warning-soft); } .favorite-button.active svg { fill: currentColor; } .repo-row .repo-icon .icon { width: 15px; height: 15px; } .repo-row .repo-icon:has(svg path[d^="m12 3"]) { color: var(--warning); } .button.small { min-height: 25px; padding: 0 7px; font-size: 10px; } .stack.horizontal.compact { gap: 5px; } .empty-state.compact { min-height: 105px; padding: 16px; } .empty-state.full { height: 100%; min-height: 320px; } .readiness-list { display: grid; gap: 3px; } .readiness-row { display: grid; grid-template-columns: 12px minmax(0, 1fr); gap: 9px; align-items: start; padding: 9px 4px; border-bottom: 1px solid var(--line-soft); } .readiness-row:last-child { border-bottom: 0; } .readiness-row strong { display: block; font-size: 11px; } .readiness-row span:not(.state-dot) { display: block; margin-top: 2px; color: var(--text-faint); font-size: 10px; } .action-panel-head { padding: 18px 17px 14px; border-bottom: 1px solid var(--line); } .action-panel-head h2 { margin: 5px 0 5px; font-size: 16px; } .action-panel-head p { margin: 0; color: var(--text-muted); line-height: 1.45; } .action-panel-body { padding: 15px 16px; } .action-panel-footer { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; margin: auto 10px 10px; padding-top: 10px; border-top: 1px solid var(--line-soft); } .action-panel { display: flex; flex-direction: column; } .panel-callout { display: grid; gap: 9px; } .panel-callout h2 { margin: 3px 0 0; font-size: 15px; } .panel-callout p { margin: 0 0 5px; color: var(--text-muted); line-height: 1.5; } .callout-icon { width: 38px; height: 38px; display: grid; place-items: center; border-radius: 9px; background: var(--primary-soft); color: var(--primary); } .callout-icon.success { background: var(--success-soft); color: var(--success); } .callout-icon.warning { background: var(--warning-soft); color: var(--warning); } .callout-icon.danger { background: var(--danger-soft); color: var(--danger); } .field-hint { display: flex; justify-content: space-between; gap: 10px; margin-top: 6px; color: var(--text-faint); font-size: 10px; } .field-label { display: block; margin-top: 8px; color: var(--text-muted); font-size: 10px; font-weight: 650; } .textarea { width: 100%; min-height: 92px; resize: vertical; padding: 9px 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-0); line-height: 1.45; } .input, .select { width: 100%; min-height: 34px; padding: 0 10px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-0); color: var(--text); } .select { cursor: pointer; } .stack { display: grid; gap: 8px; } .stack.horizontal { display: flex; flex-wrap: wrap; align-items: center; } .deploy-proof { display: grid; grid-template-columns: 1fr auto; gap: 7px 12px; margin: 7px 0 5px; padding: 11px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-0); } .deploy-proof span { color: var(--text-faint); } .deploy-proof strong { font: 11px var(--font-mono); } .tab-page { min-height: 0; padding: 18px 19px 42px; } .git-tools-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: max-content; gap: 15px; align-items: start; } .inline-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; margin-bottom: 13px; } .tool-list { display: grid; border: 1px solid var(--line-soft); border-radius: 6px; overflow: hidden; } .tool-row { min-height: 51px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 10px; border-bottom: 1px solid var(--line-soft); } .tool-row:last-child { border-bottom: 0; } .tool-row:hover { background: var(--surface-hover); } .tool-row strong { display: block; } .tool-row span { display: block; margin-top: 3px; color: var(--text-faint); font: 10px var(--font-mono); } .server-inventory-panel { position: relative; overflow: hidden; border-color: color-mix(in srgb, var(--primary) 22%, var(--line)); background: radial-gradient(circle at 94% 0%, color-mix(in srgb, var(--primary) 10%, transparent), transparent 34%), var(--surface-1); } .server-inventory-panel::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: linear-gradient(180deg, var(--primary), var(--success)); } .server-inventory-panel .tool-row { content-visibility: auto; contain-intrinsic-size: auto 76px; transition: background 150ms ease, transform 150ms ease; } .server-inventory-panel .tool-row:hover { transform: translateX(2px); } .deploy-card-header h3 { margin: 4px 0 3px; font-size: 14px; } .deploy-card-header p { margin: 0; color: var(--text-faint); font: 10px var(--font-mono); } .card-actions { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line-soft); } .compact-card .deploy-card-body { padding-bottom: 11px; } .check-field { display: flex; align-items: center; gap: 9px; padding: 8px 0; color: var(--text-muted); } .check-field input { accent-color: var(--primary-strong); } .wide-modal { width: min(650px, 95vw); } .modal-spacer { flex: 1; } .confirm-hero { display: flex; align-items: center; gap: 12px; padding: 12px; border: 1px solid color-mix(in srgb, var(--success) 30%, var(--line)); border-radius: 7px; background: var(--success-soft); } .confirm-hero.danger { border-color: color-mix(in srgb, var(--danger) 35%, var(--line)); background: var(--danger-soft); } .confirm-hero > .icon { width: 27px; height: 27px; color: var(--success); } .confirm-hero.danger > .icon { color: var(--danger); } .confirm-hero strong, .confirm-hero span { display: block; } .confirm-hero span { margin-top: 3px; color: var(--text-muted); } .confirm-grid { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 9px 14px; margin-top: 16px; } .confirm-grid span { color: var(--text-faint); } .confirm-grid strong { overflow-wrap: anywhere; } .notice.danger { border-color: color-mix(in srgb, var(--danger) 35%, var(--line)); background: var(--danger-soft); color: var(--danger); } .notice.warning { border-color: color-mix(in srgb, var(--warning) 35%, var(--line)); background: var(--warning-soft); color: var(--warning); } .danger-zone { padding: 15px; border: 1px solid color-mix(in srgb, var(--danger) 25%, var(--line)); border-radius: 7px; background: var(--danger-soft); } .danger-zone p { color: var(--text-muted); line-height: 1.5; } .pipeline-stages { grid-template-columns: repeat(6, 1fr); } .pipeline-stage.failed { color: var(--danger); } .pipeline-stage.failed .stage-icon { background: var(--danger); border-color: var(--danger); color: #fff; } .pipeline-stage.cancelled, .pipeline-stage.skipped { color: var(--text-faint); } .log-lines { word-break: break-word; } .palette-backdrop { align-items: start; padding-top: 12vh; } .command-palette { width: min(650px, 94vw); border: 1px solid var(--line); border-radius: 10px; background: var(--surface-1); box-shadow: var(--shadow); overflow: hidden; } .palette-search { height: 54px; display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 9px; align-items: center; padding: 0 15px; border-bottom: 1px solid var(--line); } .palette-search input { height: 100%; border: 0; outline: 0; background: transparent; font-size: 15px; } .palette-list { max-height: 380px; overflow: auto; padding: 6px; } .palette-row { width: 100%; min-height: 52px; display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 7px 10px; border-radius: 6px; background: transparent; color: var(--text-muted); text-align: left; cursor: pointer; } .palette-row:hover, .palette-row:focus-visible { background: var(--primary-soft); color: var(--text); } .palette-row:disabled { opacity: 0.4; cursor: not-allowed; } .palette-row strong, .palette-row small { display: block; } .palette-row small { margin-top: 3px; color: var(--text-faint); } .palette-footer { padding: 8px 13px; border-top: 1px solid var(--line-soft); color: var(--text-faint); font-size: 10px; } .action-panel-body .panel-callout > h2, .action-panel-body .panel-callout > p { display: none; } @media (max-height: 760px) { .palette-backdrop { padding-top: 3vh; } .palette-list { max-height: calc(100vh - 150px); } } .discovery-progress { min-height: 260px; display: grid; place-content: center; justify-items: center; gap: 13px; color: var(--text-muted); } @media (max-width: 1240px) { .command-trigger span { display: none; } .command-trigger kbd { display: none; } .git-tools-grid { grid-template-columns: 1fr; } .pipeline-stages { grid-template-columns: repeat(3, 1fr); row-gap: 18px; } .pipeline-stage:nth-child(4)::before { display: none; } } /* v0.3 diagnostics and preflight */ .diagnostics-page { display: grid; gap: 18px; padding: 20px 22px 44px; overflow: auto; } .diagnostic-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; align-items: start; } .diagnostic-metrics { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border: 1px solid var(--line-soft); border-radius: 7px; overflow: hidden; } .diagnostic-metrics > div { min-height: 68px; display: grid; align-content: center; gap: 5px; padding: 11px 12px; border-right: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft); background: var(--surface-0); } .diagnostic-metrics > div:nth-child(2n) { border-right: 0; } .diagnostic-metrics > div:nth-last-child(-n + 2) { border-bottom: 0; } .diagnostic-metrics span { color: var(--text-faint); font-size: 9px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; } .diagnostic-metrics strong { overflow-wrap: anywhere; font-size: 12px; } .preflight-summary { min-height: 48px; display: flex; flex-wrap: wrap; align-items: center; gap: 9px; padding: 11px 13px; border-bottom: 1px solid var(--line-soft); color: var(--text-muted); } .preflight-list { display: grid; } .preflight-row { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 10px; align-items: start; padding: 12px 13px; border-bottom: 1px solid var(--line-soft); } .preflight-row:last-child { border-bottom: 0; } .preflight-row > div { min-width: 0; } .preflight-row strong { display: block; margin-top: 1px; font-size: 11px; } .preflight-row span:not(.preflight-state):not(.status-pill), .preflight-row small { display: block; margin-top: 3px; color: var(--text-faint); line-height: 1.4; overflow-wrap: anywhere; } .preflight-row small { color: var(--text-muted); } .preflight-row .compact-button { width: fit-content; margin-top: 9px; } .preflight-state { width: 25px; height: 25px; display: grid; place-items: center; border-radius: 50%; background: var(--surface-2); color: var(--text-faint); } .preflight-state .icon { width: 14px; height: 14px; } .preflight-state.success { background: var(--success-soft); color: var(--success); } .preflight-state.warning { background: var(--warning-soft); color: var(--warning); } .preflight-state.danger { background: var(--danger-soft); color: var(--danger); } .setup-preflight { max-height: 330px; margin-top: 17px; border: 1px solid var(--line); border-radius: 8px; overflow: auto; background: var(--surface-0); } .setup-summary { display: grid; margin: 18px 0; border: 1px solid var(--line); border-radius: 8px; padding: 0 12px; background: var(--surface-0); } .setup-support-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; } .diagnostics-page .panel-body { padding: 14px; } .diagnostics-page .section-block { margin: 0; } @media (max-width: 1100px) { .diagnostic-grid { grid-template-columns: 1fr; } } @media (max-width: 760px) { .diagnostics-page { padding: 15px; } .diagnostic-metrics { grid-template-columns: 1fr; } .diagnostic-metrics > div { border-right: 0; } .diagnostic-metrics > div:nth-last-child(-n + 2) { border-bottom: 1px solid var(--line-soft); } .diagnostic-metrics > div:last-child { border-bottom: 0; } .preflight-row { grid-template-columns: 28px minmax(0, 1fr); } .preflight-row > .status-pill { grid-column: 2; justify-self: start; } } .required-mark { color: var(--warning); font-size: 10px; font-weight: 700; text-transform: uppercase; margin-left: 5px; } .commit-readiness { margin-top: 9px; padding: 8px 9px; display: flex; align-items: flex-start; gap: 7px; border: 1px solid var(--line); border-radius: 5px; color: var(--text-muted); background: var(--surface-0); font-size: 11px; line-height: 1.4; } .commit-readiness.blocked { border-color: color-mix(in srgb, var(--warning) 35%, var(--line)); background: var(--warning-soft); color: var(--text); } .commit-readiness.ready { border-color: color-mix(in srgb, var(--success) 35%, var(--line)); background: var(--success-soft); color: var(--text); } .commit-readiness .icon { flex: 0 0 auto; margin-top: 1px; } .stage-note { margin-top: 10px; color: var(--text-faint); font-size: 10px; line-height: 1.45; } .update-card { margin-top: 12px; padding: 12px; display: flex; align-items: center; justify-content: space-between; gap: 16px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-0); } .update-card.available { border-color: color-mix(in srgb, var(--primary) 45%, var(--line)); background: var(--primary-soft); } .update-card > div:first-child { display: flex; align-items: center; gap: 10px; min-width: 0; } .update-card > div:first-child > span { min-width: 0; display: grid; gap: 2px; } .update-card small, .server-card small { color: var(--text-faint); } .server-list { display: grid; gap: 8px; } .server-card { padding: 11px 12px; display: flex; align-items: center; justify-content: space-between; gap: 16px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-0); } .server-card-main { min-width: 0; display: flex; align-items: center; gap: 10px; } .server-card-main > div { min-width: 0; display: grid; gap: 2px; } .server-card-main span { color: var(--text-muted); font-family: var(--font-mono); font-size: 10px; overflow: hidden; text-overflow: ellipsis; } .provider-choice { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 14px; } .provider-note { padding: 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-0); color: var(--text-muted); font-size: 11px; } .server-inspection { margin-top: 12px; } @media (max-width: 1240px) { .wordmark small { display: none; } .update-card, .server-card { align-items: flex-start; flex-direction: column; } } .setup-brand-logo { width: 180px; max-height: 76px; object-fit: contain; object-position: left center; display: block; margin-bottom: 12px; } .setup-brand-logo-light { display: none; } html[data-theme="light"] .setup-brand-logo-dark { display: none; } html[data-theme="light"] .setup-brand-logo-light { display: block; } /* v0.5 viewport-safe dialogs */ .modal-body > .preflight-list:last-child { margin-bottom: 2px; } .modal-footer .button { flex: 0 0 auto; } @media (max-height: 720px) { .modal-backdrop { align-items: start; } .modal { max-height: calc(100dvh - 16px); } .modal-header { padding-block: 11px; } .modal-body { padding-block: 13px; } .modal-footer { padding-block: 10px; } } @media (max-width: 680px) { .modal-backdrop { padding: 0; align-items: stretch; } .modal, .wide-modal { width: 100vw; max-height: 100dvh; border-radius: 0; } .modal-footer .modal-spacer { display: none; } .modal-footer .button { flex: 1 1 auto; } .form-grid { grid-template-columns: 1fr; } .field.full, .check-field.full { grid-column: 1; } } /* ForgeFlow 0.6 recovery and DockerMan controls */ .git-tools-grid .troubleshooting-panel { grid-column: 1 / -1; } .git-tools-grid .workspace-sync-panel { grid-column: 1 / -1; overflow: hidden; background: radial-gradient(circle at 88% 10%, color-mix(in srgb, var(--accent) 15%, transparent), transparent 34%), var(--surface-1); } .workspace-sync-layout { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 24px; } .workspace-sync-layout h3 { margin: 0 0 6px; } .workspace-sync-layout p { margin: 0 0 13px; color: var(--text-muted); max-width: 820px; } .workspace-sync-actions { display: grid; justify-items: end; gap: 10px; min-width: 220px; } .troubleshooting-summary { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; color: var(--text-muted); } .text-success { color: var(--success) !important; } .text-warning { color: var(--warning) !important; } .deploy-card .card-actions { flex-wrap: wrap; } .field small { display: block; margin-top: 5px; color: var(--text-faint); line-height: 1.35; } .repo-quick-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 0 20px 12px; } .repo-quick-actions .status-pill { margin-left: auto; } @media (max-width: 760px) { .workspace-sync-layout { grid-template-columns: 1fr; } .workspace-sync-actions { justify-items: stretch; min-width: 0; } .repo-quick-actions { margin-inline: 12px; } .repo-quick-actions .button { flex: 1 1 145px; } .repo-quick-actions .status-pill { width: 100%; margin-left: 0; justify-content: center; } } /* ForgeFlow 0.8 premium visual system */ :root { --bg: #080b12; --surface-0: #0b1019; --surface-1: #101722; --surface-2: #16202e; --surface-3: #1c2939; --surface-hover: #172434; --line: rgba(148, 163, 184, 0.17); --line-soft: rgba(148, 163, 184, 0.09); --text: #f3f7fc; --text-muted: #a8b4c5; --text-faint: #718096; --primary: #6ee7f9; --primary-strong: #0ea5e9; --primary-soft: rgba(14, 165, 233, 0.13); --success: #5ee5b0; --warning: #f4c56a; --danger: #ff8585; --shadow: 0 24px 80px rgba(0, 0, 0, 0.42); --shadow-soft: 0 10px 36px rgba(0, 0, 0, 0.2); --radius: 12px; --sidebar: 292px; --action-panel: 368px; } html[data-theme="light"] { --bg: #edf2f7; --surface-0: #f5f8fb; --surface-1: rgba(255, 255, 255, 0.94); --surface-2: #f1f5f9; --surface-3: #e7eef6; --surface-hover: #edf4fa; --line: rgba(51, 65, 85, 0.16); --line-soft: rgba(51, 65, 85, 0.08); --text: #101828; --text-muted: #526277; --text-faint: #7d899a; --primary: #0284c7; --primary-strong: #0369a1; --primary-soft: rgba(2, 132, 199, 0.1); --shadow: 0 24px 72px rgba(30, 41, 59, 0.16); --shadow-soft: 0 8px 30px rgba(30, 41, 59, 0.08); } body { letter-spacing: -0.005em; background: radial-gradient( circle at 78% -12%, rgba(14, 165, 233, 0.1), transparent 34% ), var(--bg); } .app-shell { grid-template-rows: 56px minmax(0, 1fr) 28px; background: transparent; } .titlebar { padding-inline: 18px 14px; border-bottom-color: var(--line-soft); background: color-mix(in srgb, var(--surface-1) 91%, transparent); backdrop-filter: blur(18px) saturate(145%); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.025); } .wordmark { font-size: 15px; font-weight: 760; } .brand-logo { width: 34px; filter: drop-shadow(0 0 14px rgba(110, 231, 249, 0.2)); } .workspace-name { color: var(--text-muted); font-weight: 560; } .global-search, .repo-filter, .input, input, textarea, select { border-radius: 9px; border-color: var(--line); transition: border-color 150ms ease, box-shadow 150ms ease, background 150ms ease; } .global-search:focus, .repo-filter:focus, .input:focus, input:focus, textarea:focus, select:focus { border-color: color-mix(in srgb, var(--primary) 58%, var(--line)); box-shadow: 0 0 0 3px var(--primary-soft); } .connection-chip { min-height: 31px; padding-inline: 10px; border-radius: 999px; background: color-mix(in srgb, var(--surface-2) 82%, transparent); } .sidebar { border-right-color: var(--line-soft); background: linear-gradient(180deg, rgba(110, 231, 249, 0.025), transparent 28%), color-mix(in srgb, var(--surface-1) 96%, var(--bg)); } .primary-nav { padding: 14px 10px 12px; gap: 4px; } .primary-nav button, .repo-row { border-radius: 9px; transition: color 150ms ease, background 150ms ease, transform 150ms ease; } .primary-nav button { min-height: 38px; padding-inline: 11px; } .primary-nav button.active { color: var(--text); background: linear-gradient( 90deg, rgba(14, 165, 233, 0.19), rgba(14, 165, 233, 0.07) ); box-shadow: inset 2px 0 var(--primary), inset 0 0 0 1px rgba(110, 231, 249, 0.08); } .repo-row { margin: 1px 6px; padding: 8px 9px; } .repo-row:hover { transform: translateX(2px); } .repo-row.active { background: linear-gradient( 90deg, rgba(14, 165, 233, 0.16), rgba(14, 165, 233, 0.045) ); box-shadow: inset 0 0 0 1px rgba(110, 231, 249, 0.1); } .sidebar-section > span, .repo-group-label, .eyebrow { letter-spacing: 0.12em; font-weight: 780; } .page { max-width: 1640px; margin-inline: auto; padding: 30px 34px 48px; } .page-header { margin-bottom: 26px; } .page-header h1 { font-size: clamp(24px, 2vw, 30px); font-weight: 735; letter-spacing: -0.04em; } .page-header p { margin-top: 8px; font-size: 13px; line-height: 1.6; } .button, .icon-button { border-radius: 8px; transition: transform 140ms ease, background 140ms ease, border-color 140ms ease, box-shadow 140ms ease, color 140ms ease; } .button { min-height: 34px; padding-inline: 13px; background: linear-gradient( 180deg, color-mix(in srgb, var(--surface-3) 82%, transparent), var(--surface-2) ); box-shadow: inset 0 1px rgba(255, 255, 255, 0.035), 0 1px 2px rgba(0, 0, 0, 0.14); } .button:hover:not(:disabled), .icon-button:hover:not(:disabled) { transform: translateY(-1px); } .button.primary { background: linear-gradient(135deg, #0ea5e9, #2563eb); border-color: rgba(110, 231, 249, 0.34); box-shadow: 0 8px 24px rgba(14, 165, 233, 0.2), inset 0 1px rgba(255, 255, 255, 0.18); } .button.primary:hover:not(:disabled) { filter: brightness(1.08); box-shadow: 0 10px 30px rgba(14, 165, 233, 0.27), inset 0 1px rgba(255, 255, 255, 0.2); } .summary-grid { gap: 12px; border: 0; overflow: visible; background: transparent; } .summary-card { min-height: 130px; padding: 18px; border: 1px solid var(--line); border-radius: var(--radius); background: linear-gradient(145deg, rgba(255, 255, 255, 0.035), transparent 46%), var(--surface-1); box-shadow: var(--shadow-soft); overflow: hidden; } .summary-card::after { content: ""; position: absolute; inset: auto -24px -42px auto; width: 96px; height: 96px; border-radius: 50%; background: currentColor; opacity: 0.035; filter: blur(3px); } .summary-card:last-child { border-right: 1px solid var(--line); } .summary-value { margin-top: 21px; font-size: 34px; font-weight: 760; } .action-queue, .panel { border-color: var(--line); box-shadow: var(--shadow-soft); background: color-mix(in srgb, var(--surface-1) 96%, transparent); } .queue-row { min-height: 68px; padding: 12px 15px; } .queue-row:hover { background: linear-gradient( 90deg, var(--surface-hover), color-mix(in srgb, var(--surface-hover) 55%, transparent) ); } .queue-icon { width: 32px; height: 32px; border-radius: 9px; } .repo-header { padding: 20px 22px 16px; background: linear-gradient(180deg, rgba(110, 231, 249, 0.025), transparent), var(--surface-1); } .repo-heading h1 { font-size: 19px; font-weight: 730; letter-spacing: -0.03em; } .repo-quick-actions { margin: 12px 22px 14px; padding: 10px; border: 1px solid var(--line-soft); border-radius: 11px; background: color-mix(in srgb, var(--surface-2) 60%, transparent); } .release-rail { margin: 0 22px 12px; border: 1px solid var(--line); border-radius: 11px; overflow: hidden; background: var(--surface-0); } .tabs { padding-inline: 18px; background: var(--surface-1); } .tab.active { color: var(--primary); box-shadow: inset 0 -2px var(--primary), 0 5px 16px -12px var(--primary); } .status-pill { border-radius: 999px; padding-inline: 9px; } .modal-backdrop { background: rgba(3, 7, 18, 0.74); backdrop-filter: blur(10px) saturate(120%); } .modal { border-color: color-mix(in srgb, var(--line) 82%, var(--primary)); border-radius: 16px; box-shadow: 0 36px 120px rgba(0, 0, 0, 0.62), inset 0 1px rgba(255, 255, 255, 0.04); } .modal-header { background: linear-gradient(180deg, rgba(110, 231, 249, 0.035), transparent), var(--surface-1); } .toast { border-radius: 12px; box-shadow: 0 18px 50px rgba(0, 0, 0, 0.42); backdrop-filter: blur(16px); } .visual-page-header { min-height: 142px; position: relative; overflow: hidden; padding: 20px 22px; border: 1px solid color-mix(in srgb, var(--primary) 22%, var(--line)); border-radius: 16px; background: linear-gradient( 105deg, var(--surface-1) 0 52%, color-mix(in srgb, var(--primary-soft) 62%, var(--surface-1)) ), var(--surface-1); box-shadow: var(--shadow); } .project-illustration { --tilt-x: 0deg; --tilt-y: 0deg; width: 238px; height: 128px; position: relative; flex: 0 0 238px; perspective: 700px; cursor: crosshair; isolation: isolate; } .project-illustration svg { width: 100%; height: 100%; position: relative; z-index: 1; overflow: visible; transform: rotateX(var(--tilt-x)) rotateY(var(--tilt-y)); filter: drop-shadow(0 16px 24px rgba(10, 20, 48, 0.2)); transition: transform 140ms ease-out; } .illustration-glow { width: 150px; height: 85px; position: absolute; inset: 24px auto auto 49px; border-radius: 50%; background: color-mix(in srgb, var(--primary) 24%, transparent); filter: blur(24px); animation: illustration-breathe 4.8s ease-in-out infinite; } .project-illustration .orbit { fill: none; stroke: color-mix(in srgb, var(--primary) 48%, var(--line)); stroke-width: 1.5; stroke-dasharray: 4 7; } .project-illustration .orbit-b { stroke: color-mix(in srgb, var(--success) 48%, var(--line)); } .illustration-core rect { fill: color-mix(in srgb, var(--surface-1) 86%, var(--primary)); stroke: color-mix(in srgb, var(--primary) 58%, var(--line)); stroke-width: 1.5; } .illustration-core path { fill: none; stroke: var(--text-muted); stroke-width: 3; stroke-linecap: round; } .illustration-core circle { fill: var(--success); animation: illustration-pulse 2.4s ease-in-out infinite; } .illustration-node { animation: illustration-float 4s ease-in-out infinite; } .illustration-node circle { fill: var(--surface-1); stroke: var(--primary); stroke-width: 2; } .illustration-node path { fill: none; stroke: var(--primary); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .illustration-node.node-b { animation-delay: -1.4s; } .illustration-node.node-c { animation-delay: -2.7s; } .illustration-node.node-c circle { fill: var(--warning); stroke: color-mix(in srgb, var(--warning) 55%, var(--surface-1)); } .project-illustration .signal { fill: var(--primary); } .project-illustration .signal-a { offset-path: path("M32 92 C72 20 190 18 230 82"); animation: signal-travel 3.6s linear infinite; } .project-illustration .signal-b { fill: var(--success); offset-path: path("M42 116 C98 150 190 136 222 60"); animation: signal-travel 4.4s -2s linear infinite; } .illustration-label { position: absolute; right: 8px; bottom: 3px; z-index: 2; color: var(--text-faint); font: 650 9px var(--font-mono); letter-spacing: 0.06em; text-transform: uppercase; } .project-illustration.repo { width: 150px; height: 82px; position: absolute; top: -9px; left: 43%; z-index: 0; margin: 0; opacity: 0.28; pointer-events: none; } .project-illustration.repo .illustration-label { display: none; } .illustrated-repo-header { position: relative; overflow: hidden; } .illustrated-repo-header > :not(.project-illustration) { position: relative; z-index: 1; } @keyframes signal-travel { to { offset-distance: 100%; } } @keyframes illustration-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } } @keyframes illustration-breathe { 0%, 100% { opacity: 0.55; transform: scale(0.92); } 50% { opacity: 0.95; transform: scale(1.08); } } @keyframes illustration-pulse { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } } html[data-theme="light"] .visual-page-header { background: radial-gradient( circle at 74% 20%, rgba(102, 82, 235, 0.12), transparent 28% ), linear-gradient( 105deg, rgba(255, 255, 255, 0.96) 0 52%, rgba(229, 239, 255, 0.94) ); } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; } .project-illustration svg { transform: none !important; } .diff-atmosphere { transform: none !important; } } @media (max-width: 1180px) { :root { --sidebar: 264px; --action-panel: 340px; } .page { padding-inline: 24px; } .summary-grid { gap: 8px; } .project-illustration { width: 190px; flex-basis: 190px; } .project-illustration.repo { display: none; } } /* Help center and compact repository-shell safeguards */ .panel-header-actions { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8px; } .help-page { max-width: 1500px; } .help-hero { position: relative; isolation: isolate; display: flex; justify-content: space-between; gap: 32px; overflow: hidden; margin-bottom: 24px; padding: 30px 34px; border: 1px solid var(--line); border-radius: 18px; background: radial-gradient(circle at 78% 15%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 32%), linear-gradient(125deg, color-mix(in srgb, var(--surface-2) 92%, transparent), var(--surface-1)); box-shadow: 0 22px 65px -48px color-mix(in srgb, var(--accent) 65%, transparent); } .help-hero::before { content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none; background-image: radial-gradient(color-mix(in srgb, var(--text-faint) 20%, transparent) 0.8px, transparent 0.8px); background-size: 18px 18px; mask-image: linear-gradient(90deg, transparent, black 65%, transparent); opacity: 0.42; } .help-hero > div:first-child { flex: 1; min-width: 0; max-width: 750px; } .help-hero h1 { margin: 8px 0 6px; font-size: clamp(28px, 3vw, 42px); line-height: 1.1; letter-spacing: -0.045em; } .help-hero p { max-width: 680px; margin: 0; color: var(--text-muted); font-size: 13px; line-height: 1.6; } .help-search { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; max-width: 680px; margin-top: 22px; padding: 0 12px; border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line)); border-radius: 11px; background: color-mix(in srgb, var(--surface-0) 90%, transparent); box-shadow: 0 12px 36px -30px var(--accent); } .help-search:focus-within { border-color: var(--primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 15%, transparent); } .help-search > .icon { color: var(--primary); } .help-search input { min-width: 0; height: 46px; border: 0; outline: 0; background: transparent; color: var(--text); } .help-search kbd { padding: 3px 6px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-2); color: var(--text-faint); font: 10px var(--font-mono); } .help-layout { display: grid; grid-template-columns: minmax(190px, 240px) minmax(0, 1fr); align-items: start; gap: 20px; } .help-navigation { position: sticky; top: 0; display: grid; gap: 16px; padding: 18px; border: 1px solid var(--line); border-radius: 14px; background: color-mix(in srgb, var(--surface-1) 94%, transparent); } .help-category { display: grid; gap: 3px; } .help-category > strong { padding: 4px 8px; color: var(--text-faint); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; } .help-category button { display: flex; align-items: center; gap: 8px; padding: 8px; border-radius: 8px; background: transparent; color: var(--text-muted); cursor: pointer; text-align: left; font-size: 11px; line-height: 1.3; } .help-category button:hover, .help-category button.active { background: color-mix(in srgb, var(--accent) 10%, var(--surface-2)); color: var(--text); } .help-category button.active { box-shadow: inset 2px 0 var(--primary); } .help-category button .icon { flex: 0 0 auto; width: 15px; height: 15px; color: var(--primary); } .help-results { min-width: 0; } .help-results-header { display: flex; justify-content: space-between; align-items: end; min-height: 48px; margin-bottom: 10px; } .help-results-header h2 { margin: 0 0 4px; font-size: 18px; } .help-results-header span { color: var(--text-faint); font-size: 11px; } .help-topic { overflow: hidden; margin-bottom: 10px; border: 1px solid var(--line); border-radius: 13px; background: var(--surface-1); transition: border-color 150ms ease, transform 150ms ease, box-shadow 150ms ease; scroll-margin-top: 14px; } .help-topic:hover { border-color: color-mix(in srgb, var(--accent) 34%, var(--line)); } .help-topic[open] { border-color: color-mix(in srgb, var(--accent) 26%, var(--line)); box-shadow: 0 18px 42px -40px var(--accent); } .help-topic summary { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px; padding: 16px 18px; cursor: pointer; list-style: none; } .help-topic summary::-webkit-details-marker { display: none; } .help-topic summary > span:nth-child(2) { display: grid; gap: 3px; min-width: 0; } .help-topic summary small { color: var(--primary); font-size: 9px; font-weight: 750; letter-spacing: 0.1em; text-transform: uppercase; } .help-topic summary strong { font-size: 14px; } .help-topic summary span span { overflow: hidden; color: var(--text-muted); font-size: 11px; line-height: 1.45; text-overflow: ellipsis; } .help-topic-icon { display: grid; place-items: center; width: 38px; height: 38px; border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--line)); border-radius: 11px; background: color-mix(in srgb, var(--accent) 9%, var(--surface-2)); color: var(--primary); } .help-topic-icon .icon { width: 19px; height: 19px; } .help-chevron { color: var(--text-faint); transition: transform 150ms ease; } .help-topic[open] .help-chevron { transform: rotate(90deg); } .help-topic-body { padding: 0 18px 18px 70px; border-top: 1px solid var(--line-soft); } .help-topic-body ol { display: grid; gap: 11px; margin: 16px 0; padding-left: 22px; color: var(--text-muted); font-size: 12px; line-height: 1.55; } .help-topic-body li::marker { color: var(--primary); font-family: var(--font-mono); font-weight: 700; } .help-note { display: flex; align-items: flex-start; gap: 9px; padding: 11px 12px; border: 1px solid color-mix(in srgb, var(--success) 20%, var(--line)); border-radius: 9px; background: color-mix(in srgb, var(--success) 6%, var(--surface-0)); color: var(--text-muted); font-size: 11px; line-height: 1.5; } .help-note .icon { flex: 0 0 auto; color: var(--success); } @media (max-width: 900px) { .help-layout { grid-template-columns: 1fr; } .help-navigation { position: static; display: none; } .help-hero .project-illustration { display: none; } } @media (max-width: 680px) { .help-hero { padding: 22px; } .help-search kbd { display: none; } .help-search { grid-template-columns: auto minmax(0, 1fr); } .help-topic-body { padding-left: 18px; } }