| |
|
|
| @import url('https://fonts.googleapis.com/css2?family=Chivo:wght@300;400;700;900&family=IBM+Plex+Sans:wght@400;500;600&family=JetBrains+Mono:wght@400;500;700&display=swap'); |
|
|
| :root { |
| --fs-bg: #0A0A0A; |
| --fs-surface: #141416; |
| --fs-surface-2: #1a1a1d; |
| --fs-border: rgba(255, 255, 255, 0.1); |
| --fs-border-strong: rgba(255, 255, 255, 0.2); |
| --fs-red: #ED1C24; |
| --fs-red-hot: #FF3B30; |
| --fs-amber: #F59E0B; |
| --fs-green: #10B981; |
| --fs-text: #FFFFFF; |
| --fs-text-mute: #A1A1AA; |
| --fs-text-dim: #71717A; |
| } |
|
|
| .App { |
| font-family: 'IBM Plex Sans', system-ui, sans-serif; |
| background: var(--fs-bg); |
| color: var(--fs-text); |
| letter-spacing: 0.005em; |
| } |
|
|
| .font-display { font-family: 'Chivo', sans-serif; } |
| .font-mono { font-family: 'JetBrains Mono', ui-monospace, monospace; } |
|
|
| |
| ::selection { |
| background: var(--fs-red); |
| color: #fff; |
| } |
|
|
| |
| ::-webkit-scrollbar { width: 10px; height: 10px; } |
| ::-webkit-scrollbar-track { background: #0A0A0A; } |
| ::-webkit-scrollbar-thumb { background: #2a2a2d; border: 2px solid #0A0A0A; } |
| ::-webkit-scrollbar-thumb:hover { background: var(--fs-red); } |
|
|
| |
| .fs-scanlines { |
| background-image: repeating-linear-gradient( |
| to bottom, |
| transparent 0px, |
| transparent 2px, |
| rgba(255, 255, 255, 0.015) 2px, |
| rgba(255, 255, 255, 0.015) 3px |
| ); |
| } |
|
|
| |
| .fs-grid-dots { |
| background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px); |
| background-size: 24px 24px; |
| } |
|
|
| |
| .fs-corners { |
| position: relative; |
| } |
| .fs-corners::before, |
| .fs-corners::after { |
| content: ''; |
| position: absolute; |
| width: 10px; |
| height: 10px; |
| border-color: var(--fs-red); |
| border-style: solid; |
| border-width: 0; |
| } |
| .fs-corners::before { |
| top: -1px; left: -1px; |
| border-top-width: 1px; border-left-width: 1px; |
| } |
| .fs-corners::after { |
| bottom: -1px; right: -1px; |
| border-bottom-width: 1px; border-right-width: 1px; |
| } |
|
|
| |
| .fs-cursor::after { |
| content: '▊'; |
| display: inline-block; |
| margin-left: 2px; |
| color: var(--fs-red); |
| animation: fs-blink 1s steps(2) infinite; |
| } |
| @keyframes fs-blink { |
| 0%, 50% { opacity: 1; } |
| 51%, 100% { opacity: 0; } |
| } |
|
|
| |
| .fs-rise { |
| animation: fs-rise 0.5s cubic-bezier(0.16, 1, 0.3, 1) both; |
| } |
| @keyframes fs-rise { |
| from { opacity: 0; transform: translateY(8px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
|
|
| |
| .fs-btn { |
| font-family: 'JetBrains Mono', monospace; |
| font-size: 0.75rem; |
| letter-spacing: 0.14em; |
| text-transform: uppercase; |
| padding: 0.65rem 1.1rem; |
| border: 1px solid var(--fs-border-strong); |
| background: transparent; |
| color: #fff; |
| transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease, transform 180ms ease; |
| cursor: pointer; |
| } |
| .fs-btn:hover { border-color: var(--fs-red); color: var(--fs-red); } |
| .fs-btn-primary { |
| background: var(--fs-red); |
| border-color: var(--fs-red); |
| color: #fff; |
| } |
| .fs-btn-primary:hover { background: var(--fs-red-hot); border-color: var(--fs-red-hot); color: #fff; } |
|
|
| |
| .fs-chip { |
| font-family: 'JetBrains Mono', monospace; |
| font-size: 0.65rem; |
| letter-spacing: 0.2em; |
| text-transform: uppercase; |
| padding: 0.2rem 0.55rem; |
| border: 1px solid var(--fs-border-strong); |
| color: var(--fs-text-mute); |
| } |
| .fs-chip-pass { color: var(--fs-green); border-color: rgba(16, 185, 129, 0.4); } |
| .fs-chip-warn { color: var(--fs-amber); border-color: rgba(245, 158, 11, 0.4); } |
| .fs-chip-fail { color: var(--fs-red); border-color: rgba(237, 28, 36, 0.5); } |
|
|
| |
| .fs-label { |
| font-family: 'JetBrains Mono', monospace; |
| font-size: 0.7rem; |
| letter-spacing: 0.22em; |
| text-transform: uppercase; |
| color: var(--fs-text-dim); |
| } |
|
|
| |
| .fs-hr { |
| border: none; |
| border-top: 1px dashed var(--fs-border); |
| margin: 0; |
| } |
|
|
| |
| .fs-stroke { |
| -webkit-text-stroke: 1px rgba(255, 255, 255, 0.25); |
| color: transparent; |
| } |
|
|
| |
| .fs-drop { |
| border: 1px dashed var(--fs-border-strong); |
| transition: border-color 180ms ease, background-color 180ms ease; |
| } |
| .fs-drop.fs-drop-active { |
| border-color: var(--fs-red); |
| background-color: rgba(237, 28, 36, 0.05); |
| } |
|
|
| |
| .fs-mono-small { font-family: 'JetBrains Mono', monospace; font-size: 0.72rem; letter-spacing: 0.1em; } |
|
|
| |
| .fs-bar { |
| height: 4px; |
| background: var(--fs-border); |
| overflow: hidden; |
| } |
| .fs-bar > div { |
| height: 100%; |
| background: var(--fs-red); |
| transition: width 400ms cubic-bezier(0.16, 1, 0.3, 1); |
| } |
|
|
| |
| kbd { |
| font-family: 'JetBrains Mono', monospace; |
| font-size: 0.65rem; |
| padding: 2px 6px; |
| border: 1px solid var(--fs-border-strong); |
| background: #18181b; |
| color: var(--fs-text-mute); |
| } |
|
|