/* apointless.css — dark-first design system JetBrains Mono + DM Sans, blue accent, subtle grid. */ :root { --bg: #0b0d11; --surface-1: #12151b; --surface-2: #1a1e28; --surface-3: #232838; --border: #232838; --border-strong: #313850; --text: #e6e9ef; --text-muted: #949cad; --text-faint: #626a7a; --accent: #3b82f6; --accent-hover: #2f6fd8; --accent-soft: rgba(59, 130, 246, 0.14); --accent-line: rgba(59, 130, 246, 0.05); --ok: #22c55e; --warn: #f59e0b; --error: #ef4444; --info: #38bdf8; --ok-soft: rgba(34, 197, 94, 0.13); --warn-soft: rgba(245, 158, 11, 0.13); --error-soft: rgba(239, 68, 68, 0.13); --info-soft: rgba(56, 189, 248, 0.13); --font-sans: "DM Sans", ui-sans-serif, system-ui, sans-serif; --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace; --radius-sm: 4px; --radius: 8px; --radius-lg: 12px; --shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 8px 24px rgba(0, 0, 0, 0.28); } html.light { --bg: #f6f7f9; --surface-1: #ffffff; --surface-2: #f0f2f6; --surface-3: #e3e7ee; --border: #dfe3ea; --border-strong: #c3cad6; --text: #131720; --text-muted: #5b6472; --text-faint: #8a93a3; --accent-soft: rgba(59, 130, 246, 0.11); --accent-line: rgba(59, 130, 246, 0.06); --shadow: 0 1px 2px rgba(16, 24, 40, 0.06), 0 8px 24px rgba(16, 24, 40, 0.07); } * { box-sizing: border-box; } /* Any component with an explicit `display` beats the UA stylesheet's [hidden] { display: none }, so .alert, .card etc. would stay visible when marked hidden. Restore the expected behaviour once, globally. */ [hidden] { display: none !important; } html, body { height: 100%; } body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--font-sans); font-size: 15px; line-height: 1.5; -webkit-font-smoothing: antialiased; } body::before { content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none; background-image: linear-gradient(var(--accent-line) 1px, transparent 1px), linear-gradient(90deg, var(--accent-line) 1px, transparent 1px); background-size: 32px 32px; } h1, h2, h3 { margin: 0; font-weight: 600; letter-spacing: -0.015em; } h1 { font-size: 1.25rem; } h2 { font-size: 1.05rem; } a { color: var(--accent); text-decoration: none; } a:hover { text-decoration: underline; } :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* ---------------------------------------------------------------- card --- */ .card { background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--shadow); } .card-header { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--border); } .card-body { padding: 16px; } /* -------------------------------------------------------------- badges --- */ .badge { display: inline-flex; align-items: center; gap: 6px; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--border-strong); background: var(--surface-2); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 0.02em; white-space: nowrap; } .badge-ok { background: var(--ok-soft); border-color: transparent; color: var(--ok); } .badge-warn { background: var(--warn-soft); border-color: transparent; color: var(--warn); } .badge-error { background: var(--error-soft); border-color: transparent; color: var(--error); } .badge-accent { background: var(--accent-soft); border-color: transparent; color: var(--accent); } .dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex: none; } .dot-pulse { animation: pulse 2.4s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } } /* --------------------------------------------------------------- pills --- */ .pill { display: inline-flex; align-items: center; padding: 5px 11px; border-radius: 999px; border: 1px solid var(--border-strong); background: var(--surface-2); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.75rem; cursor: pointer; transition: background 0.12s, color 0.12s, border-color 0.12s; } .pill:hover { background: var(--surface-3); color: var(--text); } .pill[aria-pressed="true"] { background: var(--accent-soft); border-color: transparent; color: var(--accent); } /* ------------------------------------------------------------- buttons --- */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 9px 16px; border-radius: var(--radius); border: 1px solid var(--border-strong); background: var(--surface-2); color: var(--text); font-family: var(--font-sans); font-size: 0.9rem; font-weight: 500; cursor: pointer; transition: background 0.12s, border-color 0.12s, opacity 0.12s; } .btn:hover:not(:disabled) { background: var(--surface-3); } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-primary { background: var(--accent); border-color: var(--accent); color: #fff; } .btn-primary:hover:not(:disabled) { background: var(--accent-hover); border-color: var(--accent-hover); } .btn-ghost { background: transparent; border-color: transparent; color: var(--text-muted); } .btn-ghost:hover:not(:disabled) { background: var(--surface-2); color: var(--text); } .btn-sm { padding: 5px 11px; font-size: 0.8rem; } /* -------------------------------------------------------------- inputs --- */ .input { width: 100%; padding: 10px 13px; border-radius: var(--radius); border: 1px solid var(--border-strong); background: var(--surface-2); color: var(--text); font-family: var(--font-mono); font-size: 0.88rem; } .input::placeholder { color: var(--text-faint); } .input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); } .label { display: block; margin-bottom: 6px; color: var(--text-muted); font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 0.06em; text-transform: uppercase; } /* -------------------------------------------------------------- alerts --- */ .alert { display: flex; gap: 10px; padding: 11px 14px; border-radius: var(--radius); border: 1px solid transparent; font-size: 0.87rem; } .alert-error { background: var(--error-soft); border-color: rgba(239, 68, 68, 0.3); color: var(--error); } .alert-warn { background: var(--warn-soft); border-color: rgba(245, 158, 11, 0.3); color: var(--warn); } .alert-info { background: var(--info-soft); border-color: rgba(56, 189, 248, 0.3); color: var(--info); } /* ---------------------------------------------------------------- code --- */ code, .mono { font-family: var(--font-mono); font-size: 0.85em; } .code-block { padding: 12px 14px; border-radius: var(--radius); border: 1px solid var(--border); background: var(--surface-2); font-family: var(--font-mono); font-size: 0.82rem; white-space: pre-wrap; overflow-x: auto; } /* ------------------------------------------------------------- spinner --- */ .spinner { width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--border-strong); border-top-color: var(--accent); animation: spin 0.7s linear infinite; flex: none; } @keyframes spin { to { transform: rotate(360deg); } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }