@dybo-ai/design 1.0.1 → 1.2.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/theme.css CHANGED
@@ -13,6 +13,39 @@
13
13
  --dybo-color-brand-dark-orb: #141927;
14
14
  --dybo-color-brand-cultured: #f3f6fa;
15
15
  --dybo-color-brand-gainsboro: #dbdfe5;
16
+ --dybo-color-brand-dandelion: #e9d72f;
17
+
18
+ /* ---- Portal (ticket-management / client portal) ---- */
19
+ --dybo-portal-surface-operator: #e4e4e4;
20
+ --dybo-portal-surface-card-high: rgba(240, 241, 244, 0.92);
21
+ --dybo-portal-surface-card-high-dark: rgba(18, 26, 45, 0.92);
22
+ --dybo-portal-shadow-level-1: 0px 4px 8px #1419271f;
23
+ --dybo-portal-shadow-level-2: 0px 8px 28px #14192729;
24
+ --dybo-portal-feedback-success-light: #90eabd;
25
+ --dybo-portal-feedback-success-bg: #d6f0e3;
26
+ --dybo-portal-feedback-warning: #cc6600;
27
+ --dybo-portal-feedback-warning-bg: #fff2e5;
28
+ --dybo-portal-feedback-destructive: #fa3848;
29
+ --dybo-portal-feedback-info-bg: #d9e3f0;
30
+ --dybo-portal-priority-urgent-bg: rgba(250, 56, 72, 0.12);
31
+ --dybo-portal-priority-urgent-fg: #c81e2c;
32
+ --dybo-portal-priority-high-bg: rgba(255, 128, 0, 0.15);
33
+ --dybo-portal-priority-high-fg: #a85400;
34
+ --dybo-portal-priority-medium-bg: rgba(242, 185, 13, 0.2);
35
+ --dybo-portal-priority-medium-fg: #9d6607;
36
+ --dybo-portal-priority-low-bg: rgba(151, 163, 180, 0.24);
37
+ --dybo-portal-priority-low-fg: #50627c;
38
+ --dybo-portal-priority-none-bg: rgba(192, 198, 206, 0.35);
39
+ --dybo-portal-priority-none-fg: #677283;
40
+ --dybo-portal-ticket-open-bg: #d9e3f2;
41
+ --dybo-portal-ticket-open-fg: #2e5b9e;
42
+ --dybo-portal-ticket-pending-bg: #e9dff6;
43
+ --dybo-portal-ticket-pending-fg: #7146aa;
44
+ --dybo-portal-ticket-snoozed-bg: #d7dde5;
45
+ --dybo-portal-ticket-snoozed-fg: #58687e;
46
+ --dybo-portal-ticket-resolved-bg: #d6f0e3;
47
+ --dybo-portal-ticket-resolved-fg: #1a6640;
48
+ --dybo-icon-rail-width: 80px;
16
49
 
17
50
  /* ---- Text ---- */
18
51
  --dybo-color-text-primary: #0a1323;
@@ -95,6 +128,8 @@
95
128
  --dybo-opacity-light: 0.16;
96
129
  --dybo-opacity-medium: 0.32;
97
130
  --dybo-opacity-intense: 0.64;
131
+ --dybo-opacity-semi-opaque: 0.4;
132
+ --dybo-opacity-semi-transparent: 0.08;
98
133
 
99
134
  /* ---- Border ---- */
100
135
  --dybo-border-sm: 1px;
@@ -140,6 +175,8 @@
140
175
  --color-dybo-info: #0399ae;
141
176
  --color-dybo-info-bg: #d3f7fc;
142
177
  --color-dybo-sidebar: #1d2433;
178
+ --color-dybo-dandelion: #e9d72f;
179
+ --color-dybo-operator-page: #e4e4e4;
143
180
 
144
181
  /* Border radius */
145
182
  --radius-dybo-sm: 12px;
@@ -151,6 +188,8 @@
151
188
  --shadow-dybo-card:
152
189
  0 8px 24px rgba(10, 19, 35, 0.1), 0 2px 8px rgba(170, 180, 192, 0.35);
153
190
  --shadow-dybo-drop: 0 4px 4px rgba(10, 19, 35, 0.1);
191
+ --shadow-dybo-portal-1: 0px 4px 8px #1419271f;
192
+ --shadow-dybo-portal-2: 0px 8px 28px #14192729;
154
193
 
155
194
  /* Backdrop blur */
156
195
  --blur-dybo: 4px;
@@ -728,3 +767,248 @@ body {
728
767
  justify-content: flex-end;
729
768
  flex-shrink: 0;
730
769
  }
770
+
771
+ /* =========================================================================
772
+ Portal / Ticket Management patterns
773
+ ========================================================================= */
774
+
775
+ .dybo-surface-operator {
776
+ background: var(--dybo-portal-surface-operator);
777
+ }
778
+
779
+ .dybo-shadow-level-1 {
780
+ box-shadow: var(--dybo-portal-shadow-level-1);
781
+ }
782
+ .dybo-shadow-level-2 {
783
+ box-shadow: var(--dybo-portal-shadow-level-2);
784
+ }
785
+
786
+ /* Nav tabs — uppercase pill tabs */
787
+ .dybo-navtabs {
788
+ display: flex;
789
+ flex-wrap: wrap;
790
+ gap: 4px;
791
+ }
792
+ .dybo-navtab {
793
+ display: inline-flex;
794
+ align-items: center;
795
+ justify-content: center;
796
+ height: 26px;
797
+ padding: 0 12px;
798
+ border-radius: var(--dybo-radius-md);
799
+ font-size: var(--dybo-font-size-xs);
800
+ font-weight: var(--dybo-font-weight-medium);
801
+ letter-spacing: 1px;
802
+ text-transform: uppercase;
803
+ color: var(--dybo-color-text-primary);
804
+ opacity: var(--dybo-opacity-intense);
805
+ border: 1px solid transparent;
806
+ background: transparent;
807
+ backdrop-filter: blur(2px);
808
+ -webkit-backdrop-filter: blur(2px);
809
+ transition: all 0.2s;
810
+ white-space: nowrap;
811
+ cursor: pointer;
812
+ font-family: inherit;
813
+ }
814
+ .dybo-navtab:hover {
815
+ opacity: 1;
816
+ }
817
+ .dybo-navtab--active {
818
+ opacity: 1;
819
+ background: rgba(244, 244, 246, 0.7);
820
+ border-color: var(--dybo-line-stroke);
821
+ }
822
+
823
+ /* Priority badges */
824
+ .dybo-priority {
825
+ display: inline-flex;
826
+ align-items: center;
827
+ gap: 5px;
828
+ padding: 2px 10px;
829
+ border-radius: var(--dybo-radius-full);
830
+ font-size: var(--dybo-font-size-xs);
831
+ font-weight: var(--dybo-font-weight-semibold);
832
+ line-height: 1.4;
833
+ white-space: nowrap;
834
+ }
835
+ .dybo-priority::before {
836
+ content: "";
837
+ width: 6px;
838
+ height: 6px;
839
+ border-radius: var(--dybo-radius-full);
840
+ background: currentColor;
841
+ flex-shrink: 0;
842
+ }
843
+ .dybo-priority--urgent {
844
+ background: var(--dybo-portal-priority-urgent-bg);
845
+ color: var(--dybo-portal-priority-urgent-fg);
846
+ }
847
+ .dybo-priority--high {
848
+ background: var(--dybo-portal-priority-high-bg);
849
+ color: var(--dybo-portal-priority-high-fg);
850
+ }
851
+ .dybo-priority--medium {
852
+ background: var(--dybo-portal-priority-medium-bg);
853
+ color: var(--dybo-portal-priority-medium-fg);
854
+ }
855
+ .dybo-priority--low {
856
+ background: var(--dybo-portal-priority-low-bg);
857
+ color: var(--dybo-portal-priority-low-fg);
858
+ }
859
+ .dybo-priority--none {
860
+ background: var(--dybo-portal-priority-none-bg);
861
+ color: var(--dybo-portal-priority-none-fg);
862
+ }
863
+ .dybo-priority--none::before {
864
+ opacity: 0.45;
865
+ }
866
+
867
+ /* Ticket status badges (ChatWoot) */
868
+ .dybo-ticket-status {
869
+ display: inline-flex;
870
+ align-items: center;
871
+ padding: 2px 10px;
872
+ border-radius: var(--dybo-radius-full);
873
+ font-size: var(--dybo-font-size-xs);
874
+ font-weight: var(--dybo-font-weight-semibold);
875
+ line-height: 1.4;
876
+ white-space: nowrap;
877
+ }
878
+ .dybo-ticket-status--open {
879
+ background: var(--dybo-portal-ticket-open-bg);
880
+ color: var(--dybo-portal-ticket-open-fg);
881
+ }
882
+ .dybo-ticket-status--pending {
883
+ background: var(--dybo-portal-ticket-pending-bg);
884
+ color: var(--dybo-portal-ticket-pending-fg);
885
+ }
886
+ .dybo-ticket-status--snoozed {
887
+ background: var(--dybo-portal-ticket-snoozed-bg);
888
+ color: var(--dybo-portal-ticket-snoozed-fg);
889
+ }
890
+ .dybo-ticket-status--resolved {
891
+ background: var(--dybo-portal-ticket-resolved-bg);
892
+ color: var(--dybo-portal-ticket-resolved-fg);
893
+ }
894
+
895
+ /* Scope tabs — Unassigned / Mine / All */
896
+ .dybo-scope {
897
+ display: inline-flex;
898
+ align-items: center;
899
+ gap: 4px;
900
+ border: 1px solid var(--dybo-color-grayish-blue-300);
901
+ background: rgba(244, 244, 246, 0.7);
902
+ border-radius: var(--dybo-radius-sm);
903
+ padding: 4px;
904
+ }
905
+ .dybo-scope-tab {
906
+ display: inline-flex;
907
+ align-items: center;
908
+ gap: 8px;
909
+ height: 44px;
910
+ padding: 0 14px;
911
+ border-radius: 10px;
912
+ font-size: 13px;
913
+ font-weight: var(--dybo-font-weight-semibold);
914
+ color: var(--dybo-color-text-primary);
915
+ opacity: var(--dybo-opacity-intense);
916
+ background: transparent;
917
+ border: 0;
918
+ cursor: pointer;
919
+ white-space: nowrap;
920
+ transition: all 0.2s;
921
+ font-family: inherit;
922
+ }
923
+ .dybo-scope-tab:hover {
924
+ opacity: 1;
925
+ }
926
+ .dybo-scope-tab--active {
927
+ opacity: 1;
928
+ background: var(--dybo-color-text-primary);
929
+ color: var(--dybo-color-white);
930
+ }
931
+ .dybo-scope-tab:focus-visible {
932
+ outline: 2px solid var(--dybo-color-brand-logo);
933
+ outline-offset: 2px;
934
+ }
935
+ .dybo-scope-count {
936
+ display: inline-flex;
937
+ align-items: center;
938
+ justify-content: center;
939
+ min-width: 22px;
940
+ height: 20px;
941
+ padding: 0 6px;
942
+ border-radius: var(--dybo-radius-full);
943
+ font-size: 11px;
944
+ font-weight: var(--dybo-font-weight-bold);
945
+ background: rgba(10, 19, 35, 0.1);
946
+ }
947
+ .dybo-scope-tab--active .dybo-scope-count {
948
+ background: rgba(255, 255, 255, 0.24);
949
+ }
950
+
951
+ /* Icon rail sidebar */
952
+ .dybo-icon-rail {
953
+ display: none;
954
+ height: 100%;
955
+ width: var(--dybo-icon-rail-width);
956
+ flex-shrink: 0;
957
+ flex-direction: column;
958
+ align-items: center;
959
+ background: var(--dybo-surface-page);
960
+ padding: 16px 0;
961
+ }
962
+ @media (min-width: 768px) {
963
+ .dybo-icon-rail {
964
+ display: flex;
965
+ }
966
+ }
967
+ .dybo-icon-rail__brand {
968
+ margin-bottom: 24px;
969
+ }
970
+ .dybo-icon-rail__nav {
971
+ display: flex;
972
+ flex: 1;
973
+ width: 100%;
974
+ align-items: center;
975
+ justify-content: center;
976
+ }
977
+ .dybo-icon-rail__pill {
978
+ border-radius: 13px;
979
+ border: 1px solid var(--dybo-line-stroke);
980
+ background: var(--dybo-surface-card);
981
+ padding: 6px;
982
+ box-shadow: var(--dybo-portal-shadow-level-1);
983
+ backdrop-filter: blur(4px);
984
+ -webkit-backdrop-filter: blur(4px);
985
+ }
986
+ .dybo-icon-rail__items {
987
+ display: flex;
988
+ flex-direction: column;
989
+ align-items: center;
990
+ gap: 0;
991
+ }
992
+ .dybo-icon-rail__item {
993
+ display: flex;
994
+ align-items: center;
995
+ justify-content: center;
996
+ padding: 12px;
997
+ height: 48px;
998
+ width: 40px;
999
+ border-radius: 11px;
1000
+ color: var(--dybo-color-brand-logo);
1001
+ opacity: var(--dybo-opacity-intense);
1002
+ text-decoration: none;
1003
+ transition: all 0.2s;
1004
+ }
1005
+ .dybo-icon-rail__item:hover {
1006
+ opacity: 1;
1007
+ }
1008
+ .dybo-icon-rail__item--active {
1009
+ height: 40px;
1010
+ border-radius: 13px;
1011
+ background: rgba(20, 25, 39, 0.1);
1012
+ opacity: 1;
1013
+ color: var(--dybo-color-brand-dark-orb);
1014
+ }
package/tokens.cjs CHANGED
@@ -1,9 +1,33 @@
1
1
  // DYBO design tokens (CommonJS mirror of tokens.mjs).
2
2
  const color = {
3
- brand: { logo: "#1d335c", blue: "#5878a7", darkOrb: "#141927", cultured: "#f3f6fa", gainsboro: "#dbdfe5" },
4
- text: { primary: "#0a1323", secondary: "#f4f4f6", muted: "#545f74", gray: "#868686" },
5
- neutral: { black: "#000000", white: "#ffffff", grayishBlue50: "#f4f4f6", grayishBlue300: "#c2c7cf", midnightSky300: "#e6e7f7", midnightSky700: "#48495d" },
6
- surface: { page: "#e6eaf0", card: "rgba(240,241,244,0.70)", cardSolid: "rgba(240,241,244,0.90)", input: "rgba(244,244,246,0.70)" },
3
+ brand: {
4
+ logo: "#1d335c",
5
+ blue: "#5878a7",
6
+ darkOrb: "#141927",
7
+ cultured: "#f3f6fa",
8
+ gainsboro: "#dbdfe5",
9
+ dandelion: "#e9d72f",
10
+ },
11
+ text: {
12
+ primary: "#0a1323",
13
+ secondary: "#f4f4f6",
14
+ muted: "#545f74",
15
+ gray: "#868686",
16
+ },
17
+ neutral: {
18
+ black: "#000000",
19
+ white: "#ffffff",
20
+ grayishBlue50: "#f4f4f6",
21
+ grayishBlue300: "#c2c7cf",
22
+ midnightSky300: "#e6e7f7",
23
+ midnightSky700: "#48495d",
24
+ },
25
+ surface: {
26
+ page: "#e6eaf0",
27
+ card: "rgba(240,241,244,0.70)",
28
+ cardSolid: "rgba(240,241,244,0.90)",
29
+ input: "rgba(244,244,246,0.70)",
30
+ },
7
31
  line: { stroke: "#ffffff" },
8
32
  semantic: {
9
33
  success: { solid: "#20a156", bright: "#28ca6b", bg: "#eafbf1" },
@@ -17,15 +41,115 @@ const color = {
17
41
  brand: { fg: "#0a1323", bg: "#d0d3fe" },
18
42
  },
19
43
  };
20
- const font = { family: "Urbanist, sans-serif", weight: { regular: 400, medium: 500, semibold: 600, bold: 700 } };
44
+ const portal = {
45
+ surface: {
46
+ operatorPage: "#e4e4e4",
47
+ cardHighOpacity: "rgba(240,241,244,0.92)",
48
+ cardHighOpacityDark: "rgba(18,26,45,0.92)",
49
+ },
50
+ shadow: {
51
+ level1: "0px 4px 8px #1419271f",
52
+ level2: "0px 8px 28px #14192729",
53
+ },
54
+ feedback: {
55
+ successLight: "#90eabd",
56
+ successBackground: "#d6f0e3",
57
+ warningSolid: "#cc6600",
58
+ warningBackground: "#fff2e5",
59
+ destructiveBright: "#fa3848",
60
+ infoBackground: "#d9e3f0",
61
+ },
62
+ priority: {
63
+ urgent: {
64
+ bg: "rgba(250,56,72,0.12)",
65
+ fg: "#c81e2c",
66
+ darkBg: "rgba(230,57,57,0.22)",
67
+ darkFg: "#f9a0a0",
68
+ },
69
+ high: {
70
+ bg: "rgba(255,128,0,0.15)",
71
+ fg: "#a85400",
72
+ darkBg: "rgba(230,115,0,0.22)",
73
+ darkFg: "#ffb366",
74
+ },
75
+ medium: {
76
+ bg: "rgba(242,185,13,0.20)",
77
+ fg: "#9d6607",
78
+ darkBg: "rgba(242,185,13,0.16)",
79
+ darkFg: "#f5d56a",
80
+ },
81
+ low: {
82
+ bg: "rgba(151,163,180,0.24)",
83
+ fg: "#50627c",
84
+ darkBg: "rgba(140,155,175,0.20)",
85
+ darkFg: "#b8c4d4",
86
+ },
87
+ none: {
88
+ bg: "rgba(192,198,206,0.35)",
89
+ fg: "#677283",
90
+ darkBg: "rgba(115,125,140,0.25)",
91
+ darkFg: "#b0b8c4",
92
+ },
93
+ },
94
+ ticketStatus: {
95
+ open: {
96
+ bg: "#d9e3f2",
97
+ fg: "#2e5b9e",
98
+ darkBg: "#2a3d52",
99
+ darkFg: "#a8c4e8",
100
+ },
101
+ pending: {
102
+ bg: "#e9dff6",
103
+ fg: "#7146aa",
104
+ darkBg: "#3d2f4d",
105
+ darkFg: "#d4b8f0",
106
+ },
107
+ snoozed: {
108
+ bg: "#d7dde5",
109
+ fg: "#58687e",
110
+ darkBg: "#3a424c",
111
+ darkFg: "#b8c4d4",
112
+ },
113
+ resolved: {
114
+ bg: "#d6f0e3",
115
+ fg: "#1a6640",
116
+ darkBg: "#1f4a32",
117
+ darkFg: "#a8e0c0",
118
+ },
119
+ },
120
+ };
121
+ const font = {
122
+ family: "Urbanist, sans-serif",
123
+ weight: { regular: 400, medium: 500, semibold: 600, bold: 700 },
124
+ };
21
125
  const fontSize = { xs: 12, sm: 14, md: 16, lg: 18, xl: 24 };
22
126
  const space = { 0: 0, 50: 4, 100: 8, 150: 12, 200: 16, 250: 20, 400: 32 };
23
127
  const radius = { small: 12, alt: 16, medium: 20, full: 999 };
24
- const opacity = { light: 0.16, medium: 0.32, intense: 0.64 };
128
+ const opacity = {
129
+ light: 0.16,
130
+ medium: 0.32,
131
+ intense: 0.64,
132
+ semiOpaque: 0.4,
133
+ semiTransparent: 0.08,
134
+ };
25
135
  const shadow = {
26
136
  card: "0 8px 24px rgba(10,19,35,0.10), 0 2px 8px rgba(170,180,192,0.35)",
27
137
  drop: "0 4px 4px rgba(10,19,35,0.10)",
138
+ portalLevel1: "0px 4px 8px #1419271f",
139
+ portalLevel2: "0px 8px 28px #14192729",
28
140
  };
29
141
  const effect = { glassBlur: 4 };
30
- const tokens = { color, font, fontSize, space, radius, opacity, shadow, effect };
31
- module.exports = { tokens, color, font, fontSize, space, radius, opacity, shadow, effect, default: tokens };
142
+ const tokens = { color, portal, font, fontSize, space, radius, opacity, shadow, effect };
143
+ module.exports = {
144
+ tokens,
145
+ color,
146
+ portal,
147
+ font,
148
+ fontSize,
149
+ space,
150
+ radius,
151
+ opacity,
152
+ shadow,
153
+ effect,
154
+ default: tokens,
155
+ };
package/tokens.json CHANGED
@@ -15,7 +15,8 @@
15
15
  "blueYonder": { "value": "#5878a7", "figmaName": "Brand Colors/Blue Yonder", "desc": "Primary blue accent" },
16
16
  "darkOrb": { "value": "#141927", "figmaName": "Brand Colors/Dark Orb", "desc": "Near-black brand shade" },
17
17
  "cultured": { "value": "#f3f6fa", "figmaName": "Brand Colors/Cultured", "desc": "Lightest brand tint" },
18
- "gainsboro": { "value": "#dbdfe5", "figmaName": "Brand Colors/Gainsboro", "desc": "Light neutral brand tint" }
18
+ "gainsboro": { "value": "#dbdfe5", "figmaName": "Brand Colors/Gainsboro", "desc": "Light neutral brand tint" },
19
+ "dandelion": { "value": "#e9d72f", "figmaName": "Brand Colors/Dandelion (portal)", "desc": "Yellow accent — client portal / ticket prototype" }
19
20
  },
20
21
  "text": {
21
22
  "primary": { "value": "#0a1323", "figmaName": "Primary Color / Title / Brand - DYBO", "desc": "Primary text & headings (navy near-black)" },
@@ -106,7 +107,78 @@
106
107
  "opacity": {
107
108
  "light": { "value": 0.16, "figmaName": "Appearance/Opacity Level/Light" },
108
109
  "medium": { "value": 0.32, "figmaName": "Appearance/Opacity Level/Medium" },
109
- "intense": { "value": 0.64, "figmaName": "Appearance/Opacity Level/Intense" }
110
+ "intense": { "value": 0.64, "figmaName": "Appearance/Opacity Level/Intense" },
111
+ "semiOpaque": { "value": 0.40, "figmaName": "Portal — disabled state" },
112
+ "semiTransparent": { "value": 0.08, "figmaName": "Portal — subtle overlay" }
113
+ },
114
+
115
+ "portal": {
116
+ "$source": "ticket-management-export/client/tokens.css + operator/index.html badge CSS",
117
+ "surface": {
118
+ "operatorPage": { "value": "#e4e4e4", "desc": "Operator screens background override" },
119
+ "cardHighOpacity": { "value": "rgba(240,241,244,0.92)", "desc": "Upload zones, dense panels" },
120
+ "cardHighOpacityDark": { "value": "rgba(18,26,45,0.92)", "desc": "Dark mode dense panel" }
121
+ },
122
+ "shadow": {
123
+ "level1": { "value": "0px 4px 8px #1419271f", "desc": "Cards, sidebar pill" },
124
+ "level2": { "value": "0px 8px 28px #14192729", "desc": "Modals, toasts" }
125
+ },
126
+ "feedback": {
127
+ "successLight": { "value": "#90eabd", "desc": "Portal success tint (lighter than semantic.success)" },
128
+ "successBackground": { "value": "#d6f0e3", "desc": "hsl(151 45% 89%)" },
129
+ "warningSolid": { "value": "#cc6600", "desc": "Portal warning/error — Figma Feedback/Error orange" },
130
+ "warningBackground": { "value": "#fff2e5", "desc": "hsl(30 100% 95%)" },
131
+ "destructiveBright": { "value": "#fa3848", "desc": "Portal destructive — bright red for UI actions" },
132
+ "infoBackground": { "value": "#d9e3f0", "desc": "hsl(216 31% 89%)" }
133
+ },
134
+ "priority": {
135
+ "urgent": { "bg": "rgba(250,56,72,0.12)", "fg": "#c81e2c", "darkBg": "rgba(230,57,57,0.22)", "darkFg": "#f9a0a0" },
136
+ "high": { "bg": "rgba(255,128,0,0.15)", "fg": "#a85400", "darkBg": "rgba(230,115,0,0.22)", "darkFg": "#ffb366" },
137
+ "medium": { "bg": "rgba(242,185,13,0.20)", "fg": "#9d6607", "darkBg": "rgba(242,185,13,0.16)", "darkFg": "#f5d56a" },
138
+ "low": { "bg": "rgba(151,163,180,0.24)","fg": "#50627c", "darkBg": "rgba(140,155,175,0.20)","darkFg": "#b8c4d4" },
139
+ "none": { "bg": "rgba(192,198,206,0.35)","fg": "#677283", "darkBg": "rgba(115,125,140,0.25)","darkFg": "#b0b8c4" }
140
+ },
141
+ "ticketStatus": {
142
+ "open": { "bg": "#d9e3f2", "fg": "#2e5b9e", "darkBg": "#2a3d52", "darkFg": "#a8c4e8" },
143
+ "pending": { "bg": "#e9dff6", "fg": "#7146aa", "darkBg": "#3d2f4d", "darkFg": "#d4b8f0" },
144
+ "snoozed": { "bg": "#d7dde5", "fg": "#58687e", "darkBg": "#3a424c", "darkFg": "#b8c4d4" },
145
+ "resolved": { "bg": "#d6f0e3", "fg": "#1a6640", "darkBg": "#1f4a32", "darkFg": "#a8e0c0" }
146
+ },
147
+ "hsl": {
148
+ "$note": "Shadcn-style HSL components for portal-tokens.css drop-in. Format: 'H S% L%' (no hsl() wrapper).",
149
+ "light": {
150
+ "background": "216 25% 92%", "foreground": "218 56% 9%",
151
+ "card": "214 41% 97%", "cardForeground": "218 56% 9%",
152
+ "popover": "0 0% 100%", "popoverForeground": "218 56% 9%",
153
+ "primary": "218 56% 9%", "primaryForeground": "0 0% 100%",
154
+ "secondary": "0 0% 100%", "secondaryForeground": "218 56% 9%",
155
+ "muted": "216 16% 88%", "mutedForeground": "216 31% 50%",
156
+ "accent": "219 52% 24%", "accentForeground": "214 41% 97%",
157
+ "destructive": "355 95% 60%", "destructiveForeground": "0 0% 100%",
158
+ "border": "0 0% 100%", "input": "240 14% 96%", "ring": "219 52% 24%",
159
+ "success": "150 68% 74%", "successForeground": "218 56% 9%", "successBackground": "151 45% 89%",
160
+ "warning": "30 100% 40%", "warningForeground": "218 56% 9%", "warningBackground": "30 100% 95%",
161
+ "error": "30 100% 40%", "errorForeground": "0 0% 100%", "errorBackground": "30 100% 95%",
162
+ "info": "216 31% 50%", "infoForeground": "218 56% 9%", "infoBackground": "216 31% 89%",
163
+ "brandDarkOrb": "224 32% 12%", "brandIndigo": "219 52% 24%", "brandBlueYonder": "216 31% 50%",
164
+ "brandGainsboro": "216 16% 88%", "brandCultured": "214 41% 97%", "brandDandelion": "54 81% 55%",
165
+ "brandBlack": "0 0% 0%", "brandWhite": "0 0% 100%",
166
+ "operatorBackground": "0 0% 89.4%"
167
+ },
168
+ "dark": {
169
+ "background": "218 56% 9%", "foreground": "244 20% 96%",
170
+ "card": "218 35% 13%", "cardForeground": "244 20% 96%",
171
+ "popover": "218 15% 12%", "popoverForeground": "244 20% 96%",
172
+ "primary": "244 20% 96%", "primaryForeground": "218 56% 9%",
173
+ "secondary": "218 35% 13%", "secondaryForeground": "244 20% 96%",
174
+ "muted": "210 15% 30%", "mutedForeground": "244 20% 80%",
175
+ "accent": "216 31% 50%", "accentForeground": "244 20% 96%",
176
+ "destructive": "0 78% 55%", "destructiveForeground": "244 20% 96%",
177
+ "border": "210 15% 30%", "input": "218 35% 13%", "ring": "244 20% 96%",
178
+ "successBackground": "150 68% 26%", "warningBackground": "30 100% 22%",
179
+ "errorBackground": "30 100% 22%", "infoBackground": "216 31% 28%"
180
+ }
181
+ }
110
182
  },
111
183
 
112
184
  "border": {