karuracc_dev_test/app/globals.css
David Kiania fafef34304 Add Next.js app with Supabase auth, notes feature, and Docker setup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 15:43:09 +03:00

306 lines
7 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Syne:wght@400;600;700;800&display=swap');
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0d0d0d;
--surface: #161616;
--border: #2a2a2a;
--amber: #f59e0b;
--amber-dim: #92400e;
--text: #e8e8e8;
--muted: #666;
--danger: #ef4444;
--success: #22c55e;
--radius: 4px;
--mono: 'IBM Plex Mono', monospace;
--sans: 'Syne', sans-serif;
}
html, body { height: 100%; background: var(--bg); color: var(--text); font-family: var(--sans); }
/* ── Utilities ────────────────────────────────── */
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
/* ── Page shell ───────────────────────────────── */
.page {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
background:
radial-gradient(ellipse 60% 40% at 50% 0%, #1c1200 0%, transparent 70%),
var(--bg);
}
/* ── Card ─────────────────────────────────────── */
.card {
width: 100%;
max-width: 440px;
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 2.5rem;
}
.card-title {
font-size: 1.6rem;
font-weight: 800;
letter-spacing: -0.03em;
margin-bottom: 0.25rem;
}
.card-sub {
font-family: var(--mono);
font-size: 0.75rem;
color: var(--muted);
margin-bottom: 2rem;
}
/* ── Form ─────────────────────────────────────── */
.field { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 1.25rem; }
label {
font-family: var(--mono);
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--muted);
}
input[type="email"],
input[type="password"],
input[type="text"],
textarea {
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius);
color: var(--text);
font-family: var(--mono);
font-size: 0.875rem;
padding: 0.65rem 0.9rem;
transition: border-color 0.15s;
width: 100%;
resize: vertical;
}
input:focus, textarea:focus {
outline: none;
border-color: var(--amber);
}
/* ── Buttons ──────────────────────────────────── */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
font-family: var(--mono);
font-size: 0.8rem;
font-weight: 500;
letter-spacing: 0.05em;
padding: 0.7rem 1.25rem;
border-radius: var(--radius);
cursor: pointer;
border: none;
transition: opacity 0.15s, transform 0.1s;
}
.btn:active { transform: scale(0.98); }
.btn:disabled { opacity: 0.4; cursor: not-allowed; }
.btn-primary {
background: var(--amber);
color: #000;
width: 100%;
}
.btn-primary:hover:not(:disabled) { opacity: 0.88; }
.btn-ghost {
background: transparent;
color: var(--muted);
border: 1px solid var(--border);
}
.btn-ghost:hover { color: var(--text); border-color: var(--text); }
.btn-danger {
background: transparent;
color: var(--danger);
border: 1px solid #3a1a1a;
font-size: 0.75rem;
padding: 0.35rem 0.75rem;
}
.btn-danger:hover { background: #1a0000; border-color: var(--danger); }
/* ── Feedback ─────────────────────────────────── */
.error-msg {
font-family: var(--mono);
font-size: 0.75rem;
color: var(--danger);
background: #1a0000;
border: 1px solid #3a0000;
border-radius: var(--radius);
padding: 0.6rem 0.9rem;
margin-bottom: 1rem;
}
.success-msg {
font-family: var(--mono);
font-size: 0.75rem;
color: var(--success);
background: #001a00;
border: 1px solid #003a00;
border-radius: var(--radius);
padding: 0.6rem 0.9rem;
margin-bottom: 1rem;
}
/* ── Link ─────────────────────────────────────── */
.link {
font-family: var(--mono);
font-size: 0.75rem;
color: var(--amber);
text-decoration: none;
text-align: center;
display: block;
margin-top: 1.25rem;
}
.link:hover { text-decoration: underline; }
/* ── Dashboard layout ─────────────────────────── */
.dashboard {
min-height: 100vh;
display: grid;
grid-template-rows: auto 1fr;
background: var(--bg);
}
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 2rem;
border-bottom: 1px solid var(--border);
background: var(--surface);
}
.topbar-brand {
font-size: 0.9rem;
font-weight: 700;
letter-spacing: 0.05em;
}
.topbar-brand span {
color: var(--amber);
}
.topbar-user {
font-family: var(--mono);
font-size: 0.72rem;
color: var(--muted);
display: flex;
align-items: center;
gap: 1rem;
}
.main-content {
max-width: 760px;
width: 100%;
margin: 0 auto;
padding: 2.5rem 2rem;
}
/* ── Notes ────────────────────────────────────── */
.section-label {
font-family: var(--mono);
font-size: 0.68rem;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--amber-dim);
margin-bottom: 1rem;
}
.note-form {
display: flex;
gap: 0.75rem;
margin-bottom: 2rem;
align-items: flex-end;
}
.note-form textarea {
flex: 1;
min-height: 72px;
}
.note-form .btn-primary {
width: auto;
white-space: nowrap;
align-self: flex-end;
}
.notes-list { display: flex; flex-direction: column; gap: 0.75rem; }
.note-item {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 1rem 1.1rem;
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 1rem;
animation: fadeIn 0.2s ease;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
.note-body {
font-size: 0.875rem;
line-height: 1.6;
flex: 1;
word-break: break-word;
white-space: pre-wrap;
}
.note-time {
font-family: var(--mono);
font-size: 0.65rem;
color: var(--muted);
margin-top: 0.4rem;
}
.empty-state {
font-family: var(--mono);
font-size: 0.78rem;
color: var(--muted);
text-align: center;
padding: 3rem 0;
border: 1px dashed var(--border);
border-radius: var(--radius);
}
/* ── Stack badge ──────────────────────────────── */
.stack-badge {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
margin-bottom: 2rem;
}
.badge {
font-family: var(--mono);
font-size: 0.65rem;
padding: 0.25rem 0.6rem;
border-radius: 2px;
background: #1a1a1a;
border: 1px solid var(--border);
color: var(--muted);
}
.badge.active {
border-color: var(--amber-dim);
color: var(--amber);
}