:root {
--brand: #0d9488;
--brand-dark: #134e4a;
--brand-light: #14b8a6;
--bg: #ffffff;
--bg-soft: #f8fafc;
--text: #1a1a2e;
--text-muted: #6b7280;
--border: #e5e7eb;
--err: #dc2626;
--err-bg: #fef2f2;
--ok: #16a34a;
--ok-bg: #ecfdf5;
--warn: #d97706;
--warn-bg: #fffbeb;
}
* { box-sizing: border-box; }
html, body {
margin: 0;
padding: 0;
height: 100%;
font-family: 'Poppins', 'Segoe UI', system-ui, sans-serif;
color: var(--text);
background: var(--bg-soft);
font-size: 14px;
}
#header {
height: 56px;
padding: 0 20px;
background: var(--bg);
border-bottom: 1px solid var(--border);
display: flex;
align-items: center;
justify-content: space-between;
position: sticky;
top: 0;
z-index: 20;
}
.header-left {
display: flex;
align-items: center;
gap: 12px;
color: var(--brand);
}
.header-title {
font-weight: 600;
color: var(--text);
}
.header-right {
display: flex;
align-items: center;
gap: 8px;
}
.header-sep {
width: 1px;
height: 24px;
background: var(--border);
margin: 0 4px;
}
.badge {
background: var(--brand);
color: white;
font-size: 11px;
padding: 2px 8px;
border-radius: 10px;
font-weight: 500;
}
.btn {
padding: 6px 12px;
font-size: 13px;
font-family: inherit;
font-weight: 500;
border-radius: 6px;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 6px;
transition: background 120ms, border-color 120ms;
}
.btn:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.btn-outline {
background: var(--bg);
border: 1px solid var(--border);
color: var(--text);
}
.btn-outline:hover:not(:disabled) {
border-color: var(--brand);
color: var(--brand);
}
.btn-outline.active {
border-color: var(--brand);
color: var(--brand);
background: var(--ok-bg);
}
.btn-ghost {
background: transparent;
border: 1px solid transparent;
color: var(--text);
}
.btn-ghost:hover:not(:disabled) {
background: var(--bg-soft);
}
.btn-primary {
background: var(--brand);
border: 1px solid var(--brand);
color: white;
}
.btn-primary:hover:not(:disabled) {
background: var(--brand-dark);
}
.mode-toggle {
display: flex;
border: 1px solid var(--border);
border-radius: 6px;
overflow: hidden;
background: var(--bg);
}
.mode-btn {
padding: 6px 12px;
font-size: 12px;
font-family: inherit;
background: transparent;
border: none;
color: var(--text-muted);
cursor: pointer;
transition: background 120ms, color 120ms;
}
.mode-btn:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.mode-btn:hover:not(:disabled):not(.active) {
background: var(--bg-soft);
color: var(--text);
}
.mode-btn.active {
background: var(--brand);
color: white;
}
.examples-dropdown {
position: relative;
}
.dropdown-menu {
position: absolute;
top: calc(100% + 4px);
right: 0;
width: 320px;
max-height: 420px;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
z-index: 30;
display: flex;
flex-direction: column;
}
.dropdown-menu input {
padding: 10px 12px;
border: none;
border-bottom: 1px solid var(--border);
font-size: 13px;
font-family: inherit;
outline: none;
}
.examples-list {
overflow-y: auto;
flex: 1;
}
.example-item {
padding: 10px 12px;
cursor: pointer;
display: flex;
flex-direction: column;
gap: 2px;
border-bottom: 1px solid var(--border);
}
.example-item:last-child { border-bottom: none; }
.example-item:hover {
background: var(--ok-bg);
}
.example-title {
font-size: 13px;
font-weight: 500;
color: var(--text);
}
.example-meta {
font-size: 11px;
color: var(--text-muted);
}
.empty-state {
padding: 24px 12px;
text-align: center;
color: var(--text-muted);
font-size: 13px;
}
.btn-packing {
opacity: 0.7;
cursor: wait !important;
}
.pack-progress {
position: relative;
width: 160px;
height: 24px;
background: var(--bg-soft);
border: 1px solid var(--border);
border-radius: 12px;
overflow: hidden;
}
.pack-progress-bar {
position: absolute;
top: 0;
left: 0;
height: 100%;
background: linear-gradient(90deg, var(--brand), var(--brand-light));
border-radius: 12px;
transition: width 0.4s ease-out;
}
.pack-progress-text {
position: relative;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
font-size: 10px;
font-weight: 500;
color: var(--text);
padding: 0 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
mix-blend-mode: difference;
filter: invert(1) grayscale(1);
}
.host-select {
padding: 5px 10px;
font-size: 12px;
}
.btn-validate.validate-ok {
background: var(--ok-bg);
border-color: var(--ok);
color: var(--ok);
}
.btn-validate.validate-ok:hover:not(:disabled) {
background: var(--ok);
color: white;
}
.btn-validate.validate-err {
background: var(--err-bg);
border-color: var(--err);
color: var(--err);
}
.btn-validate.validate-err:hover:not(:disabled) {
background: var(--err);
color: white;
}
.btn-next {
padding: 8px 20px;
font-size: 14px;
font-weight: 600;
}
#main {
display: grid;
grid-template-columns: 360px 1fr 320px;
height: calc(100vh - 56px);
}
#main.editor-closed {
grid-template-columns: 360px 1fr;
}
#chat-panel {
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
background: var(--bg);
overflow: hidden;
}
#chat-messages {
flex: 1;
overflow-y: auto;
padding: 16px;
display: flex;
flex-direction: column;
gap: 14px;
}
.msg {
display: flex;
gap: 10px;
}
.msg-avatar {
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--bg-soft);
border: 1px solid var(--border);
color: var(--text-muted);
font-size: 11px;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.msg-user .msg-avatar {
background: var(--brand);
color: white;
border-color: var(--brand);
}
.msg-body {
flex: 1;
background: var(--bg-soft);
border: 1px solid var(--border);
border-radius: 8px;
padding: 10px 12px;
font-size: 13px;
line-height: 1.5;
word-wrap: break-word;
overflow-wrap: break-word;
}
.msg-user .msg-body {
background: var(--ok-bg);
border-color: var(--brand-light);
}
.tool-log {
margin-top: 10px;
border-top: 1px dashed var(--border);
padding-top: 8px;
}
.tool-log-toggle {
background: transparent;
border: none;
color: var(--brand);
font-size: 12px;
font-weight: 500;
cursor: pointer;
padding: 0;
}
.tool-log-body {
margin-top: 8px;
display: flex;
flex-direction: column;
gap: 6px;
}
.tool-call {
border: 1px solid var(--border);
border-radius: 6px;
padding: 8px;
background: var(--bg);
}
.tool-call-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 6px;
}
.tool-badge {
background: var(--ok-bg);
color: var(--brand-dark);
padding: 2px 8px;
border-radius: 10px;
font-size: 11px;
font-weight: 600;
}
.tool-round {
font-size: 11px;
color: var(--text-muted);
}
.tool-call-details {
margin-top: 4px;
font-size: 11px;
}
.tool-call-details summary {
cursor: pointer;
color: var(--text-muted);
padding: 2px 0;
}
.tool-call-details pre {
background: var(--bg-soft);
border: 1px solid var(--border);
border-radius: 4px;
padding: 6px;
margin: 4px 0 0 0;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
overflow-x: auto;
white-space: pre-wrap;
}
#chat-input-row {
padding: 12px 16px;
border-top: 1px solid var(--border);
display: flex;
gap: 8px;
align-items: flex-end;
background: var(--bg);
}
#chat-input-row textarea {
flex: 1;
border: 1px solid var(--border);
border-radius: 6px;
padding: 8px 10px;
font-family: inherit;
font-size: 13px;
resize: vertical;
max-height: 120px;
outline: none;
}
#chat-input-row textarea:focus {
border-color: var(--brand);
}
#preview-panel {
overflow: auto;
background: var(--bg-soft);
padding: 20px;
}
#single-view,
#graph-view,
#demo-view {
height: 100%;
}
#card-container,
#demo-container {
max-width: 600px;
margin: 0 auto;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 8px;
padding: 16px;
min-height: 200px;
}
#graph-canvas {
width: 100%;
height: 100%;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 8px;
}
.demo-toolbar {
display: flex;
justify-content: space-between;
align-items: center;
max-width: 600px;
margin: 0 auto 12px;
padding: 8px 12px;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 8px;
}
.breadcrumb {
display: flex;
align-items: center;
gap: 4px;
font-size: 12px;
color: var(--text-muted);
flex-wrap: wrap;
}
.breadcrumb-item {
cursor: pointer;
padding: 2px 6px;
border-radius: 4px;
transition: background 120ms;
}
.breadcrumb-item:hover {
background: var(--bg-soft);
}
.breadcrumb-item.active {
color: var(--brand);
font-weight: 500;
}
.breadcrumb-arrow {
color: var(--text-muted);
margin: 0 2px;
}
.demo-actions {
display: flex;
gap: 4px;
}
.demo-hint {
max-width: 600px;
margin: 12px auto 0;
text-align: center;
color: var(--text-muted);
font-size: 11px;
font-style: italic;
}
#editor-panel {
border-left: 1px solid var(--border);
background: var(--bg);
display: flex;
flex-direction: column;
overflow: hidden;
}
.editor-header {
padding: 10px 14px;
border-bottom: 1px solid var(--border);
font-size: 12px;
font-weight: 500;
color: var(--text-muted);
display: flex;
justify-content: space-between;
align-items: center;
}
.editor-header-right {
display: flex;
align-items: center;
gap: 6px;
}
.btn-copy-editor {
padding: 3px 6px;
}
.editor-error {
color: var(--err);
font-size: 11px;
font-weight: 500;
}
#json-editor {
flex: 1;
border: none;
padding: 14px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
line-height: 1.5;
resize: none;
outline: none;
background: var(--bg);
}
.validation-drawer {
border-top: 1px solid var(--border);
max-height: 180px;
overflow-y: auto;
background: var(--bg-soft);
}
.validation-header {
padding: 8px 14px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
color: var(--text-muted);
border-bottom: 1px solid var(--border);
}
.validation-issue {
padding: 8px 14px;
font-size: 11px;
border-bottom: 1px solid var(--border);
}
.validation-issue.err { background: var(--err-bg); color: var(--err); }
.validation-issue.warn { background: var(--warn-bg); color: var(--warn); }
.validation-issue .path {
font-family: 'JetBrains Mono', monospace;
font-weight: 500;
display: block;
margin-bottom: 2px;
}
#toast-container {
position: fixed;
bottom: 20px;
right: 20px;
display: flex;
flex-direction: column;
gap: 6px;
z-index: 50;
pointer-events: none;
}
.toast {
background: var(--text);
color: white;
padding: 10px 14px;
border-radius: 6px;
font-size: 12px;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
opacity: 0;
transform: translateY(12px);
transition: opacity 200ms, transform 200ms;
max-width: 360px;
}
.toast.toast-show {
opacity: 1;
transform: translateY(0);
}
.modal-overlay {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
background: rgba(0, 0, 0, 0.4);
z-index: 100;
display: flex;
align-items: center;
justify-content: center;
}
.modal-content {
background: var(--bg);
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0,0,0,0.15);
width: 480px;
max-height: 80vh;
overflow-y: auto;
font-family: 'Poppins', sans-serif;
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px 20px;
border-bottom: 1px solid var(--border);
}
.modal-header h3 {
margin: 0;
font-size: 16px;
font-weight: 600;
color: var(--text);
}
.modal-body {
padding: 16px 20px;
}
.modal-footer {
padding: 12px 20px;
border-top: 1px solid var(--border);
display: flex;
justify-content: flex-end;
gap: 8px;
}
.modal-label {
display: block;
font-size: 12px;
font-weight: 500;
color: var(--text-muted);
margin-bottom: 6px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.modal-input {
width: 100%;
padding: 8px 12px;
border: 1px solid var(--border);
border-radius: 6px;
font-family: inherit;
font-size: 13px;
outline: none;
box-sizing: border-box;
}
.modal-input:focus {
border-color: var(--brand);
}
.modal-info {
margin-top: 8px;
padding: 8px 12px;
background: var(--bg-soft);
border-radius: 6px;
font-size: 12px;
color: var(--text-muted);
}
.modal-toggle-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
font-size: 13px;
}
.modal-toggle-row input[type="checkbox"] {
accent-color: var(--brand);
width: 16px;
height: 16px;
}
.modal-toggle-row label {
cursor: pointer;
color: var(--text);
}
.modal-lang-section {
margin-top: 8px;
padding: 12px;
background: var(--bg-soft);
border-radius: 8px;
border: 1px solid var(--border);
}
.modal-checkbox-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px 8px;
max-height: 200px;
overflow-y: auto;
}
.modal-checkbox-item {
display: flex;
align-items: center;
gap: 6px;
font-size: 12px;
cursor: pointer;
padding: 3px 0;
color: var(--text);
}
.modal-checkbox-item input[type="checkbox"] {
accent-color: var(--brand);
width: 14px;
height: 14px;
}
.modal-hint {
margin-top: 8px;
font-size: 11px;
color: var(--text-muted);
font-style: italic;
}
.pack-modal-progress {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 12px;
}
.pack-modal-bar-track {
flex: 1;
height: 8px;
background: var(--border);
border-radius: 4px;
overflow: hidden;
}
.pack-modal-bar-fill {
height: 100%;
background: linear-gradient(90deg, var(--brand), var(--brand-light));
border-radius: 4px;
transition: width 0.4s ease-out;
}
.pack-modal-pct {
font-size: 13px;
font-weight: 600;
color: var(--brand);
min-width: 36px;
text-align: right;
}
.pack-modal-step {
font-size: 13px;
font-weight: 500;
color: var(--text);
margin-bottom: 12px;
}
.pack-modal-steps-log {
display: flex;
flex-direction: column;
gap: 4px;
}
.pack-step-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 12px;
color: var(--text-muted);
padding: 4px 0;
transition: color 0.3s;
}
.pack-step-item.done {
color: var(--ok);
}
.pack-step-icon {
width: 16px;
text-align: center;
font-size: 12px;
}
.pack-step-item.done .pack-step-icon {
color: var(--ok);
}
.pack-error-msg {
background: var(--err-bg);
border: 1px solid var(--err);
border-radius: 6px;
padding: 10px 12px;
font-size: 12px;
color: var(--err);
word-break: break-word;
margin-top: 8px;
}
@keyframes skeleton-pulse {
0%, 100% { opacity: 0.4; }
50% { opacity: 0.8; }
}
.skeleton-wrap {
display: flex;
flex-direction: column;
gap: 8px;
}
.skeleton-line {
height: 10px;
border-radius: 4px;
background: linear-gradient(90deg, var(--border) 25%, #d5dbe3 50%, var(--border) 75%);
background-size: 200% 100%;
animation: skeleton-pulse 1.5s ease-in-out infinite;
}
.skeleton-line.w-100 { width: 100%; }
.skeleton-line.w-85 { width: 85%; }
.skeleton-line.w-70 { width: 70%; }
.skeleton-line.w-60 { width: 60%; }
.skeleton-line.w-50 { width: 50%; }
.skeleton-line.w-40 { width: 40%; }
.skeleton-line.w-30 { width: 30%; }
.skeleton-tools {
display: flex;
gap: 6px;
margin-top: 6px;
}
.skeleton-pill {
width: 80px;
height: 20px;
border-radius: 10px;
background: linear-gradient(90deg, var(--ok-bg) 25%, #d1fae5 50%, var(--ok-bg) 75%);
background-size: 200% 100%;
animation: skeleton-pulse 1.5s ease-in-out infinite;
}
.skeleton-pill:nth-child(2) { width: 65px; animation-delay: 0.2s; }
.skeleton-pill:nth-child(3) { width: 90px; animation-delay: 0.4s; }
.skeleton-preview {
padding: 20px;
height: 100%;
display: flex;
justify-content: center;
}
.skeleton-card {
max-width: 600px;
width: 100%;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 8px;
padding: 20px;
}
.skeleton-header {
display: flex;
gap: 12px;
align-items: center;
margin-bottom: 12px;
}
.skeleton-circle {
width: 48px;
height: 48px;
border-radius: 50%;
background: linear-gradient(90deg, var(--border) 25%, #d5dbe3 50%, var(--border) 75%);
background-size: 200% 100%;
animation: skeleton-pulse 1.5s ease-in-out infinite;
flex-shrink: 0;
}
.skeleton-header-text {
flex: 1;
display: flex;
flex-direction: column;
gap: 6px;
}
.skeleton-row {
display: flex;
gap: 12px;
}
.skeleton-box {
flex: 1;
height: 36px;
border-radius: 6px;
background: linear-gradient(90deg, var(--border) 25%, #d5dbe3 50%, var(--border) 75%);
background-size: 200% 100%;
animation: skeleton-pulse 1.5s ease-in-out infinite;
}
.skeleton-box:nth-child(2) { animation-delay: 0.3s; }
.skeleton-btn {
flex: 1;
height: 32px;
border-radius: 6px;
background: linear-gradient(90deg, #b2dfdb 25%, #80cbc4 50%, #b2dfdb 75%);
background-size: 200% 100%;
animation: skeleton-pulse 1.5s ease-in-out infinite;
}
.skeleton-btn:nth-child(2) {
flex: 0.6;
background: linear-gradient(90deg, var(--border) 25%, #d5dbe3 50%, var(--border) 75%);
animation-delay: 0.2s;
}
.sessions-dropdown {
position: relative;
}
.sessions-menu {
width: 340px;
max-height: 420px;
display: flex;
flex-direction: column;
padding: 0;
}
.sessions-actions {
display: flex;
gap: 8px;
padding: 10px;
border-bottom: 1px solid var(--border);
}
.sessions-actions .btn {
flex: 1;
justify-content: center;
}
.sessions-list {
overflow-y: auto;
max-height: 300px;
padding: 4px;
}
.session-item {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 10px;
border-radius: 6px;
cursor: pointer;
transition: background 0.15s;
}
.session-item:hover {
background: #f8fafc;
}
.session-item.active {
background: #ecfdf5;
}
.session-item-main {
flex: 1;
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.session-item-title {
font-size: 13px;
font-weight: 500;
color: #1a1a2e;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.session-item-meta {
font-size: 11px;
color: var(--text-muted);
}
.session-delete {
padding: 4px;
color: var(--text-muted);
}
.session-delete:hover {
color: #dc2626;
}
.sessions-footer {
padding: 6px 10px;
border-top: 1px solid var(--border);
min-height: 22px;
}
.sessions-saving {
font-size: 11px;
color: var(--text-muted);
}
.http-editor {
max-width: 640px;
margin: 0 auto;
padding: 20px;
background: #ffffff;
border: 1px solid var(--border);
border-radius: 10px;
display: flex;
flex-direction: column;
gap: 12px;
}
.http-editor-title {
display: flex;
align-items: baseline;
justify-content: space-between;
padding-bottom: 8px;
border-bottom: 1px dashed var(--border);
}
.http-editor-title > span:first-child {
font-weight: 600;
color: #0d9488;
}
.http-editor-id {
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--text-muted);
}
.http-editor-row {
display: flex;
flex-direction: column;
gap: 4px;
}
.http-editor-label {
font-size: 12px;
font-weight: 500;
color: var(--text-muted);
}
.http-editor-input {
width: 100%;
padding: 8px 10px;
border: 1px solid var(--border);
border-radius: 6px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
background: #ffffff;
box-sizing: border-box;
}
.http-editor-input:focus {
outline: none;
border-color: #0d9488;
box-shadow: 0 0 0 3px rgba(13, 148, 136, 0.1);
}
.http-editor-actions {
display: flex;
align-items: center;
gap: 12px;
margin-top: 4px;
}
.http-editor-hint {
font-size: 11px;
color: var(--text-muted);
}
.http-editor-result {
margin-top: 8px;
border: 1px solid var(--border);
border-radius: 6px;
overflow: hidden;
}
.http-editor-result.error {
border-color: #fecaca;
}
.http-editor-result-head {
display: flex;
gap: 12px;
padding: 8px 10px;
background: #f8fafc;
font-size: 12px;
font-weight: 500;
}
.http-editor-status {
color: #0d9488;
}
.http-editor-meta {
color: var(--text-muted);
}
.http-editor-body {
margin: 0;
padding: 10px;
background: #0f172a;
color: #e2e8f0;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
max-height: 260px;
overflow: auto;
white-space: pre-wrap;
word-break: break-word;
}
.http-demo {
max-width: 520px;
margin: 32px auto;
padding: 20px;
border-radius: 10px;
border: 1px solid var(--border);
background: #ffffff;
display: flex;
flex-direction: column;
gap: 10px;
}
.http-demo.done { border-color: #a7f3d0; background: #f0fdfa; }
.http-demo.error { border-color: #fecaca; background: #fef2f2; }
.http-demo.inline {
display: inline-flex;
flex-direction: row;
align-items: center;
gap: 10px;
margin: 40px auto;
padding: 10px 16px;
border-color: #e5e7eb;
background: #f8fafc;
font-size: 12px;
color: var(--text-muted);
}
.http-demo-spinner {
width: 14px;
height: 14px;
border: 2px solid #cbd5e1;
border-top-color: #0d9488;
border-radius: 50%;
animation: http-demo-spin 0.8s linear infinite;
}
@keyframes http-demo-spin {
to { transform: rotate(360deg); }
}
.http-demo-title {
font-weight: 600;
color: #0d9488;
}
.http-demo-url {
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--text-muted);
word-break: break-all;
}
.http-demo-meta,
.http-demo-status {
font-size: 12px;
color: var(--text-muted);
}
.http-demo-body {
margin: 0;
padding: 10px;
background: #0f172a;
color: #e2e8f0;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
max-height: 240px;
overflow: auto;
white-space: pre-wrap;
word-break: break-word;
border-radius: 6px;
}
.http-demo-error {
color: #b91c1c;
font-size: 13px;
}
.msg-text {
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: anywhere;
}
.demo-http-log {
border-top: 1px solid var(--border);
padding: 10px 16px;
max-height: 160px;
overflow-y: auto;
background: #f8fafc;
}
.demo-http-log-title {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 12px;
font-weight: 600;
color: var(--text-muted);
margin-bottom: 8px;
}
.demo-http-log-clear {
font-size: 11px;
padding: 2px 8px;
color: var(--text-muted);
}
.demo-http-log-entry {
display: flex;
align-items: center;
gap: 8px;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
padding: 4px 8px;
border-radius: 4px;
transition: background 0.15s;
}
.demo-http-log-entry:hover { background: #eef2f7; }
.demo-http-log-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex-shrink: 0;
}
.demo-http-log-dot.start {
background: #cbd5e1;
animation: http-demo-spin 0.8s linear infinite;
border-top-color: #0d9488;
border-top: 2px solid #0d9488;
border-radius: 50%;
background: transparent;
width: 10px;
height: 10px;
box-sizing: border-box;
}
.demo-http-log-dot.done { background: #10b981; }
.demo-http-log-dot.error { background: #ef4444; }
.demo-http-log-method {
font-weight: 600;
color: #0f172a;
min-width: 48px;
text-align: right;
}
.demo-http-log-url {
flex: 1;
min-width: 0;
color: #334155;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.demo-http-log-status {
color: var(--text-muted);
flex-shrink: 0;
font-variant-numeric: tabular-nums;
}
.demo-http-log-status.err {
color: #b91c1c;
max-width: 220px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.demo-http-log-entry.done { color: #065f46; }
.demo-http-log-entry.error { color: #991b1b; }
.demo-http-log-entry.start { color: var(--text-muted); }
.hidden { display: none !important; }
.wiz-subtitle {
font-size: 14px;
color: var(--text-muted);
margin-top: 2px;
}
.wiz-step-title {
font-size: 15px;
font-weight: 600;
color: var(--text);
}
.wiz-back-btn {
padding: 4px;
font-size: 16px;
line-height: 1;
}
.wiz-choose-grid {
display: flex;
flex-direction: column;
gap: 12px;
}
.wiz-choose-card {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 16px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg);
cursor: pointer;
text-align: left;
transition: border-color 0.15s, background 0.15s;
width: 100%;
}
.wiz-choose-card:hover {
border-color: var(--brand);
background: color-mix(in srgb, var(--brand) 5%, var(--bg));
}
.wiz-choose-primary {
border-color: var(--brand);
background: color-mix(in srgb, var(--brand) 5%, var(--bg));
}
.wiz-choose-icon {
font-size: 24px;
line-height: 1;
flex-shrink: 0;
}
.wiz-choose-title {
font-size: 14px;
font-weight: 600;
color: var(--text);
margin-bottom: 4px;
}
.wiz-choose-desc {
font-size: 13px;
color: var(--text-muted);
line-height: 1.5;
}
.wiz-default-banner {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 14px;
background: color-mix(in srgb, var(--brand) 8%, var(--bg));
border: 1px solid color-mix(in srgb, var(--brand) 30%, var(--border));
border-radius: 6px;
font-size: 13px;
font-weight: 500;
}
.wiz-check {
color: var(--brand);
font-size: 18px;
font-weight: 700;
flex-shrink: 0;
}
.wiz-channel-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.wiz-channel-item {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 12px;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--bg);
cursor: pointer;
font-size: 13px;
transition: border-color 0.15s, background 0.15s;
position: relative;
}
.wiz-channel-item:hover {
border-color: var(--brand);
background: color-mix(in srgb, var(--brand) 4%, var(--bg));
}
.wiz-channel-item.selected {
border-color: var(--brand);
background: color-mix(in srgb, var(--brand) 8%, var(--bg));
}
.wiz-channel-icon {
font-size: 16px;
flex-shrink: 0;
}
.wiz-channel-label {
flex: 1;
font-weight: 500;
color: var(--text);
}
.wiz-channel-check {
color: var(--brand);
font-weight: 700;
font-size: 14px;
}
.wiz-actions {
display: flex;
justify-content: space-between;
align-items: center;
gap: 8px;
}
.wiz-cloud-grid {
display: flex;
flex-direction: column;
gap: 10px;
}
.wiz-cloud-card {
display: flex;
align-items: center;
gap: 14px;
padding: 14px 16px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg);
cursor: pointer;
text-align: left;
width: 100%;
transition: border-color 0.15s, background 0.15s;
}
.wiz-cloud-card:hover {
border-color: var(--brand);
background: color-mix(in srgb, var(--brand) 5%, var(--bg));
}
.wiz-cloud-badge {
width: 40px;
height: 40px;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
font-weight: 700;
flex-shrink: 0;
}
.wiz-cloud-name {
font-size: 14px;
font-weight: 600;
color: var(--text);
margin-bottom: 2px;
}
.wiz-cloud-desc {
font-size: 12px;
color: var(--text-muted);
}
.wiz-cred-loading,
.wiz-cred-ready,
.wiz-cred-missing {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: 8px;
padding: 8px 0;
}
.wiz-cred-missing .wiz-cred-instructions {
text-align: left;
width: 100%;
}
.wiz-cred-icon {
font-size: 48px;
line-height: 1;
margin-bottom: 4px;
}
.wiz-cred-list {
list-style: none;
padding: 0;
margin: 4px 0;
display: flex;
flex-direction: column;
gap: 4px;
width: 100%;
}
.wiz-cred-item {
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--text-muted);
padding: 4px 8px;
background: var(--bg-soft);
border-radius: 4px;
}
.wiz-cred-item.ok {
color: var(--ok);
background: var(--ok-bg);
}
.wiz-cred-instructions {
font-size: 13px;
color: var(--text-muted);
margin-top: 8px;
width: 100%;
}
.wiz-cred-code {
background: #1e1e2e;
color: #cdd6f4;
border-radius: 6px;
padding: 10px 12px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
margin: 8px 0 0;
overflow-x: auto;
white-space: pre;
line-height: 1.6;
}
.wiz-cred-howto {
margin-top: 14px;
font-size: 13px;
color: var(--text-muted);
line-height: 1.5;
}
.wiz-cred-howto p {
margin: 4px 0;
}
.wiz-cred-howto a {
color: var(--brand);
text-decoration: none;
}
.wiz-cred-howto a:hover {
text-decoration: underline;
}
.wiz-cred-howto code {
background: var(--bg-soft);
padding: 1px 5px;
border-radius: 3px;
font-size: 12px;
}
.wiz-translate-toggle {
display: flex;
gap: 8px;
margin-top: 8px;
}
.wiz-translate-opt {
padding: 8px 20px;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--bg);
cursor: pointer;
font-size: 14px;
font-weight: 500;
color: var(--text-muted);
transition: border-color 0.15s, color 0.15s, background 0.15s;
}
.wiz-translate-opt:hover {
border-color: var(--brand);
color: var(--brand);
}
.wiz-translate-opt.selected {
border-color: var(--brand);
background: color-mix(in srgb, var(--brand) 8%, var(--bg));
color: var(--brand);
font-weight: 600;
}
.wiz-done {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding: 8px 0;
gap: 6px;
}
.wiz-done-icon {
font-size: 48px;
line-height: 1;
margin-bottom: 4px;
}
.wiz-done-title {
font-size: 18px;
font-weight: 600;
color: var(--ok);
}
.wiz-done-subtitle {
font-size: 13px;
color: var(--text-muted);
}
.wiz-done-url {
margin-top: 12px;
width: 100%;
background: var(--bg-soft);
border: 1px solid var(--border);
border-radius: 6px;
padding: 10px 14px;
text-align: left;
}
.wiz-done-url-label {
font-size: 11px;
font-weight: 600;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 4px;
}
.wiz-done-url code {
font-family: 'JetBrains Mono', monospace;
font-size: 13px;
color: var(--brand);
word-break: break-all;
}
.wiz-done-filename {
font-family: 'JetBrains Mono', monospace;
font-size: 14px;
font-weight: 600;
color: var(--brand);
margin: 4px 0;
}
.wiz-done-btn {
width: 100%;
justify-content: center;
text-align: center;
text-decoration: none;
}