497 lines
16 KiB
CSS
497 lines
16 KiB
CSS
:root {
|
|
--bg: #0b0b0b;
|
|
--panel: #1b1b1b;
|
|
--field: #101010;
|
|
--ink: #f2f2f2;
|
|
--muted: #aaa;
|
|
--brand: #2f8f3a;
|
|
--brand-dark: #3baa48;
|
|
--accent: #2d6cdf;
|
|
--good: #2f8f3a;
|
|
--warn: #d9822b;
|
|
--bad: #d65b4f;
|
|
--line: #333;
|
|
--shadow: 0 8px 24px rgba(0, 0, 0, 0.40);
|
|
--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: linear-gradient(rgba(11,11,11,.82), rgba(11,11,11,.92)), 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(82,82,82,.58), rgba(54,54,54,.44));
|
|
border-bottom: 1px solid var(--line);
|
|
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 var(--line);
|
|
border-radius: 10px;
|
|
background: rgba(16,16,16,.84);
|
|
}
|
|
.header-entries.is-collapsed tbody { display: none; }
|
|
.header-entries thead { cursor: pointer; user-select: none; }
|
|
.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; }
|
|
.compact-entries-table tr.past-entry { opacity: .58; }
|
|
.compact-entries-table tr.past-entry td:first-child strong { text-decoration: line-through; }
|
|
.header-warning {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 1.45rem;
|
|
padding: .22rem .45rem;
|
|
border-radius: 999px;
|
|
background: rgba(217,130,43,.18);
|
|
color: var(--warn);
|
|
border: 1px solid rgba(217,130,43,.55);
|
|
font-size: .72rem;
|
|
font-weight: 800;
|
|
line-height: 1;
|
|
}
|
|
.header-warning.bad { background: rgba(214,91,79,.22); color: #f0aaa3; border-color: rgba(214,91,79,.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: var(--field);
|
|
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: var(--ink); border-color: var(--accent); transform: none; }
|
|
.planner-column-header {
|
|
margin-top: .15rem;
|
|
border-top: 1px solid var(--line);
|
|
padding-top: .1rem;
|
|
}
|
|
.planner-header-table th {
|
|
border-bottom: 0;
|
|
padding: .18rem .45rem;
|
|
line-height: 1;
|
|
font-size: .68rem;
|
|
}
|
|
.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(27,27,27,.88);
|
|
border: 1px solid var(--line);
|
|
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; }
|
|
.header-cards .card {
|
|
display: flex;
|
|
align-items: baseline;
|
|
justify-content: center;
|
|
gap: .28rem;
|
|
padding: .18rem .32rem;
|
|
border-radius: 8px;
|
|
box-shadow: none;
|
|
}
|
|
.header-cards .card .label { font-size: .58rem; white-space: nowrap; }
|
|
.header-cards .card .value { font-size: 1.18rem; margin: 0; }
|
|
.header-cards .card .hint { display: none; }
|
|
.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: var(--field);
|
|
}
|
|
textarea { resize: vertical; }
|
|
input:focus, select:focus, textarea:focus { outline: 3px solid rgba(217,130,43,.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: var(--field);
|
|
color: var(--ink);
|
|
border: 1px solid var(--accent);
|
|
}
|
|
button.ghost:hover { background: var(--accent); color: var(--ink); }
|
|
button.small { padding: .36rem .55rem; font-size: .78rem; }
|
|
button.danger { background: #5a2320; color: var(--ink); border: 1px solid #5a2320; }
|
|
.actions { display: flex; justify-content: flex-end; gap: .6rem; }
|
|
.help-text { color: var(--muted); margin: 0; font-size: .9rem; }
|
|
.danger-zone { display: flex; justify-content: flex-end; }
|
|
.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); }
|
|
.planner-body-table tr.past-month { opacity: .78; }
|
|
.planner-body-table tr.past-month td:first-child { color: var(--muted); }
|
|
.planner-body-table tr.past-month .balance-override-input { opacity: .9; }
|
|
.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: #333;
|
|
color: var(--ink);
|
|
font-size: .78rem;
|
|
font-weight: 800;
|
|
}
|
|
.pill.approved, .pill.confirmed { background: #17351a; color: var(--ink); }
|
|
.pill.unpaid { background: rgba(217,130,43,.22); color: var(--brand-dark); }
|
|
.important-col { background: rgba(47,143,58,.14); font-size: 1.18rem; font-weight: 900; }
|
|
.important-col .balance-override-input { font-size: 1.05rem; font-weight: 900; }
|
|
.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(217,130,43,.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); }
|
|
.month-entry.past-vacation-entry > strong { text-decoration: line-through; }
|
|
.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)); }
|
|
.header-cards { grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
|
.two-col { grid-template-columns: 1fr; }
|
|
.form-grid.compact { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
}
|
|
|
|
@media (max-width: 680px) {
|
|
body { font-size: 14px; }
|
|
.floating-header { padding: .25rem .3rem; }
|
|
.cards, .header-cards { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .18rem; }
|
|
.card { padding: .28rem .32rem; min-width: 0; }
|
|
.header-cards .card { flex-direction: column; align-items: center; gap: .02rem; padding: .18rem .16rem; }
|
|
.card .label { font-size: .48rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
|
|
.card .value { font-size: .76rem; line-height: 1.05; }
|
|
.card .hint { display: none; }
|
|
.header-cards .card { padding: .14rem .2rem; gap: .18rem; }
|
|
.header-cards .card .label { font-size: .48rem; }
|
|
.header-cards .card .value { font-size: 1.18rem; }
|
|
|
|
.header-entries { padding: .16rem .22rem; margin: .16rem 0; }
|
|
.header-entries .table-wrap { overflow-x: visible; overflow-y: visible; }
|
|
.compact-entries-table,
|
|
.compact-entries-table tbody { display: block; width: 100%; }
|
|
.compact-entries-table thead { display: table-header-group; cursor: pointer; }
|
|
.compact-entries-table tbody tr {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) repeat(4, auto);
|
|
gap: .12rem .32rem;
|
|
align-items: center;
|
|
padding: .18rem 0;
|
|
border-bottom: 1px solid rgba(51,51,51,.85);
|
|
}
|
|
.compact-entries-table tbody tr:last-child { border-bottom: 0; }
|
|
.compact-entries-table td {
|
|
display: block;
|
|
border-bottom: 0;
|
|
padding: 0;
|
|
white-space: normal;
|
|
line-height: 1.05;
|
|
}
|
|
.compact-entries-table th { padding: .12rem .2rem; font-size: .62rem; }
|
|
.compact-entries-table td:nth-child(1) { grid-column: 1 / -1; min-width: 0; }
|
|
.compact-entries-table td:nth-child(2)::before { content: 'wd '; color: var(--muted); font-weight: 700; }
|
|
.compact-entries-table td:nth-child(3)::before { content: 'vd '; color: var(--muted); font-weight: 700; }
|
|
.compact-entries-table td:nth-child(4)::before { content: 'ff '; color: var(--muted); font-weight: 700; }
|
|
.compact-entries-table td:nth-child(5)::before { content: 'fl '; color: var(--muted); font-weight: 700; }
|
|
.compact-entries-table td:nth-child(6) { grid-column: 1 / 2; }
|
|
.compact-entries-table td:nth-child(7) { grid-column: 2 / -1; }
|
|
.compact-entries-table .entry-actions { justify-content: flex-end; gap: .18rem; }
|
|
.compact-entries-table .pill { font-size: .62rem; padding: .08rem .28rem; }
|
|
.compact-entries-table button.small { padding: .2rem .34rem; font-size: .62rem; }
|
|
.entry-date { font-size: .6rem; }
|
|
|
|
.header-warning-row { gap: .25rem; align-items: center; }
|
|
.header-warning-list { flex: 1 1 auto; }
|
|
.header-action-list { flex: none; }
|
|
.header-warning, .header-action-button { min-height: 1.2rem; font-size: .62rem; padding: .14rem .3rem; }
|
|
|
|
main { padding: 0 .3rem 3rem; }
|
|
.planner-column-header { display: none; }
|
|
.planner-panel .table-wrap { overflow: visible; }
|
|
.month-table,
|
|
.planner-body-table,
|
|
.planner-body-table tbody { display: block; width: 100%; min-width: 0; }
|
|
.planner-body-table tr {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: .18rem .28rem;
|
|
padding: .42rem 0;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
.planner-body-table td {
|
|
display: block;
|
|
border-bottom: 0;
|
|
padding: 0;
|
|
min-width: 0;
|
|
}
|
|
.planner-body-table td:nth-child(1) {
|
|
grid-column: 1 / 2;
|
|
}
|
|
.planner-body-table td:nth-child(2) {
|
|
grid-column: 2 / -1;
|
|
min-width: 0;
|
|
}
|
|
.planner-body-table td:nth-child(n+3) {
|
|
text-align: left;
|
|
}
|
|
.planner-body-table td:nth-child(3)::before { content: 'VD'; }
|
|
.planner-body-table td:nth-child(4)::before { content: 'FF'; }
|
|
.planner-body-table td:nth-child(5)::before { content: 'FLEX'; }
|
|
.planner-body-table td:nth-child(6)::before { content: 'Total'; }
|
|
.planner-body-table td:nth-child(n+3)::before {
|
|
display: block;
|
|
color: var(--muted);
|
|
font-size: .52rem;
|
|
font-weight: 900;
|
|
text-transform: uppercase;
|
|
letter-spacing: .04em;
|
|
margin-bottom: .12rem;
|
|
}
|
|
.month-table th:nth-child(1), .month-table td:nth-child(1),
|
|
.month-table th:nth-child(2), .month-table td:nth-child(2),
|
|
.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: auto; }
|
|
.month-table td.entries { min-width: 0; }
|
|
.month-entry { margin: .05rem 0 .18rem; }
|
|
.planner-entry-meta { display: block; margin-left: 0; font-size: .64rem; }
|
|
.planner-entry-dates { font-size: .6rem; }
|
|
.balance-override-input { width: 100%; max-width: 4.8rem; padding: .22rem .25rem; font-size: .75rem; }
|
|
.important-col { border-radius: 8px; padding: .2rem .25rem !important; }
|
|
|
|
.modal { width: calc(100vw - .8rem); max-height: calc(100dvh - .8rem); padding: .75rem; overflow: auto; }
|
|
.modal-heading { margin-bottom: .7rem; }
|
|
.form-grid, .form-grid.compact { grid-template-columns: 1fr; gap: .55rem; }
|
|
input, select, textarea { padding: .62rem .68rem; }
|
|
th, td { padding: .45rem .35rem; }
|
|
}
|