| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- @layer base {
- /* Hide native spinner buttons on every number input app-wide. The
- team prefers keyboard typing over the tiny, inconsistent UA
- controls. */
- input[type="number"]::-webkit-outer-spin-button,
- input[type="number"]::-webkit-inner-spin-button {
- -webkit-appearance: none;
- margin: 0;
- }
- input[type="number"] {
- -moz-appearance: textfield;
- appearance: textfield;
- }
- }
- @layer utilities {
- /* Phase 13: the Focus filter temporarily hides entire sw columns when the
- focused worker has no assignment on any visible row. Separate from the
- .hidden set driven by the Columns dropdown so clearing Focus restores
- the user's manual column picks. */
- .focus-auto-hidden {
- display: none;
- }
- }
- @layer components {
- /* Phase 15: big-screen / beamer presentation scope. Applied via
- views/sprints/present.php on the root <main>. Tightens typography
- and cell padding so the task table fits the viewport without
- horizontal scroll at 1920×1080; hides drag handles and per-row
- delete buttons (not meaningful during a group discussion). */
- .beamer-root table {
- table-layout: fixed;
- font-size: clamp(0.75rem, 0.95vw, 1.05rem);
- }
- .beamer-root td,
- .beamer-root th {
- padding: 0.25rem 0.35rem;
- }
- .beamer-root .handle,
- .beamer-root [data-delete-task] {
- display: none;
- }
- /* JS-driven toggle (sprint-planner.js): when the rendered task table
- is wider than the viewport, rotate worker-column headers to save
- horizontal space. Leaves non-worker headers (Task / Owner / Prio
- / Tot) untouched. */
- .beamer-vertical-headers thead th[data-sort-col^="sw-"] {
- writing-mode: vertical-rl;
- transform: rotate(180deg);
- padding: 0.5rem 0.25rem;
- }
- /* 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. */
- .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'); }
- /* 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 {
- display: inline-block;
- vertical-align: middle;
- width: 22px;
- min-width: 22px;
- height: 22px;
- margin-left: 4px;
- padding: 0;
- text-indent: -9999px;
- border: 1px solid theme('colors.slate.300');
- border-radius: 3px;
- background-color: theme('colors.white');
- cursor: pointer;
- }
- .dark .assign-status-select {
- border-color: theme('colors.slate.600');
- background-color: theme('colors.slate.700');
- }
- .assign-status-select:focus {
- outline: 2px solid theme('colors.slate.400');
- outline-offset: 1px;
- }
- .assign-status-select option {
- text-indent: 0;
- font-size: 0.875rem;
- color: theme('colors.slate.900');
- background-color: theme('colors.white');
- }
- .dark .assign-status-select option {
- color: theme('colors.slate.100');
- background-color: theme('colors.slate.800');
- }
- }
|