|
@@ -56,45 +56,56 @@
|
|
|
padding: 0.5rem 0.25rem;
|
|
padding: 0.5rem 0.25rem;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /* Phase 18: per-cell task-assignment status. The colour class
|
|
|
|
|
- applies directly to the <td> — no nested wrapper — so the cell's
|
|
|
|
|
- table-layout and the input it contains render exactly as they
|
|
|
|
|
- did before the feature, with only the cell background tinting.
|
|
|
|
|
- The four .assign-status-* class names are interpolated server-
|
|
|
|
|
- side ("assign-status-<?= $st ?>"), so they're held in
|
|
|
|
|
|
|
+ /* Phase 18: per-cell task-assignment status. The colour class lives
|
|
|
|
|
+ on the <td> (so JS / filters can read data-status off the cell),
|
|
|
|
|
+ but the visible tint is applied to the day input / read-only span
|
|
|
|
|
+ inside — colouring just the <td> made the cell padding stripe a
|
|
|
|
|
+ different colour from the field, which read as visual noise. The
|
|
|
|
|
+ four .assign-status-* class names are interpolated server-side
|
|
|
|
|
+ ("assign-status-<?= $st ?>"), so they're held in
|
|
|
tailwind.config.js's safelist; otherwise the JIT prunes them. */
|
|
tailwind.config.js's safelist; otherwise the JIT prunes them. */
|
|
|
- .assign-status-zugewiesen { /* default: no override, stays whatever
|
|
|
|
|
- the row's bg is */ }
|
|
|
|
|
- .assign-status-gestartet { background-color: theme('colors.yellow.200'); }
|
|
|
|
|
- .assign-status-abgeschlossen { background-color: theme('colors.green.200'); }
|
|
|
|
|
- .assign-status-abgebrochen { background-color: theme('colors.red.200'); }
|
|
|
|
|
- .dark .assign-status-gestartet { background-color: theme('colors.yellow.700'); }
|
|
|
|
|
- .dark .assign-status-abgeschlossen { background-color: theme('colors.green.700'); }
|
|
|
|
|
- .dark .assign-status-abgebrochen { background-color: theme('colors.red.700'); }
|
|
|
|
|
|
|
+ .assign-status-zugewiesen { /* default: no tint */ }
|
|
|
|
|
+ .assign-status-gestartet input[data-assign],
|
|
|
|
|
+ .assign-status-gestartet > span.font-mono { background-color: theme('colors.yellow.200'); }
|
|
|
|
|
+ .assign-status-abgeschlossen input[data-assign],
|
|
|
|
|
+ .assign-status-abgeschlossen > span.font-mono { background-color: theme('colors.green.200'); }
|
|
|
|
|
+ .assign-status-abgebrochen input[data-assign],
|
|
|
|
|
+ .assign-status-abgebrochen > span.font-mono { background-color: theme('colors.red.200'); }
|
|
|
|
|
+ .dark .assign-status-gestartet input[data-assign],
|
|
|
|
|
+ .dark .assign-status-gestartet > span.font-mono { background-color: theme('colors.yellow.700'); }
|
|
|
|
|
+ .dark .assign-status-abgeschlossen input[data-assign],
|
|
|
|
|
+ .dark .assign-status-abgeschlossen > span.font-mono { background-color: theme('colors.green.700'); }
|
|
|
|
|
+ .dark .assign-status-abgebrochen input[data-assign],
|
|
|
|
|
+ .dark .assign-status-abgebrochen > span.font-mono { background-color: theme('colors.red.700'); }
|
|
|
|
|
|
|
|
- /* Tiny chevron-only <select> sitting next to the day input. We hide
|
|
|
|
|
- the selected text via font-size:0 + color:transparent so only the
|
|
|
|
|
- browser's native dropdown arrow shows; clicking it opens the
|
|
|
|
|
- option list with its full-size text restored. */
|
|
|
|
|
|
|
+ /* Compact chevron-only <select> sitting inline next to the day
|
|
|
|
|
+ input. ≥ 18px wide with a clear bordered button affordance so
|
|
|
|
|
+ it's obvious users can click it; selected option text is hidden
|
|
|
|
|
+ with text-indent so only the native dropdown arrow shows. */
|
|
|
.assign-status-select {
|
|
.assign-status-select {
|
|
|
- width: 1rem;
|
|
|
|
|
- min-width: 0;
|
|
|
|
|
- margin-left: 2px;
|
|
|
|
|
|
|
+ display: inline-block;
|
|
|
|
|
+ vertical-align: middle;
|
|
|
|
|
+ width: 22px;
|
|
|
|
|
+ min-width: 22px;
|
|
|
|
|
+ height: 22px;
|
|
|
|
|
+ margin-left: 4px;
|
|
|
padding: 0;
|
|
padding: 0;
|
|
|
- border: 0;
|
|
|
|
|
- background-color: transparent;
|
|
|
|
|
- font-size: 0;
|
|
|
|
|
- line-height: 1;
|
|
|
|
|
- color: transparent;
|
|
|
|
|
|
|
+ text-indent: -9999px;
|
|
|
|
|
+ border: 1px solid theme('colors.slate.300');
|
|
|
|
|
+ border-radius: 3px;
|
|
|
|
|
+ background-color: theme('colors.white');
|
|
|
cursor: pointer;
|
|
cursor: pointer;
|
|
|
- vertical-align: middle;
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ .dark .assign-status-select {
|
|
|
|
|
+ border-color: theme('colors.slate.600');
|
|
|
|
|
+ background-color: theme('colors.slate.700');
|
|
|
}
|
|
}
|
|
|
.assign-status-select:focus {
|
|
.assign-status-select:focus {
|
|
|
outline: 2px solid theme('colors.slate.400');
|
|
outline: 2px solid theme('colors.slate.400');
|
|
|
outline-offset: 1px;
|
|
outline-offset: 1px;
|
|
|
- border-radius: 2px;
|
|
|
|
|
}
|
|
}
|
|
|
.assign-status-select option {
|
|
.assign-status-select option {
|
|
|
|
|
+ text-indent: 0;
|
|
|
font-size: 0.875rem;
|
|
font-size: 0.875rem;
|
|
|
color: theme('colors.slate.900');
|
|
color: theme('colors.slate.900');
|
|
|
background-color: theme('colors.white');
|
|
background-color: theme('colors.white');
|