@brett_lamy/docstream 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/styles.css CHANGED
@@ -661,65 +661,157 @@
661
661
  cursor: pointer;
662
662
  }
663
663
 
664
+ /* The rack is hardware, so it is dark in both themes: a brushed-steel 19" frame with screwed rack ears,
665
+ anodized modules with silkscreened labels, rubber knobs with LED rings, channel faders, backlit pads,
666
+ TR-style step keys and green LCDs. */
664
667
  .strudel-rack {
665
- --strudel-accent: var(--gb-primary, #6366f1);
668
+ --strudel-accent: #36d6ff;
669
+ --strudel-amber: #ff9d1c;
670
+ --strudel-red: #ff4433;
671
+ --strudel-lcd: #9dff9a;
672
+ --strudel-silk: #d9dde4;
673
+ --strudel-ear: 22px;
674
+ position: relative;
666
675
  display: flex;
667
676
  flex-direction: column;
668
- gap: 8px;
669
- padding: 10px;
670
- border: 1px solid var(--gb-border);
671
- border-radius: 12px;
672
- background: var(--gb-muted, #f4f4f5);
677
+ gap: 10px;
678
+ padding: 12px calc(var(--strudel-ear) + 10px);
679
+ border-radius: 8px;
680
+ color: var(--strudel-silk);
673
681
  font-size: 12px;
682
+ font-family: "Helvetica Neue", Arial, system-ui, sans-serif;
683
+ background:
684
+ /* rack ears: four screws */
685
+ radial-gradient(circle at calc(var(--strudel-ear) / 2) 18px, #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
686
+ radial-gradient(circle at calc(var(--strudel-ear) / 2) calc(100% - 18px), #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
687
+ radial-gradient(circle at calc(100% - var(--strudel-ear) / 2) 18px, #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
688
+ radial-gradient(circle at calc(100% - var(--strudel-ear) / 2) calc(100% - 18px), #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
689
+ /* ear plates */
690
+ linear-gradient(90deg, #9da2ab 0, #c9ccd2 9px, #8e939c var(--strudel-ear), rgb(0 0 0 / 0.5) var(--strudel-ear), transparent calc(var(--strudel-ear) + 2px)) left / calc(var(--strudel-ear) + 2px) 100% no-repeat,
691
+ linear-gradient(270deg, #9da2ab 0, #c9ccd2 9px, #8e939c var(--strudel-ear), rgb(0 0 0 / 0.5) var(--strudel-ear), transparent calc(var(--strudel-ear) + 2px)) right / calc(var(--strudel-ear) + 2px) 100% no-repeat,
692
+ /* brushed steel */
693
+ repeating-linear-gradient(0deg, rgb(255 255 255 / 0.025) 0 1px, transparent 1px 3px),
694
+ linear-gradient(180deg, #3a3d44, #24262b 30%, #1b1c20);
695
+ box-shadow:
696
+ inset 0 1px 0 rgb(255 255 255 / 0.18),
697
+ inset 0 -1px 0 rgb(0 0 0 / 0.6),
698
+ 0 1px 0 rgb(255 255 255 / 0.4),
699
+ 0 10px 24px -8px rgb(0 0 0 / 0.55);
674
700
  }
675
701
 
676
702
  .strudel-rack__master {
677
703
  display: flex;
678
704
  align-items: center;
679
705
  gap: 14px;
680
- padding: 4px 6px;
706
+ padding: 10px 14px;
707
+ border-radius: 6px;
708
+ background: linear-gradient(180deg, #2c2f35, #17181c);
709
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.1), inset 0 0 0 1px rgb(0 0 0 / 0.7), 0 2px 3px rgb(0 0 0 / 0.5);
681
710
  }
682
711
 
683
712
  .strudel-rack__title {
684
- font-weight: 600;
713
+ display: flex;
714
+ flex-direction: column;
715
+ font-weight: 800;
685
716
  font-size: 13px;
717
+ letter-spacing: 0.14em;
718
+ text-transform: uppercase;
719
+ color: #fff;
720
+ }
721
+
722
+ .strudel-rack__title small {
723
+ font-weight: 500;
724
+ font-size: 9px;
725
+ letter-spacing: 0.3em;
726
+ color: var(--strudel-accent);
727
+ text-shadow: 0 0 6px color-mix(in srgb, var(--strudel-accent) 60%, transparent);
686
728
  }
687
729
 
688
730
  .strudel-rack__summary {
689
731
  margin-left: auto;
690
- color: var(--gb-muted-foreground);
732
+ font-size: 9px;
733
+ letter-spacing: 0.18em;
734
+ text-transform: uppercase;
735
+ color: #8b9099;
691
736
  }
692
737
 
693
738
  .strudel-rack__error,
694
739
  .strudel-device__error {
695
740
  margin: 0;
696
- color: var(--gb-danger, #dc2626);
741
+ color: var(--strudel-red);
697
742
  font-size: 12px;
698
743
  }
699
744
 
700
- .strudel-device {
701
- border: 1px solid var(--gb-border);
702
- border-radius: 10px;
703
- background: var(--gb-panel, #fff);
704
- color: var(--gb-panel-foreground, inherit);
705
- overflow: hidden;
745
+ /* LCD: recessed green glass with a faint pixel grid. */
746
+ .strudel-lcd {
747
+ padding: 6px 10px;
748
+ border-radius: 4px;
749
+ background:
750
+ repeating-linear-gradient(0deg, rgb(0 0 0 / 0.18) 0 1px, transparent 1px 2px),
751
+ linear-gradient(180deg, #0c1a10, #10261a);
752
+ box-shadow: inset 0 2px 4px rgb(0 0 0 / 0.8), inset 0 0 0 1px rgb(0 0 0 / 0.9), 0 1px 0 rgb(255 255 255 / 0.12);
753
+ color: var(--strudel-lcd);
754
+ font-family: "SF Mono", ui-monospace, Menlo, monospace;
755
+ text-shadow: 0 0 6px color-mix(in srgb, var(--strudel-lcd) 55%, transparent);
756
+ }
757
+
758
+ .strudel-lcd--bpm {
759
+ display: inline-flex;
760
+ align-items: baseline;
761
+ gap: 4px;
762
+ min-width: 92px;
763
+ justify-content: flex-end;
764
+ font-size: 24px;
765
+ font-weight: 600;
766
+ font-variant-numeric: tabular-nums;
767
+ letter-spacing: 0.04em;
768
+ }
769
+
770
+ .strudel-lcd--bpm small {
771
+ font-size: 9px;
772
+ letter-spacing: 0.15em;
706
773
  }
707
774
 
708
- .strudel-device[data-audible="false"] .strudel-device__body {
709
- opacity: 0.45;
775
+ /* Modules: anodized faceplates with a top bevel and corner screws. */
776
+ .strudel-device {
777
+ position: relative;
778
+ border-radius: 6px;
779
+ background:
780
+ radial-gradient(circle at 8px 8px, #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
781
+ radial-gradient(circle at calc(100% - 8px) 8px, #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
782
+ radial-gradient(circle at 8px calc(100% - 8px), #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
783
+ radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
784
+ repeating-linear-gradient(90deg, rgb(255 255 255 / 0.018) 0 1px, transparent 1px 2px),
785
+ linear-gradient(180deg, #33363d, #212328);
786
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.14), inset 0 0 0 1px rgb(0 0 0 / 0.75), 0 3px 5px rgb(0 0 0 / 0.5);
710
787
  }
711
788
 
789
+ .strudel-device[data-kind="drums"] { --strudel-key: var(--strudel-amber); }
790
+ .strudel-device[data-kind="melodic"],
791
+ .strudel-device[data-kind="other"] { --strudel-key: var(--strudel-accent); }
792
+
712
793
  .strudel-device__head {
713
794
  display: flex;
714
795
  align-items: center;
715
796
  gap: 8px;
716
- padding: 6px 8px 6px 10px;
717
- border-bottom: 1px solid var(--gb-border);
718
- color: var(--gb-muted-foreground);
797
+ padding: 7px 16px 7px 18px;
798
+ border-bottom: 1px solid rgb(0 0 0 / 0.6);
799
+ box-shadow: 0 1px 0 rgb(255 255 255 / 0.06);
800
+ color: var(--strudel-key);
801
+ }
802
+
803
+ .strudel-device__led {
804
+ width: 7px;
805
+ height: 7px;
806
+ border-radius: 999px;
807
+ background: radial-gradient(circle at 35% 35%, #d8ffd6, #2fe05a 45%, #0d6a26);
808
+ box-shadow: 0 0 6px #2fe05a, 0 0 0 1px rgb(0 0 0 / 0.7);
719
809
  }
720
810
 
721
- .strudel-device[data-kind="drums"] .strudel-device__head svg { color: #f59e0b; }
722
- .strudel-device[data-kind="melodic"] .strudel-device__head svg { color: var(--strudel-accent); }
811
+ .strudel-device[data-audible="false"] .strudel-device__led {
812
+ background: radial-gradient(circle at 35% 35%, #4b524c, #1f2420);
813
+ box-shadow: 0 0 0 1px rgb(0 0 0 / 0.7);
814
+ }
723
815
 
724
816
  .strudel-device__name {
725
817
  flex: 1;
@@ -727,30 +819,54 @@
727
819
  overflow: hidden;
728
820
  text-overflow: ellipsis;
729
821
  white-space: nowrap;
730
- font-weight: 600;
731
- color: var(--gb-panel-foreground, inherit);
822
+ font-weight: 700;
823
+ font-size: 11px;
824
+ letter-spacing: 0.14em;
825
+ text-transform: uppercase;
826
+ color: var(--strudel-silk);
732
827
  }
733
828
 
829
+ /* Backlit rubber pads. */
734
830
  .strudel-device__toggle {
735
- width: 22px;
736
- height: 22px;
737
- border: 1px solid var(--gb-border);
738
- border-radius: 5px;
739
- background: transparent;
740
- color: var(--gb-muted-foreground);
831
+ width: 26px;
832
+ height: 20px;
833
+ border: 0;
834
+ border-radius: 4px;
835
+ background: linear-gradient(180deg, #4a4e56, #2b2e34);
836
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.18), 0 2px 0 #0d0e10, 0 3px 4px rgb(0 0 0 / 0.5);
837
+ color: #9aa0a9;
741
838
  font: inherit;
742
- font-size: 11px;
743
- font-weight: 700;
839
+ font-size: 10px;
840
+ font-weight: 800;
744
841
  cursor: pointer;
842
+ transition: transform 60ms, box-shadow 60ms;
745
843
  }
746
844
 
747
- .strudel-device__toggle[data-kind="mute"][aria-pressed="true"] { background: #f59e0b; border-color: #f59e0b; color: #000; }
748
- .strudel-device__toggle[data-kind="solo"][aria-pressed="true"] { background: var(--strudel-accent); border-color: var(--strudel-accent); color: var(--gb-primary-foreground, #fff); }
845
+ .strudel-device__toggle:active {
846
+ transform: translateY(2px);
847
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.12), 0 0 0 #0d0e10, 0 1px 2px rgb(0 0 0 / 0.5);
848
+ }
849
+
850
+ .strudel-device__toggle[data-kind="mute"][aria-pressed="true"] {
851
+ background: linear-gradient(180deg, #ffc266, var(--strudel-amber));
852
+ color: #3a1d00;
853
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.5), 0 2px 0 #7a4300, 0 0 12px color-mix(in srgb, var(--strudel-amber) 70%, transparent);
854
+ }
855
+
856
+ .strudel-device__toggle[data-kind="solo"][aria-pressed="true"] {
857
+ background: linear-gradient(180deg, #a6f0ff, var(--strudel-accent));
858
+ color: #002a36;
859
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.5), 0 2px 0 #00657d, 0 0 12px color-mix(in srgb, var(--strudel-accent) 70%, transparent);
860
+ }
749
861
 
750
862
  .strudel-device__body {
751
863
  display: flex;
752
- gap: 12px;
753
- padding: 10px;
864
+ gap: 14px;
865
+ padding: 12px 18px 16px;
866
+ }
867
+
868
+ .strudel-device[data-audible="false"] .strudel-device__main {
869
+ filter: saturate(0.2) brightness(0.7);
754
870
  }
755
871
 
756
872
  .strudel-device__main {
@@ -758,38 +874,57 @@
758
874
  min-width: 0;
759
875
  display: flex;
760
876
  flex-direction: column;
761
- gap: 8px;
877
+ gap: 10px;
762
878
  }
763
879
 
764
880
  .strudel-device__selects {
765
881
  display: flex;
766
882
  flex-wrap: wrap;
767
- gap: 6px 14px;
883
+ align-items: center;
884
+ gap: 4px 16px;
885
+ align-self: flex-start;
768
886
  }
769
887
 
770
888
  .strudel-device__selects label {
771
889
  display: inline-flex;
772
890
  align-items: center;
773
891
  gap: 6px;
774
- color: var(--gb-muted-foreground);
892
+ font-size: 9px;
893
+ letter-spacing: 0.18em;
894
+ text-transform: uppercase;
895
+ opacity: 0.85;
775
896
  }
776
897
 
777
- .strudel-device__selects select,
778
- .strudel-device__add select {
898
+ .strudel-device__selects select {
899
+ appearance: none;
900
+ padding: 0 2px;
901
+ border: 0;
902
+ background: transparent;
903
+ color: var(--strudel-lcd);
779
904
  font: inherit;
780
- font-size: 12px;
781
- padding: 2px 4px;
782
- border: 1px solid var(--gb-border);
783
- border-radius: 6px;
784
- background: var(--gb-panel, #fff);
785
- color: var(--gb-panel-foreground, inherit);
905
+ font-size: 13px;
906
+ letter-spacing: 0.04em;
907
+ text-transform: none;
908
+ text-shadow: inherit;
909
+ cursor: pointer;
910
+ }
911
+
912
+ .strudel-device__selects select:focus-visible {
913
+ outline: 1px solid var(--strudel-lcd);
914
+ border-radius: 2px;
915
+ }
916
+
917
+ .strudel-device__selects option,
918
+ .strudel-device__add option {
919
+ background: #111;
920
+ color: #eee;
786
921
  }
787
922
 
788
923
  .strudel-device__knobs {
789
924
  display: flex;
790
925
  flex-wrap: wrap;
791
926
  align-items: flex-start;
792
- gap: 4px 10px;
927
+ gap: 6px 10px;
793
928
  }
794
929
 
795
930
  .strudel-device__knob {
@@ -798,8 +933,8 @@
798
933
 
799
934
  .strudel-device__remove {
800
935
  position: absolute;
801
- top: -2px;
802
- right: -4px;
936
+ top: 0;
937
+ right: 0;
803
938
  display: none;
804
939
  place-items: center;
805
940
  width: 14px;
@@ -807,8 +942,8 @@
807
942
  padding: 0;
808
943
  border: 0;
809
944
  border-radius: 999px;
810
- background: var(--gb-muted-foreground);
811
- color: var(--gb-panel, #fff);
945
+ background: var(--strudel-red);
946
+ color: #fff;
812
947
  cursor: pointer;
813
948
  }
814
949
 
@@ -818,126 +953,186 @@
818
953
  }
819
954
 
820
955
  .strudel-device__add {
821
- display: inline-flex;
822
- align-items: center;
823
- gap: 4px;
824
- align-self: center;
825
- color: var(--gb-muted-foreground);
956
+ position: relative;
957
+ display: inline-grid;
958
+ place-items: center;
959
+ align-self: flex-start;
960
+ width: 40px;
961
+ height: 40px;
962
+ margin-top: 6px;
963
+ border-radius: 999px;
964
+ border: 1px dashed #5d626b;
965
+ color: #8b9099;
826
966
  }
827
967
 
968
+ .strudel-device__add select {
969
+ position: absolute;
970
+ inset: 0;
971
+ opacity: 0;
972
+ cursor: pointer;
973
+ }
974
+
975
+ .strudel-device__add:focus-within {
976
+ outline: 2px solid var(--strudel-accent);
977
+ outline-offset: 2px;
978
+ }
979
+
980
+ /* Knob: LED ring, rubber skirt, machined cap. */
828
981
  .strudel-knob {
829
982
  display: flex;
830
983
  flex-direction: column;
831
984
  align-items: center;
832
- width: 52px;
985
+ width: 58px;
833
986
  user-select: none;
834
987
  }
835
988
 
836
989
  .strudel-knob__dial {
837
- width: 38px;
838
- height: 38px;
990
+ width: 52px;
991
+ height: 52px;
839
992
  border-radius: 999px;
840
993
  cursor: ns-resize;
841
994
  touch-action: none;
842
995
  }
843
996
 
997
+ .strudel-knob[data-size="lg"] {
998
+ width: 70px;
999
+ }
1000
+
1001
+ .strudel-knob[data-size="lg"] .strudel-knob__dial {
1002
+ width: 64px;
1003
+ height: 64px;
1004
+ }
1005
+
844
1006
  .strudel-knob__dial:focus-visible,
845
1007
  .strudel-fader__track:focus-visible {
846
- outline: 2px solid var(--strudel-accent, #6366f1);
1008
+ outline: 2px solid var(--strudel-accent);
847
1009
  outline-offset: 2px;
848
1010
  }
849
1011
 
850
- .strudel-knob__dial svg { width: 100%; height: 100%; display: block; }
851
- .strudel-knob__track { fill: none; stroke: var(--gb-border); stroke-width: 3; stroke-linecap: round; }
852
- .strudel-knob__fill { fill: none; stroke: var(--strudel-accent, #6366f1); stroke-width: 3; stroke-linecap: round; }
853
- .strudel-knob__cap { fill: var(--gb-muted, #f4f4f5); stroke: var(--gb-border); }
854
- .strudel-knob__pointer { stroke: var(--gb-panel-foreground, #18181b); stroke-width: 2; stroke-linecap: round; }
1012
+ .strudel-knob__dial svg { width: 100%; height: 100%; display: block; overflow: visible; }
1013
+ .strudel-knob__led { fill: #2a2d33; stroke: rgb(0 0 0 / 0.6); stroke-width: 0.5; }
1014
+ .strudel-knob__led[data-on] { fill: var(--strudel-key, var(--strudel-accent)); filter: drop-shadow(0 0 1.6px var(--strudel-key, var(--strudel-accent))); }
1015
+ .strudel-knob__shadow { fill: rgb(0 0 0 / 0.55); filter: blur(1.4px); }
1016
+ .strudel-knob__skirt { stroke: #050506; stroke-width: 0.8; }
1017
+ .strudel-knob__ridge { stroke: rgb(255 255 255 / 0.12); stroke-width: 1.2; stroke-linecap: round; }
1018
+ .strudel-knob__cap { stroke: rgb(0 0 0 / 0.5); stroke-width: 0.6; }
1019
+ .strudel-knob__brush { fill: none; stroke: rgb(255 255 255 / 0.35); stroke-width: 0.5; stroke-dasharray: 0.6 1.4; }
1020
+ .strudel-knob__pointer { stroke: #111; stroke-width: 2.4; stroke-linecap: round; }
855
1021
 
856
1022
  .strudel-knob__value,
857
1023
  .strudel-fader__value {
1024
+ font-family: "SF Mono", ui-monospace, Menlo, monospace;
858
1025
  font-variant-numeric: tabular-nums;
859
- font-size: 11px;
860
- line-height: 1.3;
1026
+ font-size: 10px;
1027
+ line-height: 1.5;
1028
+ color: #fff;
861
1029
  }
862
1030
 
863
1031
  .strudel-knob__label,
864
1032
  .strudel-fader__label {
865
- font-size: 10px;
866
- color: var(--gb-muted-foreground);
1033
+ font-size: 8.5px;
1034
+ font-weight: 700;
1035
+ color: var(--strudel-silk);
867
1036
  text-transform: uppercase;
868
- letter-spacing: 0.04em;
1037
+ letter-spacing: 0.16em;
869
1038
  white-space: nowrap;
870
1039
  }
871
1040
 
872
1041
  .strudel-knob[data-disabled] .strudel-knob__dial,
873
1042
  .strudel-fader[data-disabled] .strudel-fader__track {
874
1043
  cursor: not-allowed;
875
- opacity: 0.6;
876
1044
  }
877
1045
 
1046
+ .strudel-knob[data-disabled] .strudel-knob__value {
1047
+ color: var(--strudel-accent);
1048
+ }
1049
+
1050
+ /* Channel fader: tick scale, slotted track, chunky ribbed cap. */
878
1051
  .strudel-fader {
879
1052
  display: flex;
880
1053
  flex-direction: column;
881
1054
  align-items: center;
882
1055
  gap: 4px;
883
- width: 36px;
884
1056
  user-select: none;
885
1057
  }
886
1058
 
1059
+ .strudel-fader__body {
1060
+ display: flex;
1061
+ gap: 4px;
1062
+ }
1063
+
1064
+ .strudel-fader__scale {
1065
+ display: flex;
1066
+ flex-direction: column;
1067
+ justify-content: space-between;
1068
+ padding: 8px 0;
1069
+ font-size: 7px;
1070
+ line-height: 1;
1071
+ color: #8b9099;
1072
+ text-align: right;
1073
+ }
1074
+
887
1075
  .strudel-fader__track {
888
1076
  position: relative;
889
- width: 8px;
890
- height: 90px;
891
- border-radius: 999px;
892
- background: var(--gb-border);
1077
+ width: 26px;
1078
+ height: 118px;
893
1079
  cursor: ns-resize;
894
1080
  touch-action: none;
1081
+ border-radius: 4px;
1082
+ background: repeating-linear-gradient(180deg, transparent 0 9px, rgb(255 255 255 / 0.12) 9px 10px) 0 6px / 5px calc(100% - 12px) no-repeat,
1083
+ repeating-linear-gradient(180deg, transparent 0 9px, rgb(255 255 255 / 0.12) 9px 10px) 100% 6px / 5px calc(100% - 12px) no-repeat;
895
1084
  }
896
1085
 
897
- .strudel-fader__fill {
1086
+ .strudel-fader__slot {
898
1087
  position: absolute;
899
- inset: auto 0 0;
900
- border-radius: 999px;
901
- background: var(--strudel-accent, #6366f1);
1088
+ inset: 4px calc(50% - 2.5px);
1089
+ border-radius: 3px;
1090
+ background: #050506;
1091
+ box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.9), 0 1px 0 rgb(255 255 255 / 0.1);
902
1092
  }
903
1093
 
904
- .strudel-fader__thumb {
1094
+ .strudel-fader__cap {
905
1095
  position: absolute;
906
- left: -6px;
907
- width: 20px;
908
- height: 10px;
1096
+ left: 1px;
1097
+ right: 1px;
1098
+ height: 22px;
909
1099
  border-radius: 3px;
910
- background: var(--gb-panel, #fff);
911
- border: 1px solid var(--gb-muted-foreground);
912
- box-shadow: 0 1px 2px rgb(0 0 0 / 0.2);
1100
+ background:
1101
+ linear-gradient(180deg, transparent 10px, #fff 10px 12px, transparent 12px),
1102
+ repeating-linear-gradient(180deg, rgb(0 0 0 / 0.25) 0 1px, transparent 1px 3px),
1103
+ linear-gradient(180deg, #a3a8b1, #5b6069 48%, #3e4249 52%, #7c818a);
1104
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.5), 0 3px 5px rgb(0 0 0 / 0.7), 0 0 0 1px rgb(0 0 0 / 0.6);
913
1105
  }
914
1106
 
915
- /* StepGrid: mini-notation as a step sequencer. */
1107
+ /* Steps: TR-style keys that light up. */
916
1108
  .strudel-steps {
917
1109
  display: flex;
918
1110
  flex-direction: column;
919
1111
  gap: 4px;
920
- padding-top: 6px;
1112
+ padding: 8px;
1113
+ border-radius: 5px;
1114
+ background: rgb(0 0 0 / 0.35);
1115
+ box-shadow: inset 0 1px 3px rgb(0 0 0 / 0.8), 0 1px 0 rgb(255 255 255 / 0.06);
921
1116
  overflow-x: auto;
922
1117
  }
923
1118
 
924
1119
  .strudel-step__layers {
925
1120
  display: flex;
926
1121
  flex-direction: column;
927
- gap: 3px;
1122
+ gap: 4px;
928
1123
  flex: 1;
929
1124
  }
930
1125
 
931
1126
  .strudel-step__row {
932
1127
  display: flex;
933
- gap: 3px;
1128
+ gap: 4px;
934
1129
  min-width: 0;
935
1130
  }
936
1131
 
937
1132
  .strudel-step {
938
1133
  position: relative;
939
1134
  flex: 1 1 0;
940
- min-width: 18px;
1135
+ min-width: 20px;
941
1136
  display: flex;
942
1137
  }
943
1138
 
@@ -945,48 +1140,75 @@
945
1140
  .strudel-step__input {
946
1141
  flex: 1;
947
1142
  min-width: 0;
948
- height: 26px;
1143
+ height: 30px;
949
1144
  padding: 0 3px;
950
- border: 1px solid var(--gb-border);
951
- border-radius: 5px;
952
- font: inherit;
953
- font-size: 11px;
954
- font-family: var(--gb-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
1145
+ border: 0;
1146
+ border-radius: 3px;
1147
+ font-family: "SF Mono", ui-monospace, Menlo, monospace;
1148
+ font-size: 10px;
1149
+ font-weight: 600;
955
1150
  overflow: hidden;
956
1151
  text-overflow: ellipsis;
957
1152
  white-space: nowrap;
958
1153
  }
959
1154
 
960
1155
  .strudel-step__cell {
961
- background: color-mix(in srgb, var(--strudel-accent, #6366f1) 22%, var(--gb-panel, #fff));
962
- color: var(--gb-panel-foreground, inherit);
1156
+ position: relative;
1157
+ padding-top: 7px;
1158
+ color: #1a0d00;
963
1159
  cursor: pointer;
1160
+ background: linear-gradient(180deg, color-mix(in srgb, var(--strudel-key) 70%, #fff), var(--strudel-key) 55%, color-mix(in srgb, var(--strudel-key) 75%, #000));
1161
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.55), 0 2px 0 rgb(0 0 0 / 0.75), 0 0 10px color-mix(in srgb, var(--strudel-key) 45%, transparent);
1162
+ transition: transform 50ms, box-shadow 50ms;
964
1163
  }
965
1164
 
966
- .strudel-device[data-kind="drums"] .strudel-step__cell:not([data-rest]) {
967
- background: color-mix(in srgb, #f59e0b 30%, var(--gb-panel, #fff));
1165
+ /* The key's LED. */
1166
+ .strudel-step__cell::before {
1167
+ content: "";
1168
+ position: absolute;
1169
+ top: 4px;
1170
+ left: 50%;
1171
+ width: 10px;
1172
+ height: 3px;
1173
+ margin-left: -5px;
1174
+ border-radius: 2px;
1175
+ background: #fff;
1176
+ box-shadow: 0 0 5px #fff;
968
1177
  }
969
1178
 
970
1179
  .strudel-step__cell[data-rest] {
971
- background: transparent;
972
- border-style: dashed;
1180
+ color: transparent;
1181
+ background: linear-gradient(180deg, #4b4f57, #34373d 55%, #26282d);
1182
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.16), 0 2px 0 rgb(0 0 0 / 0.75);
1183
+ }
1184
+
1185
+ .strudel-step__cell[data-rest]::before {
1186
+ background: #1a1b1e;
1187
+ box-shadow: inset 0 0 1px #000;
973
1188
  }
974
1189
 
975
- .strudel-step__cell:hover {
976
- border-color: var(--strudel-accent, #6366f1);
1190
+ .strudel-step__cell:active {
1191
+ transform: translateY(2px);
1192
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.3), 0 0 0 rgb(0 0 0 / 0.75);
1193
+ }
1194
+
1195
+ .strudel-step__cell:focus-visible,
1196
+ .strudel-step__input:focus-visible {
1197
+ outline: 2px solid #fff;
1198
+ outline-offset: 1px;
977
1199
  }
978
1200
 
979
1201
  .strudel-step__input {
980
- background: var(--gb-panel, #fff);
981
- color: inherit;
1202
+ background: #0c1a10;
1203
+ color: var(--strudel-lcd);
982
1204
  }
983
1205
 
984
1206
  .strudel-step__nest {
985
1207
  flex: 1;
986
1208
  display: flex;
987
- padding: 2px;
988
- border: 1px solid var(--gb-border);
989
- border-radius: 6px;
1209
+ padding: 3px;
1210
+ border-radius: 4px;
1211
+ box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.12);
990
1212
  }
991
1213
 
992
1214
  .strudel-step__nest > .strudel-step__row {
@@ -994,7 +1216,7 @@
994
1216
  }
995
1217
 
996
1218
  .strudel-step__nest[data-kind="alternation"] {
997
- border-style: dashed;
1219
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--strudel-key) 45%, transparent);
998
1220
  }
999
1221
 
1000
1222
  .strudel-step__nest[data-kind="alternation"] > .strudel-step__layers > .strudel-step__row {
@@ -1006,14 +1228,20 @@
1006
1228
  top: -6px;
1007
1229
  right: 2px;
1008
1230
  padding: 0 3px;
1009
- border-radius: 4px;
1010
- background: var(--gb-panel-foreground, #18181b);
1011
- color: var(--gb-panel, #fff);
1012
- font-size: 9px;
1231
+ border-radius: 3px;
1232
+ background: #000;
1233
+ box-shadow: 0 0 0 1px rgb(255 255 255 / 0.2);
1234
+ color: var(--strudel-lcd);
1235
+ font-family: "SF Mono", ui-monospace, Menlo, monospace;
1236
+ font-size: 8px;
1013
1237
  line-height: 12px;
1014
1238
  pointer-events: none;
1015
1239
  }
1016
1240
 
1241
+ .strudel-steps {
1242
+ padding-top: 10px;
1243
+ }
1244
+
1017
1245
  .docs-content-ref {
1018
1246
  display: flex !important;
1019
1247
  align-items: center;