選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

422 行
11 KiB

  1. @use '../atoms/variables' as *;
  2. @use '../atoms/mixins' as *;
  3. // ─── Minimal Theme ─────────────────────────────────────────────────────────────
  4. // Gilt nur wenn body[data-theme="minimal"] gesetzt ist.
  5. // Standard-Theme bleibt vollständig unverändert.
  6. body[data-theme="minimal"] {
  7. background: $color-white;
  8. // ── Normale Top-Nav ausblenden ──────────────────────────────────────────────
  9. .main-nav { display: none; }
  10. // ── Hamburger-Nav einblenden ────────────────────────────────────────────────
  11. .hamburger-nav {
  12. display: flex;
  13. align-items: center;
  14. justify-content: space-between;
  15. padding: $space-4 $space-4 $space-5;
  16. }
  17. // ── Page-Background weiß ───────────────────────────────────────────────────
  18. .tt-page { background: $color-white; }
  19. // ── TT-Header: kein Gradient, kein Schatten, cleaner Rahmen ───────────────
  20. .tt-header {
  21. background: $color-white;
  22. box-shadow: none;
  23. border-bottom: 1px solid $color-border;
  24. padding: $space-3 $space-5;
  25. min-height: auto;
  26. flex-direction: column;
  27. align-items: stretch;
  28. gap: 0;
  29. }
  30. // Account/Report-Header: kein Schatten
  31. .account-header,
  32. .report-header {
  33. box-shadow: none;
  34. }
  35. // Karten ohne Schatten
  36. .account-card,
  37. .crud-list,
  38. .crud-create,
  39. .entry-form {
  40. box-shadow: none;
  41. }
  42. // Standard-Meta und Collapsible umschalten
  43. .tt-header__meta { display: none; }
  44. .tt-header__minimal-bar { display: flex; }
  45. // Collapsible: standardmäßig versteckt (JS steuert aria-expanded)
  46. .tt-header__collapsible {
  47. overflow: hidden;
  48. transition: max-height $transition-slow;
  49. max-height: 0;
  50. &.is-open { max-height: 120px; }
  51. }
  52. // Week-Nav im Minimal-Stil (dunkler Hintergrund funktioniert nicht auf weiß)
  53. .week-nav {
  54. background: var(--color-bg);
  55. border-radius: $radius-md;
  56. margin-top: $space-2;
  57. }
  58. .week-nav__arrow { color: $color-text-dark; &:hover { background: $color-border; } }
  59. .week-nav__day-name { color: $color-text-base; }
  60. .week-nav__day-date { color: $color-text-muted; }
  61. .week-nav__day--active { background: $color-text-dark; .week-nav__day-name, .week-nav__day-date { color: $color-white; } }
  62. .week-nav__day:hover:not(.week-nav__day--active) { background: rgba($color-text-dark, 0.07); }
  63. .week-nav__cal { background: rgba($color-text-dark, 0.08); color: $color-text-dark; &:hover { background: rgba($color-text-dark, 0.15); } }
  64. // ── Greeting versteckt ─────────────────────────────────────────────────────
  65. .greeting { display: none; }
  66. // ── Content zentriert, angenehme Breite ───────────────────────────────────
  67. .tt-content {
  68. max-width: 660px;
  69. padding: $space-6 $space-4;
  70. gap: $space-6;
  71. }
  72. // ── Entry Form: cleaner, größere Inputs ────────────────────────────────────
  73. .entry-form {
  74. background: $color-white;
  75. border: none;
  76. border-radius: 0;
  77. padding: $space-4 0;
  78. }
  79. .entry-form__grid {
  80. grid-template-columns: 100px 1fr;
  81. gap: $space-5 $space-4;
  82. }
  83. .input,
  84. .select,
  85. .textarea {
  86. font-size: $font-size-md;
  87. }
  88. // Höhere Inputs (außer Textarea)
  89. .input,
  90. .select {
  91. height: 44px;
  92. padding: 0 $space-3;
  93. }
  94. // Borderless inputs inside the entry form — Markenfarbe statt hardcoded
  95. .entry-form .input,
  96. .entry-form .select {
  97. border: none;
  98. box-shadow: none;
  99. background-color: var(--color-bg);
  100. &:focus { box-shadow: none; }
  101. }
  102. // Bemerkung-Zeile: standardmäßig versteckt
  103. .entry-form__label--note,
  104. .entry-form__field--note {
  105. display: none;
  106. &.is-visible { display: flex; }
  107. }
  108. .entry-form__label--note.is-visible { display: block; }
  109. // Bemerkung-Toggle-Row: standardmäßig sichtbar (im Standard ausgeblendet)
  110. .entry-form__note-toggle-row { display: flex; }
  111. // ── Primärbutton in Minimal: Markenfarbe statt Orange ─────────────────────
  112. .btn-primary {
  113. background: var(--color-primary);
  114. color: var(--header-text);
  115. box-shadow: 0 2px 8px rgba(var(--color-primary-rgb), 0.35);
  116. &:hover {
  117. background: var(--color-primary-dark);
  118. box-shadow: 0 3px 12px rgba(var(--color-primary-rgb), 0.45);
  119. }
  120. }
  121. // ── Entry-List ─────────────────────────────────────────────────────────────
  122. .entry-list__summary { display: block; }
  123. // Entry List standardmäßig versteckt (JS steuert)
  124. .entry-list.is-collapsed {
  125. display: none;
  126. }
  127. .entry-list {
  128. background: $color-white;
  129. box-shadow: none;
  130. border: 1px solid $color-border;
  131. border-radius: $radius-md;
  132. }
  133. // ── Unterseiten (Report, Clients, etc.): nur Navigation ───────────────────
  134. .report-page,
  135. .crud-page,
  136. .account-page,
  137. .team-page {
  138. background: $color-white;
  139. }
  140. }
  141. // ─── Hamburger-Nav (immer im DOM, per CSS im Standard versteckt) ──────────────
  142. .hamburger-nav {
  143. display: none;
  144. position: relative;
  145. @include tablet {
  146. display: flex;
  147. align-items: center;
  148. justify-content: space-between;
  149. padding: $space-3 $space-4;
  150. }
  151. }
  152. .hamburger-nav__toggle {
  153. width: 52px;
  154. height: 52px;
  155. border: none;
  156. border-radius: $radius-lg;
  157. background: $color-white;
  158. cursor: pointer;
  159. display: flex;
  160. align-items: center;
  161. justify-content: center;
  162. transition: background $transition-fast;
  163. &:hover { background: var(--color-bg); }
  164. }
  165. // Hamburger-Icon aus drei Balken
  166. .hamburger-nav__icon,
  167. .hamburger-nav__icon::before,
  168. .hamburger-nav__icon::after {
  169. display: block;
  170. width: 22px;
  171. height: 2px;
  172. background: $color-text-dark;
  173. border-radius: 2px;
  174. transition: transform $transition-base, opacity $transition-fast;
  175. }
  176. .hamburger-nav__icon {
  177. position: relative;
  178. &::before,
  179. &::after {
  180. content: '';
  181. position: absolute;
  182. left: 0;
  183. }
  184. &::before { top: -6px; }
  185. &::after { top: 6px; }
  186. }
  187. // X-Icon wenn geöffnet
  188. .hamburger-nav__toggle[aria-expanded="true"] {
  189. .hamburger-nav__icon {
  190. background: transparent;
  191. &::before { transform: translateY(6px) rotate(45deg); }
  192. &::after { transform: translateY(-6px) rotate(-45deg); }
  193. }
  194. }
  195. .hamburger-nav__panel {
  196. position: absolute;
  197. top: calc(100% + #{$space-2});
  198. right: 0;
  199. min-width: 200px;
  200. background: $color-white;
  201. border: 1px solid $color-border;
  202. border-radius: $radius-md;
  203. box-shadow: 0 8px 24px rgba(0,0,0,0.12);
  204. padding: $space-2 0;
  205. z-index: 301;
  206. }
  207. .hamburger-nav__item {
  208. display: block;
  209. padding: $space-3 $space-5;
  210. font-size: $font-size-base;
  211. font-weight: $font-weight-medium;
  212. color: $color-text-base;
  213. text-decoration: none;
  214. transition: background $transition-fast, color $transition-fast;
  215. &:hover { background: var(--color-bg); color: $color-text-dark; }
  216. &--active {
  217. color: var(--color-primary);
  218. font-weight: $font-weight-bold;
  219. }
  220. }
  221. .hamburger-nav__divider {
  222. height: 1px;
  223. background: $color-border;
  224. margin: $space-2 0;
  225. }
  226. // ─── TT-Header Minimal-Bar (immer im DOM, im Standard ausgeblendet) ───────────
  227. .tt-header__minimal-bar {
  228. display: none; // Standard: versteckt, Minimal: sichtbar (override oben)
  229. align-items: center;
  230. justify-content: space-between;
  231. padding: $space-1 0;
  232. }
  233. .tt-header__minimal-date {
  234. font-size: $font-size-md;
  235. font-weight: $font-weight-bold;
  236. color: $color-text-dark;
  237. }
  238. .tt-header__week-toggle {
  239. background: none;
  240. border: 1px solid $color-border;
  241. border-radius: $radius-pill;
  242. padding: $space-1 $space-3;
  243. font-size: $font-size-sm;
  244. font-weight: $font-weight-medium;
  245. color: $color-text-muted;
  246. cursor: pointer;
  247. transition: border-color $transition-fast, color $transition-fast;
  248. &:hover { border-color: $color-text-muted; color: $color-text-dark; }
  249. &[aria-expanded="true"] { color: $color-text-dark; border-color: $color-text-dark; }
  250. }
  251. // ─── Entry-List-Summary (immer im DOM, im Standard ausgeblendet) ──────────────
  252. .entry-list__summary {
  253. display: none; // Standard: versteckt
  254. }
  255. .entry-list__summary-btn {
  256. width: 100%;
  257. display: flex;
  258. align-items: center;
  259. gap: $space-2;
  260. padding: $space-3 $space-4;
  261. background: $color-white;
  262. border: 1px solid $color-border;
  263. border-radius: $radius-md;
  264. font-size: $font-size-base;
  265. font-weight: $font-weight-medium;
  266. color: $color-text-base;
  267. cursor: pointer;
  268. transition: background $transition-fast;
  269. &:hover { background: var(--color-bg); }
  270. }
  271. .entry-list__summary-count { font-weight: $font-weight-bold; color: $color-text-dark; }
  272. .entry-list__summary-sep { color: $color-text-light; }
  273. .entry-list__summary-total { color: $color-text-muted; }
  274. .entry-list__summary-arrow {
  275. margin-left: auto;
  276. color: $color-text-muted;
  277. font-size: $font-size-xs;
  278. transition: transform $transition-fast;
  279. .entry-list__summary-btn[aria-expanded="true"] & {
  280. transform: rotate(180deg);
  281. }
  282. }
  283. // ─── Note-Toggle-Button (immer im DOM, im Standard ausgeblendet) ──────────────
  284. .entry-form__note-toggle-row {
  285. display: none; // Standard: versteckt, Minimal: flex (override oben)
  286. grid-column: 2;
  287. }
  288. .entry-form__note-toggle {
  289. background: none;
  290. border: none;
  291. padding: 0;
  292. font-size: $font-size-sm;
  293. color: $color-text-muted;
  294. cursor: pointer;
  295. font-weight: $font-weight-medium;
  296. transition: color $transition-fast;
  297. &:hover { color: $color-text-dark; }
  298. &.is-open { color: $color-text-muted; }
  299. }
  300. // ─── Theme-Picker auf der Account-Seite ──────────────────────────────────────
  301. .account-form__divider-row {
  302. grid-column: 1 / -1;
  303. padding: $space-2 0 $space-4;
  304. }
  305. .account-form__divider {
  306. border: none;
  307. border-top: 1px solid $color-border;
  308. margin: 0;
  309. }
  310. .theme-picker {
  311. display: flex;
  312. gap: $space-3;
  313. flex-wrap: wrap;
  314. @include tablet {
  315. flex-direction: column;
  316. }
  317. }
  318. .theme-option {
  319. display: flex;
  320. flex-direction: column;
  321. gap: $space-1;
  322. padding: $space-4;
  323. border: 2px solid $color-border;
  324. border-radius: $radius-md;
  325. cursor: pointer;
  326. min-width: 160px;
  327. transition: border-color $transition-fast, background $transition-fast;
  328. user-select: none;
  329. @include tablet {
  330. min-width: 0;
  331. width: 100%;
  332. }
  333. input[type="radio"] { display: none; }
  334. &:hover { border-color: var(--color-primary-light); background: rgba($color-primary, 0.02); }
  335. &--active {
  336. border-color: var(--color-primary);
  337. background: rgba($color-primary, 0.04);
  338. }
  339. }
  340. .theme-option__label {
  341. font-size: $font-size-base;
  342. font-weight: $font-weight-bold;
  343. color: $color-text-dark;
  344. }
  345. .theme-option__desc {
  346. font-size: $font-size-sm;
  347. color: $color-text-muted;
  348. line-height: 1.4;
  349. }