go/style.css

381 lines
11 KiB
CSS

:root {
--bg: #18120F;
--panel: #241A16;
--ink: #F5EADC;
--muted: #B9A89A;
--brand: #C9874A;
--brand-dark: #E0A15F;
--accent: #A38A63;
--good: #A38A63;
--warn: #C9874A;
--bad: #D96B5F;
--line: rgba(163,138,99,.32);
--shadow: 0 2px 16px rgba(0, 0, 0, 0.55);
--radius: 14px;
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: radial-gradient(circle at top left, rgba(163,138,99,.16), transparent 32rem), radial-gradient(circle at top right, rgba(201,135,74,.14), transparent 30rem), var(--bg);
color: var(--ink);
}
.floating-header {
position: sticky;
top: 0;
z-index: 50;
padding: .35rem clamp(.45rem, 2vw, 1.25rem);
background: linear-gradient(180deg, rgba(36,26,22,.96), rgba(36,26,22,.82));
border-bottom: 1px solid rgba(163,138,99,.32);
box-shadow: 0 2px 16px #0008;
backdrop-filter: blur(12px);
}
.header-top {
display: flex;
justify-content: flex-end;
gap: .4rem;
align-items: center;
margin-bottom: .25rem;
}
.eyebrow {
margin: 0 0 .15rem;
color: var(--brand);
font-weight: 800;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .68rem;
}
h1, h2, p { margin-top: 0; }
h1 { margin-bottom: 0; font-size: clamp(1.05rem, 2.2vw, 1.45rem); line-height: 1; }
h2 { margin-bottom: 0; font-size: 1.1rem; }
.subhead { color: var(--muted); max-width: 58rem; margin-bottom: 0; }
.hero-actions { display: flex; flex-wrap: wrap; gap: .35rem; justify-content: flex-end; }
.header-warning-row {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: .45rem;
margin-top: .25rem;
}
.header-warning-list,
.header-action-list {
display: flex;
flex-wrap: wrap;
gap: .3rem;
}
.header-warning-list { justify-content: flex-start; min-width: 0; }
.header-action-list { justify-content: flex-end; flex: none; }
.header-entries {
margin: .25rem 0 .25rem;
padding: .25rem .35rem;
border: 1px solid rgba(163,138,99,.26);
border-radius: 10px;
background: rgba(24,18,15,.72);
}
.header-entries .table-wrap { overflow-x: auto; overflow-y: visible; }
.compact-entries-table { font-size: .74rem; }
.compact-entries-table th,
.compact-entries-table td { padding: .22rem .32rem; white-space: nowrap; line-height: 1.05; }
.compact-entries-table .pill { padding: .1rem .38rem; font-size: .68rem; }
.compact-entries-table .entry-actions { gap: .25rem; }
.compact-entries-table button.small { padding: .22rem .38rem; font-size: .68rem; }
.header-warning {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 1.45rem;
padding: .22rem .45rem;
border-radius: 999px;
background: rgba(201,135,74,.18);
color: var(--brand-dark);
border: 1px solid rgba(201,135,74,.50);
font-size: .72rem;
font-weight: 800;
line-height: 1;
}
.header-warning.bad { background: rgba(126,59,50,.36); color: #F1B5A9; border-color: rgba(217,107,95,.55); }
.header-action-button {
appearance: none;
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 1.45rem;
padding: .22rem .45rem;
border-radius: 999px;
background: #18120F;
color: var(--ink);
border: 1px solid var(--accent);
font-size: .72rem;
font-weight: 800;
cursor: pointer;
line-height: 1;
}
.header-action-button:hover { background: var(--accent); color: #18120F; border-color: var(--accent); transform: none; }
.planner-column-header {
margin-top: .25rem;
border-top: 1px solid rgba(163,138,99,.24);
padding-top: .2rem;
}
.planner-header-table th { border-bottom: 0; }
.planner-header-table th,
.planner-body-table td { padding: .55rem .45rem; }
.panel.planner-panel {
padding: 0;
border: 0;
background: transparent;
box-shadow: none;
}
main {
padding: 0 clamp(.45rem, 2vw, 1.25rem) 3rem;
}
.cards {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: .35rem;
margin-bottom: .25rem;
}
.card, .panel {
background: rgba(36,26,22,.92);
border: 1px solid rgba(163,138,99,.32);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
.card { padding: .36rem .45rem; }
.card .label { color: var(--muted); font-size: .64rem; line-height: 1.05; }
.card .value { font-size: 1rem; font-weight: 800; margin-top: .02rem; }
.card .hint { color: var(--muted); font-size: .6rem; margin-top: .02rem; line-height: 1.05; }
.card.bad .value { color: var(--bad); }
.card.warn .value { color: var(--warn); }
.card.good .value { color: var(--good); }
.grid { display: grid; gap: 1rem; margin-bottom: 1rem; }
.two-col { grid-template-columns: minmax(0, 1.1fr) minmax(22rem, .9fr); }
.panel { padding: 1rem; margin-bottom: 1rem; }
.panel-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
margin-bottom: 1rem;
}
.panel-heading p { color: var(--muted); margin-bottom: 0; font-size: .9rem; }
.form-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: .8rem;
}
.form-grid.compact { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.full { grid-column: 1 / -1; }
label {
display: grid;
gap: .35rem;
color: var(--muted);
font-size: .88rem;
font-weight: 650;
}
input, select, textarea {
width: 100%;
border: 1px solid var(--line);
border-radius: 10px;
padding: .7rem .8rem;
font: inherit;
color: var(--ink);
background: #18120F;
}
textarea { resize: vertical; }
input:focus, select:focus, textarea:focus { outline: 3px solid rgba(201,135,74,.22); border-color: var(--brand); }
.checkbox-row {
display: flex;
align-items: flex-start;
gap: .55rem;
grid-column: 1 / -1;
color: var(--ink);
font-weight: 600;
}
.checkbox-row input { width: auto; margin-top: .2rem; }
button {
border: 0;
border-radius: 999px;
background: var(--brand);
color: #fff;
padding: .55rem .8rem;
font: inherit;
font-weight: 800;
cursor: pointer;
transition: transform .12s ease, background .12s ease;
}
button:hover { background: var(--brand-dark); transform: translateY(-1px); }
button.ghost {
background: #18120F;
color: var(--ink);
border: 1px solid var(--accent);
}
button.ghost:hover { background: var(--accent); color: #18120F; }
button.small { padding: .36rem .55rem; font-size: .78rem; }
button.danger { background: #7E3B32; color: var(--ink); border: 1px solid #7E3B32; }
.actions { display: flex; justify-content: flex-end; gap: .6rem; }
.help-text { color: var(--muted); margin: 0; font-size: .9rem; }
.hidden { display: none !important; }
.quick-flex-form {
display: flex;
gap: .3rem;
align-items: center;
margin-top: .15rem;
}
.quick-flex-form input { min-width: 0; font-size: 1rem; font-weight: 800; padding: .36rem .42rem; }
.quick-flex-form button { flex: none; }
.modal {
width: min(46rem, calc(100vw - 2rem));
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 1rem;
color: var(--ink);
background: var(--panel);
box-shadow: 0 24px 80px rgba(0, 0, 0, .7);
}
.modal.wide { width: min(64rem, calc(100vw - 2rem)); }
.modal::backdrop { background: rgba(11, 13, 15, .78); backdrop-filter: blur(4px); }
.modal-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
margin-bottom: 1rem;
}
.table-wrap { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; font-size: .92rem; }
.month-table { table-layout: fixed; min-width: 760px; }
.month-table th:nth-child(1), .month-table td:nth-child(1) { width: 8.5rem; }
.month-table th:nth-child(2), .month-table td:nth-child(2) { width: auto; }
.month-table th:nth-child(3), .month-table td:nth-child(3),
.month-table th:nth-child(4), .month-table td:nth-child(4),
.month-table th:nth-child(5), .month-table td:nth-child(5),
.month-table th:nth-child(6), .month-table td:nth-child(6) { width: 7.2rem; }
th, td { padding: .75rem .65rem; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
th { color: var(--muted); font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; }
tbody tr:hover { background: rgba(255,255,255,.04); }
.num { text-align: right; font-variant-numeric: tabular-nums; }
.strong-num { font-weight: 900; color: var(--ink); }
.muted { color: var(--muted); }
.bad-text { color: var(--bad); font-weight: 800; }
.warn-text { color: var(--warn); font-weight: 800; }
.good-text { color: var(--good); font-weight: 800; }
.entry-actions { display: flex; gap: .4rem; justify-content: flex-end; }
.pill {
display: inline-flex;
align-items: center;
padding: .2rem .55rem;
border-radius: 999px;
background: #26383A;
color: var(--ink);
font-size: .78rem;
font-weight: 800;
}
.pill.approved, .pill.confirmed { background: #1f3b32; color: var(--ink); }
.pill.unpaid { background: rgba(201,135,74,.22); color: var(--brand-dark); }
.important-col { background: rgba(163,138,99,.13); font-size: 1rem; }
.balance-override-input {
width: 5.2rem;
padding: .28rem .35rem;
text-align: right;
font-size: .85rem;
}
.balance-override-input.is-overridden {
font-weight: 900;
color: var(--brand-dark);
border-color: var(--brand);
}
.warnings { display: grid; gap: .55rem; }
.warning {
border-left: 4px solid var(--warn);
background: rgba(201,135,74,.16);
padding: .65rem .75rem;
border-radius: 12px;
}
.warning.bad { border-left-color: var(--bad); background: rgba(126,59,50,.34); }
.warning.good { border-left-color: var(--good); background: rgba(31,59,50,.75); }
.years { display: grid; gap: 1.25rem; }
.year-block h3 { margin: 0 0 .65rem; }
.month-table td.entries { min-width: 15rem; }
.month-entry {
display: block;
margin: .15rem 0;
color: var(--ink);
}
.month-entry small { color: var(--muted); }
.entry-date { font-size: .68rem; }
.planner-entry-meta {
display: inline;
margin-left: .35rem;
font-size: .72rem;
line-height: 1.15;
}
.planner-entry-dates {
display: block;
font-size: .66rem;
line-height: 1.15;
}
.toast {
position: fixed;
right: 1rem;
bottom: 1rem;
background: var(--panel);
color: var(--ink);
border: 1px solid var(--accent);
padding: .8rem 1rem;
border-radius: 14px;
box-shadow: var(--shadow);
}
@media (max-width: 1050px) {
.cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.two-col { grid-template-columns: 1fr; }
.form-grid.compact { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 680px) {
.floating-header { padding: .3rem .4rem; }
.cards { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .28rem; }
.card { padding: .34rem .4rem; }
.card .label { font-size: .6rem; }
.card .value { font-size: .95rem; }
.card .hint { display: none; }
.quick-flex-form { margin-top: .06rem; }
.quick-flex-form input { padding: .26rem .32rem; font-size: .9rem; }
.quick-flex-form button { padding: .26rem .38rem; }
.header-entries { padding: .18rem .25rem; margin: .18rem 0; }
.header-entries .table-wrap { overflow-x: auto; overflow-y: visible; }
.compact-entries-table { font-size: .68rem; }
.compact-entries-table th, .compact-entries-table td { padding: .18rem .25rem; }
.header-warning-row { gap: .3rem; }
.header-warning, .header-action-button { min-height: 1.32rem; font-size: .68rem; padding: .18rem .36rem; }
main { padding: 0 .4rem 3rem; }
.planner-column-header { margin-top: .18rem; padding-top: .16rem; }
.planner-header-table th,
.planner-body-table td { padding: .42rem .32rem; }
.planner-header-table th { font-size: .68rem; }
.month-table { min-width: 680px; }
.form-grid, .form-grid.compact { grid-template-columns: 1fr; }
th, td { padding: .55rem .45rem; }
}