repos
/ orchard main

orchard

mirror

Every site I host, in one repo, along with the Cloudflare Tunnel and Caddy that front them. It's all Go, Vite, and SQLite, and it runs on a desktop at home with nothing listening on an inbound port.

blogbuncaddycloudflare-tunneldockergogolanghomelabhtml-templatemonorepoself-hostedseosqlitestatic-sitetypstuptime-monitoringviteweb-analytics

19.4 KB · 944 lines · SCSS Raw History
  1@use "variables" as *;
  2
  3// Bootstrap 5.3 writes defaults into `:root,[data-bs-theme=light]`. Use
  4// `html:root` so we outrank the default block and enforce the dark palette.
  5html:root {
  6  --bs-body-bg: #{$body-bg};
  7  --bs-body-color: #{$body-color};
  8  --bs-body-bg-rgb: 14, 13, 10;
  9  --bs-body-color-rgb: 221, 215, 205;
 10  --bs-emphasis-color: #{$white};
 11  --bs-secondary-bg: #{$card-bg};
 12  --bs-tertiary-bg: #18160f;
 13  --bs-border-color: rgba(107, 158, 120, 0.3);
 14  --bs-link-color-rgb: 125, 184, 140;
 15  --bs-link-hover-color-rgb: 149, 204, 162;
 16  --bs-heading-color: #{$white};
 17}
 18
 19body {
 20  min-height: 100vh;
 21  display: flex;
 22  flex-direction: column;
 23  -webkit-font-smoothing: antialiased;
 24  -moz-osx-font-smoothing: grayscale;
 25  letter-spacing: 0.01em;
 26  background-color: $body-bg !important;
 27  color: $body-color;
 28
 29  // The structural grid the whole estate sits on. 32px because that is the
 30  // padding rhythm the panels already use, and low enough alpha that it reads
 31  // as texture rather than as a table. Green here where dash is amber, and a
 32  // touch more alpha to match, since green at this value reads fainter.
 33  background-image:
 34    linear-gradient(rgba(107, 158, 120, 0.028) 1px, transparent 1px),
 35    linear-gradient(90deg, rgba(107, 158, 120, 0.028) 1px, transparent 1px);
 36  background-size: 32px 32px;
 37  background-position: center top;
 38}
 39
 40main { flex: 1; }
 41
 42// The keyboard focus ring, and the selection colour. repos has had both since
 43// it was written and the other four had neither, so a tab through a form here
 44// depended on whatever Bootstrap happened to do per component.
 45:focus-visible {
 46  outline: 2px solid $green;
 47  outline-offset: 2px;
 48  border-radius: 2px;
 49}
 50
 51::selection { background: rgba(107, 158, 120, 0.3); }
 52
 53
 54.vh-100 { height: 100vh; }
 55
 56
 57.logo {
 58  display: inline-flex;
 59  align-items: center;
 60  justify-content: center;
 61  width: 28px;
 62  height: 28px;
 63  text-decoration: none !important;
 64  transition: transform 250ms ease;
 65
 66  svg {
 67    width: 100%;
 68    height: 100%;
 69    display: block;
 70  }
 71
 72  &:hover {
 73    transform: translateY(-1px);
 74  }
 75
 76  &.logo-sm {
 77    width: 18px;
 78    height: 18px;
 79  }
 80}
 81
 82// `min-height` rather than `height`, so the bar grows when the mobile collapse
 83// opens. At a fixed height the open menu is painted over by the siblings below.
 84
 85.navbar {
 86  min-height: 52px;
 87  padding: 0;
 88  background: #090806 !important;
 89  border-bottom: 1px solid rgba(107, 158, 120, 0.3);
 90
 91  > .container {
 92    min-height: 52px;
 93  }
 94
 95  .navbar-brand {
 96    display: flex;
 97    align-items: center;
 98    gap: 0.6rem;
 99    color: $white;
100    font-weight: 600;
101    letter-spacing: 0.1em;
102    text-transform: uppercase;
103    font-size: 0.78rem;
104    text-decoration: none;
105
106    .brand-text { color: $white; }
107    .brand-dot {
108      display: inline-block;
109      width: 6px; height: 6px; border-radius: 50%;
110      background: $green;
111    }
112  }
113
114  .navbar-toggler {
115    color: rgba(221, 215, 205, 0.7);
116    padding: 0.35rem 0.55rem;
117    font-size: 1rem;
118
119    &:focus { box-shadow: none; }
120  }
121
122  .nav-link {
123    font-size: 0.8rem;
124    font-weight: 500;
125    letter-spacing: 0.05em;
126    text-transform: lowercase;
127    padding-left: 1rem !important;
128    padding-right: 1rem !important;
129    color: rgba(221, 215, 205, 0.6);
130    position: relative;
131    transition: color 200ms ease;
132
133    &::after {
134      content: '';
135      position: absolute;
136      bottom: 2px;
137      left: 1rem;
138      right: 1rem;
139      height: 1px;
140      background: $green;
141      transform: scaleX(0);
142      transition: transform 250ms ease;
143    }
144
145    &:hover,
146    &.active { color: $white; }
147
148    &:hover::after,
149    &.active::after { transform: scaleX(1); }
150  }
151
152  @media (max-width: 767.98px) {
153    .navbar-collapse {
154      width: 100%;
155      border-top: 1px solid rgba(107, 158, 120, 0.3);
156      margin-top: 0.25rem;
157      padding: 0.4rem 0 0.6rem;
158    }
159
160    .navbar-nav {
161      margin-left: 0 !important;
162      width: 100%;
163    }
164
165    .nav-link {
166      padding: 0.65rem 0.75rem !important;
167      border-left: 2px solid transparent;
168      border-radius: 2px;
169      transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease;
170
171      &::after { display: none; }
172
173      &:hover {
174        background: rgba(221, 215, 205, 0.04);
175        color: $white;
176      }
177
178      &.active {
179        color: $white;
180        border-left-color: $green;
181        background: rgba(107, 158, 120, 0.08);
182      }
183    }
184
185    .navbar-nav.ms-auto {
186      margin-top: 0.5rem;
187      padding-top: 0.6rem;
188      border-top: 1px solid rgba(107, 158, 120, 0.3);
189
190      .nav-item { width: 100%; }
191
192      .btn,
193      form,
194      .d-inline { width: 100%; }
195
196      .btn { width: 100%; }
197    }
198  }
199}
200
201.breadcrumb-bar {
202  background: rgba(107, 158, 120, 0.02);
203  border-bottom: 1px solid rgba(107, 158, 120, 0.2);
204
205  .breadcrumb { font-family: $font-family-monospace; }
206}
207
208.section-label {
209  font-size: 0.7rem;
210  font-weight: 600;
211  letter-spacing: 0.12em;
212  text-transform: uppercase;
213  color: $amber;
214  font-family: $font-family-monospace;
215}
216
217.card {
218  background: $card-bg;
219  border: 1px solid $card-border-color;
220  transition: border-color 250ms ease;
221
222  &:hover { border-color: rgba(107, 158, 120, 0.2); }
223}
224
225.status-dot {
226  display: inline-block;
227  width: 8px; height: 8px;
228  border-radius: 50%;
229  margin-right: 0.55rem;
230  vertical-align: middle;
231  flex-shrink: 0;
232
233  &.status-dot-lg {
234    width: 14px; height: 14px;
235    margin-right: 0;
236  }
237
238  &.is-up { background: $green; box-shadow: 0 0 0 3px rgba(107, 158, 120, 0.12); }
239  &.is-down { background: $terracotta; box-shadow: 0 0 0 3px rgba(196, 112, 85, 0.12); }
240  &.is-warn { background: $amber; box-shadow: 0 0 0 3px rgba(201, 168, 76, 0.12); }
241  &.is-idle { background: #4a443c; }
242}
243
244.toggle-label {
245  font-family: $font-family-monospace;
246  font-size: 0.68rem;
247  font-weight: 600;
248  letter-spacing: 0.12em;
249  text-transform: uppercase;
250  color: $gray-400;
251  cursor: help;
252}
253
254.toggle-pill {
255  display: inline-flex;
256  align-items: stretch;
257  border: 1px solid rgba(107, 158, 120, 0.22);
258  border-radius: 999px;
259  overflow: hidden;
260  cursor: pointer;
261  background: #0e0d0a;
262  margin: 0;
263  user-select: none;
264  line-height: 1;
265
266  input {
267    position: absolute;
268    opacity: 0;
269    pointer-events: none;
270    width: 0; height: 0;
271  }
272
273  .toggle-pill-seg {
274    padding: 0.45rem 0.9rem;
275    font-family: $font-family-monospace;
276    font-size: 0.7rem;
277    font-weight: 600;
278    letter-spacing: 0.08em;
279    text-transform: uppercase;
280    color: $gray-500;
281    transition: background 180ms ease, color 180ms ease;
282  }
283
284  input ~ .toggle-pill-private {
285    background: rgba(201, 168, 76, 0.12);
286    color: #ddc06a;
287  }
288
289  input:checked ~ .toggle-pill-private {
290    background: transparent;
291    color: $gray-500;
292  }
293  input:checked ~ .toggle-pill-public {
294    background: $green-dim;
295    color: $green-bright;
296  }
297
298  &:hover {
299    border-color: rgba(107, 158, 120, 0.35);
300  }
301}
302
303.metric-tile {
304  background: $card-bg;
305  border: 1px solid $card-border-color;
306  border-radius: $border-radius;
307  padding: 1rem 1.15rem;
308  height: 100%;
309  display: flex;
310  flex-direction: column;
311
312  .metric-header {
313    display: flex;
314    align-items: center;
315    gap: 0.5rem;
316    min-height: 1.3rem;
317  }
318
319  // The grow belongs to the header row, where the label shares a line with the
320  // delta chip. A tile without a header puts the label straight into the column
321  // flex, where flex:1 makes it eat the height and drop the number to the
322  // bottom of the tile.
323  .metric-header .metric-label {
324    flex: 1;
325    min-width: 0;
326  }
327
328  .metric-label {
329    font-size: 0.68rem;
330    font-weight: 600;
331    letter-spacing: 0.12em;
332    text-transform: uppercase;
333    color: $gray-400;
334  }
335
336  .metric-value {
337    font-size: 1.75rem;
338    font-weight: 700;
339    line-height: 1.1;
340    color: $white;
341    margin-top: 0.35rem;
342    letter-spacing: -0.01em;
343    word-break: break-word;
344  }
345
346  .metric-sub {
347    font-size: 0.72rem;
348    color: $gray-400;
349    margin-top: auto;
350    padding-top: 0.35rem;
351    letter-spacing: 0.02em;
352  }
353
354  .metric-delta {
355    flex-shrink: 0;
356    font-family: $font-family-monospace;
357    font-size: 0.75rem;
358    font-weight: 600;
359    letter-spacing: 0.04em;
360    padding: 0.22rem 0.5rem;
361    border-radius: 2px;
362    border: 1px solid transparent;
363    line-height: 1;
364
365    &.is-up {
366      color: $green-bright;
367      background: $green-dim;
368      border-color: $green-border;
369    }
370    &.is-down {
371      color: #e38871;
372      background: $terracotta-dim;
373      border-color: $terracotta-border;
374    }
375    &.is-flat {
376      color: $gray-400;
377      background: rgba(221, 215, 205, 0.04);
378      border-color: rgba(221, 215, 205, 0.08);
379    }
380  }
381
382  &.metric-accent-green {
383    border-color: $green-border;
384    .metric-value { color: $green-bright; }
385  }
386  &.metric-accent-amber {
387    border-color: $amber-border;
388    .metric-value { color: #ddc06a; }
389  }
390  &.metric-accent-danger {
391    border-color: $terracotta-border;
392    .metric-value { color: #d88870; }
393  }
394}
395
396.chip {
397  display: inline-flex;
398  align-items: center;
399  gap: 0.4rem;
400  font-family: $font-family-monospace;
401  font-size: 0.7rem;
402  font-weight: 600;
403  letter-spacing: 0.05em;
404  text-transform: uppercase;
405  padding: 0.3rem 0.6rem;
406  border-radius: 2px;
407  border: 1px solid transparent;
408  line-height: 1;
409
410  &.chip-ok {
411    background: $green-dim;
412    color: $green-bright;
413    border-color: $green-border;
414  }
415  &.chip-down {
416    background: $terracotta-dim;
417    color: #e38871;
418    border-color: $terracotta-border;
419  }
420  &.chip-warn {
421    background: $amber-dim;
422    color: #ddc06a;
423    border-color: $amber-border;
424  }
425  &.chip-info {
426    background: rgba(126, 170, 184, 0.08);
427    color: #9ec5d2;
428    border-color: rgba(126, 170, 184, 0.22);
429  }
430  &.chip-muted {
431    background: rgba(221, 215, 205, 0.04);
432    color: $gray-400;
433    border-color: rgba(221, 215, 205, 0.08);
434  }
435}
436
437footer {
438  padding-top: 4rem;
439  padding-bottom: 3rem;
440  position: relative;
441  background: #090806;
442  border-top: 1px solid rgba(107, 158, 120, 0.3);
443
444  .h5 {
445    font-size: 0.7rem;
446    letter-spacing: 0.12em;
447    text-transform: uppercase;
448    color: $amber;
449    font-weight: 600;
450  }
451
452  p {
453    color: rgba(221, 215, 205, 0.5);
454    font-size: 0.85rem;
455    line-height: 1.75;
456
457    a {
458      color: rgba(221, 215, 205, 0.75);
459      text-decoration: underline;
460      text-underline-offset: 2px;
461
462      &:hover { color: $white; }
463    }
464  }
465
466  .links {
467    padding-top: 2rem;
468    padding-bottom: 1rem;
469  }
470}
471
472.footer-bar {
473  background: #050403;
474  border-top: 1px solid rgba(107, 158, 120, 0.2);
475  padding: 0.8rem 0;
476  color: rgba(221, 215, 205, 0.3);
477  font-size: 0.78rem;
478
479  small { color: rgba(221, 215, 205, 0.3); }
480
481  &-link {
482    color: rgba(221, 215, 205, 0.3);
483    transition: color 200ms ease;
484
485    &:hover { color: $white; }
486  }
487}
488
489.terminal-block {
490  background: rgba(9, 8, 6, 0.7);
491  border: 1px solid rgba(107, 158, 120, 0.15);
492  border-radius: $border-radius;
493  font-family: $font-family-monospace;
494  font-size: 0.8rem;
495  color: $green-bright;
496  padding: 1rem 1.2rem;
497  line-height: 1.8;
498
499  .t-line { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
500  .t-prompt { color: $amber; margin-right: 0.4rem; }
501  .t-out { color: $gray-200; }
502  .t-comment { color: $gray-500; }
503  .t-key { color: $amber; }
504  .t-val { color: $green-bright; }
505  .t-cursor {
506    display: inline-block; width: 7px; height: 0.9em; vertical-align: -2px;
507    background: $green-bright;
508    animation: t-blink 1s steps(1) infinite;
509  }
510}
511
512@keyframes t-blink {
513  0%, 50% { opacity: 1; }
514  51%, 100% { opacity: 0; }
515}
516
517.property-row {
518  display: grid;
519  grid-template-columns: minmax(0, 1fr) auto;
520  gap: 1rem 1.5rem;
521  background: $card-bg;
522  border: 1px solid $card-border-color;
523  border-radius: $border-radius;
524  padding: 1rem 1.15rem;
525  margin-bottom: 0.75rem;
526  transition: border-color 200ms ease;
527
528  &:hover { border-color: rgba(107, 158, 120, 0.22); }
529
530  &.is-quiet { border-color: rgba(132, 124, 114, 0.25); }
531
532  .pr-main {
533    min-width: 0;
534    display: flex;
535    flex-direction: column;
536    gap: 0.35rem;
537  }
538
539  .pr-title {
540    font-weight: 600;
541    color: $white;
542    display: flex;
543    align-items: center;
544    min-width: 0;
545
546    a {
547      color: inherit;
548      text-decoration: none;
549      min-width: 0;
550      overflow: hidden;
551      text-overflow: ellipsis;
552      white-space: nowrap;
553
554      &:hover { color: $green-bright; }
555    }
556  }
557
558  .pr-id {
559    font-size: 0.72rem;
560    color: $gray-500;
561    font-family: $font-family-monospace;
562    overflow: hidden;
563    text-overflow: ellipsis;
564    white-space: nowrap;
565    display: flex;
566    align-items: baseline;
567    gap: 0.5rem;
568
569    .pr-id-k {
570      text-transform: uppercase;
571      font-size: 0.6rem;
572      letter-spacing: 0.1em;
573      color: $gray-400;
574      flex-shrink: 0;
575    }
576  }
577
578  .pr-side {
579    display: flex;
580    flex-direction: column;
581    justify-content: space-between;
582    align-items: flex-end;
583    gap: 0.75rem;
584    min-height: 68px;
585  }
586
587  .pr-meta {
588    display: flex;
589    gap: 0.85rem;
590    align-items: flex-end;
591    font-family: $font-family-monospace;
592
593    .pr-meta-cell {
594      display: flex;
595      flex-direction: column;
596      align-items: flex-start;
597      gap: 0.2rem;
598      min-width: 0;
599    }
600
601    .pr-meta-k {
602      color: $gray-500;
603      text-transform: uppercase;
604      font-size: 0.6rem;
605      letter-spacing: 0.1em;
606      line-height: 1;
607    }
608
609    .pr-meta-v {
610      color: $gray-200;
611      font-size: 0.88rem;
612      font-weight: 600;
613      line-height: 1;
614    }
615  }
616
617  .pr-actions {
618    display: flex;
619    gap: 0.4rem;
620  }
621}
622
623@media (max-width: 767px) {
624  .property-row {
625    grid-template-columns: 1fr;
626
627    .pr-side {
628      min-height: 0;
629      align-items: stretch;
630    }
631    .pr-meta {
632      flex-wrap: wrap;
633      justify-content: flex-start;
634    }
635    .pr-actions {
636      justify-content: flex-end;
637    }
638  }
639}
640
641.search-form {
642  position: relative;
643
644  .search-icon {
645    position: absolute;
646    left: 0.9rem;
647    top: 50%;
648    transform: translateY(-50%);
649    color: $gray-500;
650    pointer-events: none;
651    z-index: 2;
652  }
653
654  .search-input {
655    padding-left: 2.5rem;
656    font-size: 0.85rem;
657    border: 1px solid rgba(107, 158, 120, 0.15);
658    background: rgba(19, 18, 14, 0.7);
659    color: $body-color;
660    transition: border-color 200ms ease;
661
662    &::placeholder {
663      color: $gray-500;
664      font-style: normal;
665    }
666
667    &:focus {
668      border-color: rgba(107, 158, 120, 0.4);
669      box-shadow: 0 0 0 2px rgba(107, 158, 120, 0.1);
670      background: $card-bg;
671    }
672  }
673}
674
675.dashboard-toolbar {
676  display: flex;
677  gap: 0.5rem;
678  align-items: stretch;
679
680  .form-control {
681    height: 38px;
682    font-size: 0.85rem;
683  }
684
685  .btn {
686    height: 38px;
687    padding: 0 1.1rem;
688    display: inline-flex;
689    align-items: center;
690    white-space: nowrap;
691  }
692}
693
694.chart-panel {
695  background: $card-bg;
696  border: 1px solid $card-border-color;
697  border-radius: $border-radius;
698  padding: 1rem 1.15rem;
699
700  .chart-panel-header {
701    display: flex;
702    align-items: center;
703    justify-content: space-between;
704    margin-bottom: 0.75rem;
705    gap: 0.75rem;
706  }
707
708  .chart-panel-title {
709    font-size: 0.68rem;
710    font-weight: 600;
711    letter-spacing: 0.12em;
712    text-transform: uppercase;
713    color: $amber;
714    font-family: $font-family-monospace;
715  }
716
717  .chart-panel-body {
718    position: relative;
719  }
720}
721
722
723.rank-list {
724  background: $card-bg;
725  border: 1px solid $card-border-color;
726  border-radius: $border-radius;
727  overflow: hidden;
728  height: 100%;
729  display: flex;
730  flex-direction: column;
731
732  .rank-list-header {
733    display: flex;
734    justify-content: space-between;
735    align-items: center;
736    background: rgba(107, 158, 120, 0.04);
737    padding: 0.6rem 1rem;
738    border-bottom: 1px solid rgba(107, 158, 120, 0.3);
739
740    .rank-list-title {
741      font-size: 0.68rem;
742      font-weight: 600;
743      letter-spacing: 0.12em;
744      text-transform: uppercase;
745      color: $amber;
746      font-family: $font-family-monospace;
747    }
748
749    .rank-list-col {
750      font-size: 0.62rem;
751      font-weight: 600;
752      letter-spacing: 0.1em;
753      text-transform: uppercase;
754      color: $gray-500;
755      font-family: $font-family-monospace;
756    }
757  }
758
759  .rank-list-body {
760    display: flex;
761    flex-direction: column;
762    flex: 1 1 auto;
763  }
764
765  .rank-list-row {
766    display: grid;
767    grid-template-columns: minmax(0, 1fr) auto;
768    gap: 0.75rem;
769    align-items: center;
770    padding: 0.5rem 1rem;
771    border-bottom: 1px solid rgba(107, 158, 120, 0.2);
772    font-size: 0.85rem;
773
774    &:last-child { border-bottom: none; }
775
776    .rank-label {
777      min-width: 0;
778      overflow: hidden;
779      text-overflow: ellipsis;
780      white-space: nowrap;
781      color: $gray-200;
782
783      a {
784        color: inherit;
785        text-decoration: none;
786
787        &:hover {
788          color: $green-bright;
789          text-decoration: underline;
790        }
791      }
792    }
793
794    .rank-count {
795      font-family: $font-family-monospace;
796      font-size: 0.78rem;
797      color: $amber;
798      font-weight: 600;
799    }
800  }
801
802  .rank-list-empty {
803    padding: 1.25rem 1rem;
804    color: $gray-500;
805    font-size: 0.82rem;
806    text-align: center;
807  }
808}
809
810.filter-chip {
811  display: inline-flex;
812  align-items: center;
813  gap: 0.5rem;
814  background: $amber-dim;
815  border: 1px solid $amber-border;
816  color: #ddc06a;
817  font-family: $font-family-monospace;
818  font-size: 0.75rem;
819  padding: 0.3rem 0.6rem;
820  border-radius: 2px;
821  max-width: 100%;
822
823  .filter-chip-label {
824    overflow: hidden;
825    text-overflow: ellipsis;
826    white-space: nowrap;
827  }
828
829  .filter-chip-clear {
830    background: transparent;
831    border: none;
832    color: #ddc06a;
833    cursor: pointer;
834    padding: 0;
835    line-height: 1;
836    opacity: 0.7;
837    transition: opacity 150ms ease;
838
839    &:hover { opacity: 1; }
840  }
841}
842
843.date-range-form {
844  display: grid;
845  grid-template-columns: 1fr 1fr 1fr;
846  gap: 0.5rem;
847
848  @media (max-width: 575px) {
849    grid-template-columns: 1fr;
850  }
851
852  .form-floating label {
853    font-size: 0.78rem;
854  }
855
856  .form-control,
857  .form-select {
858    font-size: 0.85rem;
859  }
860}
861
862.auth-shell {
863  min-height: calc(100vh - 52px);
864  display: grid;
865  grid-template-columns: 1fr 1fr;
866
867  @media (max-width: 991px) {
868    grid-template-columns: 1fr;
869  }
870
871  .auth-form-col {
872    padding: 3rem 2rem;
873    display: flex;
874    align-items: center;
875    justify-content: center;
876  }
877
878  .auth-visual-col {
879    position: relative;
880    overflow: hidden;
881    background: linear-gradient(145deg, #090806 0%, #0e0d0a 60%, $card-bg 100%);
882    border-left: 1px solid rgba(107, 158, 120, 0.3);
883
884    @media (max-width: 991px) { display: none; }
885  }
886
887  .auth-form-wrap {
888    width: 100%;
889    max-width: 380px;
890  }
891}
892
893.codebox {
894  background: #090806;
895  border: 1px solid rgba(107, 158, 120, 0.15);
896  border-radius: $border-radius;
897  color: $green-bright;
898  font-family: $font-family-monospace;
899  font-size: 0.78rem;
900  line-height: 1.7;
901  padding: 1rem 1.1rem;
902  white-space: pre-wrap;
903  word-break: break-word;
904  resize: vertical;
905  min-height: 160px;
906  width: 100%;
907
908  &:focus {
909    outline: none;
910    border-color: $green-border;
911    box-shadow: 0 0 0 2px rgba(107, 158, 120, 0.1);
912  }
913}
914
915// d3-geo renders an SVG inside #map. Tooltip styling lives inline in
916// property_map.js since it needs runtime positioning anyway.
917
918#map {
919  position: relative;
920
921  svg path {
922    transition: fill 80ms ease, stroke 80ms ease;
923  }
924}
925
926.chart-panel-action {
927  background: transparent;
928  border: 1px solid rgba(107, 158, 120, 0.25);
929  color: rgba(221, 215, 205, 0.7);
930  font-family: $font-family-monospace;
931  font-size: 0.62rem;
932  letter-spacing: 0.08em;
933  text-transform: uppercase;
934  padding: 0.25rem 0.55rem;
935  border-radius: $border-radius;
936  cursor: pointer;
937  transition: color 80ms, border-color 80ms;
938
939  &:hover {
940    color: #c9a84c;
941    border-color: rgba(201, 168, 76, 0.5);
942  }
943}