| |
| |
| |
| |
| |
|
|
| |
| .auth-shell { |
| min-height: 100vh; |
| min-height: 100svh; |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| justify-content: center; |
| justify-content: safe center; |
| |
| padding: clamp(5.5rem, 14vh, 7rem) var(--gut) calc(var(--gut) * 1.5); |
| position: relative; |
| z-index: 1; |
| } |
|
|
| |
| .auth-glow { |
| position: absolute; |
| width: 60vmin; |
| height: 60vmin; |
| background: radial-gradient(circle, |
| rgba(255, 143, 171, 0.35) 0%, |
| rgba(255, 143, 171, 0.10) 45%, |
| transparent 72%); |
| border-radius: 50%; |
| filter: blur(40px); |
| z-index: -1; |
| top: 50%; |
| left: 50%; |
| transform: translate(-50%, -50%); |
| pointer-events: none; |
| animation: glow-breathe 6s var(--ease-flow) infinite alternate; |
| } |
| @keyframes glow-breathe { |
| from { transform: translate(-50%, -50%) scale(0.92); opacity: 0.7; } |
| to { transform: translate(-50%, -50%) scale(1.08); opacity: 1; } |
| } |
|
|
| |
| .auth-card { |
| width: 100%; |
| max-width: 460px; |
| background: var(--panel); |
| backdrop-filter: blur(24px) saturate(140%); |
| -webkit-backdrop-filter: blur(24px) saturate(140%); |
| border: 1px solid var(--panel-border); |
| border-radius: var(--radius-card); |
| padding: clamp(2rem, 5vw, 3rem); |
| box-shadow: |
| 0 30px 60px -20px rgba(61, 44, 78, 0.28), |
| 0 8px 20px -8px rgba(255, 143, 171, 0.22); |
| position: relative; |
| animation: card-rise 0.8s var(--ease-soft) both; |
| } |
| @keyframes card-rise { |
| from { opacity: 0; transform: translateY(24px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
|
|
| |
| .auth-mascot { |
| width: 120px; |
| margin: 0 auto -10px; |
| display: block; |
| animation: mascot-bob 5s var(--ease-flow) infinite alternate; |
| } |
| @keyframes mascot-bob { |
| from { transform: translateY(0); } |
| to { transform: translateY(-8px); } |
| } |
|
|
| |
| .auth-card h1 { |
| font-family: var(--font-display); |
| font-size: var(--step-h3); |
| font-weight: 700; |
| color: var(--ink); |
| text-align: center; |
| margin: 0 0 0.5rem; |
| line-height: 1.15; |
| } |
| .auth-sub { |
| text-align: center; |
| color: var(--ink-soft); |
| font-size: var(--step-body); |
| margin: 0 0 2rem; |
| line-height: 1.6; |
| max-width: 34ch; |
| margin-left: auto; |
| margin-right: auto; |
| } |
|
|
| |
| .field { |
| margin-bottom: 1.25rem; |
| } |
| .field > label { |
| display: block; |
| font-size: var(--step-small); |
| font-weight: 700; |
| color: var(--ink-soft); |
| margin-bottom: 0.5rem; |
| letter-spacing: 0.02em; |
| } |
| .input-wrap { |
| position: relative; |
| display: flex; |
| align-items: center; |
| } |
| .input-wrap input, |
| .input-wrap textarea, |
| .input-wrap select { |
| width: 100%; |
| min-height: 52px; |
| padding: 0.85rem 1rem; |
| padding-right: 3rem; |
| font-family: var(--font-body); |
| font-size: var(--step-body); |
| color: var(--ink); |
| background: rgba(255, 255, 255, 0.55); |
| border: 1.5px solid var(--panel-border); |
| border-radius: 14px; |
| outline: none; |
| transition: border-color var(--dur-fast) var(--ease-gentle), |
| box-shadow var(--dur-fast) var(--ease-gentle), |
| background var(--dur-fast) var(--ease-gentle); |
| } |
| .input-wrap input::placeholder, |
| .input-wrap textarea::placeholder { |
| color: rgba(107, 90, 126, 0.5); |
| } |
| .input-wrap input:focus, |
| .input-wrap textarea:focus, |
| .input-wrap select:focus { |
| border-color: var(--rose); |
| background: rgba(255, 255, 255, 0.8); |
| box-shadow: 0 0 0 4px rgba(255, 143, 171, 0.18); |
| } |
| .input-wrap textarea { |
| min-height: 120px; |
| resize: vertical; |
| padding-right: 1rem; |
| line-height: 1.6; |
| } |
| .input-wrap select { |
| appearance: none; |
| -webkit-appearance: none; |
| cursor: pointer; |
| padding-right: 2.5rem; |
| background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='none' stroke='%236B5A7E' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E"); |
| background-repeat: no-repeat; |
| background-position: right 1rem center; |
| } |
|
|
| |
| .eye-toggle { |
| position: absolute; |
| right: 0.5rem; |
| background: transparent; |
| border: none; |
| cursor: pointer; |
| padding: 0.5rem; |
| color: var(--ink-soft); |
| border-radius: 10px; |
| display: grid; |
| place-items: center; |
| transition: color var(--dur-fast) var(--ease-gentle), |
| background var(--dur-fast) var(--ease-gentle); |
| } |
| .eye-toggle:hover { |
| color: var(--rose); |
| background: rgba(255, 143, 171, 0.12); |
| } |
| .eye-toggle svg { |
| width: 20px; |
| height: 20px; |
| } |
|
|
| |
| .field-error { |
| color: var(--rose-deep); |
| font-size: var(--step-small); |
| font-weight: 600; |
| margin-top: 0.5rem; |
| min-height: 1.25rem; |
| display: flex; |
| align-items: center; |
| gap: 0.4rem; |
| opacity: 0; |
| transform: translateY(-4px); |
| transition: opacity var(--dur-fast) var(--ease-soft), |
| transform var(--dur-fast) var(--ease-soft); |
| } |
| .field-error.is-visible { |
| opacity: 1; |
| transform: translateY(0); |
| animation: shake 0.4s var(--ease-gentle); |
| } |
| @keyframes shake { |
| 0%, 100% { transform: translateX(0); } |
| 25% { transform: translateX(-5px); } |
| 75% { transform: translateX(5px); } |
| } |
|
|
| |
| .auth-submit { |
| width: 100%; |
| min-height: 54px; |
| margin-top: 0.5rem; |
| font-family: var(--font-display); |
| font-size: 1.05rem; |
| font-weight: 700; |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| gap: 0.6rem; |
| } |
| .auth-submit .spinner { |
| width: 18px; |
| height: 18px; |
| border: 2.5px solid rgba(255, 255, 255, 0.5); |
| border-top-color: #fff; |
| border-radius: 50%; |
| animation: spin 0.7s linear infinite; |
| display: none; |
| } |
| .auth-submit.is-loading .spinner { display: block; } |
| .auth-submit.is-loading .label { opacity: 0.7; } |
| .auth-submit.is-loading { pointer-events: none; } |
| @keyframes spin { to { transform: rotate(360deg); } } |
|
|
| |
| .auth-helpers { |
| margin-top: 1.5rem; |
| text-align: center; |
| font-size: var(--step-small); |
| color: var(--ink-soft); |
| } |
| .auth-helpers a { |
| color: var(--rose-deep); |
| text-decoration: none; |
| font-weight: 700; |
| transition: color var(--dur-fast) var(--ease-gentle); |
| } |
| .auth-helpers a:hover { color: var(--rose); } |
|
|
| |
| |
| |
| .dash-shell { |
| max-width: var(--maxw); |
| margin: 0 auto; |
| padding: clamp(5rem, 10vw, 7rem) var(--gut) var(--space-section); |
| position: relative; |
| z-index: 1; |
| } |
| .dash-head { |
| display: flex; |
| align-items: flex-end; |
| justify-content: space-between; |
| gap: 1.5rem; |
| flex-wrap: wrap; |
| margin-bottom: 2.5rem; |
| } |
| .dash-head h1 { |
| font-family: var(--font-display); |
| font-size: var(--step-h2); |
| font-weight: 700; |
| color: var(--ink); |
| margin: 0 0 0.4rem; |
| line-height: 1.1; |
| } |
| .dash-head p { |
| color: var(--ink-soft); |
| margin: 0; |
| font-size: var(--step-body); |
| } |
| .dash-head .endpoint-mini { |
| font-family: 'JetBrains Mono', monospace; |
| font-size: var(--step-mono); |
| background: var(--panel); |
| border: 1px solid var(--panel-border); |
| padding: 0.4rem 0.8rem; |
| border-radius: var(--radius-pill); |
| color: var(--ink-soft); |
| margin-top: 0.6rem; |
| display: inline-block; |
| } |
|
|
| |
| .stats-row { |
| display: grid; |
| grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); |
| gap: 1rem; |
| margin-bottom: 2.5rem; |
| } |
| .stat-card { |
| background: var(--panel); |
| backdrop-filter: blur(20px); |
| -webkit-backdrop-filter: blur(20px); |
| border: 1px solid var(--panel-border); |
| border-radius: var(--radius-card); |
| padding: 1.5rem; |
| display: flex; |
| flex-direction: column; |
| gap: 0.4rem; |
| transition: transform var(--dur) var(--ease-soft), |
| box-shadow var(--dur) var(--ease-soft); |
| } |
| .stat-card:hover { |
| transform: translateY(-4px); |
| box-shadow: 0 16px 30px -14px rgba(61, 44, 78, 0.25); |
| } |
| .stat-card .stat-icon { |
| width: 30px; |
| height: 30px; |
| color: var(--rose); |
| margin-bottom: 0.3rem; |
| } |
| .stat-card .stat-num { |
| font-family: var(--font-display); |
| font-size: clamp(1.8rem, 4vw, 2.6rem); |
| font-weight: 700; |
| color: var(--ink); |
| line-height: 1; |
| } |
| .stat-card .stat-label { |
| font-size: var(--step-small); |
| color: var(--ink-soft); |
| font-weight: 600; |
| letter-spacing: 0.04em; |
| text-transform: uppercase; |
| } |
| .stat-card.is-good .stat-num { color: #5BB89E; } |
| .stat-card.is-warn .stat-num { color: var(--rose-deep); } |
|
|
| |
| .dash-section { |
| margin-top: 2.5rem; |
| } |
| .dash-section > h2 { |
| font-family: var(--font-display); |
| font-size: var(--step-h3); |
| font-weight: 700; |
| color: var(--ink); |
| margin: 0 0 1.25rem; |
| } |
|
|
| |
| .model-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); |
| gap: 0.75rem; |
| } |
| .model-chip { |
| background: var(--panel); |
| border: 1px solid var(--panel-border); |
| border-radius: 16px; |
| padding: 0.85rem 1rem; |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 0.75rem; |
| transition: transform var(--dur-fast) var(--ease-soft), |
| border-color var(--dur-fast) var(--ease-soft); |
| } |
| .model-chip:hover { |
| transform: translateY(-2px); |
| border-color: var(--rose); |
| } |
| .model-chip .mc-name { |
| font-family: 'JetBrains Mono', monospace; |
| font-size: var(--step-mono); |
| color: var(--ink); |
| font-weight: 600; |
| word-break: break-all; |
| } |
| .model-chip .mc-badge { |
| flex-shrink: 0; |
| font-size: 0.7rem; |
| font-weight: 700; |
| padding: 0.25rem 0.55rem; |
| border-radius: var(--radius-pill); |
| background: rgba(255, 143, 171, 0.16); |
| color: var(--rose-deep); |
| white-space: nowrap; |
| } |
| .model-chip.is-anthropic .mc-badge { |
| background: rgba(157, 170, 242, 0.22); |
| color: #6B7AD6; |
| } |
|
|
| |
| .playground { |
| background: var(--panel); |
| backdrop-filter: blur(20px); |
| -webkit-backdrop-filter: blur(20px); |
| border: 1px solid var(--panel-border); |
| border-radius: var(--radius-card); |
| padding: clamp(1.25rem, 3vw, 2rem); |
| } |
| .pg-row { |
| display: grid; |
| grid-template-columns: 1fr; |
| gap: 1rem; |
| margin-bottom: 1rem; |
| } |
| @media (min-width: 640px) { |
| .pg-row.split { grid-template-columns: 1fr 1fr; } |
| } |
| .pg-actions { |
| display: flex; |
| gap: 0.75rem; |
| align-items: center; |
| flex-wrap: wrap; |
| } |
| .pg-status { |
| font-size: var(--step-small); |
| color: var(--ink-soft); |
| font-weight: 600; |
| } |
| .pg-status.is-error { color: var(--rose-deep); } |
| .pg-status.is-ok { color: #5BB89E; } |
| .pg-output { |
| margin-top: 1.25rem; |
| min-height: 140px; |
| max-height: 420px; |
| overflow-y: auto; |
| background: rgba(255, 255, 255, 0.5); |
| border: 1px dashed var(--panel-border); |
| border-radius: 14px; |
| padding: 1rem; |
| font-family: 'JetBrains Mono', monospace; |
| font-size: var(--step-mono); |
| color: var(--ink); |
| line-height: 1.6; |
| white-space: pre-wrap; |
| word-break: break-word; |
| } |
| .pg-output:empty::before { |
| content: 'the response will stream here…'; |
| color: rgba(107, 90, 126, 0.5); |
| font-style: italic; |
| } |
| .pg-output .cursor { |
| display: inline-block; |
| width: 8px; |
| height: 1.1em; |
| background: var(--rose); |
| vertical-align: text-bottom; |
| margin-left: 2px; |
| animation: blink 1s steps(2) infinite; |
| } |
| @keyframes blink { 50% { opacity: 0; } } |
|
|
| |
| .skeleton { |
| background: linear-gradient(90deg, |
| rgba(255, 143, 171, 0.08) 25%, |
| rgba(255, 143, 171, 0.18) 37%, |
| rgba(255, 143, 171, 0.08) 63%); |
| background-size: 400% 100%; |
| animation: shimmer 1.4s var(--ease-flow) infinite; |
| border-radius: 8px; |
| color: transparent !important; |
| user-select: none; |
| } |
| @keyframes shimmer { |
| from { background-position: 100% 0; } |
| to { background-position: 0 0; } |
| } |
|
|
| |
| .logout-btn { |
| background: transparent; |
| border: 1.5px solid var(--panel-border); |
| color: var(--ink-soft); |
| padding: 0.6rem 1.2rem; |
| border-radius: var(--radius-pill); |
| font-family: var(--font-body); |
| font-size: var(--step-small); |
| font-weight: 700; |
| cursor: pointer; |
| transition: all var(--dur-fast) var(--ease-gentle); |
| display: inline-flex; |
| align-items: center; |
| gap: 0.4rem; |
| min-height: 44px; |
| } |
| .logout-btn:hover { |
| border-color: var(--rose); |
| color: var(--rose-deep); |
| background: rgba(255, 143, 171, 0.08); |
| } |
|
|
| |
| |
| .auth-card--sso .btn-sso { |
| margin-top: 0.5rem; |
| } |
| .btn-sso { |
| width: 100%; |
| min-height: 54px; |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| gap: 0.65rem; |
| font-family: var(--font-body); |
| font-size: 1.05rem; |
| font-weight: 700; |
| color: var(--ink); |
| background: #fff; |
| border-radius: 14px; |
| border: 1.5px solid var(--panel-border); |
| text-decoration: none; |
| cursor: pointer; |
| transition: transform var(--dur-fast) var(--ease-spring), |
| background var(--dur-fast) var(--ease-gentle), |
| box-shadow var(--dur-fast) var(--ease-gentle); |
| box-shadow: 0 8px 20px -6px rgba(61, 44, 78, 0.18); |
| } |
| .btn-sso:hover { |
| background: #faf8fc; |
| transform: translateY(-2px); |
| box-shadow: 0 12px 26px -6px rgba(61, 44, 78, 0.22); |
| } |
| .btn-sso:active { |
| transform: translateY(0) scale(0.99); |
| } |
| .btn-sso:focus-visible { |
| outline: 3px solid var(--rose); |
| outline-offset: 2px; |
| } |
|
|
| |
| .auth-fine { |
| text-align: center; |
| font-size: var(--step-small); |
| color: var(--ink-soft); |
| margin: 1rem 0 0; |
| opacity: 0.85; |
| } |
|
|
| |
| .auth-toast { |
| width: 100%; |
| max-width: 460px; |
| background: rgba(232, 111, 146, 0.12); |
| border: 1px solid rgba(232, 111, 146, 0.35); |
| color: var(--rose-deep); |
| padding: 0.85rem 1rem; |
| border-radius: 14px; |
| font-size: var(--step-small); |
| font-weight: 600; |
| margin-bottom: 1rem; |
| display: flex; |
| align-items: center; |
| gap: 0.5rem; |
| animation: card-rise 0.4s var(--ease-soft) both; |
| } |
|
|