:root { --bg: #0f1216; --bg-card: #161b22; --border: #2d333b; --text: #e6edf3; --text-muted: #8b949e; --accent: #3fb950; --accent-dim: #238636; --danger: #f85149; --warning: #d29922; --font-sans: "Outfit", system-ui, sans-serif; --font-mono: "JetBrains Mono", monospace; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; background: var(--bg); color: var(--text); font-family: var(--font-sans); font-size: 15px; line-height: 1.5; } .site-header { display: flex; align-items: center; justify-content: space-between; padding: 0.75rem 1.5rem; background: var(--bg-card); border-bottom: 1px solid var(--border); } .brand { display: flex; align-items: center; gap: 0.5rem; } .brand-icon { color: var(--accent); font-size: 1.25rem; } .brand-text { font-weight: 600; font-family: var(--font-mono); } .nav { display: flex; align-items: center; gap: 1.25rem; } .nav a { color: var(--text-muted); text-decoration: none; } .nav a:hover { color: var(--accent); } .nav .user { color: var(--text-muted); font-size: 0.9rem; padding-left: 0.5rem; border-left: 1px solid var(--border); } .logout { color: var(--danger) !important; } .main { max-width: 1280px; margin: 0 auto; padding: 1.5rem; } .flashes { list-style: none; padding: 0; margin: 0 0 1rem; } .flash { padding: 0.6rem 1rem; border-radius: 6px; margin-bottom: 0.5rem; } .flash.error { background: rgba(248, 81, 73, 0.15); color: var(--danger); border: 1px solid rgba(248, 81, 73, 0.3); } .flash.success { background: rgba(63, 185, 80, 0.15); color: var(--accent); border: 1px solid rgba(63, 185, 80, 0.3); } .flash.info { background: rgba(139, 148, 158, 0.15); color: var(--text-muted); border: 1px solid var(--border); } /* Login */ .login-card { max-width: 380px; margin: 4rem auto; padding: 2rem; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; } .login-card h1 { margin: 0 0 0.5rem; font-size: 1.5rem; } .login-hint { color: var(--text-muted); font-size: 0.9rem; margin-bottom: 1.5rem; } .login-hint code { font-family: var(--font-mono); background: var(--bg); padding: 0.15rem 0.4rem; border-radius: 4px; } .login-form label { display: block; margin-top: 1rem; margin-bottom: 0.35rem; color: var(--text-muted); font-size: 0.9rem; } .login-form input { width: 100%; padding: 0.6rem 0.75rem; font-size: 1rem; font-family: inherit; background: var(--bg); border: 1px solid var(--border); border-radius: 6px; color: var(--text); } .login-form input:focus { outline: none; border-color: var(--accent); } .login-form button { margin-top: 1.5rem; width: 100%; padding: 0.65rem; font-size: 1rem; font-weight: 600; font-family: inherit; background: var(--accent); color: var(--bg); border: none; border-radius: 6px; cursor: pointer; } .login-form button:hover { background: var(--accent-dim); } /* Dashboard */ .dashboard h1 { margin: 0 0 0.5rem; font-size: 1.75rem; } .lead { color: var(--text-muted); margin-bottom: 2rem; } .lead code { font-family: var(--font-mono); background: var(--bg-card); padding: 0.15rem 0.4rem; border-radius: 4px; } .table-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1rem; } .card { display: block; padding: 1.25rem; background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; text-decoration: none; color: inherit; transition: border-color 0.15s, box-shadow 0.15s; } .card:hover { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); } .card-icon { font-family: var(--font-mono); font-size: 0.8rem; color: var(--accent); display: block; margin-bottom: 0.5rem; } .card h2 { margin: 0 0 0.35rem; font-size: 1.15rem; } .card p { margin: 0; color: var(--text-muted); font-size: 0.9rem; } /* Table view */ .table-page { margin-top: 0; } .table-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; margin-bottom: 1rem; } .table-header-actions { display: flex; align-items: center; gap: 1rem; } .btn-primary { padding: 0.5rem 1rem; font-size: 0.9rem; font-weight: 600; font-family: inherit; background: var(--accent); color: var(--bg); border: none; border-radius: 6px; text-decoration: none; display: inline-block; } .btn-primary:hover { background: var(--accent-dim); color: var(--bg); } .table-header h1 { margin: 0; font-size: 1.35rem; } .table-header h1 code { font-family: var(--font-mono); color: var(--accent); } .back { color: var(--text-muted); text-decoration: none; } .back:hover { color: var(--accent); } .table-wrapper { overflow-x: auto; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-card); } .data-table { width: 100%; border-collapse: collapse; font-size: 0.9rem; } .data-table th, .data-table td { padding: 0.6rem 0.75rem; text-align: left; border-bottom: 1px solid var(--border); } .data-table th { font-weight: 600; color: var(--text-muted); font-family: var(--font-mono); font-size: 0.8rem; text-transform: lowercase; white-space: nowrap; } .data-table td { max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .data-table tbody tr:hover { background: rgba(255, 255, 255, 0.03); } .data-table .actions { max-width: none; white-space: nowrap; } .data-table .actions a, .data-table .actions button { margin-right: 0.5rem; font-size: 0.85rem; } .data-table .actions a { color: var(--accent); text-decoration: none; } .data-table .actions a:hover { text-decoration: underline; } .data-table .actions button { padding: 0.25rem 0.5rem; font-family: inherit; font-size: 0.85rem; background: var(--bg); border: 1px solid var(--border); border-radius: 4px; color: var(--text); cursor: pointer; } .data-table .actions button:hover { border-color: var(--accent); color: var(--accent); } .data-table .actions button.danger { color: var(--danger); border-color: rgba(248, 81, 73, 0.4); } .data-table .actions button.danger:hover { background: rgba(248, 81, 73, 0.1); } .inline-form { display: inline; } .empty { color: var(--text-muted); padding: 2rem; text-align: center; } /* Forms */ .form-page { max-width: 420px; } .form-page h1 { margin: 0 0 1rem; font-size: 1.35rem; } .form-page h1 code { font-family: var(--font-mono); color: var(--accent); } .edit-form label { display: block; margin-top: 1rem; margin-bottom: 0.35rem; color: var(--text-muted); font-size: 0.9rem; } .edit-form input[type="text"], .edit-form input[type="password"], .edit-form select { width: 100%; padding: 0.6rem 0.75rem; font-size: 1rem; font-family: inherit; background: var(--bg-card); border: 1px solid var(--border); border-radius: 6px; color: var(--text); } .edit-form input:focus, .edit-form select:focus { outline: none; border-color: var(--accent); } .checkbox-label { display: flex; align-items: center; gap: 0.5rem; margin-top: 1rem; cursor: pointer; } .checkbox-label input { width: auto; } .form-actions { margin-top: 1.5rem; display: flex; align-items: center; gap: 1rem; } .edit-form button { padding: 0.6rem 1.2rem; font-size: 1rem; font-weight: 600; font-family: inherit; background: var(--accent); color: var(--bg); border: none; border-radius: 6px; cursor: pointer; } .edit-form button:hover { background: var(--accent-dim); } .btn-link { color: var(--text-muted); text-decoration: none; } .btn-link:hover { color: var(--accent); } .form-page p { margin-top: 1.5rem; } .form-page p a { color: var(--accent); text-decoration: none; } .form-page p a:hover { text-decoration: underline; }