/* ========================================================================== @toshi - Brutalist Terminal Aesthetic ========================================================================== */ /* CSS Custom Properties */ :root { /* Colors */ --color-bg: #f7f7f8; --color-fg: #111; --color-muted: #666; --color-border: #ccc; --color-input-bg: #fff; --color-input-focus: #fffef0; /* Status Colors */ --color-success: #0a0; --color-success-bg: #efe; --color-error: #a00; --color-error-bg: #fee; --color-warning: #a80; --color-warning-bg: #ffc; /* Spacing Scale */ --space-xs: 0.25rem; --space-sm: 0.5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; /* Typography */ --font-mono: 'IBM Plex Mono', 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', monospace; --font-size-base: 13px; --font-size-sm: 12px; --line-height: 1.6; /* Layout */ --max-width: 72ch; --border-width: 2px; } /* Reset & Base */ *, *::before, *::after { box-sizing: border-box; } body { background-color: var(--color-bg); color: var(--color-fg); font-family: var(--font-mono); font-size: var(--font-size-base); line-height: var(--line-height); padding: var(--space-xl); margin: 0; min-height: 100vh; } /* Typography */ h1, h2, h3, h4, h5, h6 { margin: 0; font-size: inherit; font-weight: normal; text-transform: uppercase; letter-spacing: 0.05em; } p { margin: 0; } a { color: var(--color-fg); text-decoration: underline; text-underline-offset: 2px; } a:hover { background-color: var(--color-fg); color: var(--color-bg); text-decoration: none; } /* Terminal Container */ .terminal { max-width: var(--max-width); margin: 0 auto; } .terminal-header { display: flex; align-items: center; gap: var(--space-md); } .terminal-title { font-size: var(--font-size-base); } .back-link { color: var(--color-muted); text-decoration: none; font-weight: bold; } .back-link:hover { color: var(--color-fg); background: transparent; } /* Divider */ .divider { color: var(--color-muted); user-select: none; margin: var(--space-md) 0; } /* Sections */ .terminal-section { padding: var(--space-md) 0; } .section-title { color: var(--color-muted); margin-bottom: var(--space-sm); font-size: var(--font-size-sm); } /* Label-Value Pairs */ .label-value { display: flex; gap: var(--space-sm); } .label { color: var(--color-muted); flex-shrink: 0; } .value { color: var(--color-fg); } .value.status-success { color: var(--color-success); } .value.status-error { color: var(--color-error); } .value.status-warning { color: var(--color-warning); } /* Data Table */ .data-table { width: 100%; } .data-row { display: flex; gap: var(--space-md); padding: var(--space-xs) 0; align-items: baseline; } .data-header { border-bottom: 1px solid var(--color-border); padding-bottom: var(--space-sm); margin-bottom: var(--space-xs); } .data-header .data-cell { color: var(--color-muted); font-size: var(--font-size-sm); } .data-cell { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .data-row-link { display: block; text-decoration: none; } .data-row-link:hover { background: var(--color-fg); color: var(--color-bg); } .data-row-link:hover .data-cell { color: inherit; } .data-empty { color: var(--color-muted); padding: var(--space-md) 0; font-style: italic; } .data-body { display: flex; flex-direction: column; } /* Action Bar */ .action-bar { display: flex; flex-wrap: wrap; gap: var(--space-sm); padding: var(--space-md) 0; } /* Status Badge */ .status-badge { text-transform: uppercase; letter-spacing: 0.05em; } .status-online { color: var(--color-success); } .status-offline { color: var(--color-error); } .status-loading { color: var(--color-warning); } /* Buttons */ button, .btn { font-family: var(--font-mono); font-size: var(--font-size-base); background: var(--color-fg); color: var(--color-bg); border: var(--border-width) solid var(--color-fg); padding: var(--space-sm) var(--space-md); cursor: pointer; transition: all 0.1s ease; text-transform: uppercase; letter-spacing: 0.05em; } button:hover, .btn:hover { background: var(--color-bg); color: var(--color-fg); } button:disabled { opacity: 0.4; cursor: not-allowed; } button.secondary, .btn.secondary { background: var(--color-bg); color: var(--color-fg); } button.secondary:hover, .btn.secondary:hover { background: var(--color-fg); color: var(--color-bg); } /* Input Fields */ .input-field { display: flex; align-items: center; gap: var(--space-sm); flex-wrap: wrap; } .input-label { color: var(--color-muted); flex-shrink: 0; } input, textarea, select { font-family: var(--font-mono); font-size: var(--font-size-base); background: var(--color-input-bg); color: var(--color-fg); border: var(--border-width) solid var(--color-fg); padding: var(--space-sm) var(--space-md); outline: none; } input:focus, textarea:focus, select:focus { background: var(--color-input-focus); } input::placeholder { color: var(--color-muted); } /* Messages */ .message { padding: var(--space-sm) var(--space-md); border: var(--border-width) solid; } .message-success { color: var(--color-success); background: var(--color-success-bg); border-color: var(--color-success); } .message-error { color: var(--color-error); background: var(--color-error-bg); border-color: var(--color-error); } .message-info { color: var(--color-fg); background: var(--color-bg); border-color: var(--color-border); } /* Legacy support */ .error { color: var(--color-error); } .success { color: var(--color-success); } /* Form Layout */ .form-group { display: flex; flex-direction: column; gap: var(--space-sm); } .form-row { display: flex; align-items: center; gap: var(--space-md); flex-wrap: wrap; } /* Mobile Adjustments */ @media (max-width: 600px) { body { padding: var(--space-md); font-size: var(--font-size-sm); } .data-row { flex-wrap: wrap; } .data-cell { white-space: normal; } .input-field { flex-direction: column; align-items: flex-start; } input, textarea, select { width: 100%; } } /* Utility Classes */ .text-muted { color: var(--color-muted); } .text-success { color: var(--color-success); } .text-error { color: var(--color-error); } .text-warning { color: var(--color-warning); } .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }