ClubLedger/static/style.css
Claude a5b4ed8389
style: redesign UI to GitHub-esque aesthetic
Replaces the dark-navy nav and blue-tinted palette with GitHub's
design language: #24292f header, canvas-subtle body (#f6f8fa),
d0d7de borders, GitHub's font stack, green primary buttons, blue
accents, uppercase muted table headers, and focus rings.

https://claude.ai/code/session_01JuRTR5Xjx8emQsyerBgGU7
2026-05-30 17:33:58 +00:00

411 lines
10 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ClubLedger GitHub-style theme */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--canvas: #ffffff;
--canvas-subtle: #f6f8fa;
--border: #d0d7de;
--border-muted: #d8dee4;
--fg: #1f2328;
--fg-muted: #59636e;
--fg-subtle: #818b98;
--accent: #0969da;
--accent-muted: #ddf4ff;
--success: #1a7f37;
--success-muted: #dafbe1;
--danger: #d1242f;
--danger-muted: #ffebe9;
--nav-bg: #24292f;
--nav-text: #f0f6fc;
--radius: 6px;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.5;
background: var(--canvas-subtle);
color: var(--fg);
min-height: 100vh;
}
/* ---- Nav ---- */
nav {
background: var(--nav-bg);
color: var(--nav-text);
display: flex;
align-items: center;
padding: 0 16px;
height: 48px;
gap: 4px;
position: sticky;
top: 0;
z-index: 100;
}
.brand {
font-size: 1rem;
font-weight: 600;
color: #fff;
margin-right: 12px;
white-space: nowrap;
display: flex;
align-items: center;
gap: 6px;
}
.brand::before {
content: "";
display: inline-block;
width: 20px;
height: 20px;
background: #fff;
border-radius: 50%;
opacity: .9;
}
.nav-btn, .nav-link {
background: transparent;
border: 1px solid transparent;
color: rgba(240,246,252,.7);
padding: 0 12px;
height: 32px;
line-height: 30px;
border-radius: var(--radius);
cursor: pointer;
font-size: .875rem;
font-family: inherit;
white-space: nowrap;
text-decoration: none;
display: inline-flex;
align-items: center;
transition: color .1s, background .1s, border-color .1s;
}
.nav-btn:hover, .nav-link:hover {
color: var(--nav-text);
background: rgba(177,186,196,.12);
}
.nav-btn.active, .nav-link.active {
color: #fff;
background: rgba(177,186,196,.12);
border-color: rgba(240,246,252,.3);
font-weight: 600;
}
/* ---- Views ---- */
.view { max-width: 960px; margin: 24px auto; padding: 0 16px; display: flex; flex-direction: column; gap: 20px; }
.hidden { display: none !important; }
/* ---- Panel ---- */
.panel {
background: var(--canvas);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 20px 24px;
}
.panel h2 {
font-size: 1rem;
font-weight: 600;
padding-bottom: 12px;
margin-bottom: 16px;
border-bottom: 1px solid var(--border);
color: var(--fg);
}
/* ---- Forms ---- */
.form-row { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }
.form-row label {
font-size: .8125rem;
font-weight: 600;
color: var(--fg);
}
.form-row input,
.form-row select,
.form-row textarea {
padding: 5px 12px;
border: 1px solid var(--border);
border-radius: var(--radius);
font-size: .875rem;
font-family: inherit;
background: var(--canvas);
color: var(--fg);
outline: none;
transition: border-color .15s, box-shadow .15s;
line-height: 20px;
}
.form-row input:focus,
.form-row select:focus,
.form-row textarea:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px rgba(9,105,218,.12);
}
.form-row select { cursor: pointer; }
.form-row textarea { resize: vertical; min-height: 64px; }
.search-row { display: flex; gap: 8px; margin-bottom: 12px; }
.search-row input {
flex: 1;
padding: 5px 12px;
border: 1px solid var(--border);
border-radius: var(--radius);
font-size: .875rem;
font-family: inherit;
background: var(--canvas);
outline: none;
transition: border-color .15s, box-shadow .15s;
}
.search-row input:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px rgba(9,105,218,.12);
}
/* ---- Buttons ---- */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 5px 16px;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--canvas-subtle);
color: var(--fg);
cursor: pointer;
font-size: .875rem;
font-family: inherit;
font-weight: 500;
line-height: 20px;
white-space: nowrap;
transition: background .1s, border-color .1s;
margin-right: 4px;
}
.btn:hover { background: #f3f4f6; border-color: rgba(31,35,40,.3); }
.btn-primary {
background: #1f883d;
color: #fff;
border-color: rgba(31,35,40,.15);
}
.btn-primary:hover { background: #1a7f37; }
.btn-danger {
background: #d1242f;
color: #fff;
border-color: rgba(31,35,40,.15);
}
.btn-danger:hover { background: #b91c28; }
/* ---- Data table ---- */
.data-table { width: 100%; border-collapse: collapse; font-size: .8125rem; margin-top: 4px; }
.data-table th {
background: var(--canvas-subtle);
padding: 8px 12px;
text-align: left;
font-weight: 600;
color: var(--fg-muted);
font-size: .75rem;
text-transform: uppercase;
letter-spacing: .04em;
border-top: 1px solid var(--border);
border-bottom: 1px solid var(--border);
}
.data-table td { padding: 10px 12px; border-bottom: 1px solid var(--border-muted); }
.data-table tr:last-child td { border-bottom: none; }
.data-table tbody tr:hover td { background: var(--canvas-subtle); }
.num { text-align: right; font-variant-numeric: tabular-nums; }
.balance-pos { color: var(--success); font-weight: 600; }
.balance-neg { color: var(--danger); font-weight: 600; }
/* ---- Member pick list ---- */
.member-pick-list { margin-bottom: 12px; display: flex; flex-direction: column; gap: 1px; }
.member-pick-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 14px;
background: var(--canvas);
border: 1px solid var(--border);
border-radius: var(--radius);
cursor: pointer;
transition: background .1s, border-color .1s;
}
.member-pick-item:hover { background: var(--canvas-subtle); border-color: var(--accent); }
.member-pick-name { font-weight: 600; font-size: .875rem; }
.member-pick-sub { font-size: .75rem; color: var(--fg-muted); }
/* ---- Selected member box ---- */
.selected-member-box {
background: var(--accent-muted);
border: 1px solid #b6e3ff;
border-radius: var(--radius);
padding: 10px 14px;
margin-bottom: 14px;
font-size: .875rem;
color: var(--fg);
}
.selected-member-box strong { font-size: .9375rem; font-weight: 600; }
/* ---- Cashier dual-action panels ---- */
.cashier-action-panel {
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 16px;
margin-bottom: 10px;
background: var(--canvas);
}
.cashier-action-panel h3 {
margin: 0 0 12px;
font-size: .6875rem;
font-weight: 600;
color: var(--fg-muted);
text-transform: uppercase;
letter-spacing: .06em;
}
/* ---- Product results ---- */
.product-results { margin-bottom: 12px; }
.product-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 12px;
border: 1px solid var(--border);
border-radius: var(--radius);
margin-bottom: 4px;
cursor: pointer;
font-size: .875rem;
transition: background .1s;
}
.product-item:hover { background: var(--canvas-subtle); border-color: var(--accent); }
.product-price { font-weight: 700; color: var(--accent); }
/* ---- Staff chips ---- */
.staff-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.staff-chip {
display: inline-flex;
align-items: center;
gap: 4px;
background: var(--canvas-subtle);
border: 1px solid var(--border);
border-radius: 2em;
padding: 2px 8px 2px 10px;
font-size: .8125rem;
color: var(--fg);
}
.chip-del {
background: none;
border: none;
cursor: pointer;
color: var(--fg-subtle);
font-size: .9rem;
line-height: 1;
padding: 0 1px;
}
.chip-del:hover { color: var(--danger); }
/* ---- Select / dropdown (standalone, outside form-row) ---- */
select {
font-family: inherit;
}
/* ---- Row action buttons ---- */
.row-actions { white-space: nowrap; }
.row-btn { padding: 3px 10px !important; font-size: .75rem !important; margin-right: 4px !important; }
/* ---- Edit modal ---- */
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(31,35,40,.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 200;
}
.modal {
background: var(--canvas);
border: 1px solid var(--border);
border-radius: 12px;
padding: 24px 28px;
width: 440px;
max-width: calc(100vw - 32px);
box-shadow: 0 8px 24px rgba(140,149,159,.2);
}
.modal h3 {
font-size: 1rem;
font-weight: 600;
padding-bottom: 12px;
margin-bottom: 16px;
border-bottom: 1px solid var(--border);
}
.modal-actions { display: flex; gap: 8px; margin-top: 16px; }
/* ---- Messages / flash ---- */
.msg {
margin-top: 10px;
padding: 8px 14px;
border-radius: var(--radius);
font-size: .8125rem;
border: 1px solid transparent;
}
.msg:empty { display: none; }
.msg.ok { background: var(--success-muted); color: #0a3622; border-color: #a4e6b8; }
.msg.err { background: var(--danger-muted); color: #67060c; border-color: #ffcec7; }
/* ---- Login overlay ---- */
.login-overlay {
position: fixed;
inset: 0;
background: var(--canvas-subtle);
display: flex;
align-items: center;
justify-content: center;
z-index: 500;
}
.login-card {
background: var(--canvas);
border: 1px solid var(--border);
border-radius: 12px;
padding: 36px 40px;
width: 360px;
max-width: calc(100vw - 32px);
box-shadow: 0 8px 24px rgba(140,149,159,.2);
}
.login-card h1 {
font-size: 1.25rem;
font-weight: 600;
text-align: center;
margin-bottom: 4px;
}
.login-sub { text-align: center; color: var(--fg-muted); font-size: .8125rem; margin-bottom: 20px; }
/* ---- Nav right (user + logout) ---- */
.nav-right { margin-left: auto; display: flex; align-items: center; gap: 10px; }
.nav-user { color: rgba(240,246,252,.7); font-size: .8125rem; }
.nav-logout {
background: transparent;
border: 1px solid rgba(240,246,252,.3);
color: rgba(240,246,252,.7);
padding: 3px 12px;
border-radius: var(--radius);
cursor: pointer;
font-size: .8125rem;
font-family: inherit;
transition: color .1s, border-color .1s;
}
.nav-logout:hover { color: var(--nav-text); border-color: rgba(240,246,252,.5); }
/* ---- Admin form extras ---- */
.label-hint { font-weight: 400; color: var(--fg-subtle); font-size: .75rem; }
.form-row-check { flex-direction: row !important; align-items: center; gap: 8px; }
.form-row-check label { font-weight: 400; color: var(--fg); font-size: .875rem; }
.panel-divider { border: none; border-top: 1px solid var(--border); margin: 18px 0; }
.sub-heading { font-size: .875rem; font-weight: 600; margin-bottom: 12px; color: var(--fg); }