Download frontend/src/app/globals.css from Ramosh99/cognify: direct link, hf CLI and curl.
- Browser
- Download file 21.8 kB
-
https://huggingface.co/spaces/Ramosh99/cognify/resolve/main/frontend/src/app/globals.css
- Command line
-
hf download hf://spaces/Ramosh99/cognify/frontend/src/app/globals.css
-
curl -L -o globals.css https://huggingface.co/spaces/Ramosh99/cognify/resolve/main/frontend/src/app/globals.css
21.8 kB
| @import "tailwindcss"; | |
| @layer base, components, utilities; | |
| /* ββ Font: Heming (self-hosted variable monospace) ββββββββββββ */ | |
| @font-face { | |
| font-family: "Heming"; | |
| src: url("/fonts/Heming-Variable.woff2") format("woff2-variations"), | |
| url("/fonts/Heming-Variable.ttf") format("truetype-variations"); | |
| font-weight: 100 900; | |
| font-style: normal; | |
| font-display: swap; | |
| } | |
| /* ββ Font & Typography Declarations (Claude lookalike) ββββββ */ | |
| :root { | |
| --font-serif-claude: var(--font-newsreader), "Newsreader", "Source Serif 4", "Charter", "Merriweather", Georgia, serif; | |
| --font-sans-claude: var(--font-sans), "Plus Jakarta Sans", system-ui, -apple-system, sans-serif; | |
| --font-mono-claude: var(--font-mono), "JetBrains Mono", monospace; | |
| } | |
| /* ββ Theme: Dark (Claude Warm Dark: Deep Charcoal & Terracotta) β */ | |
| :root, | |
| [data-theme="dark"] { | |
| --bg-base: #1A1917; /* Warm charcoal */ | |
| --bg-surface: #22211E; | |
| --bg-card: #2A2925; | |
| --bg-card-hover: #33312C; | |
| --border: #3A3832; | |
| --border-light: #494740; | |
| --accent-1: #D97757; /* Claude signature terracotta */ | |
| --accent-2: #E0886A; | |
| --accent-hover: #C86A4C; | |
| --accent-success: #48BB78; | |
| --accent-warn: #ED8936; | |
| --accent-danger: #F56565; | |
| --text-primary: #F5F4EE; /* Warm ivory */ | |
| --text-secondary: #B8B4A8; /* Muted warm stone */ | |
| --text-muted: #827E74; | |
| --btn-primary-bg: #D97757; | |
| --btn-primary-text: #FFFFFF; | |
| --btn-success-text: #FFFFFF; | |
| --badge-bg-alpha: 0.12; | |
| --diagram-bg: #1A1917; | |
| --badge-blue-bg: rgba(217, 119, 87, 0.12); | |
| --badge-blue-text: #E0886A; | |
| --badge-green-bg: rgba(72, 187, 120, 0.12); | |
| --badge-green-text: #48BB78; | |
| --badge-red-bg: rgba(245, 101, 101, 0.12); | |
| --badge-red-text: #F56565; | |
| --feedback-error-bg: rgba(245, 101, 101, 0.08); | |
| --feedback-error-border:rgba(245, 101, 101, 0.25); | |
| --feedback-success-bg: rgba(72, 187, 120, 0.08); | |
| --feedback-success-border: rgba(72, 187, 120, 0.25); | |
| --feedback-info-bg: rgba(217, 119, 87, 0.06); | |
| --feedback-info-border: rgba(217, 119, 87, 0.2); | |
| --mcq-hover-bg: rgba(255, 255, 255, 0.03); | |
| --mcq-correct-bg: rgba(72, 187, 120, 0.1); | |
| --mcq-correct-border: rgba(72, 187, 120, 0.35); | |
| --mcq-wrong-bg: rgba(245, 101, 101, 0.1); | |
| --mcq-wrong-border: rgba(245, 101, 101, 0.35); | |
| --radius-sm: 6px; | |
| --radius-md: 10px; | |
| --radius-lg: 14px; | |
| --card-shadow: 0 4px 24px rgba(0, 0, 0, 0.35); | |
| } | |
| /* ββ Theme: Light (Claude Warm Ivory Parchment & Terracotta) ββ */ | |
| [data-theme="light"] { | |
| --bg-base: #FAF9F5; /* Claude signature warm cream paper */ | |
| --bg-surface: #F3F1EC; | |
| --bg-card: #FFFFFF; | |
| --bg-card-hover: #F7F5F0; | |
| --border: #E8E5DE; | |
| --border-light: #DFDBD2; | |
| --accent-1: #D97757; /* Claude terracotta */ | |
| --accent-2: #C86A4C; | |
| --accent-hover: #BA5C3E; | |
| --accent-success: #2F855A; | |
| --accent-warn: #DD6B20; | |
| --accent-danger: #C53030; | |
| --text-primary: #2C2825; /* Warm charcoal */ | |
| --text-secondary: #615C55; /* Warm muted stone */ | |
| --text-muted: #8F8A81; | |
| --btn-primary-bg: #D97757; | |
| --btn-primary-text: #FFFFFF; | |
| --btn-success-text: #FFFFFF; | |
| --badge-bg-alpha: 0.08; | |
| --diagram-bg: #F3F1EC; | |
| --badge-blue-bg: rgba(217, 119, 87, 0.08); | |
| --badge-blue-text: #C86A4C; | |
| --badge-green-bg: rgba(47, 133, 90, 0.08); | |
| --badge-green-text: #2F855A; | |
| --badge-red-bg: rgba(197, 48, 48, 0.08); | |
| --badge-red-text: #C53030; | |
| --feedback-error-bg: rgba(197, 48, 48, 0.05); | |
| --feedback-error-border:rgba(197, 48, 48, 0.2); | |
| --feedback-success-bg: rgba(47, 133, 90, 0.05); | |
| --feedback-success-border: rgba(47, 133, 90, 0.2); | |
| --feedback-info-bg: rgba(217, 119, 87, 0.04); | |
| --feedback-info-border: rgba(217, 119, 87, 0.15); | |
| --mcq-hover-bg: rgba(0, 0, 0, 0.02); | |
| --mcq-correct-bg: rgba(47, 133, 90, 0.06); | |
| --mcq-correct-border: rgba(47, 133, 90, 0.25); | |
| --mcq-wrong-bg: rgba(197, 48, 48, 0.06); | |
| --mcq-wrong-border: rgba(197, 48, 48, 0.25); | |
| --radius-sm: 6px; | |
| --radius-md: 10px; | |
| --radius-lg: 14px; | |
| --card-shadow: 0 2px 14px rgba(44, 40, 37, 0.08), 0 1px 3px rgba(44, 40, 37, 0.04); | |
| } | |
| /* ββ Base Reset ββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } | |
| html, body { height: 100%; } | |
| @layer base { | |
| body { | |
| background: var(--bg-base); | |
| color: var(--text-primary); | |
| font-family: var(--font-sans-claude); | |
| font-weight: 400; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| line-height: 1.65; | |
| letter-spacing: -0.01em; | |
| } | |
| } | |
| /* ββ Theme transition for all elements βββββββββββββββββββββββ */ | |
| *, *::before, *::after { | |
| transition-property: background-color, border-color, color, box-shadow; | |
| transition-duration: 0.15s; | |
| transition-timing-function: ease; | |
| } | |
| /* Exclude elements that shouldn't transition (spinners, animations) */ | |
| .spinner, .fade-up, .progress-bar-fill { | |
| transition: none; | |
| } | |
| /* ββ Typography (Claude Editorial Serif for Headings) βββββββ */ | |
| h1 { | |
| font-family: var(--font-serif-claude); | |
| font-size: clamp(2.1rem, 4.5vw, 3.4rem); | |
| font-weight: 500; | |
| line-height: 1.18; | |
| letter-spacing: -0.02em; | |
| } | |
| h2 { | |
| font-family: var(--font-serif-claude); | |
| font-size: 1.65rem; | |
| font-weight: 500; | |
| line-height: 1.25; | |
| letter-spacing: -0.015em; | |
| } | |
| h3 { | |
| font-family: var(--font-serif-claude); | |
| font-size: 1.25rem; | |
| font-weight: 500; | |
| line-height: 1.3; | |
| letter-spacing: -0.01em; | |
| } | |
| p, li { color: var(--text-secondary); } | |
| /* ββ Gradient Text βββββββββββββββββββββββββββββββββββββββββββ */ | |
| .grad-text { | |
| background: linear-gradient(135deg, var(--accent-1), var(--accent-2)); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| background-clip: text; | |
| } | |
| /* ββ Badge-New βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .badge-new { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| padding: 0.35rem 0.85rem; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| font-size: 0.8rem; | |
| color: var(--text-secondary); | |
| } | |
| .badge-new-pill { | |
| background: var(--btn-primary-bg); | |
| color: var(--btn-primary-text); | |
| padding: 0.1rem 0.4rem; | |
| border-radius: 4px; | |
| font-weight: 700; | |
| font-size: 0.65rem; | |
| text-transform: uppercase; | |
| } | |
| /* ββ Terminal Component ββββββββββββββββββββββββββββββββββββββ */ | |
| .terminal { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-lg); | |
| overflow: hidden; | |
| display: flex; | |
| flex-direction: column; | |
| box-shadow: var(--card-shadow); | |
| transition: border-color 0.2s ease, box-shadow 0.2s ease; | |
| } | |
| .terminal:focus-within { | |
| border-color: var(--accent-1); | |
| } | |
| .terminal-header { | |
| display: flex; | |
| align-items: center; | |
| gap: 1.75rem; | |
| padding: 0 1.25rem; | |
| border-bottom: 1px solid var(--border); | |
| height: 42px; | |
| background: var(--bg-surface); | |
| } | |
| .terminal-tab { | |
| height: 100%; | |
| display: flex; | |
| align-items: center; | |
| font-size: 0.8rem; | |
| font-weight: 500; | |
| color: var(--text-secondary); | |
| font-family: inherit; | |
| cursor: pointer; | |
| position: relative; | |
| transition: color 0.15s ease; | |
| letter-spacing: 0.02em; | |
| text-transform: capitalize; | |
| } | |
| .terminal-tab:hover { | |
| color: var(--text-primary); | |
| } | |
| .terminal-tab.active { | |
| color: var(--text-primary); | |
| font-weight: 600; | |
| } | |
| .terminal-tab.active::after { | |
| content: ""; | |
| position: absolute; | |
| bottom: -1px; | |
| left: 0; | |
| right: 0; | |
| height: 2px; | |
| background: var(--accent-1); | |
| border-radius: 2px 2px 0 0; | |
| } | |
| .terminal-content { | |
| padding: 1.25rem; | |
| min-height: 120px; | |
| } | |
| .terminal-body { | |
| padding: 1rem 1.25rem; | |
| flex: 1; | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| min-height: 80px; | |
| background: var(--bg-card); | |
| } | |
| .terminal-prompt { | |
| font-family: inherit; | |
| font-size: 0.95rem; | |
| color: var(--text-primary); | |
| display: flex; | |
| align-items: center; | |
| gap: 0.85rem; | |
| width: 100%; | |
| } | |
| .terminal-input { | |
| background: transparent; | |
| border: none; | |
| font-family: inherit; | |
| color: var(--text-primary); | |
| outline: none; | |
| flex: 1; | |
| font-size: 0.95rem; | |
| } | |
| .terminal-input::placeholder { | |
| color: var(--text-muted); | |
| } | |
| /* ββ Cards βββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-md); | |
| padding: 1.25rem; | |
| } | |
| .card:hover { border-color: var(--border-light); background: var(--bg-card-hover); } | |
| /* ββ Buttons βββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .btn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 0.5rem; | |
| padding: 0.65rem 1.4rem; | |
| border-radius: var(--radius-sm); | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| cursor: pointer; | |
| border: none; | |
| outline: none; | |
| transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); | |
| } | |
| .btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0,0,0,0.15); } | |
| .btn:active { transform: translateY(0); } | |
| .btn:disabled { opacity: 0.35; cursor: not-allowed; transform: none; } | |
| .btn-primary { | |
| background: var(--btn-primary-bg); | |
| color: var(--btn-primary-text); | |
| } | |
| .btn-primary:hover { opacity: 0.9; } | |
| .btn-outline { | |
| background: transparent; | |
| color: var(--text-primary); | |
| border: 1px solid var(--border); | |
| } | |
| .btn-outline:hover { border-color: var(--text-primary); } | |
| /* ββ Inputs ββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .input { | |
| width: 100%; | |
| background: var(--bg-base); | |
| border: 1px solid var(--border); | |
| color: var(--text-primary); | |
| font-family: inherit; | |
| font-size: 0.85rem; | |
| border-radius: var(--radius-sm); | |
| padding: 0.55rem 0.75rem; | |
| outline: none; | |
| transition: border-color 0.15s ease; | |
| } | |
| .input:focus { border-color: var(--text-muted); } | |
| .input::placeholder { color: var(--text-muted); } | |
| .textarea { | |
| width: 100%; | |
| background: var(--bg-base); | |
| border: 1px solid var(--border); | |
| color: var(--text-primary); | |
| font-family: inherit; | |
| font-size: 0.85rem; | |
| border-radius: var(--radius-sm); | |
| padding: 0.65rem 0.75rem; | |
| outline: none; | |
| resize: vertical; | |
| line-height: 1.6; | |
| transition: border-color 0.15s ease; | |
| } | |
| .textarea:focus { border-color: var(--text-muted); } | |
| .textarea::placeholder { color: var(--text-muted); } | |
| .input-terminal { | |
| width: 100%; | |
| background: transparent; | |
| border: none; | |
| color: var(--text-primary); | |
| font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; | |
| font-size: 1.1rem; | |
| outline: none; | |
| padding: 0.5rem 0; | |
| } | |
| .input-terminal::placeholder { color: var(--text-muted); } | |
| /* ββ Labels ββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .form-label { | |
| display: block; | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| margin-bottom: 0.35rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.04em; | |
| } | |
| /* ββ Feedback Box ββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .feedback-box { | |
| padding: 0.75rem 1rem; | |
| border-radius: var(--radius-sm); | |
| font-size: 0.825rem; | |
| line-height: 1.55; | |
| color: var(--text-secondary); | |
| border: 1px solid var(--border); | |
| background: var(--bg-base); | |
| } | |
| .feedback-box.error { | |
| background: var(--feedback-error-bg); | |
| border-color: var(--feedback-error-border); | |
| color: var(--accent-danger); | |
| } | |
| .feedback-box.success { | |
| background: var(--feedback-success-bg); | |
| border-color: var(--feedback-success-border); | |
| color: var(--accent-success); | |
| } | |
| .feedback-box.info { | |
| background: var(--feedback-info-bg); | |
| border-color: var(--feedback-info-border); | |
| color: var(--text-secondary); | |
| } | |
| /* ββ Badge βββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .badge { | |
| display: inline-block; | |
| padding: 0.15rem 0.6rem; | |
| border-radius: 4px; | |
| font-size: 0.7rem; | |
| font-weight: 500; | |
| letter-spacing: 0.01em; | |
| background: var(--border); | |
| color: var(--text-secondary); | |
| } | |
| .badge-blue { | |
| background: var(--badge-blue-bg); | |
| color: var(--badge-blue-text); | |
| } | |
| .badge-green { | |
| background: var(--badge-green-bg); | |
| color: var(--badge-green-text); | |
| } | |
| .badge-red { | |
| background: var(--badge-red-bg); | |
| color: var(--badge-red-text); | |
| } | |
| /* ββ MCQ Options βββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .mcq-option { | |
| display: block; | |
| width: 100%; | |
| text-align: left; | |
| padding: 0.7rem 0.9rem; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-sm); | |
| background: transparent; | |
| color: var(--text-primary); | |
| font-family: inherit; | |
| font-size: 0.825rem; | |
| cursor: pointer; | |
| margin-bottom: 0.4rem; | |
| transition: all 0.15s ease; | |
| line-height: 1.5; | |
| } | |
| .mcq-option:hover { | |
| background: var(--mcq-hover-bg); | |
| border-color: var(--border-light); | |
| } | |
| .mcq-option.disabled { | |
| cursor: default; | |
| pointer-events: none; | |
| opacity: 0.7; | |
| } | |
| .mcq-option.correct { | |
| background: var(--mcq-correct-bg); | |
| border-color: var(--mcq-correct-border); | |
| opacity: 1; | |
| } | |
| .mcq-option.wrong { | |
| background: var(--mcq-wrong-bg); | |
| border-color: var(--mcq-wrong-border); | |
| opacity: 1; | |
| } | |
| /* ββ Learner Card ββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .learner-card { | |
| padding: 0.75rem; | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-sm); | |
| background: transparent; | |
| cursor: pointer; | |
| transition: all 0.15s ease; | |
| } | |
| .learner-card:hover { | |
| border-color: var(--border-light); | |
| background: var(--bg-card-hover); | |
| } | |
| .learner-card.selected { | |
| border-color: var(--text-primary); | |
| background: rgba(255,255,255,0.04); | |
| } | |
| /* ββ Progress Bar ββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .progress-bar-bg { | |
| width: 100%; | |
| height: 6px; | |
| background: var(--border); | |
| border-radius: 3px; | |
| overflow: hidden; | |
| } | |
| .progress-bar-fill { | |
| height: 100%; | |
| background: var(--accent-1); | |
| border-radius: 3px; | |
| transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1); | |
| } | |
| /* ββ Main Layout βββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .main-container { | |
| max-width: 1100px; | |
| margin: 0 auto; | |
| padding: 4rem 1.5rem; | |
| } | |
| .sidebar { | |
| width: 224px; | |
| min-height: 100vh; | |
| background: var(--bg-surface); | |
| border-right: 1px solid var(--border); | |
| display: flex; | |
| flex-direction: column; | |
| padding: 1.5rem 0.75rem; | |
| gap: 0.2rem; | |
| position: fixed; | |
| top: 0; left: 0; | |
| } | |
| .sidebar-logo { | |
| font-size: 1.1rem; | |
| font-weight: 500; | |
| margin-bottom: 1.75rem; | |
| padding: 0 0.5rem; | |
| letter-spacing: -0.03em; | |
| } | |
| .nav-item { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.65rem; | |
| padding: 0.55rem 0.7rem; | |
| border-radius: var(--radius-sm); | |
| font-size: 0.825rem; | |
| font-weight: 300; | |
| color: var(--text-muted); | |
| text-decoration: none; | |
| cursor: pointer; | |
| } | |
| .nav-item:hover { background: var(--bg-card); color: var(--text-secondary); } | |
| .nav-item.active { background: rgba(128,128,128,0.08); color: var(--text-primary); } | |
| .page-content { | |
| margin-left: 224px; | |
| padding: 2.5rem; | |
| min-height: 100vh; | |
| } | |
| /* ββ Drop Zone βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .drop-zone { | |
| border: 1px dashed var(--border-light); | |
| border-radius: var(--radius-md); | |
| padding: 2.5rem 2rem; | |
| text-align: center; | |
| cursor: pointer; | |
| transition: all 0.15s ease; | |
| } | |
| .drop-zone:hover, .drop-zone.dragging { | |
| border-color: var(--text-muted); | |
| background: rgba(128,128,128,0.03); | |
| } | |
| /* ββ Spinner βββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes spin { to { transform: rotate(360deg); } } | |
| .spinner { | |
| width: 18px; height: 18px; | |
| border: 2px solid var(--border); | |
| border-top-color: var(--text-primary); | |
| border-radius: 50%; | |
| animation: spin 0.7s linear infinite; | |
| display: inline-block; | |
| } | |
| /* ββ Fade In βββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes fadeUp { from { opacity: 0; transform: translateY(15px); } to { opacity: 1; transform: translateY(0); } } | |
| .fade-up { animation: fadeUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) both; } | |
| /* ββ Scrollbar βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| ::-webkit-scrollbar { width: 4px; } | |
| ::-webkit-scrollbar-track { background: transparent; } | |
| ::-webkit-scrollbar-thumb { background: var(--border-light); border-radius: 2px; } | |
| ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } | |
| /* ββ Hero Styles βββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .hero-badge { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| padding: 0.2rem 0.6rem; | |
| border-radius: 3px; | |
| background: var(--btn-primary-bg); | |
| color: var(--btn-primary-text); | |
| font-size: 0.65rem; | |
| font-weight: 800; | |
| letter-spacing: 0.05em; | |
| text-transform: uppercase; | |
| } | |
| .hero-announcement { | |
| display: inline-flex; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| gap: 0.75rem; | |
| padding: 0.35rem 0.8rem; | |
| border-radius: 6px; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| font-size: 0.85rem; | |
| color: var(--text-secondary); | |
| } | |
| .hero-announcement a { | |
| color: var(--text-muted); | |
| text-decoration: underline; | |
| text-underline-offset: 3px; | |
| } | |
| .hero-announcement a:hover { | |
| color: var(--text-primary); | |
| } | |
| /* ββ Theme Toggle ββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .theme-toggle { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| padding: 0.45rem 0.7rem; | |
| border-radius: var(--radius-sm); | |
| font-size: 0.8rem; | |
| color: var(--text-secondary); | |
| background: transparent; | |
| border: 1px solid var(--border); | |
| cursor: pointer; | |
| width: 100%; | |
| transition: all 0.15s ease; | |
| } | |
| .theme-toggle:hover { | |
| background: var(--bg-card); | |
| border-color: var(--border-light); | |
| } | |
| /* ββ Streaming / generation animations ββββββββββββββββββββββββββ */ | |
| /* Section streams in from slightly below */ | |
| @keyframes sectionStream { | |
| from { opacity: 0; transform: translateY(14px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| .section-stream { | |
| animation: sectionStream 0.38s cubic-bezier(0.22, 1, 0.36, 1) both; | |
| } | |
| /* Diagram card pops in from slightly smaller + invisible */ | |
| @keyframes diagramPop { | |
| from { opacity: 0; transform: scale(0.93) translateY(10px); } | |
| to { opacity: 1; transform: scale(1) translateY(0); } | |
| } | |
| .diagram-pop { | |
| animation: diagramPop 0.42s cubic-bezier(0.34, 1.56, 0.64, 1) both; | |
| } | |
| /* Inline diagram insertion β expands from 0 height */ | |
| @keyframes expandIn { | |
| from { max-height: 0; opacity: 0; } | |
| to { max-height: 700px; opacity: 1; } | |
| } | |
| .diagram-expand { | |
| animation: expandIn 0.5s cubic-bezier(0.22, 1, 0.36, 1) both; | |
| overflow: hidden; | |
| } | |
| /* Popover scales in from selection point */ | |
| @keyframes popoverIn { | |
| from { opacity: 0; transform: translateX(-50%) scale(0.88) translateY(-4px); } | |
| to { opacity: 1; transform: translateX(-50%) scale(1) translateY(0); } | |
| } | |
| .popover-animated { | |
| animation: popoverIn 0.2s cubic-bezier(0.34, 1.56, 0.64, 1) both; | |
| } | |
| /* Toast fly-up in */ | |
| @keyframes toastIn { | |
| from { opacity: 0; transform: translateX(-50%) translateY(16px); } | |
| to { opacity: 1; transform: translateX(-50%) translateY(0); } | |
| } | |
| /* Toast fade out */ | |
| @keyframes toastOut { | |
| from { opacity: 1; transform: translateX(-50%) translateY(0); } | |
| to { opacity: 0; transform: translateX(-50%) translateY(8px); } | |
| } | |
| .toast-in { animation: toastIn 0.28s cubic-bezier(0.22, 1, 0.36, 1) both; } | |
| .toast-out { animation: toastOut 0.22s cubic-bezier(0.4, 0, 1, 1) both; } | |
| /* Typewriter cursor on streaming text */ | |
| @keyframes blink { 0%,100% { opacity: 1; } 50% { opacity: 0; } } | |
| .typewriter-cursor::after { | |
| content: "β"; | |
| display: inline-block; | |
| margin-left: 2px; | |
| animation: blink 0.9s step-end infinite; | |
| color: var(--text-muted); | |
| font-size: 0.85em; | |
| } | |
| /* Skeleton shimmer for loading placeholders */ | |
| @keyframes shimmer { | |
| from { background-position: -600px 0; } | |
| to { background-position: 600px 0; } | |
| } | |
| .skeleton { | |
| background: linear-gradient( | |
| 90deg, | |
| rgba(128,128,128,0.06) 25%, | |
| rgba(128,128,128,0.14) 50%, | |
| rgba(128,128,128,0.06) 75% | |
| ); | |
| background-size: 600px 100%; | |
| animation: shimmer 1.6s ease-in-out infinite; | |
| border-radius: 6px; | |
| } | |