input.css 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. @tailwind base;
  2. @tailwind components;
  3. @tailwind utilities;
  4. @layer base {
  5. /* Hide native spinner buttons on every number input app-wide. The
  6. team prefers keyboard typing over the tiny, inconsistent UA
  7. controls. */
  8. input[type="number"]::-webkit-outer-spin-button,
  9. input[type="number"]::-webkit-inner-spin-button {
  10. -webkit-appearance: none;
  11. margin: 0;
  12. }
  13. input[type="number"] {
  14. -moz-appearance: textfield;
  15. appearance: textfield;
  16. }
  17. }
  18. @layer utilities {
  19. /* Phase 13: the Focus filter temporarily hides entire sw columns when the
  20. focused worker has no assignment on any visible row. Separate from the
  21. .hidden set driven by the Columns dropdown so clearing Focus restores
  22. the user's manual column picks. */
  23. .focus-auto-hidden {
  24. display: none;
  25. }
  26. }
  27. @layer components {
  28. /* Phase 15: big-screen / beamer presentation scope. Applied via
  29. views/sprints/present.php on the root <main>. Tightens typography
  30. and cell padding so the task table fits the viewport without
  31. horizontal scroll at 1920×1080; hides drag handles and per-row
  32. delete buttons (not meaningful during a group discussion). */
  33. .beamer-root table {
  34. table-layout: fixed;
  35. font-size: clamp(0.75rem, 0.95vw, 1.05rem);
  36. }
  37. .beamer-root td,
  38. .beamer-root th {
  39. padding: 0.25rem 0.35rem;
  40. }
  41. .beamer-root .handle,
  42. .beamer-root [data-delete-task] {
  43. display: none;
  44. }
  45. /* JS-driven toggle (sprint-planner.js): when the rendered task table
  46. is wider than the viewport, rotate worker-column headers to save
  47. horizontal space. Leaves non-worker headers (Task / Owner / Prio
  48. / Tot) untouched. */
  49. .beamer-vertical-headers thead th[data-sort-col^="sw-"] {
  50. writing-mode: vertical-rl;
  51. transform: rotate(180deg);
  52. padding: 0.5rem 0.25rem;
  53. }
  54. /* Phase 18: per-cell task-assignment status. The colour class lives
  55. on the <td> (so JS / filters can read data-status off the cell),
  56. but the visible tint is applied to the day input / read-only span
  57. inside — colouring just the <td> made the cell padding stripe a
  58. different colour from the field, which read as visual noise. The
  59. four .assign-status-* class names are interpolated server-side
  60. ("assign-status-<?= $st ?>"), so they're held in
  61. tailwind.config.js's safelist; otherwise the JIT prunes them. */
  62. .assign-status-zugewiesen { /* default: no tint */ }
  63. .assign-status-gestartet input[data-assign],
  64. .assign-status-gestartet > span.font-mono { background-color: theme('colors.yellow.200'); }
  65. .assign-status-abgeschlossen input[data-assign],
  66. .assign-status-abgeschlossen > span.font-mono { background-color: theme('colors.green.200'); }
  67. .assign-status-abgebrochen input[data-assign],
  68. .assign-status-abgebrochen > span.font-mono { background-color: theme('colors.red.200'); }
  69. .dark .assign-status-gestartet input[data-assign],
  70. .dark .assign-status-gestartet > span.font-mono { background-color: theme('colors.yellow.700'); }
  71. .dark .assign-status-abgeschlossen input[data-assign],
  72. .dark .assign-status-abgeschlossen > span.font-mono { background-color: theme('colors.green.700'); }
  73. .dark .assign-status-abgebrochen input[data-assign],
  74. .dark .assign-status-abgebrochen > span.font-mono { background-color: theme('colors.red.700'); }
  75. /* Compact chevron-only <select> sitting inline next to the day
  76. input. ≥ 18px wide with a clear bordered button affordance so
  77. it's obvious users can click it; selected option text is hidden
  78. with text-indent so only the native dropdown arrow shows. */
  79. .assign-status-select {
  80. display: inline-block;
  81. vertical-align: middle;
  82. width: 22px;
  83. min-width: 22px;
  84. height: 22px;
  85. margin-left: 4px;
  86. padding: 0;
  87. text-indent: -9999px;
  88. border: 1px solid theme('colors.slate.300');
  89. border-radius: 3px;
  90. background-color: theme('colors.white');
  91. cursor: pointer;
  92. }
  93. .dark .assign-status-select {
  94. border-color: theme('colors.slate.600');
  95. background-color: theme('colors.slate.700');
  96. }
  97. .assign-status-select:focus {
  98. outline: 2px solid theme('colors.slate.400');
  99. outline-offset: 1px;
  100. }
  101. .assign-status-select option {
  102. text-indent: 0;
  103. font-size: 0.875rem;
  104. color: theme('colors.slate.900');
  105. background-color: theme('colors.white');
  106. }
  107. .dark .assign-status-select option {
  108. color: theme('colors.slate.100');
  109. background-color: theme('colors.slate.800');
  110. }
  111. }