378 lines
11 KiB
CSS
378 lines
11 KiB
CSS
:root {
|
|
--bg: #111315;
|
|
--panel: #1B1E22;
|
|
--ink: #F3F4F6;
|
|
--muted: #A0A4AB;
|
|
--brand: #C46A3A;
|
|
--brand-dark: #d97b48;
|
|
--accent: #3BA7A0;
|
|
--good: #3BA7A0;
|
|
--warn: #C46A3A;
|
|
--bad: #B32626;
|
|
--line: rgba(59,167,160,.35);
|
|
--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(59,167,160,.16), transparent 32rem), radial-gradient(circle at top right, rgba(196,106,58,.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(27,30,34,.94), rgba(27,30,34,.78));
|
|
border-bottom: 1px solid rgba(59,167,160,.35);
|
|
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(59,167,160,.28);
|
|
border-radius: 10px;
|
|
background: rgba(17,19,21,.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(196,106,58,.18);
|
|
color: var(--brand-dark);
|
|
border: 1px solid rgba(196,106,58,.55);
|
|
font-size: .72rem;
|
|
font-weight: 800;
|
|
line-height: 1;
|
|
}
|
|
.header-warning.bad { background: rgba(139,30,30,.35); color: #ffb4b4; border-color: rgba(179,38,38,.7); }
|
|
.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: #111315;
|
|
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: #111315; border-color: var(--accent); transform: none; }
|
|
.planner-column-header {
|
|
margin-top: .25rem;
|
|
border-top: 1px solid rgba(59,167,160,.25);
|
|
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(27,30,34,.92);
|
|
border: 1px solid rgba(59,167,160,.35);
|
|
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: #111315;
|
|
}
|
|
textarea { resize: vertical; }
|
|
input:focus, select:focus, textarea:focus { outline: 3px solid rgba(196,106,58,.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: #111315;
|
|
color: var(--ink);
|
|
border: 1px solid var(--accent);
|
|
}
|
|
button.ghost:hover { background: var(--accent); color: #111315; }
|
|
button.small { padding: .36rem .55rem; font-size: .78rem; }
|
|
button.danger { background: #8B1E1E; color: var(--ink); border: 1px solid #8B1E1E; }
|
|
.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),
|
|
.month-table th:nth-child(7), .month-table td:nth-child(7) { 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(196,106,58,.22); color: var(--brand-dark); }
|
|
.important-col { background: rgba(59,167,160,.12); font-size: 1rem; }
|
|
.correction-cell { min-width: 5.2rem; }
|
|
.correction-input {
|
|
width: 4.8rem;
|
|
padding: .28rem .35rem;
|
|
text-align: right;
|
|
font-size: .85rem;
|
|
}
|
|
|
|
.warnings { display: grid; gap: .55rem; }
|
|
.warning {
|
|
border-left: 4px solid var(--warn);
|
|
background: rgba(196,106,58,.16);
|
|
padding: .65rem .75rem;
|
|
border-radius: 12px;
|
|
}
|
|
.warning.bad { border-left-color: var(--bad); background: rgba(139,30,30,.32); }
|
|
.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; }
|
|
}
|