:root { font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --bg: #f4f7fc; --bg-elevated: rgba(255, 255, 255, 0.72); --bg-grid: rgba(10, 34, 66, 0.05); --bg-glow: rgba(0, 102, 255, 0.14); --sidebar: #ffffff; --panel: #ffffff; --panel-strong: #ffffff; --panel-muted: #f3f7fd; --panel-soft: rgba(255, 255, 255, 0.86); --text: #101827; --text-muted: #64748b; --text-soft: #94a3b8; --border: rgba(15, 23, 42, 0.08); --border-strong: rgba(15, 23, 42, 0.14); --accent: #0066ff; --accent-strong: #0052cc; --accent-soft: rgba(0, 102, 255, 0.1); --accent-softer: rgba(0, 102, 255, 0.05); --success: #20a468; --success-soft: rgba(32, 164, 104, 0.14); --danger: #d94b5c; --danger-soft: rgba(217, 75, 92, 0.14); --warning: #f59e0b; --warning-soft: rgba(245, 158, 11, 0.14); --code-bg: #081425; --code-text: #dce9ff; --shadow-sm: 0 14px 32px rgba(15, 23, 42, 0.08); --shadow-md: 0 24px 64px rgba(20, 33, 61, 0.1); --shadow-lg: 0 34px 90px rgba(0, 55, 153, 0.14); } html[data-theme='dark'] { --bg: #07101d; --bg-elevated: rgba(8, 16, 30, 0.84); --bg-grid: rgba(115, 165, 255, 0.08); --bg-glow: rgba(47, 132, 255, 0.24); --sidebar: rgba(9, 17, 31, 0.92); --panel: rgba(13, 25, 43, 0.9); --panel-strong: #0f1d32; --panel-muted: #12253f; --panel-soft: rgba(15, 29, 50, 0.88); --text: #f5f9ff; --text-muted: #9aa8c0; --text-soft: #6f809d; --border: rgba(136, 165, 209, 0.16); --border-strong: rgba(170, 196, 236, 0.22); --accent: #49a1ff; --accent-strong: #81b9ff; --accent-soft: rgba(73, 161, 255, 0.18); --accent-softer: rgba(73, 161, 255, 0.1); --success: #53d18e; --success-soft: rgba(83, 209, 142, 0.18); --danger: #ff7c88; --danger-soft: rgba(255, 124, 136, 0.18); --warning: #ffb347; --warning-soft: rgba(255, 179, 71, 0.2); --code-bg: #040c18; --code-text: #d7e7ff; --shadow-sm: 0 16px 34px rgba(0, 0, 0, 0.22); --shadow-md: 0 24px 60px rgba(0, 0, 0, 0.28); --shadow-lg: 0 38px 100px rgba(0, 0, 0, 0.34); } * { box-sizing: border-box; } html, body, #root { min-height: 100vh; } html { background: var(--bg); } body { margin: 0; color: var(--text); line-height: 1.5; background: radial-gradient(circle at top left, var(--bg-glow), transparent 24%), radial-gradient(circle at right top, rgba(32, 164, 104, 0.08), transparent 18%), linear-gradient(var(--bg-grid) 1px, transparent 1px), linear-gradient(90deg, var(--bg-grid) 1px, transparent 1px), var(--bg); background-size: auto, auto, 28px 28px, 28px 28px, auto; } body::before { content: ''; position: fixed; inset: 0; pointer-events: none; background: linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 18%); opacity: 0.7; } html[data-theme='dark'] body::before { background: linear-gradient(180deg, rgba(125, 176, 255, 0.08), transparent 24%); opacity: 1; } a { color: inherit; } button, input, textarea, select { font: inherit; } button, input, textarea, select { transition: border-color 160ms ease, background 160ms ease, color 160ms ease, box-shadow 160ms ease, transform 160ms ease, opacity 160ms ease; } button { display: inline-flex; align-items: center; justify-content: center; gap: 0.45rem; min-height: 44px; padding: 0.78rem 1rem; border: 1px solid var(--border); border-radius: 16px; background: var(--panel-soft); color: var(--text); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.45); cursor: pointer; } html[data-theme='dark'] button { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); } button:hover { border-color: var(--accent); background: color-mix(in srgb, var(--panel-soft) 86%, var(--accent-soft)); box-shadow: var(--shadow-sm); transform: translateY(-2px); } button.primary { border-color: transparent; background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #ffffff; box-shadow: 0 18px 34px rgba(0, 102, 255, 0.22); } html[data-theme='dark'] button.primary { box-shadow: 0 20px 38px rgba(30, 112, 255, 0.28); } button:disabled { opacity: 0.65; cursor: default; transform: none; } input[type='text'], textarea, select { width: 100%; min-height: 46px; padding: 0.8rem 0.95rem; border: 1px solid var(--border); border-radius: 16px; background: var(--panel-strong); color: var(--text); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4); } html[data-theme='dark'] input[type='text'], html[data-theme='dark'] textarea, html[data-theme='dark'] select { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03); } input[type='text']::placeholder, textarea::placeholder { color: var(--text-soft); } input[type='text']:focus, textarea:focus, select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 4px var(--accent-soft); } input[type='checkbox'] { accent-color: var(--accent); } textarea { min-height: 7rem; resize: vertical; } code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace; } label { display: grid; gap: 0.5rem; min-width: 0; } label > span:first-child { font-size: 0.92rem; font-weight: 600; color: var(--text); } strong, h1, h2, h3, h4 { letter-spacing: -0.02em; } .app-shell { display: grid; grid-template-columns: 224px minmax(0, 1fr); min-height: 100vh; } .sidebar { position: sticky; top: 0; display: flex; flex-direction: column; gap: 0.8rem; min-height: 100vh; padding: 1rem; border-right: 1px solid var(--border); background: var(--sidebar); box-shadow: 22px 0 50px rgba(15, 23, 42, 0.04); backdrop-filter: blur(18px); } html[data-theme='dark'] .sidebar { box-shadow: 24px 0 60px rgba(0, 0, 0, 0.2); } .sidebar-brand, .panel, .subpanel { border: 1px solid var(--border); border-radius: 24px; background: var(--panel); box-shadow: var(--shadow-md); } .sidebar-brand { position: relative; display: grid; gap: 0.55rem; padding: 1rem; overflow: hidden; } .sidebar-brand::after { content: ''; position: absolute; inset: auto -20% -40% auto; width: 180px; height: 180px; border-radius: 999px; background: radial-gradient(circle, var(--accent-soft), transparent 68%); pointer-events: none; } .sidebar-brand-line { width: 42px; height: 4px; border-radius: 999px; background: linear-gradient(90deg, var(--accent), var(--accent-strong)); } .brand-meta { display: flex; flex-wrap: wrap; gap: 0.45rem; } .eyebrow, .meta-label, .stat-label, dt { margin: 0; font-size: 0.76rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); } .sidebar-brand h1, .panel h3, .subpanel h4 { margin: 0; } .sidebar-brand h1 { font-size: 1.1rem; } .subtle { margin: 0; color: var(--text-muted); line-height: 1.6; } .small-text { font-size: 0.9rem; } .nav-list { display: grid; gap: 0.45rem; } .nav-item { position: relative; display: flex; align-items: center; min-height: 42px; justify-items: start; text-align: left; padding: 0.7rem 0.85rem 0.7rem 1rem; border-radius: 14px; border-color: transparent; background: transparent; box-shadow: none; } .nav-item:hover { background: var(--accent-softer); } .nav-item::before { content: ''; position: absolute; inset: 10px auto 10px 0; width: 3px; border-radius: 999px; background: transparent; } .nav-item.active { background: linear-gradient(135deg, var(--accent-soft), rgba(255, 255, 255, 0.3)); border-color: var(--border); box-shadow: var(--shadow-sm); } .nav-item.active::before { background: linear-gradient(180deg, var(--accent), var(--accent-strong)); } html[data-theme='dark'] .nav-item.active { background: #ffffff; color: #08111f; border-color: transparent; } html[data-theme='dark'] .nav-item.active .nav-title { color: #08111f; } .nav-title { font-weight: 700; font-size: 0.92rem; width: 100%; } .panel-header, .toolbar, .item-heading, .subpanel-header, .list-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .panel-header, .subpanel-header { margin-bottom: 1.1rem; } .stack, .stack-blocks, .issue-stack, .target-list { display: grid; gap: 0.85rem; } .issue-card, .target-card, .item-card, .stat-card, .inline-meta { border: 1px solid var(--border); border-radius: 18px; background: var(--panel-muted); } .workspace { display: flex; flex-direction: column; gap: 1.15rem; min-width: 0; padding: 1.5rem; } .tab-layout { display: grid; gap: 1rem; align-content: start; } .overview-layout { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sync-layout, .trace-layout, .settings-layout { grid-template-columns: repeat(2, minmax(0, 1fr)); } .trace-layout { grid-template-columns: minmax(300px, 0.78fr) minmax(0, 1.22fr); } .settings-layout { grid-template-columns: minmax(0, 1.7fr) minmax(280px, 0.85fr); align-items: start; } .panel { padding: 1.3rem; min-width: 0; background: var(--panel); overflow: hidden; } .panel-fill { min-height: calc(100vh - 13rem); } .panel-full { grid-column: 1 / -1; } .trace-list-panel { min-width: 0; } .trace-list { display: grid; gap: 0.85rem; max-height: calc(100vh - 18rem); overflow: auto; padding-right: 0.2rem; } .trace-row { display: grid; gap: 0.7rem; width: 100%; padding: 1rem; border-radius: 18px; text-align: left; background: var(--panel-muted); } .trace-row.active { border-color: var(--accent); box-shadow: var(--shadow-sm); } .trace-row-top, .trace-row-summary { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .trace-row-summary { color: var(--text-muted); font-size: 0.9rem; } .trace-hero { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.85rem; } .trace-hero > div, .chain-card, .trace-detail-block { padding: 0.95rem; border: 1px solid var(--border); border-radius: 18px; background: var(--panel-muted); } .trace-hero > div { display: grid; gap: 0.35rem; } .chain-list { display: grid; gap: 0.8rem; } .chain-card { display: grid; gap: 0.8rem; } .trace-pill-warn { background: var(--warning-soft); color: var(--warning); } .compact-header { margin-bottom: 0; } .stats-grid, .action-grid, .info-grid, .item-grid { display: grid; gap: 0.9rem; } .stats-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } .action-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .card-grid-list { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; } .info-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .item-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .stat-card { position: relative; overflow: hidden; padding: 1rem; } .stat-card::after { content: ''; position: absolute; top: 14px; right: 14px; width: 38px; height: 38px; border-radius: 12px; background: linear-gradient(135deg, var(--accent-soft), transparent); } .stat-value { display: block; margin-top: 0.45rem; font-size: 1.65rem; font-weight: 800; } .badge { display: inline-flex; align-items: center; justify-content: center; width: fit-content; min-height: 32px; padding: 0.36rem 0.7rem; border-radius: 999px; border: 1px solid transparent; background: var(--accent-soft); color: var(--accent-strong); font-size: 0.78rem; font-weight: 700; letter-spacing: 0.02em; } html[data-theme='dark'] .badge { color: var(--accent); } .badge.outline { background: transparent; border-color: var(--border-strong); color: var(--text-muted); } .badge.live { background: var(--success-soft); color: var(--success); } .badge.idle { background: rgba(148, 163, 184, 0.14); color: var(--text-muted); } button.danger { border-color: transparent; background: linear-gradient(135deg, var(--danger), color-mix(in srgb, var(--danger) 78%, #31090d)); color: #ffffff; box-shadow: 0 18px 34px color-mix(in srgb, var(--danger) 28%, transparent); } button.danger:hover { border-color: transparent; background: linear-gradient(135deg, color-mix(in srgb, var(--danger) 92%, #ffffff), var(--danger)); } button.ghost-danger { border-color: color-mix(in srgb, var(--danger) 26%, transparent); background: var(--danger-soft); color: var(--danger); box-shadow: none; } button.ghost-danger:hover { border-color: var(--danger); background: color-mix(in srgb, var(--danger-soft) 86%, white); } html[data-theme='dark'] button.ghost-danger:hover { background: color-mix(in srgb, var(--danger-soft) 86%, black); } .subpanel { padding: 1.05rem; background: var(--panel-soft); } .split-view { display: grid; grid-template-columns: minmax(330px, 420px) minmax(0, 1fr); gap: 1rem; align-items: start; } .providers-layout, .aliases-layout { grid-template-columns: minmax(360px, 0.92fr) minmax(0, 1.08fr); } .editor-column, .list-column { min-width: 0; } .list-column { display: grid; gap: 1rem; } .list-toolbar { padding: 0.1rem 0; } .list-toolbar > label, .stack label { display: grid; gap: 0.45rem; } .list-toolbar > label { flex: 1; } .list-toolbar-single { justify-content: stretch; } .scroll-list { display: grid; gap: 0.9rem; max-height: calc(100vh - 18rem); padding-right: 0.25rem; overflow: auto; } .compact-list { gap: 0.7rem; } .compact-row { display: grid; gap: 0.75rem; width: 100%; padding: 0.9rem 1rem; border: 1px solid var(--border); border-radius: 18px; background: var(--panel-muted); text-align: left; box-shadow: none; } .compact-row:hover, .compact-row.active { border-color: var(--accent); box-shadow: var(--shadow-sm); transform: translateY(-1px); } .compact-row-main, .compact-row-summary { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; } .compact-row-titleblock { display: grid; gap: 0.15rem; min-width: 0; } .compact-row-titleblock code, .compact-row-summary span { color: var(--text-muted); } .compact-row-titleblock strong, .compact-row-titleblock code, .compact-row-summary span { min-width: 0; overflow-wrap: anywhere; word-break: break-word; } .compact-row-summary-grid { display: grid; grid-template-columns: minmax(0, 1.5fr) repeat(2, minmax(110px, auto)); align-items: center; font-size: 0.88rem; } .detail-panel { display: grid; align-content: start; } .compact-inline-meta { align-items: flex-start; } .compact-inline-meta > div { display: grid; gap: 0.3rem; min-width: 0; } .scroll-list::-webkit-scrollbar { width: 10px; } .scroll-list::-webkit-scrollbar-thumb { border: 2px solid transparent; border-radius: 999px; background: var(--border-strong); background-clip: padding-box; } .item-card { display: grid; gap: 1rem; padding: 1.05rem; transition: border-color 160ms ease, background 160ms ease, box-shadow 160ms ease, transform 160ms ease; } .item-card:hover { border-color: var(--border-strong); box-shadow: var(--shadow-sm); transform: translateY(-2px); } .item-heading { align-items: flex-start; } .item-heading-main { display: grid; gap: 0.2rem; min-width: 0; } .item-heading code { display: block; margin-top: 0.2rem; color: var(--text-muted); } .item-summary { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.7rem 0.85rem; border: 1px solid var(--border); border-radius: 14px; background: var(--panel-muted); color: var(--text-muted); font-size: 0.88rem; } .inline-pills { display: flex; flex-wrap: wrap; gap: 0.5rem; } .pill { display: inline-flex; align-items: center; min-height: 28px; padding: 0.25rem 0.65rem; border: 1px solid var(--border); border-radius: 999px; background: var(--panel-muted); color: var(--text-muted); font-size: 0.78rem; font-weight: 600; } .card-actions { display: flex; align-items: center; justify-content: space-between; gap: 0.8rem; } .toolbar-end { justify-content: flex-end; } .item-grid > div, .info-grid > div { display: grid; gap: 0.35rem; min-width: 0; } .info-grid-single { grid-template-columns: minmax(0, 1fr); } .item-grid code, .item-grid span, dd { font-weight: 600; word-break: break-word; } .target-card { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.9rem 0.95rem; transition: border-color 160ms ease, background 160ms ease, box-shadow 160ms ease, transform 160ms ease; } .target-card:hover { border-color: var(--border-strong); box-shadow: var(--shadow-sm); transform: translateY(-1px); } .target-card-main { display: flex; align-items: center; gap: 0.7rem; min-width: 0; } .target-list-compact { gap: 0.7rem; } .checkbox-row { display: flex !important; align-items: center; gap: 0.7rem; min-height: 48px; padding: 0.85rem 0.95rem; border: 1px solid var(--border); border-radius: 16px; background: var(--panel-muted); transition: border-color 160ms ease, background 160ms ease, box-shadow 160ms ease; } .checkbox-row:hover { border-color: var(--border-strong); box-shadow: var(--shadow-sm); } .checkbox-row input { width: auto; flex: 0 0 auto; } .checkbox-row span { font-weight: 600; } .inline-meta { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.85rem 0.95rem; } .config-path-meta { align-items: flex-start; } .config-path-meta strong, .path-value { min-width: 0; overflow-wrap: anywhere; word-break: break-all; } .settings-main-panel { min-width: 0; } .settings-side-panel { position: sticky; top: 1.5rem; align-self: start; } .settings-status { max-width: 22rem; text-align: right; overflow-wrap: anywhere; } .settings-about-grid dd { color: var(--text); } .settings-layout .subpanel + .subpanel { margin-top: 0.25rem; } .settings-layout .subpanel-header { margin-bottom: 1.25rem; } .settings-layout .toolbar:last-child { padding-top: 0.25rem; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } input[type='file'] { width: 100%; min-width: 0; color: var(--text-muted); } input[type='file']::file-selector-button { margin-right: 0.85rem; padding: 0.6rem 0.9rem; border: 1px solid var(--border); border-radius: 12px; background: var(--panel-muted); color: var(--text); cursor: pointer; } .mode-switch { display: inline-flex; gap: 0.5rem; flex-wrap: wrap; } .mode-switch button { min-height: 38px; padding: 0.55rem 0.85rem; } .mode-switch .active-toggle { border-color: transparent; background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #ffffff; } .modal-backdrop { position: fixed; inset: 0; z-index: 30; display: flex; align-items: center; justify-content: center; padding: 1.5rem; background: rgba(7, 16, 29, 0.42); backdrop-filter: blur(12px); } .modal-card { width: min(100%, 680px); max-height: calc(100vh - 3rem); overflow: auto; padding: 1.15rem; border: 1px solid var(--border-strong); border-radius: 24px; background: var(--panel); box-shadow: var(--shadow-lg); } .modal-card-confirm { width: min(100%, 460px); display: grid; gap: 1rem; } .confirm-icon { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 14px; background: var(--danger-soft); color: var(--danger); font-weight: 800; font-size: 1.1rem; } .empty-card { display: grid; gap: 0.8rem; padding: 1.2rem; border: 1px dashed var(--border-strong); border-radius: 22px; background: linear-gradient(135deg, var(--panel-soft), var(--panel-muted)); min-height: 220px; align-content: center; } .compact-empty { min-height: 180px; } .empty-kicker { font-size: 0.76rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-muted); } .empty-card h4 { margin: 0; font-size: 1.15rem; } .details-toggle summary { cursor: pointer; color: var(--text-muted); } .details { margin: 0.85rem 0 0; padding: 1rem; border: 1px solid var(--border); border-radius: 18px; background: var(--code-bg); color: var(--code-text); overflow: auto; white-space: pre-wrap; word-break: break-word; } .details-toggle[open] summary { margin-bottom: 0.2rem; } .issue-card { padding: 0.9rem 1rem; } .tone-error { color: var(--danger); } .tone-ok { color: var(--success); } dt { margin-bottom: 0.3rem; } dd { margin: 0; } .toolbar { flex-wrap: wrap; gap: 0.8rem; } .toolbar > * { flex-shrink: 0; } @media (max-width: 1240px) { .app-shell { grid-template-columns: 1fr; } .sidebar { position: static; min-height: auto; border-right: 0; border-bottom: 1px solid var(--border); } .nav-list { grid-template-columns: repeat(4, minmax(0, 1fr)); } .overview-layout, .sync-layout, .trace-layout, .providers-layout, .aliases-layout, .stats-grid, .card-grid-list, .info-grid, .item-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .settings-layout { grid-template-columns: minmax(0, 1fr); } .settings-side-panel { position: static; } } @media (max-width: 900px) { .workspace, .sidebar { padding: 1rem; } .panel-header, .toolbar, .card-actions, .subpanel-header, .list-toolbar, .target-card, .target-card-main, .item-heading, .item-summary, .compact-row-main, .inline-meta { flex-direction: column; align-items: stretch; } .settings-status { max-width: none; text-align: left; } .nav-list, .overview-layout, .sync-layout, .trace-layout, .settings-layout, .stats-grid, .card-grid-list, .info-grid, .item-grid, .action-grid, .split-view, .compact-row-summary-grid { grid-template-columns: 1fr; } .scroll-list { max-height: none; overflow: visible; } .panel-fill { min-height: auto; } .trace-row-top, .trace-row-summary { flex-direction: column; align-items: stretch; } } @media (max-width: 640px) { .sidebar-brand, .panel, .subpanel { border-radius: 20px; } .nav-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } .brand-meta { flex-direction: column; align-items: flex-start; } .panel, .subpanel { padding: 1rem; } }