Files
stundenfuchs/app/static/css/components.css
T
maddin 6fbd1bb3c2
CI / checks (push) Has been cancelled
chore: initialize public repository
2026-03-22 12:57:09 +00:00

1612 lines
30 KiB
CSS

.app-brand-wrap {
align-items: center;
display: inline-flex;
gap: var(--space-5);
min-height: var(--badge-height);
}
.app-brand,
.brand {
align-items: center;
display: inline-flex;
}
.app-logo {
height: var(--logo-size);
width: var(--logo-size);
}
.app-total-badges {
align-items: center;
display: inline-flex;
gap: var(--space-3);
}
.app-total-badge {
background: var(--color-header-badge-bg);
border: 0;
border-radius: var(--radius-md);
color: var(--color-header-badge-text);
display: flex;
flex-direction: column;
gap: var(--space-1);
justify-content: center;
min-height: 2.5rem;
min-width: 4.5rem;
padding: var(--space-3) var(--space-3) var(--space-2);
text-align: center;
}
.app-total-badge__label {
color: var(--color-header-badge-label);
font-size: var(--font-size-xs);
font-weight: var(--font-weight-bold);
line-height: 1;
}
.app-total-badge__value {
color: var(--color-header-badge-text);
font-size: var(--font-size-xl);
font-weight: var(--font-weight-bold);
letter-spacing: -0.02em;
line-height: 1;
}
.settings-counter-badges {
justify-content: center;
margin-top: var(--space-2);
width: 100%;
}
.settings-counter-badges .app-total-badge {
gap: calc(var(--space-1) * 1.5);
min-height: calc(2.5rem * 1.5);
min-width: calc(4.5rem * 1.5);
padding: calc(var(--space-3) * 1.5) calc(var(--space-3) * 1.5) calc(var(--space-2) * 1.5);
}
.settings-counter-badges .app-total-badge__label {
font-size: var(--font-size-sm);
}
.settings-counter-badges .app-total-badge__value {
font-size: var(--font-size-2xl);
}
.settings-workhours-form {
margin-top: var(--space-4);
}
.settings-workhours-inline-grid {
align-items: start;
}
.settings-workhours-field {
align-content: start;
grid-template-rows: auto minmax(var(--input-height), auto);
}
.settings-workhours-field-hint {
margin-top: calc(var(--space-3) * -1);
}
.app-total-badge-vacation .app-total-badge__value {
color: var(--color-warning);
}
.app-total-badge-workhours .app-total-badge__value {
color: var(--color-workhours);
}
.app-total-badge-target .app-total-badge__value {
color: var(--color-text);
}
.app-total-badge-projection .app-total-badge__value {
color: var(--color-workhours);
}
.app-total-badge-projection.is-positive .app-total-badge__value {
color: var(--color-success-strong);
}
.app-total-badge.is-negative .app-total-badge__value {
color: var(--color-danger-strong);
}
.app-total-badge.is-positive .app-total-badge__value {
color: var(--color-success);
}
.segmented-toggle {
align-items: stretch;
display: inline-flex;
gap: var(--space-2);
}
.segmented-toggle__item {
align-items: center;
border: var(--border-width-1) solid transparent;
border-radius: var(--radius-sm);
color: var(--color-link);
display: inline-flex;
font-size: var(--font-size-md);
font-weight: var(--font-weight-medium);
height: var(--control-h);
justify-content: center;
line-height: 1;
min-width: calc(var(--control-h) + var(--space-3));
padding: 0 var(--space-3);
text-decoration: none;
}
.segmented-toggle__item:hover {
text-decoration: none;
}
.segmented-toggle__item.is-active {
background: var(--color-badge-bg);
color: var(--color-bg);
font-weight: var(--font-weight-bold);
}
.topbar-toggle .segmented-toggle__item {
border-radius: var(--radius-md);
font-size: var(--font-size-lg);
font-weight: var(--font-weight-bold);
height: var(--badge-height);
min-width: auto;
padding: var(--badge-pad-top) var(--space-3) var(--badge-pad-bottom);
}
.auth-toggle .segmented-toggle__item {
font-size: var(--font-size-xs);
min-width: auto;
padding: 0 var(--space-2);
}
.app-icon-nav {
align-items: center;
display: inline-flex;
gap: var(--space-3);
}
.icon-button,
.app-icon-btn {
align-items: center;
background: transparent;
border: var(--border-width-1) solid transparent;
border-radius: var(--radius-md);
color: var(--color-text);
cursor: pointer;
display: inline-flex;
height: var(--control-h);
justify-content: center;
min-width: var(--control-h);
padding: 0;
text-decoration: none;
}
.icon-button:hover,
.app-icon-btn:hover {
background: var(--color-primary);
text-decoration: none;
}
.dash-icon {
height: var(--header-icon-size);
width: var(--header-icon-size);
}
.dash-icon-rotate-180 {
transform: rotate(180deg);
}
.btn,
.button {
align-items: center;
background: var(--color-button-primary);
border: var(--border-width-1) solid var(--color-border);
border-radius: var(--radius-md);
color: var(--color-text);
cursor: pointer;
display: inline-flex;
font-size: var(--font-size-md);
font-weight: var(--font-weight-semibold);
gap: var(--space-2);
height: var(--control-h);
justify-content: center;
min-height: var(--control-h);
padding: 0 var(--space-4);
text-decoration: none;
}
.btn:hover,
.button:hover {
background: var(--color-button-primary-hover);
text-decoration: none;
}
.btn:disabled,
.button:disabled {
cursor: not-allowed;
opacity: 0.55;
}
.btn--ghost,
.button.ghost {
background: transparent;
}
.btn--ghost:hover,
.button.ghost:hover {
background: var(--color-primary);
}
.btn--danger,
.button.danger {
background: var(--color-danger);
}
.btn[type="submit"]:not(.btn--ghost, .btn--danger),
.button[type="submit"]:not(.ghost, .danger) {
border-color: var(--color-button-primary-border);
}
.card,
.auth-card,
.form-card,
.register-section,
.register-section-note,
.register-actions,
.vacation-item,
.settings-note,
.admin-user-row,
.settings-section {
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
border: var(--border-width-1) solid var(--color-border);
}
.card {
padding: var(--surface-pad);
}
.auth-card,
.form-card {
margin: 0 auto;
width: min(42.5rem, 100%);
}
.legal-card,
.contact-card {
display: grid;
gap: var(--space-5);
}
.legal-content {
display: grid;
gap: var(--space-3);
}
.legal-content h1,
.legal-content h2,
.legal-content h3,
.legal-content h4 {
color: var(--color-text);
}
.legal-content p,
.legal-content li,
.legal-content blockquote {
color: var(--color-text);
line-height: 1.6;
}
.legal-content ul,
.legal-content ol {
display: grid;
gap: var(--space-2);
margin: 0;
padding-inline-start: var(--space-5);
}
.legal-content a {
color: var(--color-link);
}
.form-card.full-width,
.settings-section.form-card.full-width {
max-width: none;
width: 100%;
}
.auth-card-register,
.register-shell {
border: 0;
margin: 0;
padding: 0;
width: 100%;
}
.auth-links {
display: grid;
gap: var(--space-2);
margin-top: var(--space-4);
}
.auth-links p {
margin: 0;
}
.auth-links a {
text-decoration: underline;
text-underline-offset: var(--space-1);
}
.site-footer-nav {
display: inline-flex;
flex-wrap: wrap;
gap: var(--space-4);
}
.site-footer-nav a {
color: var(--color-text-muted);
text-decoration: none;
}
.site-footer-nav a:hover {
color: var(--color-text);
text-decoration: underline;
}
.alert,
.error,
.success {
align-items: center;
border: var(--border-width-1) solid var(--color-border);
display: flex;
gap: var(--space-3);
justify-content: space-between;
margin-bottom: var(--space-2);
padding: var(--space-3) var(--space-4);
}
.success,
.alert--success {
background: var(--color-success-bg);
color: var(--color-success);
}
.error,
.alert--error {
background: color-mix(in srgb, var(--color-danger) 20%, var(--color-bg));
color: var(--color-text);
}
.alert--info {
background: color-mix(in srgb, var(--color-surface-2) 80%, transparent);
}
.alert__close {
background: transparent;
border: 0;
color: inherit;
cursor: pointer;
font-size: var(--font-size-lg);
}
.stack {
display: grid;
gap: var(--space-4);
}
.inline-grid {
display: grid;
gap: var(--space-4);
grid-template-columns: repeat(2, minmax(11rem, 1fr));
}
.nav-row {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
}
label,
.form-field {
display: grid;
gap: var(--space-2);
font-weight: var(--font-weight-semibold);
}
.form-field--hint {
align-items: start;
}
.stack-xs {
display: grid;
gap: var(--space-2);
}
.form-field__label {
font-weight: var(--font-weight-semibold);
}
input,
textarea,
select,
.input {
background: var(--color-surface-3);
border: var(--border-width-1) solid var(--color-border);
border-radius: var(--radius-md);
color: var(--color-text);
font: inherit;
min-height: var(--input-height);
padding: var(--space-3);
}
textarea,
textarea.input {
min-height: 6rem;
}
input:disabled,
textarea:disabled,
select:disabled {
color: var(--color-text-muted);
}
.checkbox-row {
align-items: center;
display: flex;
gap: var(--space-2);
font-weight: var(--font-weight-medium);
}
.checkbox-row input {
min-height: auto;
}
.weekday-fieldset {
border: var(--border-width-1) solid var(--color-border);
margin: 0;
padding: var(--surface-pad-compact);
}
.weekday-fieldset legend {
color: var(--color-text-muted);
font-size: var(--font-size-sm);
padding: 0 var(--space-1);
}
.weekday-grid,
.register-weekday-grid {
display: grid;
gap: var(--space-2) var(--space-4);
grid-template-columns: repeat(4, minmax(7.5rem, 1fr));
}
.table-wrap {
overflow-x: auto;
}
.table {
border-collapse: collapse;
width: 100%;
}
.table th,
.table td {
border: var(--border-width-1) solid var(--color-border);
padding: var(--space-3);
text-align: left;
}
.empty-state {
border: var(--border-width-1) dashed var(--color-border);
padding: var(--space-6);
text-align: center;
}
.badge {
background: var(--color-surface-2);
border: var(--border-width-1) solid var(--color-border);
color: var(--color-text);
display: inline-flex;
font-size: var(--font-size-sm);
font-weight: var(--font-weight-bold);
padding: var(--space-1) var(--space-2);
}
.modal {
inset: 0;
position: fixed;
z-index: var(--z-modal);
}
.modal__backdrop {
background: color-mix(in srgb, var(--color-bg) 80%, transparent);
inset: 0;
position: absolute;
}
.modal__dialog {
background: var(--color-surface);
border: var(--border-width-1) solid var(--color-border);
inset: 50% auto auto 50%;
max-width: min(40rem, 92vw);
position: absolute;
transform: translate(-50%, -50%);
width: 100%;
}
.modal__header,
.modal__body {
padding: var(--surface-pad);
}
.modal__header {
align-items: center;
border-bottom: var(--border-width-1) solid var(--color-border);
display: flex;
justify-content: space-between;
}
.modal__close {
background: transparent;
border: 0;
color: var(--color-text);
cursor: pointer;
font-size: var(--font-size-lg);
}
.pagination {
display: flex;
gap: var(--space-3);
}
.top-row h1 {
font-size: var(--font-size-xl);
font-weight: var(--font-weight-bold);
}
.settings-page .top-row {
margin-bottom: var(--space-3);
padding-top: var(--space-5);
}
.settings-grid {
display: grid;
gap: var(--space-6);
margin-top: var(--space-2);
}
.settings-tabs {
display: grid;
gap: var(--space-2);
grid-template-columns: repeat(2, minmax(0, 1fr));
margin-bottom: var(--stack-2);
}
.settings-tabs .segmented-toggle__item {
background: transparent;
border: var(--border-width-1) solid var(--color-border);
border-radius: var(--radius-none);
color: var(--color-text-muted);
font-size: var(--font-size-lg);
font-weight: var(--font-weight-semibold);
}
.settings-tabs .segmented-toggle__item.is-active {
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
color: var(--color-text);
}
.site-header.is-auth-header .auth-toggle .segmented-toggle__item {
font-size: var(--font-size-xs);
height: 1.5625rem;
min-width: 4.5rem;
padding: 0 var(--space-2);
}
.settings-section {
padding: var(--space-4);
}
.settings-section--collapsible {
padding: 0;
}
.settings-section__summary {
align-items: center;
cursor: pointer;
display: flex;
gap: var(--space-3);
justify-content: space-between;
list-style: none;
padding: var(--surface-pad);
}
.settings-section__summary::-webkit-details-marker {
display: none;
}
.settings-section__heading {
font-size: var(--font-size-xl);
font-weight: var(--font-weight-semibold);
}
.settings-section__chevron {
align-items: center;
color: var(--color-text-muted);
display: inline-flex;
flex: 0 0 auto;
font-size: var(--font-size-lg);
font-weight: var(--font-weight-semibold);
justify-content: center;
line-height: 1;
width: 1rem;
}
.settings-section__chevron::before {
content: "+";
}
.settings-section--collapsible[open] .settings-section__chevron::before {
content: "-";
}
.settings-section__content {
border-top: var(--border-width-1) solid var(--color-border);
padding: 0 var(--surface-pad) var(--surface-pad);
}
.settings-section__content > :first-child {
margin-top: var(--space-4);
}
.settings-section .button {
width: 100%;
}
.landing-shell {
justify-items: center;
padding-block: var(--space-7) var(--space-8);
}
.landing-hero {
display: grid;
gap: var(--space-5);
width: min(44rem, 100%);
}
.landing-hero--centered {
justify-items: center;
text-align: center;
}
.landing-hero__copy {
justify-items: center;
margin: 0 auto;
width: min(36rem, 100%);
}
.landing-hero__logo-wrap {
display: flex;
justify-content: center;
}
.landing-hero__logo {
height: auto;
max-width: 12rem;
width: 100%;
}
.landing-eyebrow {
color: var(--color-text-muted);
font-size: var(--font-size-sm);
font-weight: var(--font-weight-semibold);
justify-self: center;
letter-spacing: 0.02em;
margin: 0;
text-transform: uppercase;
}
.landing-title {
font-size: var(--font-size-2xl);
font-weight: var(--font-weight-bold);
justify-self: center;
line-height: var(--line-height-tight);
margin: 0;
max-width: 30rem;
text-wrap: balance;
}
.landing-lead {
color: var(--color-text);
font-size: var(--font-size-lg);
justify-self: center;
margin: 0;
max-width: 36rem;
text-align: center;
}
.landing-cta-row {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
justify-content: center;
justify-self: center;
}
.landing-cta-row .btn {
min-width: 11rem;
}
.settings-auth-row {
display: grid;
gap: var(--space-2);
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.settings-export-actions {
display: grid;
gap: var(--space-2);
}
.settings-import-preview {
background: color-mix(in srgb, var(--color-surface) 95%, transparent);
border: var(--border-width-1) solid var(--color-border);
padding: var(--surface-pad);
}
.settings-import-preview__header {
align-items: start;
display: grid;
gap: var(--space-2);
grid-template-columns: minmax(0, 1fr) auto;
}
.settings-import-preview__mode {
align-self: center;
background: var(--color-surface-2);
border-radius: var(--radius-sm);
color: var(--color-text);
display: inline-flex;
min-height: var(--control-h);
padding: var(--space-1) var(--space-3);
}
.settings-import-grid {
display: grid;
gap: var(--space-2);
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.settings-import-stat {
background: color-mix(in srgb, var(--color-surface-2) 92%, transparent);
display: grid;
gap: var(--space-1);
padding: var(--space-3);
}
.settings-import-summary {
display: grid;
gap: var(--space-2);
}
.settings-import-conflicts {
display: grid;
gap: var(--space-1);
margin: 0;
padding-inline-start: var(--space-4);
}
.contact-grid {
display: grid;
gap: var(--space-4);
grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
}
.contact-info-list {
display: grid;
gap: var(--space-2);
margin: 0;
padding-inline-start: var(--space-5);
}
.contact-honeypot {
height: 0;
left: -9999px;
overflow: hidden;
position: absolute;
width: 0;
}
.danger-card {
border-color: color-mix(in srgb, var(--color-danger) 24%, var(--color-border));
}
.admin-user-row {
align-items: center;
column-gap: var(--space-3);
display: grid;
grid-template-columns: minmax(14rem, 1.4fr) repeat(3, minmax(7rem, 1fr)) minmax(13rem, auto);
padding: var(--surface-pad-compact);
}
.admin-user-actions {
display: inline-flex;
gap: var(--space-2);
justify-content: flex-end;
}
.register-shell,
.register-form,
.vacation-list,
.admin-user-list,
.admin-recipient-picker,
.support-ticket-list {
display: grid;
gap: var(--space-2);
}
.support-ticket-card {
background: var(--color-surface-2);
border: var(--border-width-1) solid var(--color-border);
border-radius: var(--radius-md);
display: grid;
gap: var(--space-3);
padding: var(--surface-pad);
}
.support-ticket-card__header {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
justify-content: space-between;
}
.support-ticket-card__title-wrap,
.support-ticket-card__meta {
display: grid;
gap: var(--space-1);
}
.support-ticket-card__title-wrap h3 {
font-size: var(--font-size-lg);
font-weight: var(--font-weight-bold);
}
.support-ticket-card__message {
background: var(--color-surface);
border-radius: var(--radius-md);
color: var(--color-text);
padding: var(--surface-pad-compact);
white-space: pre-wrap;
}
.support-ticket-card__controls {
align-items: start;
}
.admin-recipient-grid {
display: grid;
gap: var(--space-2) var(--space-4);
grid-template-columns: repeat(2, minmax(12rem, 1fr));
}
.vacation-list {
margin-top: var(--space-5);
}
.vacation-item {
align-items: center;
display: grid;
gap: var(--space-3);
grid-template-columns: minmax(0, 1fr) auto;
padding: var(--surface-pad-compact);
}
.settings-note {
padding: var(--surface-pad-compact);
}
.settings-adjustment-meta {
display: grid;
gap: var(--space-2);
place-items: end;
}
.help-intro,
.help-callout,
.help-section,
.help-guides,
.help-guide-card {
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
border: var(--border-width-1) solid var(--color-border);
display: grid;
gap: var(--space-3);
padding: var(--surface-pad);
}
.help-grid {
display: grid;
gap: var(--space-4);
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.help-guides {
margin-top: var(--space-4);
}
.help-guides__header {
display: grid;
gap: var(--space-2);
}
.help-guides__grid {
display: grid;
gap: var(--space-4);
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.help-guide-card h3 {
font-size: var(--font-size-lg);
font-weight: var(--font-weight-bold);
}
.help-section__header,
.help-section__body {
display: grid;
gap: var(--space-3);
}
.help-section h2,
.help-callout h2 {
font-size: var(--font-size-lg);
font-weight: var(--font-weight-bold);
}
.help-intro p,
.help-callout p,
.help-section p,
.help-guide-card p,
.help-section li {
color: var(--color-text);
line-height: 1.5;
}
.help-list,
.help-steps {
display: grid;
gap: var(--space-3);
margin: 0;
padding-inline-start: var(--space-5);
}
.help-list strong,
.help-steps strong {
font-weight: var(--font-weight-bold);
}
.register-title {
font-size: var(--font-size-xl);
margin: var(--space-2) 0;
}
.register-section,
.register-actions,
.register-section-note {
padding: var(--surface-pad);
}
.register-section h2 {
font-size: var(--font-size-xl);
margin-bottom: var(--space-1);
}
.register-subtitle,
.register-email-note,
.register-footer,
.register-section-note {
color: var(--color-text-muted);
font-size: var(--font-size-sm);
}
.register-grid-2 {
display: grid;
gap: var(--space-4);
grid-template-columns: repeat(2, minmax(10rem, 1fr));
}
.register-checkbox-row {
display: grid;
gap: var(--space-2);
}
.register-actions .btn,
.register-submit {
width: 100%;
}
.register-footer {
padding: 0 var(--space-2);
}
.week-view-shell,
.month-view-shell {
display: grid;
gap: var(--space-1);
}
.week-group-list,
.day-list {
display: grid;
gap: 0;
}
.period-header {
align-items: center;
background: var(--color-surface-2);
border: 0;
display: grid;
grid-template-columns: 1fr auto 1fr;
min-height: var(--period-height);
padding: var(--space-1) var(--space-3);
}
.period-header__nav {
align-items: center;
display: inline-flex;
gap: var(--space-2);
grid-column: 2;
justify-self: center;
}
.period-header__title {
font-size: var(--font-size-md);
font-weight: var(--font-weight-medium);
line-height: 1;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.period-header__actions {
align-items: center;
display: inline-flex;
gap: var(--space-2);
grid-column: 3;
justify-self: end;
}
.week-vacation-button {
align-items: center;
background: transparent;
border: var(--border-width-1) solid var(--color-border);
border-radius: var(--radius-sm);
color: var(--color-text);
cursor: pointer;
display: inline-flex;
font-size: var(--font-size-md);
font-weight: var(--font-weight-bold);
min-height: var(--control-h);
padding: 0 var(--space-3);
}
.week-vacation-button.is-active {
background: var(--color-accent);
border-color: var(--color-warning);
}
.kpi-bar {
display: grid;
gap: var(--space-2);
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.kpi-bar__item {
align-items: center;
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
border: 0;
display: flex;
gap: var(--space-2);
min-height: var(--kpi-height);
padding: 0 var(--space-3);
}
.kpi-bar__label {
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
}
.kpi-bar__value {
font-size: var(--font-size-lg);
font-weight: var(--font-weight-bold);
}
.kpi-bar__item--editable {
justify-content: flex-start;
}
.kpi-bar__edit {
align-items: center;
background: transparent;
border: 0;
cursor: pointer;
display: inline-flex;
margin-left: auto;
padding: 0;
}
.kpi-bar__edit .dash-icon {
height: var(--icon-size-sm);
width: var(--icon-size-sm);
}
.workhours-warning-banner {
align-items: center;
background: var(--color-danger-strong);
color: var(--color-text);
display: flex;
justify-content: center;
min-height: 2.25rem;
padding: 0 var(--space-5);
position: relative;
}
.workhours-warning-text {
font-size: var(--font-size-lg);
font-weight: var(--font-weight-bold);
line-height: 1.1;
text-align: center;
}
.workhours-warning-close {
background: transparent;
border: 0;
color: var(--color-text);
cursor: pointer;
font-size: var(--font-size-lg);
position: absolute;
right: var(--space-3);
}
.dash-target-editor {
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
border: var(--border-width-1) solid var(--color-border);
padding: var(--space-5);
}
.day-row {
align-items: center;
background: color-mix(in srgb, var(--color-surface-4) 92%, transparent);
border: 0;
display: grid;
gap: var(--space-2);
grid-template-columns: var(--day-col) 1fr var(--actions-col);
min-height: var(--row-height-compact);
padding: 0 var(--space-3);
}
.day-row--weekend {
background: color-mix(in srgb, var(--color-weekend) 96%, transparent);
}
.day-row--today {
background: var(--color-day-today);
}
.day-row__label {
font-size: var(--font-size-xl);
font-weight: var(--font-weight-bold);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.day-row__cells {
display: grid;
gap: var(--space-2);
grid-auto-columns: minmax(0, var(--chip-col));
grid-auto-flow: column;
justify-content: start;
}
.ui-chip {
align-items: center;
background: var(--color-chip-bg);
border: var(--border-width-1) solid var(--color-border-soft);
color: var(--color-text);
display: inline-flex;
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
min-height: var(--chip-h);
padding: 0 var(--space-3);
white-space: nowrap;
}
.ui-chip--empty {
color: var(--color-text-muted);
}
.day-row__actions {
align-items: center;
display: inline-flex;
gap: var(--space-2);
justify-content: flex-end;
line-height: 0;
padding-right: var(--space-2);
}
.day-row__actions .dash-icon,
.day-row__add-menu .dash-icon,
.week-group-card-mobile .day-list .dash-icon {
height: var(--list-icon-size);
width: var(--list-icon-size);
}
.day-row__actions .dash-icon[src$="/edit.svg"] {
transform: translateY(0.0625rem);
}
.day-row__actions .dash-icon[src$="/delete.svg"] {
transform: translateY(0);
}
.day-status-badge {
align-items: center;
background: transparent;
border: var(--border-width-1) solid var(--color-border);
border-radius: var(--radius-sm);
color: var(--color-text);
cursor: pointer;
display: inline-flex;
font-size: var(--font-size-md);
font-weight: var(--font-weight-bold);
justify-content: center;
min-height: var(--control-h);
min-width: var(--control-h);
padding: 0 var(--space-2);
}
.day-status-badge.is-vacation {
background: var(--color-accent);
border-color: var(--color-warning);
}
.day-status-badge.is-holiday {
background: color-mix(in srgb, var(--color-primary) 90%, transparent);
}
.day-status-badge.is-sick {
background: color-mix(in srgb, var(--color-danger) 55%, var(--color-surface));
}
.day-status-badge.is-overtime {
background: color-mix(in srgb, var(--color-primary) 65%, var(--color-surface));
border-color: var(--color-primary);
}
.day-row__add-menu {
position: relative;
}
.day-row__add-menu summary {
list-style: none;
}
.day-row__add-menu summary::-webkit-details-marker {
display: none;
}
.day-row__add-menu-panel {
box-shadow: var(--shadow-md);
background: var(--color-surface-2);
border: var(--border-width-1) solid var(--color-border);
display: grid;
gap: var(--space-2);
min-width: 13rem;
padding: var(--space-2);
position: absolute;
right: 0;
top: calc(100% + var(--space-1));
z-index: var(--z-header);
}
.day-row__add-menu-item {
align-items: center;
background: transparent;
border: 0;
color: var(--color-text);
cursor: pointer;
display: flex;
font-family: inherit;
font-size: var(--font-size-md);
justify-content: flex-start;
line-height: var(--line-height-tight);
min-height: var(--control-h);
padding: var(--space-2) var(--space-3);
text-decoration: none;
text-align: left;
width: 100%;
white-space: normal;
}
.day-row__add-menu-item:hover {
background: var(--color-primary);
text-decoration: none;
}
.week-group-list {
gap: var(--stack-3);
}
.week-group-card-mobile {
background: color-mix(in srgb, var(--color-surface) 92%, transparent);
border: 0;
display: grid;
gap: var(--stack-2);
padding: var(--space-2);
}
.week-group-header {
align-items: center;
background: color-mix(in srgb, var(--color-surface-2) 92%, transparent);
border: 0;
display: grid;
gap: var(--space-2);
grid-template-columns: 1fr auto auto;
min-height: var(--row-height-compact);
padding: var(--space-2) var(--space-3);
}
.week-group-header__left {
align-items: center;
display: inline-flex;
font-size: var(--font-size-md);
gap: var(--space-2);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.week-group-header__meta {
font-size: var(--font-size-sm);
line-height: 1.2;
white-space: nowrap;
}
.week-group-header__action {
justify-self: end;
}
.week-group-card-mobile .day-list {
gap: var(--stack-1);
padding-inline-start: var(--space-2);
}
.positive {
color: var(--color-success);
}
.negative {
color: var(--color-danger-strong);
}
.inline-form {
align-items: center;
display: inline-flex;
margin: 0;
}
.day-row__add-menu-panel .inline-form {
display: block;
width: 100%;
}
@media (max-width: 51.25em) {
:root {
--control-h: var(--control-h-mobile);
--header-icon-size: var(--list-icon-size);
--logo-size: 2rem;
}
.landing-shell {
padding-block: var(--space-5) var(--space-6);
}
.landing-hero__logo {
max-width: 10rem;
}
.app-total-badge {
font-size: var(--font-size-sm);
}
.topbar-toggle .segmented-toggle__item {
font-size: var(--font-size-md);
}
.inline-grid,
.register-grid-2,
.settings-auth-row,
.settings-import-preview__header,
.settings-import-grid,
.admin-user-row,
.admin-recipient-grid,
.vacation-item {
grid-template-columns: 1fr;
}
.settings-adjustment-meta {
place-items: start;
}
.help-grid {
grid-template-columns: 1fr;
}
.help-guides__grid {
grid-template-columns: 1fr;
}
.contact-grid {
grid-template-columns: 1fr;
}
.period-header {
margin-inline: calc(var(--gutter-tablet) * -1);
grid-template-columns: 1fr;
row-gap: var(--space-2);
padding: var(--space-2);
}
.period-header__nav {
grid-column: 1;
}
.period-header__actions {
grid-column: 1;
justify-self: center;
}
.kpi-bar {
margin-inline: calc(var(--gutter-tablet) * -1);
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.dashboard-page .day-list--week,
.month-page .week-group-list {
margin-inline: calc(var(--gutter-tablet) * -1);
}
.month-page .week-group-card-mobile {
background: transparent;
padding: 0;
}
.day-row {
grid-template-columns: 1fr auto;
row-gap: var(--space-2);
padding: var(--space-2) var(--space-3);
}
.day-row__label {
grid-column: 1;
grid-row: 1;
}
.day-row__actions {
grid-column: 2;
grid-row: 1;
padding-right: 0;
}
.day-row__cells {
grid-column: 1 / 3;
grid-row: 2;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.day-row__cells.day-row__cells--empty {
grid-template-columns: 1fr;
}
.week-group-header {
grid-template-columns: 1fr auto;
row-gap: var(--space-1);
}
.week-group-header__left {
grid-column: 1;
grid-row: 1;
}
.week-group-header__action {
grid-column: 2;
grid-row: 1;
}
.week-group-header__meta {
grid-column: 1 / 3;
grid-row: 2;
font-size: var(--font-size-xs);
line-height: 1.2;
white-space: normal;
}
.week-group-card-mobile .day-list {
padding-inline-start: 0;
}
}
@media (max-width: 32.5em) {
.period-header,
.kpi-bar {
margin-inline: calc(var(--gutter-mobile) * -1);
}
.dashboard-page .day-list--week,
.month-page .week-group-list {
margin-inline: calc(var(--gutter-mobile) * -1);
}
.landing-title {
font-size: var(--font-size-xl);
}
.landing-lead {
font-size: var(--font-size-md);
}
.landing-cta-row .btn {
width: 100%;
}
.weekday-grid,
.register-weekday-grid {
grid-template-columns: 1fr 1fr;
}
.period-header__title {
font-size: var(--font-size-md);
text-align: center;
}
.day-row__label {
font-size: var(--font-size-lg);
}
}
@media (min-width: 51.26em) {
.month-page .week-group-list {
gap: var(--space-3);
}
.month-page .week-group-card-mobile {
background: transparent;
border: 0;
gap: var(--space-2);
padding: 0;
}
.month-page .week-group-header {
border: 0;
grid-template-columns: auto 1fr auto;
min-height: 2.625rem;
}
.month-page .week-group-header__meta {
justify-self: end;
text-align: right;
}
.month-page .day-list--month {
margin-left: 0;
padding-left: 0;
}
}