AgentIC / web /src /index.css
vxkyyy's picture
feat: implement 2 free build limits and BYOK modal
e86cfc5
@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,300;0,14..32,400;0,14..32,500;0,14..32,600;1,14..32,400&family=Fira+Code:wght@400;500&display=swap');
/* ────────────────────────────────────────────────────────────────────
DESIGN TOKENS β€” Claude-inspired warm minimalist palette
Background: warm parchment Β· Accent: terracotta Β· No neon
──────────────────────────────────────────────────────────────────── */
:root {
/* Colours */
--bg: #F5F1EB;
--bg-card: #FEFCF9;
--bg-hover: #F0EBE3;
--bg-sidebar: #EDE8E0;
--bg-dark: #1C1A17;
/* terminal background */
--border: #E0D9CF;
--border-mid: #C5BEB3;
--border-strong: #A89E92;
--accent: #C9643E;
/* Claude terracotta */
--accent-light: #D97F5A;
--accent-soft: rgba(201, 100, 62, 0.10);
--accent-glow: rgba(201, 100, 62, 0.18);
--text: #1C1A17;
--text-mid: #64605A;
--text-dim: #9C9690;
--text-inverse: #F5F1EB;
--success: #3A7856;
--success-bg: #EAF4EE;
--success-bdr: #B3D9C2;
--fail: #B83030;
--fail-bg: #FDF0EE;
--fail-bdr: #F0C0B8;
--warn: #A67828;
/* Shadows */
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
--shadow-sm: 0 1px 4px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
--shadow-md: 0 4px 16px rgba(0, 0, 0, 0.08), 0 1px 4px rgba(0, 0, 0, 0.04);
--shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.10), 0 2px 8px rgba(0, 0, 0, 0.05);
/* Shape */
--radius-xs: 4px;
--radius: 8px;
--radius-md: 12px;
--radius-lg: 16px;
/* Motion */
--ease: cubic-bezier(0.16, 1, 0.3, 1);
--ease-in: cubic-bezier(0.4, 0, 1, 1);
--fast: 120ms;
--mid: 220ms;
--slow: 380ms;
}
[data-theme="dark"] {
--bg: #121212;
--bg-card: #1A1A1A;
--bg-hover: #232323;
--bg-sidebar: #161616;
--bg-dark: #0B0B0B;
--border: #2B2B2B;
--border-mid: #3A3A3A;
--border-strong: #505050;
--accent: #c18a73;
--accent-light: #d4a18b;
--accent-soft: rgba(193, 138, 115, 0.15);
--accent-glow: rgba(193, 138, 115, 0.25);
--text: #ECE9E4;
--text-mid: #B4ADA4;
--text-dim: #8A847D;
--text-inverse: #121212;
--success: #61b88b;
--success-bg: #133120;
--success-bdr: #2f6e4f;
--fail: #d57777;
--fail-bg: #3f1b1b;
--fail-bdr: #754040;
}
/* ── Reset ─────────────────────────────────────────────────────── */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 15px;
}
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* ── Scrollbar ──────────────────────────────────────────────────── */
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--border-mid);
border-radius: 3px;
transition: background var(--fast);
}
::-webkit-scrollbar-thumb:hover {
background: var(--border-strong);
}
/* ── Layout ─────────────────────────────────────────────────────── */
.app-container {
display: flex;
height: 100vh;
overflow: hidden;
}
/* ── New App Shell (Notion-style) ───────────────────────────────── */
.app-shell {
display: grid;
grid-template-columns: 260px 1fr;
min-height: 100vh;
background: var(--bg);
color: var(--text);
}
.app-sidebar {
background: var(--bg-sidebar);
border-right: 1px solid var(--border);
padding: 0.85rem;
display: flex;
flex-direction: column;
gap: 0.9rem;
}
.app-brand {
display: flex;
align-items: center;
gap: 0.65rem;
padding: 0.5rem;
}
.app-brand-logo {
width: 30px;
height: 30px;
border-radius: 8px;
background: var(--accent-soft);
color: var(--accent);
display: grid;
place-items: center;
font-weight: 700;
border: 1px solid var(--border);
}
.app-brand-title {
font-size: 0.95rem;
font-weight: 700;
line-height: 1.2;
}
.app-brand-sub {
font-size: 0.75rem;
color: var(--text-dim);
}
.app-sidebar-group {
padding: 0 0.45rem;
}
.app-sidebar-label {
font-size: 0.72rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-dim);
margin-bottom: 0.35rem;
}
.app-design-select {
width: 100%;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--bg-card);
color: var(--text);
padding: 0.5rem 0.6rem;
font-family: inherit;
font-size: 0.84rem;
}
.app-nav {
display: flex;
flex-direction: column;
gap: 0.2rem;
margin-top: 0.3rem;
}
.app-nav-btn {
width: 100%;
border: none;
border-radius: var(--radius);
background: transparent;
color: var(--text-mid);
display: flex;
align-items: center;
gap: 0.55rem;
padding: 0.5rem 0.6rem;
font-size: 0.85rem;
cursor: pointer;
text-align: left;
}
.app-nav-btn:hover {
background: var(--bg-hover);
color: var(--text);
}
.app-nav-btn.active {
background: var(--accent-soft);
color: var(--accent);
font-weight: 600;
border: 1px solid var(--border);
}
.app-sidebar-footer {
margin-top: auto;
padding: 0.5rem;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.theme-toggle {
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--bg-card);
color: var(--text-mid);
padding: 0.45rem 0.55rem;
font-size: 0.8rem;
cursor: pointer;
}
.theme-toggle:hover {
color: var(--text);
border-color: var(--border-strong);
}
.app-version {
font-size: 0.72rem;
color: var(--text-dim);
text-align: center;
}
.app-main {
min-width: 0;
display: flex;
flex-direction: column;
}
.app-topbar {
height: 56px;
border-bottom: 1px solid var(--border);
background: color-mix(in srgb, var(--bg-card) 90%, transparent);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 1rem 0 1.25rem;
}
.app-topbar h1 {
font-size: 1rem;
font-weight: 650;
}
.app-topbar-meta {
color: var(--text-dim);
font-size: 0.8rem;
}
.app-content {
padding: 0;
min-height: calc(100vh - 56px);
}
.home-overview {
padding: 1.5rem;
max-width: 1080px;
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.home-hero {
background: linear-gradient(135deg, var(--accent-soft) 0%, var(--bg-card) 50%, var(--success-bg) 100%);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 2.5rem 2rem 2rem;
text-align: center;
position: relative;
overflow: hidden;
}
.home-hero::before {
content: '';
position: absolute;
top: -50%;
right: -30%;
width: 300px;
height: 300px;
border-radius: 50%;
background: var(--accent-glow);
filter: blur(80px);
pointer-events: none;
}
.home-hero-badge {
display: inline-block;
background: var(--accent);
color: var(--text-inverse);
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
padding: 0.25rem 0.75rem;
border-radius: 100px;
margin-bottom: 0.75rem;
}
.home-hero-title {
font-size: 1.6rem;
font-weight: 700;
line-height: 1.25;
margin-bottom: 0.6rem;
position: relative;
}
.home-hero-desc {
color: var(--text-mid);
font-size: 0.88rem;
line-height: 1.65;
max-width: 600px;
margin: 0 auto;
position: relative;
}
.home-card {
border: 1px solid var(--border);
background: var(--bg-card);
border-radius: var(--radius-md);
padding: 1rem;
box-shadow: var(--shadow-xs);
}
.home-card h3 {
margin-bottom: 0.35rem;
}
.home-card p {
color: var(--text-mid);
}
.home-card-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 0.8rem;
}
.home-kpi {
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--bg-card);
padding: 1rem 0.8rem;
font-size: 1.35rem;
font-weight: 700;
text-align: center;
color: var(--accent);
transition: transform var(--fast), box-shadow var(--fast);
}
.home-kpi:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-sm);
}
.home-kpi span {
display: block;
font-size: 0.72rem;
color: var(--text-dim);
margin-top: 0.3rem;
font-weight: 500;
letter-spacing: 0.03em;
text-transform: uppercase;
}
.home-section {
border: 1px solid var(--border);
background: var(--bg-card);
border-radius: var(--radius-md);
padding: 1.25rem;
box-shadow: var(--shadow-xs);
}
.home-section-title {
font-size: 0.92rem;
font-weight: 650;
margin-bottom: 1rem;
color: var(--text);
letter-spacing: -0.01em;
}
/* Agent grid */
.home-agent-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 0.65rem;
}
.agent-card {
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 0.85rem;
background: var(--bg);
transition: all var(--fast);
}
.agent-card:hover {
border-color: var(--accent);
background: var(--accent-soft);
transform: translateY(-1px);
}
.agent-icon {
font-size: 1.3rem;
margin-bottom: 0.3rem;
}
.agent-name {
font-size: 0.8rem;
font-weight: 600;
margin-bottom: 0.15rem;
}
.agent-desc {
font-size: 0.72rem;
color: var(--text-dim);
line-height: 1.4;
}
/* Pipeline flow */
.pipeline-flow {
display: flex;
flex-wrap: wrap;
gap: 0;
align-items: flex-start;
}
.pipeline-stage {
display: flex;
flex-direction: column;
align-items: center;
padding: 0.4rem 0.2rem;
flex: 1;
min-width: 80px;
position: relative;
}
.pipeline-stage-icon {
font-size: 1.2rem;
margin-bottom: 0.25rem;
}
.pipeline-stage-label {
font-size: 0.68rem;
font-weight: 650;
letter-spacing: 0.02em;
}
.pipeline-stage-sub {
font-size: 0.62rem;
color: var(--text-dim);
margin-top: 0.1rem;
}
.pipeline-arrow {
position: absolute;
right: -8px;
top: 50%;
transform: translateY(-50%);
color: var(--border-mid);
font-size: 0.85rem;
font-weight: 300;
}
/* Quick start */
.home-quickstart {
display: flex;
flex-direction: column;
gap: 0.6rem;
margin-bottom: 1rem;
}
.quickstart-step {
display: flex;
align-items: center;
gap: 0.75rem;
font-size: 0.85rem;
color: var(--text-mid);
}
.quickstart-num {
width: 24px;
height: 24px;
border-radius: 50%;
background: var(--accent-soft);
color: var(--accent);
font-weight: 700;
font-size: 0.75rem;
display: grid;
place-items: center;
flex-shrink: 0;
}
.home-cta {
margin-top: 0.5rem;
}
/* ── Academic Documentation System ──────────────────────────────── */
.adoc-root {
min-height: calc(100vh - 56px);
background: var(--bg);
}
/* Hero */
.adoc-hero {
background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg) 100%);
border-bottom: 1px solid var(--border);
padding: 2.5rem 2rem 2rem;
}
.adoc-hero-inner {
max-width: 900px;
}
.adoc-hero-badge {
display: inline-block;
font-size: 0.68rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--accent);
background: var(--accent-soft);
border: 1px solid var(--accent);
border-radius: 4px;
padding: 0.18rem 0.55rem;
margin-bottom: 0.65rem;
}
.adoc-hero-title {
font-size: 1.75rem;
font-weight: 700;
letter-spacing: -0.025em;
color: var(--text);
margin-bottom: 0.35rem;
}
.adoc-hero-sub {
color: var(--text-mid);
font-size: 0.9rem;
line-height: 1.6;
max-width: 680px;
margin-bottom: 0.65rem;
}
.adoc-hero-stats {
font-size: 0.78rem;
color: var(--text-dim);
display: flex;
align-items: center;
gap: 0.5rem;
}
.adoc-hero-dot {
color: var(--border-strong);
}
/* Tab bar */
.adoc-tabs {
display: flex;
gap: 0;
border-bottom: 1px solid var(--border);
background: var(--bg-card);
padding: 0 1.5rem;
position: sticky;
top: 0;
z-index: 10;
}
.adoc-tab {
border: none;
background: transparent;
color: var(--text-mid);
font-family: inherit;
font-size: 0.82rem;
font-weight: 500;
padding: 0.7rem 1.1rem;
cursor: pointer;
display: flex;
align-items: center;
gap: 0.4rem;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color var(--fast), border-color var(--fast);
}
.adoc-tab:hover {
color: var(--text);
}
.adoc-tab.active {
color: var(--accent);
border-bottom-color: var(--accent);
font-weight: 600;
}
.adoc-tab-icon {
font-size: 0.88rem;
}
/* Section wrapper */
.adoc-section {
padding: 1.5rem 2rem;
max-width: 1100px;
display: flex;
flex-direction: column;
gap: 1.25rem;
}
/* Paper card */
.adoc-paper-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 1.5rem 1.75rem;
box-shadow: var(--shadow-sm);
}
.adoc-paper-card h2 {
font-size: 1.08rem;
font-weight: 700;
color: var(--text);
margin-bottom: 0.5rem;
padding-bottom: 0.4rem;
border-bottom: 1px solid var(--border);
}
.adoc-paper-card h3 {
font-size: 0.92rem;
font-weight: 650;
color: var(--text);
margin-bottom: 0.4rem;
}
.adoc-paper-card p {
color: var(--text-mid);
font-size: 0.86rem;
line-height: 1.7;
margin-bottom: 0.5rem;
}
.adoc-full-width {
max-width: 100%;
}
.adoc-meta-text {
color: var(--text-dim);
font-size: 0.82rem;
line-height: 1.6;
margin-bottom: 0.7rem;
}
/* Abstract */
.adoc-abstract {
border-left: 3px solid var(--accent);
}
/* Capabilities grid */
.adoc-cap-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 0.8rem;
margin-top: 0.4rem;
}
.adoc-cap-item {
display: flex;
gap: 0.75rem;
align-items: flex-start;
padding: 0.65rem;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--bg);
transition: border-color var(--fast);
}
.adoc-cap-item:hover {
border-color: var(--border-strong);
}
.adoc-cap-icon {
font-size: 1.15rem;
flex-shrink: 0;
margin-top: 0.15rem;
}
.adoc-cap-item strong {
display: block;
font-size: 0.82rem;
color: var(--text);
margin-bottom: 0.15rem;
}
.adoc-cap-item p {
font-size: 0.78rem;
color: var(--text-dim);
margin: 0;
line-height: 1.55;
}
/* Academic table */
.adoc-table-wrap {
overflow-x: auto;
border-radius: var(--radius);
border: 1px solid var(--border);
margin-top: 0.5rem;
}
.adoc-table {
width: 100%;
border-collapse: collapse;
font-size: 0.82rem;
}
.adoc-table thead {
background: var(--bg);
}
.adoc-table th {
padding: 0.55rem 0.75rem;
text-align: left;
font-weight: 650;
color: var(--text-mid);
font-size: 0.74rem;
letter-spacing: 0.04em;
text-transform: uppercase;
border-bottom: 1px solid var(--border);
white-space: nowrap;
}
.adoc-table td {
padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--border);
color: var(--text);
vertical-align: top;
line-height: 1.55;
}
.adoc-table tr:last-child td {
border-bottom: none;
}
.adoc-table tr:hover td {
background: var(--bg-hover);
}
.adoc-table code {
font-family: 'Fira Code', monospace;
font-size: 0.78rem;
background: var(--bg);
padding: 0.1rem 0.35rem;
border-radius: 3px;
border: 1px solid var(--border);
}
/* Pipeline stage list */
.adoc-pipeline-list {
display: flex;
flex-direction: column;
gap: 0;
margin-top: 0.5rem;
}
.adoc-pipeline-stage {
display: grid;
grid-template-columns: 28px 12px 1fr;
gap: 0.5rem;
align-items: start;
padding: 0.65rem 0;
}
.adoc-stage-num {
font-family: 'Fira Code', monospace;
font-size: 0.72rem;
font-weight: 700;
color: var(--accent);
text-align: right;
padding-top: 0.15rem;
}
.adoc-stage-connector {
width: 2px;
height: 100%;
min-height: 32px;
background: var(--border);
margin: 0 auto;
border-radius: 1px;
}
.adoc-stage-body {
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 0.6rem 0.85rem;
background: var(--bg);
transition: border-color var(--fast), box-shadow var(--fast);
}
.adoc-stage-body:hover {
border-color: var(--border-strong);
box-shadow: var(--shadow-xs);
}
.adoc-stage-header {
display: flex;
align-items: center;
gap: 0.45rem;
margin-bottom: 0.25rem;
}
.adoc-stage-header strong {
font-size: 0.84rem;
color: var(--text);
}
.adoc-stage-icon {
font-size: 0.9rem;
}
.adoc-stage-key {
font-family: 'Fira Code', monospace;
font-size: 0.68rem;
background: var(--accent-soft);
color: var(--accent);
padding: 0.1rem 0.4rem;
border-radius: 3px;
border: 1px solid rgba(201, 100, 62, 0.2);
margin-left: auto;
}
.adoc-stage-desc {
font-size: 0.78rem;
color: var(--text-dim);
line-height: 1.55;
margin: 0;
}
/* Flow diagram */
.adoc-flow-diagram {
display: flex;
flex-wrap: wrap;
gap: 0.2rem;
align-items: center;
padding: 1rem 0;
}
.adoc-flow-node {
display: inline-flex;
align-items: center;
gap: 0.3rem;
}
.adoc-flow-badge {
font-size: 0.82rem;
}
.adoc-flow-label {
font-family: 'Fira Code', monospace;
font-size: 0.68rem;
color: var(--text);
background: var(--bg);
border: 1px solid var(--border);
border-radius: 4px;
padding: 0.15rem 0.4rem;
}
.adoc-flow-arrow {
color: var(--text-dim);
font-size: 0.78rem;
margin: 0 0.15rem;
}
/* Config tab */
.adoc-config-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 1.5rem 2rem 0.5rem;
max-width: 1100px;
}
.adoc-config-header h2 {
font-size: 1.1rem;
font-weight: 700;
margin: 0;
}
.adoc-search {
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--bg-card);
color: var(--text);
padding: 0.45rem 0.75rem;
font-family: inherit;
font-size: 0.82rem;
width: 260px;
outline: none;
transition: border-color var(--fast), box-shadow var(--fast);
}
.adoc-search:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-glow);
}
.adoc-config-group {
margin: 0 2rem;
max-width: calc(1100px - 4rem);
}
.adoc-config-group + .adoc-config-group {
margin-top: 1rem;
}
.adoc-config-group:last-child {
margin-bottom: 2rem;
}
.adoc-config-group-title {
font-size: 0.9rem;
font-weight: 700;
color: var(--accent);
text-transform: uppercase;
letter-spacing: 0.08em;
margin-bottom: 0.6rem;
padding-bottom: 0.3rem;
border-bottom: 1px solid var(--border);
}
.adoc-config-table td {
font-size: 0.8rem;
}
.adoc-param-key {
font-family: 'Fira Code', monospace;
font-weight: 600;
color: var(--text) !important;
background: transparent !important;
border: none !important;
padding: 0 !important;
}
.adoc-type-badge {
font-size: 0.7rem;
font-weight: 600;
color: var(--accent);
background: var(--accent-soft);
padding: 0.12rem 0.4rem;
border-radius: 3px;
white-space: nowrap;
}
.adoc-enum-val {
display: inline-block;
font-family: 'Fira Code', monospace;
font-size: 0.72rem;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 3px;
padding: 0.08rem 0.3rem;
margin-right: 0.25rem;
margin-bottom: 0.15rem;
}
/* Docs reader layout (3-column) */
.adoc-docs-layout {
display: grid;
grid-template-columns: 240px 1fr 200px;
min-height: calc(100vh - 200px);
gap: 0;
}
.adoc-docs-nav {
border-right: 1px solid var(--border);
background: var(--bg-card);
padding: 1rem 0.75rem;
overflow-y: auto;
}
.adoc-docs-nav-title {
font-size: 0.78rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--text-dim);
margin-bottom: 0.8rem;
padding-left: 0.35rem;
}
.adoc-docs-group {
margin-bottom: 1rem;
}
.adoc-docs-section-label {
font-size: 0.7rem;
font-weight: 700;
color: var(--accent);
text-transform: uppercase;
letter-spacing: 0.08em;
padding: 0.2rem 0.35rem;
margin-bottom: 0.25rem;
}
.adoc-docs-link {
display: block;
width: 100%;
text-align: left;
border: 1px solid transparent;
border-radius: var(--radius);
background: transparent;
padding: 0.45rem 0.5rem;
cursor: pointer;
transition: all var(--fast);
margin-bottom: 0.15rem;
}
.adoc-docs-link:hover {
background: var(--bg-hover);
border-color: var(--border);
}
.adoc-docs-link.active {
background: var(--accent-soft);
border-color: var(--accent);
}
.adoc-docs-link-title {
font-size: 0.8rem;
font-weight: 600;
color: var(--text);
}
.adoc-docs-link.active .adoc-docs-link-title {
color: var(--accent);
}
.adoc-docs-link-sub {
display: block;
font-size: 0.7rem;
color: var(--text-dim);
margin-top: 0.1rem;
line-height: 1.4;
}
.adoc-docs-content {
padding: 1.75rem 2.5rem 3rem;
overflow-y: auto;
background: var(--bg);
}
.adoc-loading {
display: flex;
align-items: center;
gap: 0.6rem;
color: var(--text-mid);
padding: 2rem 0;
font-size: 0.85rem;
}
/* TOC sidebar */
.adoc-toc {
border-left: 1px solid var(--border);
background: var(--bg-card);
padding: 1rem 0.5rem;
overflow-y: auto;
position: sticky;
top: 44px;
max-height: calc(100vh - 200px);
}
.adoc-toc-title {
font-size: 0.7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--text-dim);
margin-bottom: 0.7rem;
padding-left: 0.5rem;
}
.adoc-toc-link {
display: block;
width: 100%;
text-align: left;
border: none;
background: transparent;
font-family: inherit;
font-size: 0.72rem;
color: var(--text-dim);
padding: 0.22rem 0.5rem;
cursor: pointer;
border-radius: 3px;
transition: color var(--fast), background var(--fast);
line-height: 1.4;
}
.adoc-toc-link:hover {
color: var(--text);
background: var(--bg-hover);
}
/* ── Academic Prose (Markdown Renderer) ─────────────────────────── */
.adoc-prose {
font-size: 0.88rem;
line-height: 1.75;
color: var(--text);
max-width: 760px;
}
.adoc-prose h1 {
font-size: 1.6rem;
font-weight: 700;
letter-spacing: -0.02em;
margin-top: 2rem;
margin-bottom: 0.6rem;
padding-bottom: 0.4rem;
border-bottom: 2px solid var(--border);
color: var(--text);
}
.adoc-prose h2 {
font-size: 1.2rem;
font-weight: 700;
color: var(--text);
margin-top: 1.75rem;
margin-bottom: 0.5rem;
padding-bottom: 0.3rem;
border-bottom: 1px solid var(--border);
}
.adoc-prose h3 {
font-size: 1rem;
font-weight: 650;
color: var(--text);
margin-top: 1.35rem;
margin-bottom: 0.35rem;
}
.adoc-prose h4 {
font-size: 0.88rem;
font-weight: 650;
color: var(--text-mid);
margin-top: 1rem;
margin-bottom: 0.3rem;
}
.adoc-prose p {
margin-bottom: 0.75rem;
color: var(--text);
}
.adoc-prose ul,
.adoc-prose ol {
margin-bottom: 0.75rem;
padding-left: 1.6rem;
}
.adoc-prose li {
margin-bottom: 0.3rem;
}
.adoc-prose li::marker {
color: var(--text-dim);
}
.adoc-prose strong {
font-weight: 650;
color: var(--text);
}
.adoc-prose em {
font-style: italic;
}
.adoc-prose a {
color: var(--accent);
text-decoration: none;
border-bottom: 1px solid var(--accent-soft);
transition: border-color var(--fast);
}
.adoc-prose a:hover {
border-color: var(--accent);
}
.adoc-prose blockquote {
border-left: 3px solid var(--accent);
margin: 0.75rem 0;
padding: 0.5rem 1rem;
background: var(--accent-soft);
border-radius: 0 var(--radius) var(--radius) 0;
color: var(--text);
}
.adoc-prose blockquote p {
margin-bottom: 0;
}
.adoc-prose pre {
background: var(--bg-dark);
color: #d0ccc6;
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 0.85rem 1rem;
overflow-x: auto;
margin-bottom: 0.85rem;
font-family: 'Fira Code', monospace;
font-size: 0.8rem;
line-height: 1.55;
}
.adoc-prose code {
font-family: 'Fira Code', monospace;
font-size: 0.82em;
}
.adoc-prose :not(pre) > code {
background: var(--bg);
border: 1px solid var(--border);
border-radius: 3px;
padding: 0.12rem 0.3rem;
color: var(--accent);
}
.adoc-prose table {
width: 100%;
border-collapse: collapse;
margin-bottom: 0.85rem;
font-size: 0.82rem;
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
}
.adoc-prose thead {
background: var(--bg);
}
.adoc-prose th {
padding: 0.5rem 0.65rem;
text-align: left;
font-weight: 650;
color: var(--text-mid);
border-bottom: 1px solid var(--border);
font-size: 0.78rem;
}
.adoc-prose td {
padding: 0.45rem 0.65rem;
border-bottom: 1px solid var(--border);
color: var(--text);
}
.adoc-prose tr:last-child td {
border-bottom: none;
}
.adoc-prose tr:hover td {
background: var(--bg-hover);
}
.adoc-prose hr {
border: none;
border-top: 1px solid var(--border);
margin: 1.5rem 0;
}
.adoc-prose img {
max-width: 100%;
border-radius: var(--radius);
border: 1px solid var(--border);
}
/* ── Responsive ─────────────────────────────────────────── */
@media (max-width: 1280px) {
.adoc-toc {
display: none;
}
.adoc-docs-layout {
grid-template-columns: 220px 1fr;
}
}
@media (max-width: 960px) {
.adoc-docs-layout {
grid-template-columns: 1fr;
}
.adoc-docs-nav {
border-right: none;
border-bottom: 1px solid var(--border);
max-height: 200px;
}
.adoc-hero {
padding: 1.5rem 1rem;
}
.adoc-section {
padding: 1rem;
}
.adoc-cap-grid {
grid-template-columns: 1fr;
}
.adoc-config-header {
flex-direction: column;
align-items: flex-start;
padding: 1rem 1rem 0.5rem;
}
.adoc-search {
width: 100%;
}
.adoc-config-group {
margin: 0 1rem;
}
}
/* ── Old docs classes (kept for backward compat) ──────── */
/* Overview grid for docs */
.adoc-overview-grid {
display: flex;
flex-direction: column;
gap: 1.25rem;
}
@media (max-width: 960px) {
.app-shell {
grid-template-columns: 1fr;
}
.app-sidebar {
border-right: none;
border-bottom: 1px solid var(--border);
}
.docs-layout {
grid-template-columns: 1fr;
}
.docs-sidebar {
max-height: 220px;
}
.home-card-grid {
grid-template-columns: repeat(2, 1fr);
}
.home-agent-grid {
grid-template-columns: repeat(2, 1fr);
}
.pipeline-flow {
justify-content: center;
}
.pipeline-arrow {
display: none;
}
}
/* ── Sidebar ─────────────────────────────────────────────────────── */
.sidebar {
width: 216px;
min-width: 216px;
background: var(--bg-sidebar);
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
padding: 1.25rem 0.625rem;
gap: 2px;
overflow-y: auto;
}
.sidebar h2 {
font-size: 0.8rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-dim);
padding: 0 0.625rem 0.9rem;
border-bottom: 1px solid var(--border);
margin-bottom: 0.4rem;
}
.sidebar button {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
background: transparent;
border: none;
border-radius: var(--radius);
color: var(--text-mid);
font-family: inherit;
font-size: 0.85rem;
font-weight: 500;
padding: 0.5rem 0.75rem;
cursor: pointer;
transition: background var(--fast) var(--ease),
color var(--fast) var(--ease);
text-align: left;
}
.sidebar button:hover {
background: var(--border);
color: var(--text);
}
.sidebar button.active {
background: var(--accent-soft);
color: var(--accent);
font-weight: 600;
}
.main-content {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
}
/* ── Card ────────────────────────────────────────────────────────── */
.sci-fi-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 1.35rem;
box-shadow: var(--shadow-sm);
transition: box-shadow var(--mid) var(--ease);
}
.sci-fi-card:hover {
box-shadow: var(--shadow-md);
}
/* ── Typography helpers ──────────────────────────────────────────── */
.section-heading {
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--text-dim);
margin-bottom: 0.8rem;
}
.app-title {
font-size: 1.35rem;
font-weight: 650;
color: var(--text);
margin-bottom: 0.3rem;
}
.app-subtitle {
color: var(--text-mid);
font-size: 0.88rem;
margin-bottom: 0.7rem;
}
.enterprise-table {
width: 100%;
border-collapse: collapse;
text-align: left;
}
.enterprise-table thead tr {
border-bottom: 1px solid var(--border);
}
.enterprise-table th,
.enterprise-table td {
padding: 0.62rem;
border-bottom: 1px solid var(--border);
font-size: 0.86rem;
}
.enterprise-table th {
color: var(--text-mid);
font-weight: 600;
}
.enterprise-table td {
color: var(--text);
}
/* ── Grids ───────────────────────────────────────────────────────── */
.grid-4 {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
margin-bottom: 1.5rem;
}
.grid-2 {
display: grid;
grid-template-columns: 1fr 2fr;
gap: 1.25rem;
}
.page-container {
padding: 2rem;
max-width: 1200px;
}
/* ── Buttons ─────────────────────────────────────────────────────── */
.btn-primary {
background: var(--accent);
color: #fff;
border: none;
border-radius: var(--radius);
padding: 0.5rem 1.1rem;
font-family: inherit;
font-size: 0.875rem;
font-weight: 600;
cursor: pointer;
transition: opacity var(--fast), transform var(--fast);
}
.btn-primary:hover {
opacity: 0.87;
}
.btn-primary:active {
transform: scale(0.98);
}
/* ── Landing ─────────────────────────────────────────────────────── */
.landing-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
text-align: center;
padding: 2rem;
}
.landing-title {
font-size: 2.6rem;
font-weight: 600;
letter-spacing: -0.03em;
color: var(--text);
margin-bottom: 0.5rem;
}
.landing-subtitle {
font-size: 1rem;
color: var(--text-mid);
margin-bottom: 2rem;
}
.chip-canvas-container {
width: 600px;
height: 380px;
}
/* ════════════════════════════════════════════════════════════════
DESIGN STUDIO β€” Prompt Screen
════════════════════════════════════════════════════════════════ */
.studio-root {
height: 100vh;
overflow-y: auto;
background: var(--bg);
animation: fadeIn var(--slow) var(--ease);
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.prompt-screen {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 2.5rem 1.5rem;
gap: 1.75rem;
}
.prompt-hero {
text-align: center;
}
.chip-icon-glow {
font-size: 2rem;
display: inline-block;
margin-bottom: 0.75rem;
animation: spin-slow 12s linear infinite;
will-change: transform;
}
@keyframes spin-slow {
to {
transform: rotate(360deg);
}
}
.prompt-title {
font-size: 1.9rem;
font-weight: 600;
letter-spacing: -0.025em;
color: var(--text);
margin-bottom: 0.4rem;
}
.prompt-sub {
color: var(--text-mid);
font-size: 0.92rem;
line-height: 1.65;
}
.prompt-card {
width: 100%;
max-width: 660px;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 1.6rem;
box-shadow: var(--shadow-md);
display: flex;
flex-direction: column;
gap: 0.9rem;
animation: fadeIn 0.4s var(--ease);
}
.prompt-examples {
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
}
.example-chip {
background: var(--bg);
border: 1px solid var(--border);
border-radius: 20px;
color: var(--text-mid);
font-size: 0.77rem;
padding: 0.28rem 0.72rem;
cursor: pointer;
transition: all var(--fast) var(--ease);
user-select: none;
}
.example-chip:hover {
border-color: var(--accent);
color: var(--accent);
background: var(--accent-soft);
transform: translateY(-1px);
}
.prompt-textarea {
width: 100%;
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius);
color: var(--text);
font-family: inherit;
font-size: 0.92rem;
padding: 0.85rem 0.95rem;
resize: vertical;
outline: none;
line-height: 1.6;
transition: border-color var(--fast), box-shadow var(--fast);
}
.prompt-textarea:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-glow);
}
.prompt-textarea::placeholder {
color: var(--text-dim);
}
.design-name-preview {
display: flex;
align-items: center;
gap: 0.6rem;
}
.design-name-label {
font-size: 0.77rem;
font-weight: 600;
color: var(--text-dim);
white-space: nowrap;
}
.design-name-input {
flex: 1;
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius-xs);
color: var(--text);
font-family: 'Fira Code', monospace;
font-size: 0.8rem;
padding: 0.32rem 0.65rem;
outline: none;
transition: border-color var(--fast);
}
.design-name-input:focus {
border-color: var(--accent);
}
.prompt-options {
display: flex;
align-items: center;
}
.toggle-label {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: 0.8rem;
color: var(--text-mid);
cursor: pointer;
user-select: none;
}
.toggle-label input[type='checkbox'] {
accent-color: var(--accent);
width: 14px;
height: 14px;
cursor: pointer;
}
.error-banner {
background: var(--fail-bg);
border: 1px solid var(--fail-bdr);
border-radius: var(--radius-xs);
color: var(--fail);
font-size: 0.83rem;
padding: 0.6rem 0.9rem;
animation: fadeIn 0.2s var(--ease);
}
.launch-btn {
width: 100%;
padding: 0.82rem 1.5rem;
background: var(--accent);
border: none;
border-radius: var(--radius);
color: #fff;
font-family: inherit;
font-size: 0.93rem;
font-weight: 600;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
gap: 0.6rem;
letter-spacing: 0.01em;
transition: opacity var(--fast), transform var(--fast) var(--ease),
box-shadow var(--mid) var(--ease);
box-shadow: 0 2px 8px rgba(201, 100, 62, 0.25);
}
.launch-btn:hover:not(:disabled) {
opacity: 0.9;
box-shadow: 0 4px 16px rgba(201, 100, 62, 0.35);
transform: translateY(-1px);
}
.launch-btn:active:not(:disabled) {
transform: scale(0.99);
box-shadow: none;
}
.launch-btn:disabled {
opacity: 0.38;
cursor: not-allowed;
box-shadow: none;
}
/* ════════════════════════════════════════════════════════════════
BUILD MONITOR
════════════════════════════════════════════════════════════════ */
.monitor-root {
height: 100vh;
display: flex;
flex-direction: column;
padding: 1.25rem;
gap: 0.9rem;
background: var(--bg);
animation: fadeIn var(--slow) var(--ease);
}
.monitor-header {
display: flex;
justify-content: space-between;
align-items: center;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 0.85rem 1.2rem;
box-shadow: var(--shadow-sm);
}
.monitor-chip-badge {
display: flex;
align-items: center;
gap: 0.65rem;
}
/* Status dot with smooth pulse */
.badge-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--warn);
flex-shrink: 0;
position: relative;
}
.badge-dot::after {
content: '';
position: absolute;
inset: -3px;
border-radius: 50%;
background: var(--warn);
opacity: 0;
animation: ring-pulse 1.8s ease-out infinite;
}
.badge-dot[data-status='done'] {
background: var(--success);
}
.badge-dot[data-status='done']::after {
display: none;
}
.badge-dot[data-status='failed'] {
background: var(--fail);
}
.badge-dot[data-status='failed']::after {
display: none;
}
.badge-dot[data-status='cancelled'] {
background: var(--text-dim);
}
.badge-dot[data-status='cancelled']::after {
display: none;
}
@keyframes ring-pulse {
0% {
opacity: 0.5;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(2.4);
}
}
.badge-name {
font-weight: 600;
font-size: 0.93rem;
color: var(--text);
}
.monitor-status {
display: flex;
align-items: center;
gap: 0.7rem;
font-size: 0.82rem;
color: var(--text-mid);
}
/* Cancel button */
.cancel-btn {
padding: 0.38rem 0.85rem;
background: transparent;
border: 1px solid var(--border-mid);
border-radius: var(--radius);
color: var(--text-mid);
font-family: inherit;
font-size: 0.78rem;
font-weight: 500;
cursor: pointer;
transition: all var(--fast) var(--ease);
}
.cancel-btn:hover {
border-color: var(--fail);
color: var(--fail);
background: var(--fail-bg);
}
.cancel-btn:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.monitor-body {
display: grid;
grid-template-columns: 268px 1fr;
gap: 0.9rem;
flex: 1;
min-height: 0;
}
/* ── Checkpoint Timeline ─────────────────────────────────────────── */
.checkpoint-column {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 1rem;
overflow-y: auto;
box-shadow: var(--shadow-sm);
}
.checkpoint-list {
display: flex;
flex-direction: column;
}
.checkpoint-item {
display: flex;
align-items: flex-start;
gap: 0.5rem;
opacity: 0.28;
transition: opacity var(--mid) var(--ease);
}
.checkpoint-item.reached {
opacity: 1;
}
.checkpoint-item.active {
opacity: 1;
}
.checkpoint-icon-wrap {
display: flex;
flex-direction: column;
align-items: center;
min-width: 22px;
}
.check-done {
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--success);
color: #fff;
font-size: 0.6rem;
font-weight: 800;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
animation: pop-in var(--mid) var(--ease);
}
@keyframes pop-in {
from {
transform: scale(0.5);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
}
}
.check-pulse {
width: 20px;
height: 20px;
border-radius: 50%;
border: 2px solid var(--accent);
color: var(--accent);
font-size: 0.68rem;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
animation: spin-fast 1s linear infinite;
}
@keyframes spin-fast {
to {
transform: rotate(360deg);
}
}
.check-todo {
width: 20px;
height: 20px;
border-radius: 50%;
border: 1.5px solid var(--border-mid);
flex-shrink: 0;
}
.checkpoint-line {
width: 1px;
height: 16px;
background: var(--border);
margin: 2px 0;
transition: background var(--slow) var(--ease);
}
.checkpoint-line.line-done {
background: var(--success);
}
.checkpoint-label {
display: flex;
align-items: center;
gap: 0.35rem;
padding-bottom: 9px;
}
.checkpoint-icon-emoji {
font-size: 0.8rem;
}
.checkpoint-text {
font-size: 0.77rem;
color: var(--text-mid);
}
.checkpoint-text.text-active {
color: var(--accent);
font-weight: 600;
}
/* ── Live Terminal ───────────────────────────────────────────────── */
.terminal-column {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 1rem;
display: flex;
flex-direction: column;
gap: 0.65rem;
box-shadow: var(--shadow-sm);
min-height: 0;
}
.live-terminal {
flex: 1;
background: var(--bg-dark);
border-radius: var(--radius);
padding: 0.75rem;
overflow-y: auto;
font-family: 'Fira Code', monospace;
font-size: 0.73rem;
display: flex;
flex-direction: column;
gap: 1px;
scroll-behavior: smooth;
}
.terminal-waiting {
color: #5a5550;
font-style: italic;
}
.terminal-line {
display: flex;
gap: 0.5rem;
line-height: 1.55;
animation: line-appear 0.15s var(--ease);
}
@keyframes line-appear {
from {
opacity: 0;
transform: translateX(-4px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
.terminal-line.terminal-highlight .terminal-msg {
color: #E8A87C;
}
.terminal-ts {
color: #3E3A35;
min-width: 64px;
}
.terminal-state {
color: #7A6E64;
min-width: 88px;
}
.terminal-msg {
color: #C8C2BA;
}
/* Progress bar */
.progress-bar-wrap {
height: 2px;
background: var(--border);
border-radius: 2px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
background: var(--accent);
border-radius: 2px;
transition: width 0.7s var(--ease);
}
.progress-label {
font-size: 0.7rem;
color: var(--text-dim);
text-align: right;
}
/* Monitor footer */
.monitor-footer {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: 0.65rem 1.1rem;
font-size: 0.78rem;
color: var(--text-mid);
display: flex;
align-items: center;
gap: 0.65rem;
box-shadow: var(--shadow-xs);
}
/* Spinners */
.spinner {
display: inline-block;
width: 13px;
height: 13px;
border: 1.5px solid var(--border-mid);
border-top-color: var(--accent);
border-radius: 50%;
animation: spin-fast 0.75s linear infinite;
flex-shrink: 0;
}
.spinner-small {
display: inline-block;
width: 10px;
height: 10px;
border: 1.5px solid var(--border-mid);
border-top-color: var(--accent);
border-radius: 50%;
animation: spin-fast 0.75s linear infinite;
flex-shrink: 0;
}
/* ════════════════════════════════════════════════════════════════
CHIP SUMMARY
════════════════════════════════════════════════════════════════ */
.summary-root {
padding: 1.75rem 2rem;
display: flex;
flex-direction: column;
gap: 1.25rem;
max-width: 1000px;
margin: 0 auto;
animation: fadeIn var(--slow) var(--ease);
}
.summary-banner {
border-radius: var(--radius-md);
padding: 1.2rem 1.5rem;
display: flex;
align-items: center;
gap: 1.1rem;
}
.banner-success {
background: var(--success-bg);
border: 1px solid var(--success-bdr);
}
.banner-fail {
background: var(--fail-bg);
border: 1px solid var(--fail-bdr);
}
.banner-icon {
font-size: 1.8rem;
}
.banner-title {
font-size: 1.25rem;
font-weight: 600;
color: var(--text);
margin-bottom: 0.2rem;
}
.banner-sub {
color: var(--text-mid);
font-size: 0.82rem;
}
.summary-section {
display: flex;
flex-direction: column;
gap: 0.6rem;
}
/* Metric Cards */
.metrics-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.8rem;
}
.metric-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-top: 2.5px solid var(--accent);
border-radius: var(--radius-md);
padding: 1rem;
display: flex;
flex-direction: column;
gap: 0.25rem;
box-shadow: var(--shadow-xs);
transition: transform var(--mid) var(--ease), box-shadow var(--mid) var(--ease);
}
.metric-card:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.metric-icon {
font-size: 1.1rem;
}
.metric-value {
font-size: 1.1rem;
font-weight: 700;
color: var(--text);
}
.metric-label {
font-size: 0.7rem;
color: var(--text-dim);
text-transform: uppercase;
letter-spacing: 0.08em;
}
/* Pills */
.info-pills {
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
}
.info-pill {
background: var(--bg);
border: 1px solid var(--border);
border-radius: 20px;
color: var(--text-mid);
font-size: 0.77rem;
padding: 0.22rem 0.7rem;
}
/* Code boxes */
.spec-box,
.rtl-box {
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 0.9rem;
overflow: auto;
max-height: 240px;
}
.spec-text {
font-family: inherit;
font-size: 0.8rem;
color: var(--text);
line-height: 1.65;
white-space: pre-wrap;
}
.rtl-code {
font-family: 'Fira Code', monospace;
font-size: 0.76rem;
color: var(--text);
line-height: 1.5;
white-space: pre;
}
/* Convergence Table */
.convergence-table-wrap {
overflow-x: auto;
border-radius: var(--radius);
border: 1px solid var(--border);
}
.convergence-table {
width: 100%;
border-collapse: collapse;
font-size: 0.77rem;
}
.convergence-table th {
background: var(--bg);
color: var(--text-mid);
padding: 0.5rem 0.85rem;
text-align: left;
border-bottom: 1px solid var(--border);
font-size: 0.68rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.09em;
font-family: inherit;
}
.convergence-table td {
color: var(--text);
padding: 0.4rem 0.85rem;
border-bottom: 1px solid var(--border);
font-family: 'Fira Code', monospace;
}
.convergence-table tr:last-child td {
border-bottom: none;
}
.convergence-table tr:hover td {
background: var(--bg-hover);
}
.error-box {
background: var(--fail-bg);
border: 1px solid var(--fail-bdr);
border-radius: var(--radius);
padding: 0.9rem;
font-family: 'Fira Code', monospace;
font-size: 0.77rem;
color: var(--fail);
max-height: 180px;
overflow: auto;
white-space: pre-wrap;
}
/* Action buttons */
.summary-actions {
display: flex;
gap: 0.75rem;
justify-content: center;
padding: 0.25rem 0 2rem;
}
/* Verification Report Card */
.check-report-card {
display: flex;
flex-direction: column;
gap: 0;
border: 1px solid var(--border);
border-radius: var(--radius-md);
background: var(--bg-card);
overflow: hidden;
}
.check-report-item {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.65rem 1rem;
border-bottom: 1px solid var(--border);
transition: background var(--fast);
}
.check-report-item:last-child {
border-bottom: none;
}
.check-report-item:hover {
background: var(--bg-hover);
}
.check-report-status {
width: 24px;
height: 24px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.7rem;
font-weight: 800;
flex-shrink: 0;
}
.check-report-status[data-status='pass'] {
background: var(--success-bg);
color: var(--success);
border: 1px solid var(--success-bdr);
}
.check-report-status[data-status='fail'] {
background: var(--fail-bg);
color: var(--fail);
border: 1px solid var(--fail-bdr);
}
.check-report-status[data-status='skip'] {
background: var(--bg);
color: var(--text-dim);
border: 1px solid var(--border);
}
.check-report-label {
font-size: 0.84rem;
font-weight: 600;
color: var(--text);
display: block;
}
.check-report-detail {
font-size: 0.74rem;
color: var(--text-dim);
display: block;
margin-top: 0.1rem;
}
.action-btn {
padding: 0.6rem 1.4rem;
border-radius: var(--radius);
font-family: inherit;
font-size: 0.875rem;
font-weight: 600;
cursor: pointer;
transition: all var(--fast) var(--ease);
}
.action-primary {
background: var(--accent);
border: none;
color: #fff;
box-shadow: 0 2px 8px rgba(201, 100, 62, 0.25);
}
.action-primary:hover {
opacity: 0.88;
box-shadow: 0 4px 14px rgba(201, 100, 62, 0.35);
transform: translateY(-1px);
}
/* ── Dashboard ───────────────────────────────────────────────────── */
.dash-signoff-report {
background: var(--bg-dark);
padding: 1rem;
border: 1px solid var(--border);
border-radius: var(--radius);
color: var(--success);
font-family: 'Fira Code', monospace;
font-size: 0.78rem;
white-space: pre-wrap;
max-height: 400px;
overflow-y: auto;
line-height: 1.55;
}
.metric-highlight {
position: relative;
overflow: hidden;
transition: transform var(--fast), box-shadow var(--fast);
}
.metric-highlight:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.metric-tag {
color: var(--text-dim);
font-size: 0.68rem;
margin-top: 0.5rem;
text-transform: uppercase;
letter-spacing: 0.06em;
font-weight: 500;
}
.dash-insight-card {
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 0.85rem;
background: var(--bg);
transition: all var(--fast);
}
.dash-insight-card:hover {
border-color: var(--accent);
background: var(--accent-soft);
}
.dash-insight-icon {
font-size: 1.2rem;
margin-bottom: 0.35rem;
}
.dash-insight-title {
font-size: 0.72rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-dim);
margin-bottom: 0.2rem;
}
.dash-insight-value {
font-size: 0.88rem;
font-weight: 650;
color: var(--text);
margin-bottom: 0.2rem;
}
.dash-insight-detail {
font-size: 0.72rem;
color: var(--text-dim);
line-height: 1.4;
}
.metric-value.dashboard {
font-size: 1.7rem;
font-weight: 600;
color: var(--text);
}
.metric-label.dashboard {
font-size: 0.73rem;
color: var(--text-dim);
}
/* ── Responsive ─────────────────────────────────────────────────── */
@media (max-width: 900px) {
.monitor-body {
grid-template-columns: 1fr;
}
.metrics-grid {
grid-template-columns: 1fr 1fr;
}
.grid-4 {
grid-template-columns: 1fr 1fr;
}
.sidebar {
width: 180px;
min-width: 180px;
}
}
@media (max-width: 640px) {
.sidebar {
display: none;
}
.prompt-card {
padding: 1.1rem;
}
.prompt-title {
font-size: 1.5rem;
}
}
/* ════════════════════════════════════════════════════════════════════
CHIP SUMMARY (cs-*)
Premium result screen β€” clean, editorial, minimal
════════════════════════════════════════════════════════════════════ */
.cs-root {
padding: 2rem 2.25rem;
display: flex;
flex-direction: column;
gap: 2rem;
max-width: 860px;
margin: 0 auto;
}
/* ── Banner ─────────────────────────────────────── */
.cs-banner {
display: flex;
align-items: flex-start;
gap: 1rem;
padding: 1.25rem 1.5rem;
border-radius: 12px;
border: 1px solid var(--border);
background: var(--bg-card);
}
.cs-banner--success {
border-color: rgba(74, 124, 89, 0.28);
background: rgba(74, 124, 89, 0.04);
}
.cs-banner--fail {
border-color: rgba(192, 57, 43, 0.22);
background: rgba(192, 57, 43, 0.03);
}
.cs-banner-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex-shrink: 0;
margin-top: 0.45rem;
}
.cs-banner--success .cs-banner-dot {
background: #4a7c59;
box-shadow: 0 0 0 3px rgba(74, 124, 89, 0.15);
}
.cs-banner--fail .cs-banner-dot {
background: #c0392b;
box-shadow: 0 0 0 3px rgba(192, 57, 43, 0.12);
}
.cs-banner-body { flex: 1; min-width: 0; }
.cs-banner-title {
font-size: 1.1875rem;
font-weight: 600;
color: var(--text);
margin: 0 0 0.3rem;
line-height: 1.3;
}
.cs-banner-sub {
font-size: 0.8125rem;
color: var(--text-mid);
margin: 0;
line-height: 1.5;
}
/* ── Section ─────────────────────────────────────── */
.cs-section {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.cs-section-title {
font-size: 0.6875rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--text-dim);
margin: 0;
padding-bottom: 0.625rem;
border-bottom: 1px solid var(--border);
}
/* ── Stats Row ───────────────────────────────────── */
.cs-stats-row {
display: flex;
align-items: stretch;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
}
.cs-stat {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.3rem;
padding: 1rem 1.25rem;
}
.cs-stat-divider {
width: 1px;
background: var(--border);
flex-shrink: 0;
margin: 0.75rem 0;
}
.cs-stat-value {
font-size: 1.0625rem;
font-weight: 600;
color: var(--text);
font-family: 'Fira Code', 'JetBrains Mono', monospace;
line-height: 1.2;
}
.cs-stat-value--warn { color: var(--warn); }
.cs-stat-label {
font-size: 0.7rem;
color: var(--text-dim);
font-weight: 500;
line-height: 1.3;
}
/* ── Verification Checks ─────────────────────────── */
.cs-checks {
display: flex;
flex-direction: column;
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
background: var(--bg-card);
}
.cs-check-row {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.7rem 1rem;
border-bottom: 1px solid var(--border);
transition: background 120ms;
}
.cs-check-row:last-child { border-bottom: none; }
.cs-check-row:hover { background: var(--bg-hover); }
.cs-check-icon {
width: 20px;
height: 20px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.625rem;
font-weight: 800;
flex-shrink: 0;
}
.cs-check-icon--pass { background: rgba(74,124,89,0.1); color: #4a7c59; border: 1px solid rgba(74,124,89,0.2); }
.cs-check-icon--fail { background: rgba(192,57,43,0.08); color: #c0392b; border: 1px solid rgba(192,57,43,0.15); }
.cs-check-icon--skip { background: rgba(0,0,0,0.03); color: var(--text-dim); border: 1px solid var(--border); }
.cs-check-body { display: flex; flex-direction: column; gap: 0.1rem; min-width: 0; }
.cs-check-label {
font-size: 0.8375rem;
font-weight: 500;
color: var(--text);
}
.cs-check-detail {
font-size: 0.725rem;
color: var(--text-dim);
font-family: 'Fira Code', monospace;
}
/* ── Self-Healing ────────────────────────────────── */
.cs-heal-list {
display: flex;
flex-direction: column;
border: 1px solid var(--border);
border-radius: 8px;
overflow: hidden;
}
.cs-heal-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.575rem 0.875rem;
font-size: 0.8125rem;
color: var(--text-mid);
border-bottom: 1px solid var(--border);
}
.cs-heal-item:last-child { border-bottom: none; }
.cs-heal-count {
font-family: 'Fira Code', monospace;
font-size: 0.75rem;
color: var(--text-dim);
font-weight: 600;
}
/* ── Code Blocks ─────────────────────────────────── */
.cs-code-block {
border: 1px solid var(--border);
border-radius: 8px;
overflow: hidden;
}
.cs-code-block--dark {
background: #1a1917;
border-color: #2d2b28;
}
.cs-pre {
margin: 0;
padding: 1rem 1.125rem;
overflow: auto;
max-height: 220px;
font-size: 0.775rem;
line-height: 1.6;
}
.cs-pre--prose {
font-family: inherit;
color: var(--text);
background: var(--bg);
white-space: pre-wrap;
}
.cs-pre--code {
font-family: 'Fira Code', 'JetBrains Mono', monospace;
color: #e2ddd8;
background: #1a1917;
white-space: pre;
}
.cs-pre--error {
font-family: 'Fira Code', monospace;
color: #c0392b;
background: rgba(192, 57, 43, 0.04);
white-space: pre-wrap;
}
/* ── Convergence Table ───────────────────────────── */
.cs-table-wrap {
border: 1px solid var(--border);
border-radius: 8px;
overflow: auto;
}
.cs-table {
width: 100%;
border-collapse: collapse;
font-size: 0.775rem;
}
.cs-table th {
background: var(--bg);
color: var(--text-dim);
padding: 0.5rem 0.875rem;
text-align: left;
border-bottom: 1px solid var(--border);
font-size: 0.6875rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
}
.cs-table td {
color: var(--text);
padding: 0.4375rem 0.875rem;
border-bottom: 1px solid var(--border);
font-family: 'Fira Code', monospace;
}
.cs-table tr:last-child td { border-bottom: none; }
.cs-table tbody tr:hover td { background: var(--bg-hover); }
.cs-table td[data-good="false"] { color: #c0392b; }
.cs-table td[data-good="true"] { color: #4a7c59; }
/* ── Failure Detail ──────────────────────────────── */
.cs-fail-explanation {
font-size: 0.875rem;
line-height: 1.65;
color: var(--text);
margin: 0 0 0.625rem;
}
.cs-fail-suggestion {
font-size: 0.8125rem;
line-height: 1.5;
color: var(--text-mid);
margin: 0;
display: flex;
gap: 0.375rem;
}
.cs-fail-suggestion-label {
font-weight: 600;
color: var(--text-dim);
flex-shrink: 0;
}
/* ── Actions ─────────────────────────────────────── */
.cs-actions {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
padding: 0.5rem 0 2.5rem;
}
/* Full build report download row in ChipSummary */
.cs-report-downloads {
display: flex;
align-items: center;
gap: 0.5rem;
flex-wrap: wrap;
justify-content: center;
}
.cs-report-label {
font-size: 0.8rem;
color: var(--text-secondary, #888);
margin-right: 0.25rem;
}
.cs-report-btn {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.4rem 0.9rem;
border-radius: 6px;
border: 1px solid rgba(245, 120, 31, 0.3);
background: rgba(245, 120, 31, 0.08);
color: #f5781f;
font-size: 0.78rem;
font-weight: 500;
font-family: inherit;
text-decoration: none;
cursor: pointer;
transition: background 120ms, border-color 120ms;
}
.cs-report-btn:hover {
background: rgba(245, 120, 31, 0.18);
border-color: rgba(245, 120, 31, 0.5);
text-decoration: none;
}
.cs-reset-btn {
background: var(--accent);
color: #fff;
border: none;
font-family: inherit;
font-size: 0.875rem;
font-weight: 500;
padding: 0.625rem 1.75rem;
border-radius: 8px;
cursor: pointer;
letter-spacing: 0.01em;
box-shadow: 0 1px 4px rgba(201, 100, 62, 0.2);
transition: opacity 150ms, transform 150ms, box-shadow 150ms;
}
.cs-reset-btn:hover {
opacity: 0.9;
transform: translateY(-1px);
box-shadow: 0 3px 10px rgba(201, 100, 62, 0.28);
}
/* ── Responsive ─────────────────────────────────── */
@media (max-width: 640px) {
.cs-root { padding: 1.25rem 1rem; gap: 1.5rem; }
.cs-stats-row { flex-direction: column; }
.cs-stat-divider { width: auto; height: 1px; margin: 0; }
}
/* ═══════════════════════════════════════════════════════════════════
AUTH PAGE β€” Premium Split-Panel (Anthropic / Linear-inspired)
═══════════════════════════════════════════════════════════════════ */
.auth-root {
display: grid;
grid-template-columns: 1fr 1fr;
min-height: 100vh;
}
/* ── Left Panel: Brand Story ── */
.auth-left {
background: #1C1A17;
color: #F5F1EB;
display: flex;
align-items: center;
justify-content: center;
padding: 3rem 2.5rem;
position: relative;
overflow: hidden;
}
/* Subtle grain texture */
.auth-left::before {
content: '';
position: absolute;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.04'/%3E%3C/svg%3E");
pointer-events: none;
}
/* Warm accent glow */
.auth-left::after {
content: '';
position: absolute;
width: 400px;
height: 400px;
border-radius: 50%;
background: radial-gradient(circle, rgba(201, 100, 62, 0.15) 0%, transparent 70%);
bottom: -120px;
right: -80px;
pointer-events: none;
}
.auth-left-content {
position: relative;
z-index: 1;
max-width: 420px;
display: flex;
flex-direction: column;
gap: 2rem;
}
.auth-logo {
display: flex;
align-items: center;
gap: 0.6rem;
}
.auth-logo-mark {
color: #C9643E;
display: flex;
}
.auth-logo-text {
font-size: 1.1rem;
font-weight: 700;
letter-spacing: -0.02em;
color: #F5F1EB;
}
.auth-headline {
font-size: 2.4rem;
font-weight: 700;
line-height: 1.15;
letter-spacing: -0.035em;
}
.auth-headline-dim {
color: #8A847D;
}
.auth-value-prop {
font-size: 0.92rem;
color: #9C9690;
line-height: 1.7;
}
.auth-features {
display: flex;
flex-direction: column;
gap: 0.85rem;
}
.auth-feature {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.7rem 0.85rem;
border-radius: 10px;
border: 1px solid rgba(255, 255, 255, 0.06);
background: rgba(255, 255, 255, 0.03);
transition: background 0.2s, border-color 0.2s;
}
.auth-feature:hover {
background: rgba(255, 255, 255, 0.06);
border-color: rgba(255, 255, 255, 0.1);
}
.auth-feature-icon {
font-size: 1.15rem;
flex-shrink: 0;
}
.auth-feature-title {
font-size: 0.82rem;
font-weight: 600;
color: #ECE9E4;
margin-bottom: 0.05rem;
}
.auth-feature-desc {
font-size: 0.74rem;
color: #8A847D;
}
.auth-left-footer {
font-size: 0.72rem;
color: #64605A;
letter-spacing: 0.03em;
margin-top: auto;
padding-top: 2rem;
}
/* ── Right Panel: Form ── */
.auth-right {
background: var(--bg);
display: flex;
align-items: center;
justify-content: center;
padding: 3rem 2.5rem;
}
.auth-form-wrapper {
width: 100%;
max-width: 360px;
}
.auth-form-title {
font-size: 1.45rem;
font-weight: 700;
letter-spacing: -0.025em;
margin-bottom: 0.3rem;
color: var(--text);
}
.auth-form-sub {
font-size: 0.88rem;
color: var(--text-mid);
margin-bottom: 1.75rem;
}
.auth-form {
display: flex;
flex-direction: column;
gap: 1.1rem;
}
.auth-field {
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.auth-label {
font-size: 0.8rem;
font-weight: 600;
color: var(--text);
letter-spacing: -0.005em;
}
.auth-input {
padding: 0.65rem 0.8rem;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 8px;
color: var(--text);
font-family: inherit;
font-size: 0.9rem;
outline: none;
transition: border-color 0.15s, box-shadow 0.15s;
}
.auth-input:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-soft);
}
.auth-input::placeholder {
color: var(--text-dim);
}
/* Alerts */
.auth-alert {
display: flex;
align-items: flex-start;
gap: 0.5rem;
padding: 0.6rem 0.8rem;
border-radius: 8px;
font-size: 0.82rem;
line-height: 1.5;
}
.auth-alert--error {
background: var(--fail-bg);
border: 1px solid var(--fail-bdr);
color: var(--fail);
}
.auth-alert--success {
background: var(--success-bg);
border: 1px solid var(--success-bdr);
color: var(--success);
}
.auth-alert-icon {
font-weight: 700;
flex-shrink: 0;
margin-top: 0.05rem;
}
/* Submit button */
.auth-submit {
padding: 0.7rem;
background: var(--accent);
color: #fff;
border: none;
border-radius: 8px;
font-family: inherit;
font-size: 0.9rem;
font-weight: 600;
cursor: pointer;
transition: opacity 0.15s, transform 0.15s, box-shadow 0.15s;
margin-top: 0.35rem;
}
.auth-submit:hover:not(:disabled) {
opacity: 0.92;
transform: translateY(-1px);
box-shadow: 0 4px 14px rgba(201, 100, 62, 0.25);
}
.auth-submit:active:not(:disabled) {
transform: translateY(0);
}
/* OAuth Google Button */
.auth-provider-divider {
display: flex;
align-items: center;
margin: 1.5rem 0;
gap: 0.75rem;
}
.auth-provider-line {
flex: 1;
height: 1px;
background: var(--border);
}
.auth-provider-text {
font-size: 0.7rem;
font-weight: 600;
color: var(--text-dim);
letter-spacing: 0.05em;
}
.auth-google-btn {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
gap: 0.6rem;
padding: 0.65rem;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 8px;
color: var(--text);
font-family: inherit;
font-size: 0.9rem;
font-weight: 500;
cursor: pointer;
transition: background 0.15s, border-color 0.15s;
}
.auth-google-btn:hover {
background: var(--bg-hover);
border-color: var(--border-mid);
}
.auth-submit:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.auth-submit-loading {
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
}
.auth-spinner {
width: 16px;
height: 16px;
border: 2px solid rgba(255, 255, 255, 0.3);
border-top-color: #fff;
border-radius: 50%;
animation: auth-spin 0.6s linear infinite;
}
@keyframes auth-spin {
to { transform: rotate(360deg); }
}
/* Divider */
.auth-divider {
text-align: center;
margin: 1.25rem 0 0.75rem;
font-size: 0.8rem;
color: var(--text-dim);
}
/* Switch mode button */
.auth-switch {
width: 100%;
padding: 0.6rem;
background: transparent;
border: 1px solid var(--border);
border-radius: 8px;
color: var(--text);
font-family: inherit;
font-size: 0.85rem;
font-weight: 500;
cursor: pointer;
transition: background 0.15s, border-color 0.15s;
}
.auth-switch:hover {
background: var(--bg-hover);
border-color: var(--border-mid);
}
/* Legal */
.auth-legal {
text-align: center;
font-size: 0.7rem;
color: var(--text-dim);
margin-top: 1.5rem;
line-height: 1.55;
}
/* Auth loading spinner (app init) */
.auth-loading {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 1rem;
background: var(--bg);
color: var(--text-mid);
font-size: 0.88rem;
}
.auth-loading-spinner {
width: 26px;
height: 26px;
border: 2.5px solid var(--border);
border-top-color: var(--accent);
border-radius: 50%;
animation: auth-spin 0.7s linear infinite;
}
/* ── Responsive: stack panels on mobile ── */
@media (max-width: 768px) {
.auth-root {
grid-template-columns: 1fr;
}
.auth-left {
padding: 2rem 1.5rem;
}
.auth-headline {
font-size: 1.75rem;
}
.auth-features {
display: none;
}
.auth-left-footer {
display: none;
}
.auth-right {
padding: 2rem 1.5rem;
}
}
/* ── Sidebar user info + logout ──────────────────── */
.app-user-info {
display: flex;
align-items: center;
gap: 0.55rem;
padding: 0.5rem 0.35rem;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--bg-card);
}
.app-user-avatar {
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--accent-soft);
color: var(--accent);
display: grid;
place-items: center;
font-weight: 700;
font-size: 0.78rem;
flex-shrink: 0;
border: 1px solid var(--border);
}
.app-user-details {
min-width: 0;
}
.app-user-email {
font-size: 0.75rem;
color: var(--text-mid);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.logout-btn {
width: 100%;
border: 1px solid var(--border);
border-radius: var(--radius);
background: transparent;
color: var(--text-mid);
padding: 0.4rem 0.55rem;
font-size: 0.78rem;
font-family: inherit;
font-weight: 500;
cursor: pointer;
transition: all var(--fast);
}
.logout-btn:hover {
background: var(--fail-bg);
color: var(--fail);
border-color: var(--fail-bdr);
}
/* ==========================================================================
BILLING MODAL (BYOK)
========================================================================== */
.billing-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(12, 11, 10, 0.85);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
}
.billing-modal-content {
width: 100%;
max-width: 480px;
position: relative;
padding: 2rem !important;
background: linear-gradient(180deg, var(--bg-card) 0%, var(--bg) 100%) !important;
box-shadow: 0 24px 64px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05) !important;
overflow: visible !important;
}
.billing-modal-close {
position: absolute;
top: 1.25rem;
right: 1.25rem;
background: transparent;
border: none;
color: var(--text-dim);
font-size: 1.2rem;
cursor: pointer;
transition: color var(--fast);
padding: 0.2rem;
}
.billing-modal-close:hover {
color: var(--text);
}
.billing-header {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1rem;
}
.billing-icon {
font-size: 1.5rem;
}
.billing-title {
font-size: 1.25rem;
font-weight: 700;
color: var(--text);
margin: 0;
letter-spacing: -0.02em;
}
.billing-sub {
color: var(--text-mid);
font-size: 0.95rem;
line-height: 1.6;
margin-bottom: 2rem;
}
.byok-section {
background: var(--bg);
border: 1px solid var(--border-mid);
border-radius: var(--radius-md);
padding: 1.5rem;
margin-bottom: 1.5rem;
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.1);
}
.byok-title {
font-size: 0.95rem;
font-weight: 600;
color: var(--text);
margin: 0 0 0.5rem 0;
display: flex;
align-items: center;
gap: 0.5rem;
}
.byok-title::before {
content: "πŸ”‘";
font-size: 1rem;
}
.byok-desc {
font-size: 0.82rem;
color: var(--text-dim);
margin: 0 0 1.25rem 0;
line-height: 1.5;
}
.byok-desc strong {
color: var(--text-mid);
font-weight: 600;
}
.byok-input {
width: 100%;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 0.85rem 1rem;
color: var(--text);
font-family: 'Fira Code', monospace;
font-size: 0.9rem;
outline: none;
transition: all var(--fast);
margin-bottom: 1rem;
}
.byok-input:focus {
border-color: var(--accent);
box-shadow: 0 0 0 2px rgba(201, 100, 62, 0.15);
}
.byok-error {
color: var(--fail);
font-size: 0.85rem;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.4rem;
}
.byok-error::before {
content: "βœ•";
font-weight: 700;
}
.byok-submit {
width: 100%;
background: var(--text);
color: var(--bg);
border: none;
padding: 0.85rem;
display: flex;
justify-content: center;
align-items: center;
}
.byok-submit:not(:disabled):hover {
background: #FFF;
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(255, 255, 255, 0.15);
}
.byok-submit:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.billing-footer {
text-align: center;
font-size: 0.85rem;
color: var(--text-dim);
}
.billing-link {
color: var(--accent);
text-decoration: none;
font-weight: 500;
transition: color var(--fast);
}
.billing-link:hover {
text-decoration: underline;
}