arnaucube
arnaucube/macrosPublic Self-hosted repository
macros/styles.css
styles.cssRaw
  1:root {
  2  color-scheme: light;
  3  --bg: #f6f7f5;
  4  --panel: #ffffff;
  5  --ink: #0f172a;
  6  --muted: #64748b;
  7  --accent: #0f766e;
  8  --accent-soft: #e6f5f1;
  9  --border: #e2e8f0;
 10  --shadow: 0 12px 30px rgba(15, 23, 42, 0.08);
 11  --field-bg: #f8fafc;
 12  --radius: 18px;
 13  --font: "Space Grotesk", "Montserrat", "Poppins", system-ui, sans-serif;
 14}
 15
 16:root[data-theme="dark"] {
 17  color-scheme: dark;
 18  --bg: #09111a;
 19  --panel: #121b27;
 20  --ink: #e6edf5;
 21  --muted: #9dafc5;
 22  --accent: #14b8a6;
 23  --accent-soft: #16303a;
 24  --border: #263546;
 25  --shadow: 0 18px 40px rgba(0, 0, 0, 0.35);
 26  --field-bg: #1a2736;
 27}
 28
 29* {
 30  box-sizing: border-box;
 31  margin: 0;
 32  padding: 0;
 33}
 34
 35body {
 36  font-family: var(--font);
 37  background: radial-gradient(circle at top, #ffffff 0%, #f3f4f2 45%, #eef2f1 100%);
 38  color: var(--ink);
 39  min-height: 100vh;
 40}
 41
 42:root[data-theme="dark"] body {
 43  background: radial-gradient(circle at top, #122131 0%, #0b141d 45%, #09111a 100%);
 44}
 45
 46.app {
 47  max-width: 960px;
 48  margin: 32px auto 48px;
 49  padding: 0 20px;
 50}
 51
 52.topbar {
 53  display: flex;
 54  justify-content: space-between;
 55  align-items: center;
 56  gap: 24px;
 57  margin-bottom: 24px;
 58}
 59
 60.topbar-actions {
 61  display: flex;
 62  align-items: center;
 63  gap: 10px;
 64}
 65
 66.brand {
 67  display: flex;
 68  align-items: center;
 69  gap: 16px;
 70}
 71
 72.brand-logo {
 73  width: 44px;
 74  height: 44px;
 75  border-radius: 14px;
 76  box-shadow: var(--shadow);
 77  display: block;
 78}
 79
 80.brand h1 {
 81  font-size: 1.6rem;
 82  letter-spacing: -0.02em;
 83}
 84
 85.brand p {
 86  color: var(--muted);
 87  font-size: 0.9rem;
 88}
 89
 90.nav {
 91  display: flex;
 92  gap: 8px;
 93  background: var(--panel);
 94  padding: 6px;
 95  border-radius: 999px;
 96  border: 1px solid var(--border);
 97}
 98
 99.ghost {
100  background: var(--panel);
101  color: var(--ink);
102  border: 1px solid var(--border);
103  border-radius: 999px;
104  padding: 8px 14px;
105  font-weight: 600;
106  cursor: pointer;
107}
108
109.icon-button {
110  width: 40px;
111  height: 40px;
112  padding: 0;
113  display: inline-flex;
114  align-items: center;
115  justify-content: center;
116}
117
118.theme-icon {
119  width: 18px;
120  height: 18px;
121  display: inline-flex;
122}
123
124.theme-icon svg {
125  width: 100%;
126  height: 100%;
127  fill: currentColor;
128}
129
130.icon-sun {
131  display: none;
132}
133
134:root[data-theme="dark"] .icon-sun {
135  display: inline-flex;
136}
137
138:root[data-theme="dark"] .icon-moon {
139  display: none;
140}
141
142.file-input-hidden {
143  display: none;
144}
145
146.tab {
147  border: none;
148  background: transparent;
149  padding: 8px 18px;
150  border-radius: 999px;
151  font-weight: 600;
152  color: var(--muted);
153  cursor: pointer;
154  transition: all 160ms ease;
155}
156
157.tab.active {
158  color: var(--ink);
159  background: var(--accent-soft);
160}
161
162main {
163  display: grid;
164  gap: 20px;
165}
166
167.card {
168  background: var(--panel);
169  border-radius: var(--radius);
170  padding: 20px;
171  border: 1px solid var(--border);
172  box-shadow: var(--shadow);
173}
174
175.card-header {
176  display: flex;
177  justify-content: space-between;
178  align-items: baseline;
179  margin-bottom: 16px;
180  gap: 12px;
181}
182
183.card-header p {
184  color: var(--muted);
185  font-size: 0.9rem;
186}
187
188form {
189  display: grid;
190  gap: 14px;
191  grid-template-columns: 1.4fr 1fr 1fr auto;
192  align-items: end;
193}
194
195label {
196  display: grid;
197  gap: 6px;
198  font-size: 0.85rem;
199  color: var(--muted);
200}
201
202input,
203select {
204  padding: 10px 12px;
205  border-radius: 12px;
206  border: 1px solid var(--border);
207  font-size: 0.95rem;
208  background: var(--field-bg);
209  color: var(--ink);
210}
211
212.food-combobox {
213  position: relative;
214}
215
216.food-suggestions {
217  position: absolute;
218  top: calc(100% + 6px);
219  left: 0;
220  right: 0;
221  max-height: 220px;
222  overflow-y: auto;
223  border: 1px solid var(--border);
224  background: var(--panel);
225  border-radius: 12px;
226  box-shadow: var(--shadow);
227  z-index: 5;
228  padding: 4px;
229}
230
231.food-suggestion {
232  width: 100%;
233  text-align: left;
234  border: none;
235  background: transparent;
236  color: var(--ink);
237  padding: 10px 11px;
238  border-radius: 9px;
239  cursor: pointer;
240}
241
242.food-suggestion:hover,
243.food-suggestion.active {
244  background: var(--accent-soft);
245}
246
247button.primary {
248  background: var(--accent);
249  color: white;
250  border: none;
251  border-radius: 12px;
252  padding: 10px 18px;
253  font-weight: 600;
254  cursor: pointer;
255  transition: transform 140ms ease, box-shadow 140ms ease;
256}
257
258button.primary:hover {
259  transform: translateY(-1px);
260  box-shadow: 0 10px 20px rgba(15, 118, 110, 0.25);
261}
262
263.hint {
264  margin-top: 10px;
265  color: var(--muted);
266  font-size: 0.85rem;
267}
268
269.intake-preview {
270  margin-top: 12px;
271  border: 1px solid var(--border);
272  background: var(--field-bg);
273  border-radius: 14px;
274  padding: 12px;
275}
276
277.preview-title {
278  font-size: 0.8rem;
279  color: var(--muted);
280  margin-bottom: 8px;
281}
282
283.preview-grid {
284  display: grid;
285  grid-template-columns: repeat(2, minmax(0, 1fr));
286  gap: 10px;
287}
288
289.preview-block {
290  background: var(--panel);
291  border: 1px solid var(--border);
292  border-radius: 10px;
293  padding: 10px;
294}
295
296.preview-block-title {
297  font-size: 0.75rem;
298  color: var(--muted);
299  margin-bottom: 6px;
300}
301
302.preview-values {
303  font-size: 0.86rem;
304  line-height: 1.35;
305}
306
307.totals {
308  display: grid;
309  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
310  gap: 12px;
311  margin-bottom: 16px;
312}
313
314.total-card {
315  padding: 12px 14px;
316  border-radius: 14px;
317  background: var(--field-bg);
318  border: 1px solid var(--border);
319}
320
321.total-card strong {
322  display: inline-flex;
323  align-items: baseline;
324  flex-wrap: nowrap;
325  font-size: 1.2rem;
326  line-height: 1.1;
327  white-space: nowrap;
328}
329
330.goal-soft {
331  display: inline-block;
332  color: var(--muted);
333  font-weight: inherit;
334  opacity: 0.85;
335}
336
337.total-unit {
338  display: inline-block;
339  margin-left: 4px;
340  font-size: 0.7em;
341  font-weight: 600;
342  color: var(--muted);
343}
344
345.total-card span {
346  display: block;
347  color: var(--muted);
348  font-size: 0.8rem;
349}
350
351.list {
352  display: grid;
353  gap: 10px;
354}
355
356.history-day-group {
357  display: grid;
358  gap: 8px;
359}
360
361.history-day-group + .history-day-group {
362  margin-top: 10px;
363}
364
365.history-day-title {
366  font-size: 0.82rem;
367  color: var(--muted);
368  font-weight: 700;
369  letter-spacing: 0.02em;
370  text-transform: uppercase;
371  margin: 2px 2px 0;
372}
373
374.row {
375  display: flex;
376  justify-content: space-between;
377  align-items: center;
378  padding: 12px 14px;
379  border-radius: 12px;
380  background: var(--field-bg);
381  border: 1px solid var(--border);
382}
383
384.row-actions {
385  display: flex;
386  align-items: center;
387  gap: 10px;
388}
389
390.row-title {
391  font-weight: 600;
392}
393
394.row-sub {
395  color: var(--muted);
396  font-size: 0.8rem;
397  margin-top: 2px;
398}
399
400.row-kcal {
401  font-weight: 700;
402}
403
404.row-delete {
405  border: 1px solid var(--border);
406  background: transparent;
407  color: var(--ink);
408  border-radius: 999px;
409  width: 34px;
410  height: 34px;
411  padding: 0;
412  cursor: pointer;
413}
414
415.row-edit {
416  border: 1px solid var(--border);
417  background: transparent;
418  color: var(--ink);
419  border-radius: 999px;
420  width: 34px;
421  height: 34px;
422  padding: 0;
423  cursor: pointer;
424}
425
426.icon-action {
427  display: inline-flex;
428  align-items: center;
429  justify-content: center;
430}
431
432.icon-action svg {
433  width: 16px;
434  height: 16px;
435  fill: currentColor;
436  display: block;
437}
438
439.row-edit:hover {
440  color: var(--accent);
441  border-color: var(--accent);
442}
443
444.row-delete:hover {
445  color: #ef4444;
446  border-color: #ef4444;
447}
448
449.history-controls {
450  display: grid;
451  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
452  gap: 12px;
453  margin-bottom: 16px;
454}
455
456.history-charts {
457  display: grid;
458  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
459  gap: 12px;
460  margin-bottom: 16px;
461}
462
463.chart-card {
464  background: var(--field-bg);
465  border: 1px solid var(--border);
466  border-radius: 14px;
467  padding: 12px;
468  position: relative;
469}
470
471.chart-card h3 {
472  font-size: 0.9rem;
473  margin-bottom: 10px;
474}
475
476.chart-grid {
477  min-height: 170px;
478}
479
480#history-kcal-chart {
481  display: block;
482}
483
484#history-macro-chart {
485  display: grid;
486  grid-auto-flow: column;
487  grid-auto-columns: minmax(26px, 1fr);
488  gap: 8px;
489  overflow-x: auto;
490  padding-bottom: 4px;
491}
492
493.chart-col {
494  display: grid;
495  grid-template-rows: auto 1fr auto;
496  align-items: end;
497  min-width: 26px;
498}
499
500.chart-value {
501  font-size: 0.7rem;
502  color: var(--muted);
503  text-align: center;
504  margin-bottom: 4px;
505}
506
507.chart-track {
508  height: 110px;
509  border-radius: 10px;
510  border: 1px solid var(--border);
511  background: var(--panel);
512  position: relative;
513  overflow: hidden;
514}
515
516.chart-fill {
517  position: absolute;
518  left: 0;
519  right: 0;
520  bottom: 0;
521  border-radius: 8px;
522}
523
524.chart-fill.kcal {
525  background: linear-gradient(180deg, #14b8a6, #0f766e);
526}
527
528.chart-track.stacked {
529  display: flex;
530  flex-direction: column-reverse;
531  justify-content: flex-start;
532  align-self: end;
533  height: 110px;
534}
535
536.chart-seg {
537  width: 100%;
538}
539
540.chart-seg.protein,
541.legend-dot.protein {
542  background: #22c55e;
543}
544
545.chart-seg.carbs,
546.legend-dot.carbs {
547  background: #f59e0b;
548}
549
550.chart-seg.fat,
551.legend-dot.fat {
552  background: #ef4444;
553}
554
555.chart-label {
556  font-size: 0.68rem;
557  color: var(--muted);
558  text-align: center;
559  margin-top: 5px;
560  white-space: nowrap;
561}
562
563.chart-legend {
564  display: flex;
565  gap: 10px;
566  flex-wrap: wrap;
567  margin-top: 10px;
568  font-size: 0.75rem;
569  color: var(--muted);
570}
571
572.chart-legend span {
573  display: flex;
574  align-items: center;
575  gap: 5px;
576}
577
578.line-chart-scroll {
579  overflow-x: auto;
580  padding-bottom: 2px;
581}
582
583.line-chart-svg {
584  display: block;
585  width: 100%;
586  min-width: 320px;
587  height: 180px;
588}
589
590.line-axis {
591  stroke: var(--border);
592  stroke-width: 1;
593}
594
595.line-path {
596  fill: none;
597  stroke: var(--accent);
598  stroke-width: 3;
599  stroke-linecap: round;
600  stroke-linejoin: round;
601}
602
603.goal-line {
604  stroke: #f59e0b;
605  stroke-width: 1.5;
606  stroke-dasharray: 6 4;
607}
608
609.line-point {
610  fill: var(--accent);
611  stroke: var(--panel);
612  stroke-width: 2;
613}
614
615.line-point.goal-under {
616  fill: #ef4444;
617}
618
619.line-point.goal-over {
620  fill: #22c55e;
621}
622
623.line-chart-labels {
624  display: flex;
625  justify-content: space-between;
626  margin-top: 4px;
627  color: var(--muted);
628  font-size: 0.72rem;
629}
630
631.chart-tooltip {
632  position: absolute;
633  z-index: 3;
634  max-width: 180px;
635  padding: 6px 8px;
636  border-radius: 8px;
637  border: 1px solid var(--border);
638  background: var(--panel);
639  color: var(--ink);
640  font-size: 0.72rem;
641  pointer-events: none;
642  box-shadow: var(--shadow);
643}
644
645.goal-indicators {
646  display: grid;
647  gap: 8px;
648}
649
650.goal-row {
651  display: flex;
652  flex-wrap: wrap;
653  gap: 8px;
654  align-items: center;
655  padding: 10px;
656  border: 1px solid var(--border);
657  border-radius: 10px;
658  background: var(--panel);
659}
660
661.goal-row strong {
662  font-size: 0.86rem;
663}
664
665.goal-row > span {
666  font-size: 0.75rem;
667  color: var(--muted);
668}
669
670.goal-chip {
671  padding: 3px 8px;
672  border-radius: 999px;
673  border: 1px solid var(--border);
674  font-size: 0.72rem;
675}
676
677.goal-chip.under {
678  color: #dc2626;
679}
680
681.goal-chip.on {
682  color: #16a34a;
683}
684
685.goal-chip.over {
686  color: #0369a1;
687}
688
689.settings-panels {
690  display: grid;
691  gap: 14px;
692}
693
694.settings-panel {
695  background: var(--field-bg);
696  border: 1px solid var(--border);
697  border-radius: 14px;
698  padding: 14px;
699}
700
701.settings-panel h3 {
702  font-size: 0.95rem;
703  margin-bottom: 10px;
704}
705
706.settings-actions {
707  display: flex;
708  gap: 10px;
709  flex-wrap: wrap;
710}
711
712.goals-form {
713  display: grid;
714  gap: 12px;
715  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
716}
717
718.legend-dot {
719  display: inline-block;
720  width: 10px;
721  height: 10px;
722  border-radius: 50%;
723}
724
725.hidden {
726  display: none;
727}
728
729@media (max-width: 720px) {
730  .topbar {
731    flex-direction: column;
732    align-items: flex-start;
733  }
734
735  .topbar-actions {
736    width: 100%;
737    justify-content: space-between;
738    gap: 10px;
739  }
740
741  .nav {
742    flex: 1;
743    justify-content: center;
744  }
745
746  form {
747    grid-template-columns: 1fr;
748  }
749
750  .goals-form {
751    grid-template-columns: 1fr;
752  }
753
754  .settings-actions .ghost {
755    width: 100%;
756  }
757
758  .preview-grid {
759    grid-template-columns: 1fr;
760  }
761}