@uptime.link/statuspage 1.1.0 → 1.3.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.
Files changed (29) hide show
  1. package/dist_bundle/bundle.js +1814 -917
  2. package/dist_bundle/bundle.js.map +3 -3
  3. package/dist_ts_web/00_commitinfo_data.js +1 -1
  4. package/dist_ts_web/elements/upl-statuspage-assetsselector.js +119 -45
  5. package/dist_ts_web/elements/upl-statuspage-footer.js +81 -27
  6. package/dist_ts_web/elements/upl-statuspage-header.js +79 -19
  7. package/dist_ts_web/elements/upl-statuspage-incidents.js +242 -55
  8. package/dist_ts_web/elements/upl-statuspage-statsgrid.d.ts +3 -0
  9. package/dist_ts_web/elements/upl-statuspage-statsgrid.js +239 -52
  10. package/dist_ts_web/elements/upl-statuspage-statusbar.js +58 -7
  11. package/dist_ts_web/elements/upl-statuspage-statusdetails.js +36 -11
  12. package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +2 -0
  13. package/dist_ts_web/elements/upl-statuspage-statusmonth.js +415 -230
  14. package/dist_ts_web/styles/shared.styles.d.ts +22 -0
  15. package/dist_ts_web/styles/shared.styles.js +146 -3
  16. package/dist_watch/bundle.js +1425 -446
  17. package/dist_watch/bundle.js.map +3 -3
  18. package/dist_watch/index.html +1 -0
  19. package/package.json +1 -1
  20. package/ts_web/00_commitinfo_data.ts +1 -1
  21. package/ts_web/elements/upl-statuspage-assetsselector.ts +118 -44
  22. package/ts_web/elements/upl-statuspage-footer.ts +80 -26
  23. package/ts_web/elements/upl-statuspage-header.ts +87 -18
  24. package/ts_web/elements/upl-statuspage-incidents.ts +248 -56
  25. package/ts_web/elements/upl-statuspage-statsgrid.ts +235 -55
  26. package/ts_web/elements/upl-statuspage-statusbar.ts +57 -6
  27. package/ts_web/elements/upl-statuspage-statusdetails.ts +35 -10
  28. package/ts_web/elements/upl-statuspage-statusmonth.ts +436 -252
  29. package/ts_web/styles/shared.styles.ts +166 -2
@@ -45752,13 +45752,53 @@ var easings = {
45752
45752
  default: "cubic-bezier(0.4, 0, 0.2, 1)",
45753
45753
  smooth: "cubic-bezier(0.4, 0, 0.6, 1)",
45754
45754
  bounce: "cubic-bezier(0.68, -0.55, 0.265, 1.55)",
45755
- snappy: "cubic-bezier(0.2, 0, 0, 1)"
45755
+ snappy: "cubic-bezier(0.2, 0, 0, 1)",
45756
+ spring: "cubic-bezier(0.175, 0.885, 0.32, 1.275)"
45756
45757
  };
45757
45758
  var durations = {
45759
+ instant: "50ms",
45758
45760
  fast: "100ms",
45759
45761
  normal: "200ms",
45760
45762
  slow: "300ms",
45761
- slower: "500ms"
45763
+ slower: "500ms",
45764
+ slowest: "800ms"
45765
+ };
45766
+ var statusGradients = {
45767
+ operational: cssManager.bdTheme(
45768
+ "linear-gradient(135deg, rgba(22, 163, 74, 0.08) 0%, rgba(22, 163, 74, 0.02) 100%)",
45769
+ "linear-gradient(135deg, rgba(34, 197, 94, 0.12) 0%, rgba(34, 197, 94, 0.03) 100%)"
45770
+ ),
45771
+ degraded: cssManager.bdTheme(
45772
+ "linear-gradient(135deg, rgba(217, 119, 6, 0.08) 0%, rgba(217, 119, 6, 0.02) 100%)",
45773
+ "linear-gradient(135deg, rgba(251, 191, 36, 0.12) 0%, rgba(251, 191, 36, 0.03) 100%)"
45774
+ ),
45775
+ partial: cssManager.bdTheme(
45776
+ "linear-gradient(135deg, rgba(220, 38, 38, 0.08) 0%, rgba(220, 38, 38, 0.02) 100%)",
45777
+ "linear-gradient(135deg, rgba(248, 113, 113, 0.12) 0%, rgba(248, 113, 113, 0.03) 100%)"
45778
+ ),
45779
+ major: cssManager.bdTheme(
45780
+ "linear-gradient(135deg, rgba(185, 28, 28, 0.10) 0%, rgba(185, 28, 28, 0.03) 100%)",
45781
+ "linear-gradient(135deg, rgba(239, 68, 68, 0.15) 0%, rgba(239, 68, 68, 0.04) 100%)"
45782
+ ),
45783
+ maintenance: cssManager.bdTheme(
45784
+ "linear-gradient(135deg, rgba(37, 99, 235, 0.08) 0%, rgba(37, 99, 235, 0.02) 100%)",
45785
+ "linear-gradient(135deg, rgba(96, 165, 250, 0.12) 0%, rgba(96, 165, 250, 0.03) 100%)"
45786
+ )
45787
+ };
45788
+ var glass = {
45789
+ light: "background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);",
45790
+ dark: "background: rgba(9, 9, 11, 0.8); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);",
45791
+ subtle: cssManager.bdTheme(
45792
+ "background: rgba(255, 255, 255, 0.5); backdrop-filter: blur(8px);",
45793
+ "background: rgba(9, 9, 11, 0.6); backdrop-filter: blur(8px);"
45794
+ )
45795
+ };
45796
+ var statusGlows = {
45797
+ operational: "0 0 20px -5px rgba(34, 197, 94, 0.4)",
45798
+ degraded: "0 0 20px -5px rgba(251, 191, 36, 0.4)",
45799
+ partial: "0 0 20px -5px rgba(248, 113, 113, 0.4)",
45800
+ major: "0 0 20px -5px rgba(239, 68, 68, 0.5)",
45801
+ maintenance: "0 0 20px -5px rgba(96, 165, 250, 0.4)"
45762
45802
  };
45763
45803
  var commonStyles = i`
45764
45804
  /* Button styles */
@@ -45877,6 +45917,28 @@ var commonStyles = i`
45877
45917
  50% { opacity: 0.5; }
45878
45918
  }
45879
45919
 
45920
+ /* Pulse ring animation for active status */
45921
+ @keyframes pulse-ring {
45922
+ 0% {
45923
+ transform: scale(1);
45924
+ opacity: 0.8;
45925
+ }
45926
+ 100% {
45927
+ transform: scale(2.5);
45928
+ opacity: 0;
45929
+ }
45930
+ }
45931
+
45932
+ /* Shimmer effect for loading states */
45933
+ @keyframes shimmer {
45934
+ 0% {
45935
+ background-position: -200% 0;
45936
+ }
45937
+ 100% {
45938
+ background-position: 200% 0;
45939
+ }
45940
+ }
45941
+
45880
45942
  /* Fade in animation */
45881
45943
  @keyframes fadeIn {
45882
45944
  from { opacity: 0; transform: translateY(4px); }
@@ -45887,6 +45949,22 @@ var commonStyles = i`
45887
45949
  animation: fadeIn ${r(durations.slow)} ${r(easings.default)} forwards;
45888
45950
  }
45889
45951
 
45952
+ /* Fade in up animation */
45953
+ @keyframes fadeInUp {
45954
+ from {
45955
+ opacity: 0;
45956
+ transform: translateY(16px);
45957
+ }
45958
+ to {
45959
+ opacity: 1;
45960
+ transform: translateY(0);
45961
+ }
45962
+ }
45963
+
45964
+ .fade-in-up {
45965
+ animation: fadeInUp ${r(durations.slower)} ${r(easings.default)} forwards;
45966
+ }
45967
+
45890
45968
  /* Scale in animation */
45891
45969
  @keyframes scaleIn {
45892
45970
  from { opacity: 0; transform: scale(0.95); }
@@ -45897,6 +45975,86 @@ var commonStyles = i`
45897
45975
  animation: scaleIn ${r(durations.slow)} ${r(easings.bounce)} forwards;
45898
45976
  }
45899
45977
 
45978
+ /* Slide down animation for expanding content */
45979
+ @keyframes slideDown {
45980
+ from {
45981
+ opacity: 0;
45982
+ transform: translateY(-8px);
45983
+ }
45984
+ to {
45985
+ opacity: 1;
45986
+ transform: translateY(0);
45987
+ }
45988
+ }
45989
+
45990
+ .slide-down {
45991
+ animation: slideDown ${r(durations.slow)} ${r(easings.default)} forwards;
45992
+ }
45993
+
45994
+ /* Stagger animation delay utilities */
45995
+ .stagger-1 { animation-delay: 50ms; }
45996
+ .stagger-2 { animation-delay: 100ms; }
45997
+ .stagger-3 { animation-delay: 150ms; }
45998
+ .stagger-4 { animation-delay: 200ms; }
45999
+ .stagger-5 { animation-delay: 250ms; }
46000
+
46001
+ /* Status indicator with pulse ring */
46002
+ .status-dot-animated {
46003
+ position: relative;
46004
+ width: 10px;
46005
+ height: 10px;
46006
+ border-radius: 50%;
46007
+ }
46008
+
46009
+ .status-dot-animated::before {
46010
+ content: '';
46011
+ position: absolute;
46012
+ inset: 0;
46013
+ border-radius: 50%;
46014
+ background: inherit;
46015
+ animation: pulse-ring 2s ${r(easings.default)} infinite;
46016
+ }
46017
+
46018
+ .status-dot-animated.operational::before {
46019
+ background: ${colors.status.operational};
46020
+ }
46021
+
46022
+ .status-dot-animated.degraded::before,
46023
+ .status-dot-animated.partial_outage::before,
46024
+ .status-dot-animated.major_outage::before {
46025
+ animation: pulse-ring 1.5s ${r(easings.default)} infinite;
46026
+ }
46027
+
46028
+ /* Hover lift effect */
46029
+ .hover-lift {
46030
+ transition: transform ${r(durations.normal)} ${r(easings.default)},
46031
+ box-shadow ${r(durations.normal)} ${r(easings.default)};
46032
+ }
46033
+
46034
+ .hover-lift:hover {
46035
+ transform: translateY(-2px);
46036
+ }
46037
+
46038
+ /* Icon animation */
46039
+ .icon-spin {
46040
+ animation: spin 1s linear infinite;
46041
+ }
46042
+
46043
+ @keyframes spin {
46044
+ from { transform: rotate(0deg); }
46045
+ to { transform: rotate(360deg); }
46046
+ }
46047
+
46048
+ /* Bounce animation for attention */
46049
+ @keyframes bounce {
46050
+ 0%, 100% { transform: translateY(0); }
46051
+ 50% { transform: translateY(-4px); }
46052
+ }
46053
+
46054
+ .bounce {
46055
+ animation: bounce 1s ${r(easings.bounce)} infinite;
46056
+ }
46057
+
45900
46058
  /* Container styles */
45901
46059
  .container {
45902
46060
  max-width: 1200px;
@@ -46911,23 +47069,24 @@ __publicField(UplStatuspageAssetsselector, "styles", [
46911
47069
  flex: 1;
46912
47070
  min-width: 200px;
46913
47071
  padding: ${r(spacing.xs)} ${r(spacing.sm)};
46914
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
47072
+ border: 1px solid ${colors.border.default};
46915
47073
  border-radius: ${r(borderRadius.base)};
46916
- background: ${cssManager.bdTheme("#ffffff", "#0a0a0a")};
46917
- color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47074
+ background: ${colors.background.card};
47075
+ color: ${colors.text.primary};
46918
47076
  font-size: 13px;
46919
47077
  font-family: ${r(fonts.base)};
46920
- transition: all 0.2s ease;
47078
+ transition: all ${r(durations.fast)} ${r(easings.default)};
46921
47079
  height: 32px;
46922
47080
  }
46923
47081
 
46924
47082
  .search-input:focus {
46925
47083
  outline: none;
46926
- border-color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47084
+ border-color: ${colors.text.primary};
47085
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(0, 0, 0, 0.05)", "rgba(255, 255, 255, 0.05)")};
46927
47086
  }
46928
47087
 
46929
47088
  .search-input::placeholder {
46930
- color: ${cssManager.bdTheme("#9ca3af", "#71717a")};
47089
+ color: ${colors.text.muted};
46931
47090
  }
46932
47091
 
46933
47092
  .filter-button {
@@ -46935,27 +47094,28 @@ __publicField(UplStatuspageAssetsselector, "styles", [
46935
47094
  align-items: center;
46936
47095
  justify-content: center;
46937
47096
  padding: ${r(spacing.xs)} ${r(spacing.sm)};
46938
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
47097
+ border: 1px solid ${colors.border.default};
46939
47098
  border-radius: ${r(borderRadius.base)};
46940
- background: transparent;
46941
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
47099
+ background: ${colors.background.card};
47100
+ color: ${colors.text.secondary};
46942
47101
  cursor: pointer;
46943
47102
  font-size: 13px;
46944
- font-weight: 400;
47103
+ font-weight: 500;
46945
47104
  font-family: ${r(fonts.base)};
46946
- transition: all 0.2s ease;
47105
+ transition: all ${r(durations.fast)} ${r(easings.default)};
46947
47106
  height: 32px;
46948
47107
  }
46949
47108
 
46950
47109
  .filter-button:hover {
46951
- border-color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
46952
- color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47110
+ border-color: ${colors.border.muted};
47111
+ color: ${colors.text.primary};
47112
+ box-shadow: ${r(shadows.sm)};
46953
47113
  }
46954
47114
 
46955
47115
  .filter-button.active {
46956
- background: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
46957
- color: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
46958
- border-color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47116
+ background: ${colors.text.primary};
47117
+ color: ${colors.background.primary};
47118
+ border-color: ${colors.text.primary};
46959
47119
  }
46960
47120
 
46961
47121
  .selected-services {
@@ -46969,56 +47129,99 @@ __publicField(UplStatuspageAssetsselector, "styles", [
46969
47129
  display: inline-flex;
46970
47130
  align-items: center;
46971
47131
  gap: ${r(spacing.xs)};
46972
- padding: ${r(spacing.xs)} ${r(spacing.md)};
46973
- background: ${cssManager.bdTheme("#ffffff", "#0a0a0a")};
46974
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
47132
+ padding: 6px ${r(spacing.md)};
47133
+ background: ${colors.background.card};
47134
+ border: 1px solid ${colors.border.default};
46975
47135
  border-radius: ${r(borderRadius.full)};
46976
47136
  font-size: 13px;
46977
- transition: all 0.2s ease;
47137
+ font-weight: 500;
47138
+ transition: all ${r(durations.fast)} ${r(easings.default)};
47139
+ animation: pillFadeIn 0.3s ${r(easings.default)} both;
47140
+ }
47141
+
47142
+ .service-pill:nth-child(1) { animation-delay: 0ms; }
47143
+ .service-pill:nth-child(2) { animation-delay: 30ms; }
47144
+ .service-pill:nth-child(3) { animation-delay: 60ms; }
47145
+ .service-pill:nth-child(4) { animation-delay: 90ms; }
47146
+ .service-pill:nth-child(5) { animation-delay: 120ms; }
47147
+
47148
+ @keyframes pillFadeIn {
47149
+ from {
47150
+ opacity: 0;
47151
+ transform: scale(0.9);
47152
+ }
47153
+ to {
47154
+ opacity: 1;
47155
+ transform: scale(1);
47156
+ }
46978
47157
  }
46979
47158
 
46980
47159
  .service-pill:hover {
46981
- border-color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47160
+ border-color: ${colors.border.muted};
47161
+ box-shadow: ${r(shadows.sm)};
47162
+ transform: translateY(-1px);
46982
47163
  }
46983
47164
 
46984
47165
  .service-pill .status-dot {
46985
47166
  width: 6px;
46986
47167
  height: 6px;
46987
47168
  border-radius: 50%;
47169
+ flex-shrink: 0;
47170
+ }
47171
+
47172
+ .service-pill .status-dot.operational {
47173
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(34, 197, 94, 0.2)", "rgba(34, 197, 94, 0.3)")};
46988
47174
  }
46989
47175
 
46990
47176
  .manage-button {
46991
47177
  display: inline-flex;
46992
47178
  align-items: center;
46993
47179
  gap: ${r(spacing.xs)};
46994
- padding: ${r(spacing.xs)} ${r(spacing.md)};
46995
- background: transparent;
46996
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
47180
+ padding: 6px ${r(spacing.md)};
47181
+ background: ${colors.background.card};
47182
+ border: 1px solid ${colors.border.default};
46997
47183
  border-radius: ${r(borderRadius.base)};
46998
47184
  font-size: 13px;
46999
47185
  font-weight: 500;
47000
47186
  cursor: pointer;
47001
- transition: all 0.2s ease;
47002
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
47187
+ transition: all ${r(durations.fast)} ${r(easings.default)};
47188
+ color: ${colors.text.secondary};
47003
47189
  font-family: ${r(fonts.base)};
47004
47190
  }
47005
47191
 
47006
47192
  .manage-button:hover {
47007
- border-color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47008
- color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47193
+ border-color: ${colors.border.muted};
47194
+ color: ${colors.text.primary};
47195
+ box-shadow: ${r(shadows.sm)};
47196
+ transform: translateY(-1px);
47197
+ }
47198
+
47199
+ .manage-button:active {
47200
+ transform: translateY(0);
47009
47201
  }
47010
47202
 
47011
47203
  .expandable-section {
47012
47204
  margin-top: ${r(spacing.lg)};
47013
47205
  overflow: hidden;
47014
- transition: all 0.3s ease;
47206
+ animation: expandIn 0.3s ${r(easings.default)};
47207
+ }
47208
+
47209
+ @keyframes expandIn {
47210
+ from {
47211
+ opacity: 0;
47212
+ transform: translateY(-8px);
47213
+ }
47214
+ to {
47215
+ opacity: 1;
47216
+ transform: translateY(0);
47217
+ }
47015
47218
  }
47016
47219
 
47017
47220
  .expandable-content {
47018
47221
  padding: ${r(spacing.lg)};
47019
- background: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
47020
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
47021
- border-radius: ${r(borderRadius.base)};
47222
+ background: ${colors.background.secondary};
47223
+ border: 1px solid ${colors.border.default};
47224
+ border-radius: ${r(borderRadius.lg)};
47022
47225
  }
47023
47226
 
47024
47227
  .assets-grid {
@@ -47031,22 +47234,40 @@ __publicField(UplStatuspageAssetsselector, "styles", [
47031
47234
  .asset-card {
47032
47235
  display: flex;
47033
47236
  align-items: center;
47034
- padding: ${r(spacing.sm)} ${r(spacing.md)};
47035
- background: ${cssManager.bdTheme("#ffffff", "#0a0a0a")};
47237
+ padding: ${r(spacing.md)};
47238
+ background: ${colors.background.card};
47036
47239
  border-radius: ${r(borderRadius.base)};
47037
47240
  cursor: pointer;
47038
- transition: all 0.2s ease;
47039
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
47241
+ transition: all ${r(durations.fast)} ${r(easings.default)};
47242
+ border: 1px solid ${colors.border.default};
47040
47243
  gap: ${r(spacing.sm)};
47244
+ animation: cardFadeIn 0.3s ${r(easings.default)} both;
47245
+ }
47246
+
47247
+ @keyframes cardFadeIn {
47248
+ from {
47249
+ opacity: 0;
47250
+ transform: translateY(8px);
47251
+ }
47252
+ to {
47253
+ opacity: 1;
47254
+ transform: translateY(0);
47255
+ }
47041
47256
  }
47042
47257
 
47043
47258
  .asset-card:hover {
47044
- border-color: ${cssManager.bdTheme("#d1d5db", "#3f3f46")};
47259
+ border-color: ${colors.border.muted};
47260
+ box-shadow: ${r(shadows.sm)};
47261
+ transform: translateY(-2px);
47045
47262
  }
47046
47263
 
47047
47264
  .asset-card.selected {
47048
- border-color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
47049
- background: ${cssManager.bdTheme("#f9fafb", "#0f0f0f")};
47265
+ border-color: ${colors.text.primary};
47266
+ background: ${colors.background.secondary};
47267
+ }
47268
+
47269
+ .asset-card.selected:hover {
47270
+ box-shadow: ${r(shadows.md)};
47050
47271
  }
47051
47272
 
47052
47273
  .asset-checkbox {
@@ -47090,13 +47311,24 @@ __publicField(UplStatuspageAssetsselector, "styles", [
47090
47311
  width: 8px;
47091
47312
  height: 8px;
47092
47313
  border-radius: ${r(borderRadius.full)};
47314
+ flex-shrink: 0;
47093
47315
  }
47094
47316
 
47095
- .status-indicator.operational, .status-dot.operational { background: #22c55e; }
47096
- .status-indicator.degraded, .status-dot.degraded { background: #fbbf24; }
47097
- .status-indicator.partial_outage, .status-dot.partial_outage { background: #f87171; }
47098
- .status-indicator.major_outage, .status-dot.major_outage { background: #ef4444; }
47099
- .status-indicator.maintenance, .status-dot.maintenance { background: #60a5fa; }
47317
+ .status-indicator.operational, .status-dot.operational {
47318
+ background: ${colors.status.operational};
47319
+ }
47320
+ .status-indicator.degraded, .status-dot.degraded {
47321
+ background: ${colors.status.degraded};
47322
+ }
47323
+ .status-indicator.partial_outage, .status-dot.partial_outage {
47324
+ background: ${colors.status.partial};
47325
+ }
47326
+ .status-indicator.major_outage, .status-dot.major_outage {
47327
+ background: ${colors.status.major};
47328
+ }
47329
+ .status-indicator.maintenance, .status-dot.maintenance {
47330
+ background: ${colors.status.maintenance};
47331
+ }
47100
47332
 
47101
47333
  .status-text {
47102
47334
  font-size: 12px;
@@ -48184,17 +48416,33 @@ __publicField(UplStatuspageFooter, "styles", [
48184
48416
  }
48185
48417
 
48186
48418
  .footer-link {
48187
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
48419
+ color: ${colors.text.secondary};
48188
48420
  text-decoration: none;
48189
- transition: color 0.15s ease;
48421
+ transition: all ${r(durations.fast)} ${r(easings.default)};
48190
48422
  font-size: 13px;
48191
48423
  font-weight: 400;
48424
+ position: relative;
48192
48425
  }
48193
-
48426
+
48427
+ .footer-link::after {
48428
+ content: '';
48429
+ position: absolute;
48430
+ bottom: -2px;
48431
+ left: 0;
48432
+ width: 0;
48433
+ height: 1px;
48434
+ background: ${colors.text.primary};
48435
+ transition: width ${r(durations.fast)} ${r(easings.default)};
48436
+ }
48437
+
48194
48438
  .footer-link:hover {
48195
48439
  color: ${colors.text.primary};
48196
48440
  }
48197
48441
 
48442
+ .footer-link:hover::after {
48443
+ width: 100%;
48444
+ }
48445
+
48198
48446
  .footer-actions {
48199
48447
  display: flex;
48200
48448
  flex-direction: column;
@@ -48204,25 +48452,33 @@ __publicField(UplStatuspageFooter, "styles", [
48204
48452
  .action-button {
48205
48453
  padding: 8px 16px;
48206
48454
  height: 36px;
48207
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
48208
- background: ${cssManager.bdTheme("#ffffff", "#0a0a0a")};
48209
- border-radius: 6px;
48455
+ border: 1px solid ${colors.border.default};
48456
+ background: ${colors.background.card};
48457
+ border-radius: ${r(borderRadius.base)};
48210
48458
  cursor: pointer;
48211
48459
  text-align: center;
48212
- transition: all 0.15s ease;
48460
+ transition: all ${r(durations.fast)} ${r(easings.default)};
48213
48461
  white-space: nowrap;
48214
48462
  font-size: 13px;
48215
- font-weight: 400;
48463
+ font-weight: 500;
48216
48464
  color: ${colors.text.primary};
48217
48465
  font-family: ${r(fonts.base)};
48218
48466
  display: inline-flex;
48219
48467
  align-items: center;
48220
48468
  justify-content: center;
48469
+ gap: 6px;
48221
48470
  }
48222
-
48471
+
48223
48472
  .action-button:hover {
48224
- background: ${cssManager.bdTheme("#f9fafb", "#18181b")};
48225
- border-color: ${cssManager.bdTheme("#d1d5db", "#3f3f46")};
48473
+ background: ${colors.background.secondary};
48474
+ border-color: ${colors.border.muted};
48475
+ transform: translateY(-1px);
48476
+ box-shadow: ${r(shadows.sm)};
48477
+ }
48478
+
48479
+ .action-button:active {
48480
+ transform: translateY(0);
48481
+ box-shadow: none;
48226
48482
  }
48227
48483
 
48228
48484
  .footer-bottom {
@@ -48243,30 +48499,43 @@ __publicField(UplStatuspageFooter, "styles", [
48243
48499
 
48244
48500
  .social-links {
48245
48501
  display: flex;
48246
- gap: ${r(spacing.md)};
48502
+ gap: ${r(spacing.sm)};
48247
48503
  align-items: center;
48248
48504
  }
48249
-
48505
+
48250
48506
  .social-link {
48251
48507
  display: inline-flex;
48252
48508
  align-items: center;
48253
48509
  justify-content: center;
48254
- width: 32px;
48255
- height: 32px;
48256
- border-radius: 6px;
48257
- transition: all 0.15s ease;
48258
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
48510
+ width: 34px;
48511
+ height: 34px;
48512
+ border-radius: ${r(borderRadius.base)};
48513
+ transition: all ${r(durations.fast)} ${r(easings.default)};
48514
+ color: ${colors.text.muted};
48515
+ border: 1px solid transparent;
48259
48516
  }
48260
-
48517
+
48261
48518
  .social-link:hover {
48262
48519
  color: ${colors.text.primary};
48263
- background: ${cssManager.bdTheme("#f3f4f6", "#27272a")};
48520
+ background: ${colors.background.secondary};
48521
+ border-color: ${colors.border.default};
48522
+ transform: translateY(-2px);
48523
+ box-shadow: ${r(shadows.sm)};
48264
48524
  }
48265
-
48525
+
48526
+ .social-link:active {
48527
+ transform: translateY(0);
48528
+ }
48529
+
48266
48530
  .social-link svg {
48267
48531
  width: 16px;
48268
48532
  height: 16px;
48269
48533
  fill: currentColor;
48534
+ transition: transform ${r(durations.fast)} ${r(easings.default)};
48535
+ }
48536
+
48537
+ .social-link:hover svg {
48538
+ transform: scale(1.1);
48270
48539
  }
48271
48540
 
48272
48541
  .copyright {
@@ -48281,20 +48550,37 @@ __publicField(UplStatuspageFooter, "styles", [
48281
48550
 
48282
48551
  .powered-by {
48283
48552
  font-size: 12px;
48284
- color: ${cssManager.bdTheme("#9ca3af", "#71717a")};
48553
+ color: ${colors.text.muted};
48285
48554
  text-align: right;
48286
48555
  }
48287
-
48556
+
48288
48557
  .powered-by a {
48289
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
48558
+ color: ${colors.text.secondary};
48290
48559
  text-decoration: none;
48291
- transition: color 0.15s ease;
48560
+ transition: all ${r(durations.fast)} ${r(easings.default)};
48561
+ font-weight: 500;
48562
+ position: relative;
48292
48563
  }
48293
-
48564
+
48565
+ .powered-by a::after {
48566
+ content: '';
48567
+ position: absolute;
48568
+ bottom: -1px;
48569
+ left: 0;
48570
+ width: 0;
48571
+ height: 1px;
48572
+ background: ${colors.text.primary};
48573
+ transition: width ${r(durations.fast)} ${r(easings.default)};
48574
+ }
48575
+
48294
48576
  .powered-by a:hover {
48295
48577
  color: ${colors.text.primary};
48296
48578
  }
48297
48579
 
48580
+ .powered-by a:hover::after {
48581
+ width: 100%;
48582
+ }
48583
+
48298
48584
  .status-update {
48299
48585
  padding: 12px 16px;
48300
48586
  background: ${cssManager.bdTheme("#f9fafb", "#18181b")};
@@ -48683,12 +48969,21 @@ var UplStatuspageHeader = class extends (_a4 = DeesElement, _pageTitle_dec = [n5
48683
48969
  <div class="header-actions">
48684
48970
  ${this.showReportButton ? x`
48685
48971
  <button class="actionButton" @click=${this.dispatchReportNewIncident}>
48686
- Report Issue
48972
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
48973
+ <path d="M7.86 2h8.28L22 7.86v8.28L16.14 22H7.86L2 16.14V7.86L7.86 2z"></path>
48974
+ <line x1="12" y1="8" x2="12" y2="12"></line>
48975
+ <line x1="12" y1="16" x2="12.01" y2="16"></line>
48976
+ </svg>
48977
+ <span class="button-text">Report Issue</span>
48687
48978
  </button>
48688
48979
  ` : ""}
48689
48980
  ${this.showSubscribeButton ? x`
48690
48981
  <button class="actionButton primary" @click=${this.dispatchStatusSubscribe}>
48691
- Subscribe
48982
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
48983
+ <path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"></path>
48984
+ <path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"></path>
48985
+ </svg>
48986
+ <span class="button-text">Subscribe</span>
48692
48987
  </button>
48693
48988
  ` : ""}
48694
48989
  </div>
@@ -48723,15 +49018,21 @@ __publicField(UplStatuspageHeader, "styles", [
48723
49018
  i`
48724
49019
  :host {
48725
49020
  display: block;
48726
- background: ${colors.background.primary};
49021
+ background: ${cssManager.bdTheme(
49022
+ "rgba(255, 255, 255, 0.85)",
49023
+ "rgba(9, 9, 11, 0.85)"
49024
+ )};
48727
49025
  font-family: ${r(fonts.base)};
48728
49026
  color: ${colors.text.primary};
48729
- border-bottom: 1px solid ${colors.border.default};
49027
+ border-bottom: 1px solid ${cssManager.bdTheme(
49028
+ "rgba(0, 0, 0, 0.06)",
49029
+ "rgba(255, 255, 255, 0.06)"
49030
+ )};
48730
49031
  position: sticky;
48731
49032
  top: 0;
48732
49033
  z-index: 40;
48733
- backdrop-filter: blur(12px);
48734
- -webkit-backdrop-filter: blur(12px);
49034
+ backdrop-filter: blur(16px) saturate(180%);
49035
+ -webkit-backdrop-filter: blur(16px) saturate(180%);
48735
49036
  }
48736
49037
 
48737
49038
  .header-container {
@@ -48750,7 +49051,7 @@ __publicField(UplStatuspageHeader, "styles", [
48750
49051
  .header-left {
48751
49052
  display: flex;
48752
49053
  align-items: center;
48753
- gap: ${r(spacing.lg)};
49054
+ gap: ${r(spacing.md)};
48754
49055
  }
48755
49056
 
48756
49057
  .header-actions {
@@ -48767,26 +49068,47 @@ __publicField(UplStatuspageHeader, "styles", [
48767
49068
  border-radius: ${r(borderRadius.base)};
48768
49069
  cursor: pointer;
48769
49070
  user-select: none;
48770
- transition: all ${r(durations.normal)} ${r(easings.default)};
49071
+ transition: all ${r(durations.fast)} ${r(easings.default)};
48771
49072
  display: inline-flex;
48772
49073
  align-items: center;
48773
49074
  justify-content: center;
49075
+ gap: 6px;
48774
49076
  height: 36px;
48775
49077
  background: transparent;
48776
49078
  border: 1px solid ${colors.border.default};
48777
49079
  color: ${colors.text.primary};
48778
49080
  letter-spacing: -0.01em;
49081
+ position: relative;
49082
+ overflow: hidden;
49083
+ }
49084
+
49085
+ .actionButton::before {
49086
+ content: '';
49087
+ position: absolute;
49088
+ inset: 0;
49089
+ background: ${cssManager.bdTheme(
49090
+ "linear-gradient(135deg, rgba(0, 0, 0, 0.02) 0%, transparent 100%)",
49091
+ "linear-gradient(135deg, rgba(255, 255, 255, 0.03) 0%, transparent 100%)"
49092
+ )};
49093
+ opacity: 0;
49094
+ transition: opacity ${r(durations.fast)} ${r(easings.default)};
48779
49095
  }
48780
49096
 
48781
49097
  .actionButton:hover {
48782
49098
  background: ${colors.background.secondary};
48783
49099
  border-color: ${colors.border.muted};
48784
- box-shadow: ${r(shadows.xs)};
49100
+ box-shadow: ${r(shadows.sm)};
49101
+ transform: translateY(-1px);
49102
+ }
49103
+
49104
+ .actionButton:hover::before {
49105
+ opacity: 1;
48785
49106
  }
48786
49107
 
48787
49108
  .actionButton:active {
48788
- transform: scale(0.98);
49109
+ transform: translateY(0) scale(0.98);
48789
49110
  transition-duration: ${r(durations.fast)};
49111
+ box-shadow: none;
48790
49112
  }
48791
49113
 
48792
49114
  .actionButton:focus-visible {
@@ -48794,22 +49116,40 @@ __publicField(UplStatuspageHeader, "styles", [
48794
49116
  outline-offset: 2px;
48795
49117
  }
48796
49118
 
49119
+ /* Button icon styles */
49120
+ .actionButton svg {
49121
+ width: 14px;
49122
+ height: 14px;
49123
+ flex-shrink: 0;
49124
+ transition: transform ${r(durations.fast)} ${r(easings.default)};
49125
+ }
49126
+
49127
+ .actionButton:hover svg {
49128
+ transform: scale(1.1);
49129
+ }
49130
+
48797
49131
  .site-title {
48798
- font-size: 18px;
49132
+ font-size: 17px;
48799
49133
  font-weight: 600;
48800
49134
  letter-spacing: -0.02em;
48801
49135
  color: ${colors.text.primary};
49136
+ transition: color ${r(durations.fast)} ${r(easings.default)};
49137
+ }
49138
+
49139
+ .site-title:hover {
49140
+ color: ${colors.text.secondary};
48802
49141
  }
48803
49142
 
48804
49143
  .logo {
48805
49144
  height: 28px;
48806
49145
  width: auto;
48807
49146
  filter: ${cssManager.bdTheme("none", "brightness(0) invert(1)")};
48808
- transition: opacity ${r(durations.normal)} ${r(easings.default)};
49147
+ transition: all ${r(durations.normal)} ${r(easings.default)};
48809
49148
  }
48810
49149
 
48811
49150
  .logo:hover {
48812
49151
  opacity: 0.8;
49152
+ transform: scale(1.02);
48813
49153
  }
48814
49154
 
48815
49155
  .page-info {
@@ -48837,11 +49177,16 @@ __publicField(UplStatuspageHeader, "styles", [
48837
49177
  background: ${colors.accent.primary};
48838
49178
  color: ${colors.background.primary};
48839
49179
  border-color: transparent;
49180
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
49181
+ }
49182
+
49183
+ .actionButton.primary::before {
49184
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, transparent 100%);
48840
49185
  }
48841
49186
 
48842
49187
  .actionButton.primary:hover {
48843
49188
  background: ${colors.accent.hover};
48844
- box-shadow: ${r(shadows.sm)};
49189
+ box-shadow: ${r(shadows.md)};
48845
49190
  }
48846
49191
 
48847
49192
  .loading-skeleton {
@@ -48860,10 +49205,10 @@ __publicField(UplStatuspageHeader, "styles", [
48860
49205
  "linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.04) 50%, transparent 100%)",
48861
49206
  "linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.04) 50%, transparent 100%)"
48862
49207
  )};
48863
- animation: loading 1.5s ${r(easings.default)} infinite;
49208
+ animation: shimmer 1.5s ${r(easings.default)} infinite;
48864
49209
  }
48865
49210
 
48866
- @keyframes loading {
49211
+ @keyframes shimmer {
48867
49212
  0% { transform: translateX(-100%); }
48868
49213
  100% { transform: translateX(200%); }
48869
49214
  }
@@ -48878,11 +49223,11 @@ __publicField(UplStatuspageHeader, "styles", [
48878
49223
  }
48879
49224
 
48880
49225
  .header-left {
48881
- gap: ${r(spacing.md)};
49226
+ gap: ${r(spacing.sm)};
48882
49227
  }
48883
49228
 
48884
49229
  .site-title {
48885
- font-size: 16px;
49230
+ font-size: 15px;
48886
49231
  }
48887
49232
 
48888
49233
  .logo {
@@ -48893,8 +49238,18 @@ __publicField(UplStatuspageHeader, "styles", [
48893
49238
  @media (max-width: 640px) {
48894
49239
  .actionButton {
48895
49240
  font-size: 12px;
48896
- padding: 0 12px;
49241
+ padding: 0 10px;
48897
49242
  height: 32px;
49243
+ gap: 4px;
49244
+ }
49245
+
49246
+ .actionButton svg {
49247
+ width: 12px;
49248
+ height: 12px;
49249
+ }
49250
+
49251
+ .actionButton .button-text {
49252
+ display: none;
48898
49253
  }
48899
49254
 
48900
49255
  .page-title {
@@ -50196,8 +50551,9 @@ var UplStatuspageIncidents = class extends (_a5 = DeesElement, _currentIncidents
50196
50551
  renderIncident(incident, isCurrent) {
50197
50552
  const latestUpdate = incident.updates[incident.updates.length - 1];
50198
50553
  const duration = incident.endTime ? this.formatDuration(incident.endTime - incident.startTime) : this.formatDuration(Date.now() - incident.startTime);
50554
+ const isActive = isCurrent && latestUpdate?.status !== "resolved";
50199
50555
  return x`
50200
- <div class="incident-card ${this.expandedIncidents.has(incident.id) ? "expanded" : ""}">
50556
+ <div class="incident-card ${this.expandedIncidents.has(incident.id) ? "expanded" : ""} ${isActive ? "active-incident" : ""}">
50201
50557
  <div class="incident-header ${incident.severity}" @click=${() => this.toggleIncident(incident.id)}>
50202
50558
  <div>
50203
50559
  <h3 class="incident-title">${incident.title}</h3>
@@ -50274,8 +50630,10 @@ var UplStatuspageIncidents = class extends (_a5 = DeesElement, _currentIncidents
50274
50630
 
50275
50631
  ${incident.updates.length > 0 ? x`
50276
50632
  <div class="incident-updates">
50277
- <h4 style="font-size: 14px; margin: 0 0 12px 0;">Updates</h4>
50278
- ${incident.updates.slice(-3).reverse().map((update) => this.renderUpdate(update))}
50633
+ <h4 class="updates-title">Updates</h4>
50634
+ <div class="timeline">
50635
+ ${incident.updates.slice(-3).reverse().map((update, index2) => this.renderUpdate(update, index2))}
50636
+ </div>
50279
50637
  </div>
50280
50638
  ` : ""}
50281
50639
 
@@ -50324,24 +50682,32 @@ var UplStatuspageIncidents = class extends (_a5 = DeesElement, _currentIncidents
50324
50682
  </div>
50325
50683
  `;
50326
50684
  }
50327
- renderUpdate(update) {
50685
+ renderUpdate(update, index2 = 0) {
50328
50686
  return x`
50329
- <div class="update-item">
50330
- <div class="update-time">${this.formatDate(update.timestamp)}</div>
50687
+ <div class="update-item" style="animation-delay: ${index2 * 50}ms">
50688
+ <div class="update-time">
50689
+ ${this.formatDate(update.timestamp)}
50690
+ ${update.status ? x`<span class="update-status-badge">${update.status}</span>` : ""}
50691
+ </div>
50331
50692
  <div class="update-message">${update.message}</div>
50332
50693
  ${update.author ? x`
50333
- <div class="update-author">— ${update.author}</div>
50694
+ <div class="update-author">
50695
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
50696
+ <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
50697
+ <circle cx="12" cy="7" r="4"></circle>
50698
+ </svg>
50699
+ ${update.author}
50700
+ </div>
50334
50701
  ` : ""}
50335
50702
  </div>
50336
50703
  `;
50337
50704
  }
50338
50705
  getStatusIcon(status) {
50339
- return x`<span style="
50706
+ return x`<span class="status-dot" style="
50340
50707
  display: inline-block;
50341
50708
  width: 6px;
50342
50709
  height: 6px;
50343
50710
  border-radius: 50%;
50344
- margin-right: 4px;
50345
50711
  background: ${status === "resolved" ? colors.status.operational : status === "monitoring" ? colors.status.maintenance : status === "identified" ? colors.status.degraded : colors.status.partial};
50346
50712
  "></span>`;
50347
50713
  }
@@ -50482,36 +50848,79 @@ __publicField(UplStatuspageIncidents, "styles", [
50482
50848
  background: ${colors.background.card};
50483
50849
  padding: ${r(spacing.xl)};
50484
50850
  margin-bottom: ${r(spacing.lg)};
50485
- border-radius: ${r(borderRadius.md)};
50851
+ border-radius: ${r(borderRadius.lg)};
50486
50852
  border: 1px solid ${colors.border.default};
50487
50853
  text-align: center;
50488
50854
  color: ${colors.text.secondary};
50489
50855
  box-shadow: ${r(shadows.sm)};
50856
+ animation: fadeInUp 0.4s ${r(easings.default)} both;
50490
50857
  }
50491
50858
 
50859
+ /* Staggered entrance animations */
50492
50860
  .incident-card {
50493
50861
  background: ${colors.background.card};
50494
- border-radius: ${r(borderRadius.md)};
50862
+ border-radius: ${r(borderRadius.lg)};
50495
50863
  margin-bottom: ${r(spacing.lg)};
50496
50864
  overflow: hidden;
50497
50865
  box-shadow: ${r(shadows.sm)};
50498
50866
  border: 1px solid ${colors.border.default};
50499
- transition: all 0.2s ease;
50867
+ transition: all ${r(durations.normal)} ${r(easings.default)};
50868
+ animation: fadeInUp 0.4s ${r(easings.default)} both;
50500
50869
  }
50501
50870
 
50502
- .incident-card.expanded {
50871
+ .incident-card:nth-child(1) { animation-delay: 0ms; }
50872
+ .incident-card:nth-child(2) { animation-delay: 50ms; }
50873
+ .incident-card:nth-child(3) { animation-delay: 100ms; }
50874
+ .incident-card:nth-child(4) { animation-delay: 150ms; }
50875
+ .incident-card:nth-child(5) { animation-delay: 200ms; }
50876
+
50877
+ .incident-card:hover {
50878
+ transform: translateY(-2px);
50503
50879
  box-shadow: ${r(shadows.md)};
50880
+ border-color: ${colors.border.muted};
50881
+ }
50882
+
50883
+ .incident-card.expanded {
50884
+ box-shadow: ${r(shadows.lg)};
50885
+ }
50886
+
50887
+ /* Active incident pulse effect */
50888
+ .incident-card.active-incident {
50889
+ animation: fadeInUp 0.4s ${r(easings.default)} both,
50890
+ incident-pulse 3s ease-in-out infinite;
50891
+ }
50892
+
50893
+ @keyframes fadeInUp {
50894
+ from {
50895
+ opacity: 0;
50896
+ transform: translateY(16px);
50897
+ }
50898
+ to {
50899
+ opacity: 1;
50900
+ transform: translateY(0);
50901
+ }
50902
+ }
50903
+
50904
+ @keyframes incident-pulse {
50905
+ 0%, 100% {
50906
+ box-shadow: ${r(shadows.sm)};
50907
+ }
50908
+ 50% {
50909
+ box-shadow: ${r(shadows.md)},
50910
+ 0 0 0 2px ${cssManager.bdTheme("rgba(239, 68, 68, 0.15)", "rgba(248, 113, 113, 0.2)")};
50911
+ }
50504
50912
  }
50505
50913
 
50506
50914
  .incident-header {
50507
- padding: ${r(spacing.lg)} ${r(spacing.lg)};
50915
+ padding: ${r(spacing.lg)} ${r(spacing.xl)};
50508
50916
  border-left: 4px solid;
50509
50917
  display: flex;
50510
50918
  align-items: start;
50511
50919
  justify-content: space-between;
50512
50920
  gap: ${r(spacing.md)};
50513
50921
  cursor: pointer;
50514
- transition: background-color 0.2s ease;
50922
+ transition: background-color ${r(durations.fast)} ${r(easings.default)};
50923
+ position: relative;
50515
50924
  }
50516
50925
 
50517
50926
  .incident-header:hover {
@@ -50535,10 +50944,11 @@ __publicField(UplStatuspageIncidents, "styles", [
50535
50944
  }
50536
50945
 
50537
50946
  .incident-title {
50538
- font-size: 18px;
50947
+ font-size: 17px;
50539
50948
  font-weight: 600;
50540
50949
  margin: 0;
50541
- line-height: 1.3;
50950
+ line-height: 1.4;
50951
+ letter-spacing: -0.01em;
50542
50952
  }
50543
50953
 
50544
50954
  .incident-meta {
@@ -50550,17 +50960,24 @@ __publicField(UplStatuspageIncidents, "styles", [
50550
50960
  flex-wrap: wrap;
50551
50961
  }
50552
50962
 
50553
- .incident-status {
50554
- display: inline-flex;
50963
+ .incident-meta span {
50964
+ display: flex;
50555
50965
  align-items: center;
50556
- gap: ${r(spacing.xs)};
50557
- padding: ${r(spacing.xs)} ${r(spacing.md)};
50966
+ gap: 4px;
50967
+ }
50968
+
50969
+ .incident-status {
50970
+ display: inline-flex;
50971
+ align-items: center;
50972
+ gap: 6px;
50973
+ padding: 6px 12px;
50558
50974
  border-radius: ${r(borderRadius.full)};
50559
- font-size: 12px;
50975
+ font-size: 11px;
50560
50976
  font-weight: 600;
50561
50977
  text-transform: uppercase;
50562
- letter-spacing: 0.02em;
50978
+ letter-spacing: 0.04em;
50563
50979
  flex-shrink: 0;
50980
+ transition: all ${r(durations.fast)} ${r(easings.default)};
50564
50981
  }
50565
50982
 
50566
50983
  .incident-status.investigating {
@@ -50588,68 +51005,165 @@ __publicField(UplStatuspageIncidents, "styles", [
50588
51005
  color: ${cssManager.bdTheme("#4b5563", "#d1d5db")};
50589
51006
  }
50590
51007
 
51008
+ /* Pulse for investigating status */
51009
+ .incident-status.investigating .status-dot {
51010
+ animation: status-pulse 1.5s ease-in-out infinite;
51011
+ }
51012
+
51013
+ @keyframes status-pulse {
51014
+ 0%, 100% { opacity: 1; transform: scale(1); }
51015
+ 50% { opacity: 0.6; transform: scale(1.2); }
51016
+ }
51017
+
50591
51018
  .incident-body {
50592
- padding: 0 ${r(spacing.lg)} ${r(spacing.lg)} ${r(spacing.lg)};
51019
+ padding: 0 ${r(spacing.xl)} ${r(spacing.xl)} ${r(spacing.xl)};
51020
+ animation: slideDown 0.3s ${r(easings.default)};
51021
+ }
51022
+
51023
+ @keyframes slideDown {
51024
+ from {
51025
+ opacity: 0;
51026
+ transform: translateY(-8px);
51027
+ }
51028
+ to {
51029
+ opacity: 1;
51030
+ transform: translateY(0);
51031
+ }
50593
51032
  }
50594
51033
 
50595
51034
  .incident-impact {
50596
51035
  margin: ${r(spacing.md)} 0;
50597
- padding: ${r(spacing.md)};
51036
+ padding: ${r(spacing.md)} ${r(spacing.lg)};
50598
51037
  background: ${colors.background.secondary};
50599
51038
  border-radius: ${r(borderRadius.base)};
50600
51039
  font-size: 14px;
50601
51040
  line-height: 1.6;
51041
+ border-left: 3px solid ${colors.border.muted};
50602
51042
  }
50603
51043
 
50604
51044
  .affected-services {
50605
- margin-top: ${r(spacing.md)};
51045
+ margin-top: ${r(spacing.lg)};
50606
51046
  }
50607
51047
 
50608
51048
  .affected-services-title {
50609
- font-size: 13px;
51049
+ font-size: 12px;
50610
51050
  font-weight: 600;
50611
51051
  margin-bottom: ${r(spacing.sm)};
50612
- color: ${colors.text.primary};
51052
+ color: ${colors.text.secondary};
51053
+ text-transform: uppercase;
51054
+ letter-spacing: 0.04em;
50613
51055
  }
50614
51056
 
50615
51057
  .service-tag {
50616
51058
  display: inline-block;
50617
- padding: ${r(spacing.xs)} ${r(spacing.sm)};
51059
+ padding: 4px 10px;
50618
51060
  margin: 2px;
50619
51061
  background: ${colors.background.muted};
50620
51062
  border-radius: ${r(borderRadius.sm)};
50621
51063
  font-size: 12px;
50622
51064
  color: ${colors.text.secondary};
51065
+ transition: all ${r(durations.fast)} ${r(easings.default)};
51066
+ }
51067
+
51068
+ .service-tag:hover {
51069
+ background: ${colors.background.secondary};
51070
+ color: ${colors.text.primary};
50623
51071
  }
50624
51072
 
51073
+ /* Timeline visualization for updates */
50625
51074
  .incident-updates {
50626
- margin-top: ${r(spacing.lg)};
51075
+ margin-top: ${r(spacing.xl)};
50627
51076
  border-top: 1px solid ${colors.border.default};
50628
51077
  padding-top: ${r(spacing.lg)};
50629
51078
  }
50630
51079
 
51080
+ .updates-title {
51081
+ font-size: 12px;
51082
+ font-weight: 600;
51083
+ text-transform: uppercase;
51084
+ letter-spacing: 0.04em;
51085
+ margin: 0 0 ${r(spacing.lg)} 0;
51086
+ color: ${colors.text.secondary};
51087
+ }
51088
+
51089
+ .timeline {
51090
+ position: relative;
51091
+ padding-left: 24px;
51092
+ }
51093
+
51094
+ /* Vertical connector line */
51095
+ .timeline::before {
51096
+ content: '';
51097
+ position: absolute;
51098
+ left: 7px;
51099
+ top: 10px;
51100
+ bottom: calc(100% - 10px);
51101
+ height: auto;
51102
+ width: 2px;
51103
+ background: ${cssManager.bdTheme(
51104
+ "linear-gradient(to bottom, #e5e7eb 0%, #d1d5db 50%, #e5e7eb 100%)",
51105
+ "linear-gradient(to bottom, #27272a 0%, #3f3f46 50%, #27272a 100%)"
51106
+ )};
51107
+ border-radius: 1px;
51108
+ }
51109
+
50631
51110
  .update-item {
50632
51111
  position: relative;
50633
51112
  padding-left: ${r(spacing.lg)};
50634
- margin-bottom: ${r(spacing.md)};
51113
+ padding-bottom: ${r(spacing.lg)};
51114
+ animation: fadeInUp 0.3s ${r(easings.default)} both;
51115
+ }
51116
+
51117
+ .update-item:last-child {
51118
+ padding-bottom: 0;
50635
51119
  }
50636
51120
 
51121
+ /* Timeline dot */
50637
51122
  .update-item::before {
50638
51123
  content: '';
50639
51124
  position: absolute;
50640
- left: 0;
50641
- top: 6px;
50642
- width: 8px;
50643
- height: 8px;
50644
- border-radius: ${r(borderRadius.full)};
50645
- background: ${colors.border.muted};
51125
+ left: -22px;
51126
+ top: 4px;
51127
+ width: 12px;
51128
+ height: 12px;
51129
+ border-radius: 50%;
51130
+ background: ${colors.background.card};
51131
+ border: 2px solid ${colors.border.muted};
51132
+ z-index: 1;
51133
+ transition: all ${r(durations.fast)} ${r(easings.default)};
51134
+ }
51135
+
51136
+ .update-item:first-child::before {
51137
+ border-color: ${colors.status.operational};
51138
+ background: ${colors.status.operational};
51139
+ box-shadow: 0 0 0 3px ${cssManager.bdTheme("rgba(22, 163, 74, 0.15)", "rgba(34, 197, 94, 0.2)")};
51140
+ }
51141
+
51142
+ .update-item:hover::before {
51143
+ transform: scale(1.2);
51144
+ border-color: ${colors.text.secondary};
50646
51145
  }
50647
51146
 
50648
51147
  .update-time {
50649
- font-size: 12px;
50650
- color: ${colors.text.secondary};
50651
- margin-bottom: ${r(spacing.xs)};
51148
+ font-size: 11px;
51149
+ color: ${colors.text.muted};
51150
+ margin-bottom: 4px;
50652
51151
  font-family: ${r(fonts.mono)};
51152
+ display: flex;
51153
+ align-items: center;
51154
+ gap: 8px;
51155
+ }
51156
+
51157
+ .update-status-badge {
51158
+ display: inline-flex;
51159
+ padding: 2px 6px;
51160
+ border-radius: 4px;
51161
+ font-size: 10px;
51162
+ font-weight: 600;
51163
+ text-transform: uppercase;
51164
+ letter-spacing: 0.02em;
51165
+ background: ${colors.background.muted};
51166
+ color: ${colors.text.secondary};
50653
51167
  }
50654
51168
 
50655
51169
  .update-message {
@@ -50660,9 +51174,11 @@ __publicField(UplStatuspageIncidents, "styles", [
50660
51174
 
50661
51175
  .update-author {
50662
51176
  font-size: 12px;
50663
- color: ${colors.text.secondary};
50664
- margin-top: ${r(spacing.xs)};
50665
- font-style: italic;
51177
+ color: ${colors.text.muted};
51178
+ margin-top: 4px;
51179
+ display: flex;
51180
+ align-items: center;
51181
+ gap: 4px;
50666
51182
  }
50667
51183
 
50668
51184
  .loading-skeleton {
@@ -50672,33 +51188,34 @@ __publicField(UplStatuspageIncidents, "styles", [
50672
51188
  "linear-gradient(90deg, #1f1f1f 25%, #262626 50%, #1f1f1f 75%)"
50673
51189
  )};
50674
51190
  background-size: 200% 100%;
50675
- animation: loading 1.5s infinite;
50676
- border-radius: ${r(borderRadius.md)};
51191
+ animation: shimmer 1.5s infinite;
51192
+ border-radius: ${r(borderRadius.lg)};
50677
51193
  margin-bottom: ${r(spacing.lg)};
50678
51194
  }
50679
51195
 
50680
- @keyframes loading {
51196
+ @keyframes shimmer {
50681
51197
  0% { background-position: 200% 0; }
50682
51198
  100% { background-position: -200% 0; }
50683
51199
  }
50684
51200
 
50685
51201
  .show-more {
50686
51202
  text-align: center;
50687
- margin-top: ${r(spacing.lg)};
51203
+ margin-top: ${r(spacing.xl)};
50688
51204
  }
50689
51205
 
50690
51206
  .show-more-button {
50691
51207
  display: inline-flex;
50692
51208
  align-items: center;
50693
51209
  justify-content: center;
50694
- padding: ${r(spacing.sm)} ${r(spacing.lg)};
51210
+ gap: 8px;
51211
+ padding: 10px 20px;
50695
51212
  background: transparent;
50696
51213
  border: 1px solid ${colors.border.default};
50697
51214
  border-radius: ${r(borderRadius.base)};
50698
51215
  cursor: pointer;
50699
51216
  font-size: 14px;
50700
51217
  font-weight: 500;
50701
- transition: all 0.2s ease;
51218
+ transition: all ${r(durations.fast)} ${r(easings.default)};
50702
51219
  color: ${colors.text.primary};
50703
51220
  font-family: ${r(fonts.base)};
50704
51221
  }
@@ -50706,7 +51223,8 @@ __publicField(UplStatuspageIncidents, "styles", [
50706
51223
  .show-more-button:hover {
50707
51224
  background: ${colors.background.secondary};
50708
51225
  border-color: ${colors.border.muted};
50709
- transform: translateY(-1px);
51226
+ transform: translateY(-2px);
51227
+ box-shadow: ${r(shadows.sm)};
50710
51228
  }
50711
51229
 
50712
51230
  .show-more-button:active {
@@ -50725,15 +51243,15 @@ __publicField(UplStatuspageIncidents, "styles", [
50725
51243
  .subscribe-button {
50726
51244
  display: inline-flex;
50727
51245
  align-items: center;
50728
- gap: ${r(spacing.xs)};
50729
- padding: ${r(spacing.xs)} ${r(spacing.md)};
51246
+ gap: 6px;
51247
+ padding: 8px 14px;
50730
51248
  background: transparent;
50731
51249
  border: 1px solid ${colors.border.default};
50732
51250
  border-radius: ${r(borderRadius.base)};
50733
51251
  cursor: pointer;
50734
51252
  font-size: 13px;
50735
- font-weight: 400;
50736
- transition: all 0.2s ease;
51253
+ font-weight: 500;
51254
+ transition: all ${r(durations.fast)} ${r(easings.default)};
50737
51255
  color: ${colors.text.primary};
50738
51256
  font-family: ${r(fonts.base)};
50739
51257
  }
@@ -50741,14 +51259,15 @@ __publicField(UplStatuspageIncidents, "styles", [
50741
51259
  .subscribe-button:hover {
50742
51260
  background: ${colors.background.secondary};
50743
51261
  border-color: ${colors.border.muted};
51262
+ transform: translateY(-1px);
50744
51263
  }
50745
-
51264
+
50746
51265
  .subscribe-button.subscribed {
50747
51266
  background: ${cssManager.bdTheme("#f0fdf4", "#064e3b")};
50748
51267
  border-color: ${cssManager.bdTheme("#86efac", "#047857")};
50749
51268
  color: ${cssManager.bdTheme("#047857", "#86efac")};
50750
51269
  }
50751
-
51270
+
50752
51271
  .subscribe-button.subscribed:hover {
50753
51272
  background: ${cssManager.bdTheme("#dcfce7", "#065f46")};
50754
51273
  }
@@ -50761,6 +51280,15 @@ __publicField(UplStatuspageIncidents, "styles", [
50761
51280
  opacity: 0.8;
50762
51281
  }
50763
51282
 
51283
+ /* Expand icon animation */
51284
+ .expand-icon {
51285
+ transition: transform ${r(durations.normal)} ${r(easings.default)};
51286
+ }
51287
+
51288
+ .expand-icon.rotated {
51289
+ transform: rotate(180deg);
51290
+ }
51291
+
50764
51292
  @media (max-width: 640px) {
50765
51293
  .container {
50766
51294
  padding: 0 ${r(spacing.md)} ${r(spacing.md)} ${r(spacing.md)};
@@ -50770,10 +51298,28 @@ __publicField(UplStatuspageIncidents, "styles", [
50770
51298
  padding: ${r(spacing.md)};
50771
51299
  }
50772
51300
 
51301
+ .incident-body {
51302
+ padding: 0 ${r(spacing.md)} ${r(spacing.md)} ${r(spacing.md)};
51303
+ }
51304
+
50773
51305
  .incident-meta {
50774
51306
  flex-direction: column;
50775
51307
  gap: ${r(spacing.xs)};
50776
51308
  }
51309
+
51310
+ .timeline {
51311
+ padding-left: 20px;
51312
+ }
51313
+
51314
+ .timeline::before {
51315
+ left: 4px;
51316
+ }
51317
+
51318
+ .update-item::before {
51319
+ left: -18px;
51320
+ width: 10px;
51321
+ height: 10px;
51322
+ }
50777
51323
  }
50778
51324
  `
50779
51325
  ]);
@@ -51323,22 +51869,32 @@ __publicField(UplStatuspageStatusbar, "styles", [
51323
51869
  display: flex;
51324
51870
  align-items: center;
51325
51871
  justify-content: space-between;
51326
- min-height: 64px;
51327
- padding: ${r(spacing.md)} ${r(spacing.lg)};
51328
- border-radius: ${r(borderRadius.lg)};
51872
+ min-height: 72px;
51873
+ padding: ${r(spacing.lg)} ${r(spacing.xl)};
51874
+ border-radius: ${r(borderRadius.xl)};
51329
51875
  cursor: default;
51330
- transition: all ${r(durations.normal)} ${r(easings.default)};
51876
+ transition: all ${r(durations.slow)} ${r(easings.default)};
51331
51877
  position: relative;
51332
51878
  overflow: hidden;
51333
51879
  font-weight: 500;
51334
51880
  font-size: 15px;
51335
51881
  letter-spacing: -0.01em;
51336
- background: ${colors.background.card};
51337
51882
  border: 1px solid ${colors.border.default};
51338
51883
  box-shadow: ${r(shadows.sm)};
51339
51884
  }
51340
51885
 
51886
+ /* Gradient background overlay */
51341
51887
  .statusbar-inner::before {
51888
+ content: '';
51889
+ position: absolute;
51890
+ inset: 0;
51891
+ opacity: 1;
51892
+ transition: opacity ${r(durations.slow)} ${r(easings.default)};
51893
+ z-index: 0;
51894
+ }
51895
+
51896
+ /* Left accent border */
51897
+ .statusbar-inner::after {
51342
51898
  content: '';
51343
51899
  position: absolute;
51344
51900
  left: 0;
@@ -51346,31 +51902,72 @@ __publicField(UplStatuspageStatusbar, "styles", [
51346
51902
  bottom: 0;
51347
51903
  width: 4px;
51348
51904
  transition: background ${r(durations.normal)} ${r(easings.default)};
51905
+ z-index: 1;
51349
51906
  }
51350
51907
 
51908
+ /* Operational - green gradient */
51909
+ .statusbar-inner.operational {
51910
+ background: ${colors.background.card};
51911
+ }
51351
51912
  .statusbar-inner.operational::before {
51913
+ background: ${statusGradients.operational};
51914
+ }
51915
+ .statusbar-inner.operational::after {
51352
51916
  background: ${colors.status.operational};
51353
51917
  }
51354
51918
 
51919
+ /* Degraded - yellow/amber gradient */
51920
+ .statusbar-inner.degraded {
51921
+ background: ${colors.background.card};
51922
+ }
51355
51923
  .statusbar-inner.degraded::before {
51924
+ background: ${statusGradients.degraded};
51925
+ }
51926
+ .statusbar-inner.degraded::after {
51356
51927
  background: ${colors.status.degraded};
51357
51928
  }
51358
51929
 
51930
+ /* Partial outage - orange/red gradient */
51931
+ .statusbar-inner.partial_outage {
51932
+ background: ${colors.background.card};
51933
+ }
51359
51934
  .statusbar-inner.partial_outage::before {
51935
+ background: ${statusGradients.partial};
51936
+ }
51937
+ .statusbar-inner.partial_outage::after {
51360
51938
  background: ${colors.status.partial};
51361
51939
  }
51362
51940
 
51941
+ /* Major outage - red gradient */
51942
+ .statusbar-inner.major_outage {
51943
+ background: ${colors.background.card};
51944
+ }
51363
51945
  .statusbar-inner.major_outage::before {
51946
+ background: ${statusGradients.major};
51947
+ }
51948
+ .statusbar-inner.major_outage::after {
51364
51949
  background: ${colors.status.major};
51365
51950
  }
51366
51951
 
51952
+ /* Maintenance - blue gradient */
51953
+ .statusbar-inner.maintenance {
51954
+ background: ${colors.background.card};
51955
+ }
51367
51956
  .statusbar-inner.maintenance::before {
51957
+ background: ${statusGradients.maintenance};
51958
+ }
51959
+ .statusbar-inner.maintenance::after {
51368
51960
  background: ${colors.status.maintenance};
51369
51961
  }
51370
51962
 
51371
51963
  .statusbar-inner:hover {
51372
51964
  border-color: ${colors.border.muted};
51373
- box-shadow: ${r(shadows.base)};
51965
+ box-shadow: ${r(shadows.md)};
51966
+ transform: translateY(-1px);
51967
+ }
51968
+
51969
+ .statusbar-inner:hover::before {
51970
+ opacity: 1.2;
51374
51971
  }
51375
51972
 
51376
51973
  .status-indicator {
@@ -52255,8 +52852,9 @@ var UplStatuspageStatusdetails = class extends (_a8 = DeesElement, _historyData_
52255
52852
  const status = dataPoint?.status || "no-data";
52256
52853
  const responseTime = dataPoint?.responseTime || 0;
52257
52854
  bars.push(x`
52258
- <div
52855
+ <div
52259
52856
  class="bar ${status}"
52857
+ style="--bar-index: ${i9}"
52260
52858
  @mouseenter=${(e10) => this.showTooltip(e10, timestamp2, status, responseTime)}
52261
52859
  @click=${() => this.handleBarClick(timestamp2, status, responseTime)}
52262
52860
  ></div>
@@ -52357,6 +52955,12 @@ __publicField(UplStatuspageStatusdetails, "styles", [
52357
52955
 
52358
52956
  .graph-container {
52359
52957
  position: relative;
52958
+ animation: fadeIn 0.3s ${r(easings.default)};
52959
+ }
52960
+
52961
+ @keyframes fadeIn {
52962
+ from { opacity: 0; }
52963
+ to { opacity: 1; }
52360
52964
  }
52361
52965
 
52362
52966
  .mainbox {
@@ -52382,14 +52986,29 @@ __publicField(UplStatuspageStatusdetails, "styles", [
52382
52986
  flex: 1;
52383
52987
  height: 100%;
52384
52988
  cursor: pointer;
52385
- transition: all 0.15s ease;
52989
+ transition: all ${r(durations.fast)} ${r(easings.default)};
52386
52990
  position: relative;
52387
- border-radius: 2px;
52991
+ border-radius: 3px;
52992
+ animation: barGrow 0.4s ${r(easings.default)} both;
52993
+ animation-delay: calc(var(--bar-index, 0) * 8ms);
52994
+ transform-origin: bottom;
52995
+ }
52996
+
52997
+ @keyframes barGrow {
52998
+ from {
52999
+ transform: scaleY(0);
53000
+ opacity: 0;
53001
+ }
53002
+ to {
53003
+ transform: scaleY(1);
53004
+ opacity: 1;
53005
+ }
52388
53006
  }
52389
53007
 
52390
53008
  .mainbox .barContainer .bar:hover {
52391
- transform: scaleY(1.1);
52392
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
53009
+ transform: scaleY(1.15);
53010
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
53011
+ z-index: 1;
52393
53012
  }
52394
53013
 
52395
53014
  .mainbox .barContainer .bar.operational {
@@ -52433,20 +53052,23 @@ __publicField(UplStatuspageStatusdetails, "styles", [
52433
53052
  position: absolute;
52434
53053
  background: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
52435
53054
  color: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
52436
- padding: 6px 10px;
52437
- border-radius: 4px;
53055
+ padding: 8px 12px;
53056
+ border-radius: ${r(borderRadius.base)};
52438
53057
  font-size: 11px;
52439
53058
  pointer-events: none;
52440
53059
  opacity: 0;
52441
- transition: opacity 0.15s;
53060
+ transition: opacity ${r(durations.fast)} ${r(easings.default)},
53061
+ transform ${r(durations.fast)} ${r(easings.default)};
52442
53062
  z-index: 50;
52443
53063
  white-space: nowrap;
52444
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
52445
- line-height: 1.4;
53064
+ box-shadow: ${r(shadows.lg)};
53065
+ line-height: 1.5;
53066
+ transform: translateY(4px);
52446
53067
  }
52447
53068
 
52448
53069
  .tooltip.visible {
52449
53070
  opacity: 1;
53071
+ transform: translateY(0);
52450
53072
  }
52451
53073
 
52452
53074
  .tooltip-time {
@@ -53306,21 +53928,30 @@ var UplStatuspageStatusmonth = class extends (_a9 = DeesElement, _monthlyData_de
53306
53928
  const monthDate = /* @__PURE__ */ new Date(monthData.month + "-01");
53307
53929
  const monthName = monthDate.toLocaleDateString("en-US", { month: "short", year: "numeric" });
53308
53930
  const firstDayOfWeek = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1).getDay();
53931
+ const now2 = /* @__PURE__ */ new Date();
53932
+ const isCurrentMonth = monthDate.getMonth() === now2.getMonth() && monthDate.getFullYear() === now2.getFullYear();
53933
+ const uptimeClass = this.getUptimeClass(monthData.overallUptime);
53309
53934
  return x`
53310
53935
  <div class="statusMonth" @mouseleave=${this.hideTooltip}>
53311
- <div class="month-header">${monthName}</div>
53936
+ <div class="month-header">
53937
+ ${monthName}
53938
+ ${isCurrentMonth ? x`<span class="current-badge">Current</span>` : ""}
53939
+ </div>
53312
53940
  <div class="days-container">
53313
53941
  <div class="days-grid">
53314
53942
  ${this.renderWeekdayLabels()}
53315
53943
  ${this.renderEmptyDays(firstDayOfWeek)}
53316
- ${monthData.days.map((day) => this.renderDay(day))}
53944
+ ${monthData.days.map((day, index2) => this.renderDay(day, index2))}
53317
53945
  ${this.renderTrailingEmptyDays(firstDayOfWeek + monthData.days.length)}
53318
53946
  </div>
53319
53947
  </div>
53320
53948
  <div class="overall-uptime">
53321
53949
  <div class="uptime-stat">
53322
53950
  <span>Uptime</span>
53323
- <span class="uptime-value">${monthData.overallUptime.toFixed(2)}%</span>
53951
+ <span class="uptime-value ${uptimeClass}">${monthData.overallUptime.toFixed(2)}%</span>
53952
+ </div>
53953
+ <div class="uptime-bar">
53954
+ <div class="uptime-bar-fill ${uptimeClass}" style="width: ${monthData.overallUptime}%"></div>
53324
53955
  </div>
53325
53956
  ${monthData.totalIncidents > 0 ? x`
53326
53957
  <div class="uptime-stat">
@@ -53332,6 +53963,11 @@ var UplStatuspageStatusmonth = class extends (_a9 = DeesElement, _monthlyData_de
53332
53963
  </div>
53333
53964
  `;
53334
53965
  }
53966
+ getUptimeClass(uptime) {
53967
+ if (uptime >= 99.9) return "good";
53968
+ if (uptime >= 99) return "warning";
53969
+ return "bad";
53970
+ }
53335
53971
  renderWeekdayLabels() {
53336
53972
  const weekdays = ["S", "M", "T", "W", "T", "F", "S"];
53337
53973
  return weekdays.map((day) => x`<div class="weekday-label">${day}</div>`);
@@ -53344,54 +53980,60 @@ var UplStatuspageStatusmonth = class extends (_a9 = DeesElement, _monthlyData_de
53344
53980
  const trailingCount = remainder === 0 ? 0 : 7 - remainder;
53345
53981
  return Array(trailingCount).fill(0).map(() => x`<div class="statusDay empty"></div>`);
53346
53982
  }
53347
- renderDay(day) {
53983
+ renderDay(day, index2 = 0) {
53348
53984
  const status = day.status || "no-data";
53349
53985
  const date = new Date(day.date);
53350
- const dayNumber = date.getDate();
53986
+ const now2 = /* @__PURE__ */ new Date();
53987
+ const isToday3 = date.toDateString() === now2.toDateString();
53988
+ const uptimeIntensity = this.getUptimeIntensity(day.uptime);
53351
53989
  return x`
53352
- <div
53353
- class="statusDay ${status}"
53990
+ <div
53991
+ class="statusDay ${status} ${isToday3 ? "today" : ""} ${status === "operational" ? uptimeIntensity : ""}"
53992
+ style="--day-index: ${index2}"
53354
53993
  @mouseenter=${(e10) => this.showTooltip && this.showDayTooltip(e10, day)}
53355
53994
  @click=${() => this.handleDayClick(day)}
53356
53995
  >
53357
- ${status === "major_outage" || status === "partial_outage" ? x`
53358
- <div style="
53359
- position: absolute;
53360
- top: 50%;
53361
- left: 50%;
53362
- transform: translate(-50%, -50%);
53363
- font-size: 8px;
53364
- font-weight: bold;
53365
- color: white;
53366
- ">${day.incidents}</div>
53996
+ ${(status === "major_outage" || status === "partial_outage") && day.incidents > 0 ? x`
53997
+ <span class="incident-count">${day.incidents}</span>
53367
53998
  ` : ""}
53368
53999
  </div>
53369
54000
  `;
53370
54001
  }
54002
+ getUptimeIntensity(uptime) {
54003
+ if (uptime >= 99.9) return "uptime-high";
54004
+ if (uptime >= 99) return "uptime-mid";
54005
+ return "";
54006
+ }
53371
54007
  showDayTooltip(event, day) {
53372
54008
  const tooltip = this.shadowRoot?.getElementById("tooltip");
53373
54009
  if (!tooltip) return;
53374
54010
  const date = new Date(day.date);
53375
54011
  const dateStr = date.toLocaleDateString("en-US", {
53376
- weekday: "long",
53377
- year: "numeric",
53378
- month: "long",
54012
+ weekday: "short",
54013
+ month: "short",
53379
54014
  day: "numeric"
53380
54015
  });
53381
54016
  let statusText = day.status.replace(/_/g, " ");
53382
54017
  statusText = statusText.charAt(0).toUpperCase() + statusText.slice(1);
54018
+ const uptimeColor = day.uptime >= 99.9 ? "#22c55e" : day.uptime >= 99 ? "#fbbf24" : "#f87171";
53383
54019
  tooltip.innerHTML = `
53384
54020
  <div class="tooltip-date">${dateStr}</div>
53385
- <div class="tooltip-stat">Status: ${statusText}</div>
53386
- <div class="tooltip-stat">Uptime: ${day.uptime.toFixed(2)}%</div>
53387
- ${day.incidents > 0 ? `<div class="tooltip-stat">Incidents: ${day.incidents}</div>` : ""}
53388
- ${day.totalDowntime > 0 ? `<div class="tooltip-stat">Downtime: ${day.totalDowntime} min</div>` : ""}
54021
+ <div class="tooltip-stat">
54022
+ <span style="display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: ${uptimeColor};"></span>
54023
+ ${statusText}
54024
+ </div>
54025
+ <div class="tooltip-stat">Uptime: <strong>${day.uptime.toFixed(2)}%</strong></div>
54026
+ ${day.incidents > 0 ? `<div class="tooltip-stat">Incidents: <strong>${day.incidents}</strong></div>` : ""}
54027
+ ${day.totalDowntime > 0 ? `<div class="tooltip-stat">Downtime: <strong>${day.totalDowntime}m</strong></div>` : ""}
54028
+ <div class="tooltip-uptime-bar">
54029
+ <div class="tooltip-uptime-fill" style="width: ${day.uptime}%; background: ${uptimeColor};"></div>
54030
+ </div>
53389
54031
  `;
53390
54032
  const rect = event.target.getBoundingClientRect();
53391
54033
  const containerRect = this.getBoundingClientRect();
53392
54034
  tooltip.style.left = `${rect.left - containerRect.left + rect.width / 2}px`;
53393
- tooltip.style.top = `${rect.top - containerRect.top - 80}px`;
53394
- tooltip.style.transform = "translateX(-50%)";
54035
+ tooltip.style.top = `${rect.top - containerRect.top - 10}px`;
54036
+ tooltip.style.transform = "translateX(-50%) translateY(-100%)";
53395
54037
  tooltip.classList.add("visible");
53396
54038
  }
53397
54039
  hideTooltip() {
@@ -53434,242 +54076,402 @@ __publicField(UplStatuspageStatusmonth, "styles", [
53434
54076
  commonStyles,
53435
54077
  i`
53436
54078
  :host {
53437
- position: relative;
53438
- display: block;
53439
- background: transparent;
53440
- font-family: ${r(fonts.base)};
53441
- color: ${colors.text.primary};
53442
- }
53443
-
53444
- .container {
53445
- max-width: 1200px;
53446
- margin: 0 auto;
53447
- padding: 0 ${r(spacing.lg)} ${r(spacing.lg)} ${r(spacing.lg)};
53448
- }
54079
+ position: relative;
54080
+ display: block;
54081
+ background: transparent;
54082
+ font-family: ${r(fonts.base)};
54083
+ color: ${colors.text.primary};
54084
+ }
53449
54085
 
53450
- .mainbox {
53451
- display: grid;
53452
- grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
53453
- gap: ${r(spacing.lg)};
53454
- }
54086
+ .container {
54087
+ max-width: 1200px;
54088
+ margin: 0 auto;
54089
+ padding: 0 ${r(spacing.lg)} ${r(spacing.lg)} ${r(spacing.lg)};
54090
+ }
53455
54091
 
53456
- .statusMonth {
53457
- background: ${cssManager.bdTheme("#ffffff", "#0a0a0a")};
53458
- padding: ${r(spacing.lg)};
53459
- border-radius: ${r(borderRadius.base)};
53460
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
53461
- position: relative;
53462
- transition: all 0.2s ease;
53463
- display: flex;
53464
- flex-direction: column;
53465
- min-height: 280px;
53466
- box-shadow: ${cssManager.bdTheme("0 1px 2px 0 rgba(0, 0, 0, 0.05)", "none")};
53467
- }
54092
+ .mainbox {
54093
+ display: grid;
54094
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
54095
+ gap: ${r(spacing.lg)};
54096
+ }
53468
54097
 
53469
- .statusMonth:hover {
53470
- border-color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
53471
- box-shadow: ${cssManager.bdTheme("0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", "0 0 0 1px rgba(255, 255, 255, 0.1)")};
53472
- }
54098
+ /* Month card with entrance animation */
54099
+ .statusMonth {
54100
+ background: ${colors.background.card};
54101
+ padding: ${r(spacing.lg)};
54102
+ border-radius: ${r(borderRadius.lg)};
54103
+ border: 1px solid ${colors.border.default};
54104
+ position: relative;
54105
+ transition: all ${r(durations.normal)} ${r(easings.default)};
54106
+ display: flex;
54107
+ flex-direction: column;
54108
+ min-height: 280px;
54109
+ box-shadow: ${r(shadows.sm)};
54110
+ animation: fadeInUp 0.5s ${r(easings.default)} both;
54111
+ }
53473
54112
 
53474
- .month-header {
53475
- font-size: 13px;
53476
- font-weight: 600;
53477
- margin-bottom: ${r(spacing.md)};
53478
- color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
53479
- letter-spacing: 0.02em;
53480
- text-transform: uppercase;
53481
- }
54113
+ .statusMonth:nth-child(1) { animation-delay: 0ms; }
54114
+ .statusMonth:nth-child(2) { animation-delay: 100ms; }
54115
+ .statusMonth:nth-child(3) { animation-delay: 200ms; }
54116
+ .statusMonth:nth-child(4) { animation-delay: 300ms; }
54117
+ .statusMonth:nth-child(5) { animation-delay: 400ms; }
53482
54118
 
53483
- .days-container {
53484
- flex: 1;
53485
- display: flex;
53486
- flex-direction: column;
53487
- margin-bottom: ${r(spacing.lg)};
54119
+ @keyframes fadeInUp {
54120
+ from {
54121
+ opacity: 0;
54122
+ transform: translateY(16px);
53488
54123
  }
53489
-
53490
- .days-grid {
53491
- display: grid;
53492
- grid-template-columns: repeat(7, 1fr);
53493
- gap: 3px;
53494
- width: 100%;
54124
+ to {
54125
+ opacity: 1;
54126
+ transform: translateY(0);
53495
54127
  }
54128
+ }
53496
54129
 
53497
- .weekday-label {
53498
- font-size: 10px;
53499
- text-align: center;
53500
- color: ${cssManager.bdTheme("#9ca3af", "#71717a")};
53501
- font-weight: 500;
53502
- height: 20px;
53503
- line-height: 20px;
53504
- margin-bottom: ${r(spacing.sm)};
53505
- text-transform: uppercase;
53506
- }
54130
+ .statusMonth:hover {
54131
+ border-color: ${colors.border.muted};
54132
+ box-shadow: ${r(shadows.md)};
54133
+ transform: translateY(-2px);
54134
+ }
53507
54135
 
53508
- .statusDay {
53509
- aspect-ratio: 1;
53510
- border-radius: 4px;
53511
- cursor: pointer;
53512
- transition: all 0.15s ease;
53513
- position: relative;
53514
- }
54136
+ .month-header {
54137
+ font-size: 12px;
54138
+ font-weight: 600;
54139
+ margin-bottom: ${r(spacing.md)};
54140
+ color: ${colors.text.primary};
54141
+ letter-spacing: 0.04em;
54142
+ text-transform: uppercase;
54143
+ display: flex;
54144
+ align-items: center;
54145
+ gap: 8px;
54146
+ }
53515
54147
 
53516
- .statusDay:hover:not(.empty) {
53517
- transform: scale(1.15);
53518
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
53519
- z-index: 1;
53520
- }
54148
+ .month-header .current-badge {
54149
+ font-size: 9px;
54150
+ padding: 2px 6px;
54151
+ background: ${colors.status.operational};
54152
+ color: white;
54153
+ border-radius: ${r(borderRadius.full)};
54154
+ font-weight: 500;
54155
+ letter-spacing: 0.02em;
54156
+ }
53521
54157
 
53522
- .statusDay.operational {
53523
- background: #22c55e;
53524
- }
54158
+ .days-container {
54159
+ flex: 1;
54160
+ display: flex;
54161
+ flex-direction: column;
54162
+ margin-bottom: ${r(spacing.lg)};
54163
+ }
53525
54164
 
53526
- .statusDay.degraded {
53527
- background: #fbbf24;
53528
- }
54165
+ .days-grid {
54166
+ display: grid;
54167
+ grid-template-columns: repeat(7, 1fr);
54168
+ gap: 4px;
54169
+ width: 100%;
54170
+ }
53529
54171
 
53530
- .statusDay.partial_outage {
53531
- background: #f87171;
53532
- }
54172
+ .weekday-label {
54173
+ font-size: 9px;
54174
+ text-align: center;
54175
+ color: ${colors.text.muted};
54176
+ font-weight: 600;
54177
+ height: 20px;
54178
+ line-height: 20px;
54179
+ margin-bottom: ${r(spacing.xs)};
54180
+ text-transform: uppercase;
54181
+ letter-spacing: 0.02em;
54182
+ }
54183
+
54184
+ /* Calendar day cell */
54185
+ .statusDay {
54186
+ aspect-ratio: 1;
54187
+ border-radius: 4px;
54188
+ cursor: pointer;
54189
+ transition: all ${r(durations.fast)} ${r(easings.default)};
54190
+ position: relative;
54191
+ animation: dayFadeIn 0.3s ${r(easings.default)} both;
54192
+ animation-delay: calc(var(--day-index, 0) * 15ms);
54193
+ }
53533
54194
 
53534
- .statusDay.major_outage {
53535
- background: #ef4444;
54195
+ @keyframes dayFadeIn {
54196
+ from {
54197
+ opacity: 0;
54198
+ transform: scale(0.8);
53536
54199
  }
53537
-
53538
- .statusDay.maintenance {
53539
- background: #60a5fa;
54200
+ to {
54201
+ opacity: 1;
54202
+ transform: scale(1);
53540
54203
  }
54204
+ }
53541
54205
 
53542
- .statusDay.no-data {
53543
- background: ${cssManager.bdTheme("#e5e7eb", "#27272a")};
53544
- opacity: 0.6;
53545
- }
54206
+ .statusDay:hover:not(.empty) {
54207
+ transform: scale(1.2);
54208
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
54209
+ z-index: 2;
54210
+ }
53546
54211
 
53547
- .statusDay.empty {
53548
- background: transparent;
53549
- cursor: default;
53550
- pointer-events: none;
53551
- }
54212
+ /* Current day highlight */
54213
+ .statusDay.today {
54214
+ box-shadow: 0 0 0 2px ${colors.text.primary};
54215
+ z-index: 1;
54216
+ }
53552
54217
 
53553
- .overall-uptime {
53554
- font-size: 12px;
53555
- margin-top: auto;
53556
- padding-top: ${r(spacing.md)};
53557
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
53558
- display: flex;
53559
- flex-direction: column;
53560
- gap: 6px;
53561
- border-top: 1px solid ${cssManager.bdTheme("#f3f4f6", "#1f1f1f")};
53562
- }
54218
+ .statusDay.today:hover {
54219
+ box-shadow: 0 0 0 2px ${colors.text.primary}, 0 4px 8px rgba(0, 0, 0, 0.15);
54220
+ }
53563
54221
 
53564
- .uptime-stat {
53565
- display: flex;
53566
- justify-content: space-between;
53567
- align-items: center;
53568
- }
53569
-
53570
- .uptime-value {
53571
- font-weight: 600;
53572
- color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
53573
- font-variant-numeric: tabular-nums;
53574
- font-size: 13px;
53575
- }
54222
+ /* Status colors with intensity variations based on uptime */
54223
+ .statusDay.operational {
54224
+ background: ${colors.status.operational};
54225
+ }
53576
54226
 
53577
- .loading-skeleton {
53578
- display: flex;
53579
- flex-direction: column;
53580
- gap: ${r(spacing.sm)};
53581
- height: 100%;
53582
- }
53583
-
53584
- .skeleton-header {
53585
- height: 20px;
53586
- width: 80px;
53587
- background: ${cssManager.bdTheme("#f3f4f6", "#27272a")};
53588
- border-radius: 4px;
53589
- animation: pulse 2s infinite;
53590
- }
53591
-
53592
- .skeleton-grid {
53593
- flex: 1;
53594
- display: grid;
53595
- grid-template-columns: repeat(7, 1fr);
53596
- gap: 2px;
53597
- }
53598
-
53599
- .skeleton-day {
53600
- background: ${cssManager.bdTheme("#f3f4f6", "#27272a")};
53601
- border-radius: 2px;
53602
- animation: pulse 2s infinite;
53603
- animation-delay: calc(var(--index) * 0.05s);
53604
- }
53605
-
53606
- @keyframes pulse {
53607
- 0%, 100% { opacity: 1; }
53608
- 50% { opacity: 0.5; }
53609
- }
54227
+ .statusDay.operational.uptime-high {
54228
+ background: ${cssManager.bdTheme("#22c55e", "#22c55e")};
54229
+ }
53610
54230
 
53611
- @keyframes loading {
53612
- 0% { transform: translateX(-100%); }
53613
- 100% { transform: translateX(200%); }
53614
- }
54231
+ .statusDay.operational.uptime-mid {
54232
+ background: ${cssManager.bdTheme("#4ade80", "#4ade80")};
54233
+ }
53615
54234
 
53616
- .tooltip {
53617
- position: absolute;
53618
- background: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
53619
- color: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
53620
- padding: 8px 12px;
53621
- border-radius: 4px;
53622
- font-size: 12px;
53623
- pointer-events: none;
53624
- opacity: 0;
53625
- transition: opacity 0.15s;
53626
- z-index: 50;
53627
- white-space: nowrap;
53628
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
53629
- line-height: 1.5;
53630
- }
54235
+ .statusDay.degraded {
54236
+ background: ${colors.status.degraded};
54237
+ }
53631
54238
 
53632
- .tooltip.visible {
53633
- opacity: 1;
53634
- }
53635
-
53636
- .tooltip-date {
53637
- font-weight: 500;
53638
- margin-bottom: 4px;
53639
- }
53640
-
53641
- .tooltip-stat {
53642
- font-size: 11px;
53643
- opacity: 0.9;
54239
+ .statusDay.partial_outage {
54240
+ background: ${colors.status.partial};
54241
+ }
54242
+
54243
+ .statusDay.major_outage {
54244
+ background: ${colors.status.major};
54245
+ animation: dayFadeIn 0.3s ${r(easings.default)} both,
54246
+ majorOutagePulse 2s ease-in-out infinite;
54247
+ }
54248
+
54249
+ @keyframes majorOutagePulse {
54250
+ 0%, 100% { opacity: 1; }
54251
+ 50% { opacity: 0.8; }
54252
+ }
54253
+
54254
+ .statusDay.maintenance {
54255
+ background: ${colors.status.maintenance};
54256
+ }
54257
+
54258
+ .statusDay.no-data {
54259
+ background: ${colors.background.muted};
54260
+ opacity: 0.5;
54261
+ }
54262
+
54263
+ .statusDay.empty {
54264
+ background: transparent;
54265
+ cursor: default;
54266
+ pointer-events: none;
54267
+ animation: none;
54268
+ }
54269
+
54270
+ /* Incident count indicator */
54271
+ .incident-count {
54272
+ position: absolute;
54273
+ top: 50%;
54274
+ left: 50%;
54275
+ transform: translate(-50%, -50%);
54276
+ font-size: 8px;
54277
+ font-weight: 700;
54278
+ color: white;
54279
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
54280
+ line-height: 1;
54281
+ }
54282
+
54283
+ /* Overall uptime footer */
54284
+ .overall-uptime {
54285
+ font-size: 12px;
54286
+ margin-top: auto;
54287
+ padding-top: ${r(spacing.md)};
54288
+ color: ${colors.text.secondary};
54289
+ display: flex;
54290
+ flex-direction: column;
54291
+ gap: 8px;
54292
+ border-top: 1px solid ${colors.border.default};
54293
+ }
54294
+
54295
+ .uptime-stat {
54296
+ display: flex;
54297
+ justify-content: space-between;
54298
+ align-items: center;
54299
+ }
54300
+
54301
+ .uptime-value {
54302
+ font-weight: 600;
54303
+ color: ${colors.text.primary};
54304
+ font-variant-numeric: tabular-nums;
54305
+ font-size: 13px;
54306
+ }
54307
+
54308
+ .uptime-value.good {
54309
+ color: ${colors.status.operational};
54310
+ }
54311
+
54312
+ .uptime-value.warning {
54313
+ color: ${colors.status.degraded};
54314
+ }
54315
+
54316
+ .uptime-value.bad {
54317
+ color: ${colors.status.partial};
54318
+ }
54319
+
54320
+ /* Uptime bar visualization */
54321
+ .uptime-bar {
54322
+ height: 4px;
54323
+ background: ${colors.background.muted};
54324
+ border-radius: 2px;
54325
+ overflow: hidden;
54326
+ margin-top: 4px;
54327
+ }
54328
+
54329
+ .uptime-bar-fill {
54330
+ height: 100%;
54331
+ border-radius: 2px;
54332
+ transition: width ${r(durations.slow)} ${r(easings.default)};
54333
+ }
54334
+
54335
+ .uptime-bar-fill.good {
54336
+ background: ${colors.status.operational};
54337
+ }
54338
+
54339
+ .uptime-bar-fill.warning {
54340
+ background: ${colors.status.degraded};
54341
+ }
54342
+
54343
+ .uptime-bar-fill.bad {
54344
+ background: ${colors.status.partial};
54345
+ }
54346
+
54347
+ /* Loading skeleton */
54348
+ .loading-skeleton {
54349
+ display: flex;
54350
+ flex-direction: column;
54351
+ gap: ${r(spacing.sm)};
54352
+ height: 100%;
54353
+ }
54354
+
54355
+ .skeleton-header {
54356
+ height: 20px;
54357
+ width: 80px;
54358
+ background: ${colors.background.muted};
54359
+ border-radius: 4px;
54360
+ animation: shimmer 1.5s infinite;
54361
+ }
54362
+
54363
+ .skeleton-grid {
54364
+ flex: 1;
54365
+ display: grid;
54366
+ grid-template-columns: repeat(7, 1fr);
54367
+ gap: 3px;
54368
+ }
54369
+
54370
+ .skeleton-day {
54371
+ background: ${colors.background.muted};
54372
+ border-radius: 3px;
54373
+ animation: shimmer 1.5s infinite;
54374
+ animation-delay: calc(var(--index) * 30ms);
54375
+ }
54376
+
54377
+ @keyframes shimmer {
54378
+ 0% { opacity: 0.5; }
54379
+ 50% { opacity: 1; }
54380
+ 100% { opacity: 0.5; }
54381
+ }
54382
+
54383
+ /* Tooltip */
54384
+ .tooltip {
54385
+ position: absolute;
54386
+ background: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
54387
+ color: ${cssManager.bdTheme("#fafafa", "#0a0a0a")};
54388
+ padding: 10px 14px;
54389
+ border-radius: ${r(borderRadius.base)};
54390
+ font-size: 12px;
54391
+ pointer-events: none;
54392
+ opacity: 0;
54393
+ transition: opacity ${r(durations.fast)} ${r(easings.default)},
54394
+ transform ${r(durations.fast)} ${r(easings.default)};
54395
+ z-index: 50;
54396
+ white-space: nowrap;
54397
+ box-shadow: ${r(shadows.lg)};
54398
+ line-height: 1.5;
54399
+ transform: translateX(-50%) translateY(4px);
54400
+ }
54401
+
54402
+ .tooltip.visible {
54403
+ opacity: 1;
54404
+ transform: translateX(-50%) translateY(0);
54405
+ }
54406
+
54407
+ .tooltip-date {
54408
+ font-weight: 600;
54409
+ margin-bottom: 6px;
54410
+ font-size: 13px;
54411
+ }
54412
+
54413
+ .tooltip-stat {
54414
+ font-size: 11px;
54415
+ opacity: 0.85;
54416
+ display: flex;
54417
+ align-items: center;
54418
+ gap: 6px;
54419
+ }
54420
+
54421
+ .tooltip-stat + .tooltip-stat {
54422
+ margin-top: 2px;
54423
+ }
54424
+
54425
+ .tooltip-uptime-bar {
54426
+ height: 3px;
54427
+ width: 60px;
54428
+ background: rgba(128, 128, 128, 0.3);
54429
+ border-radius: 2px;
54430
+ overflow: hidden;
54431
+ margin-top: 8px;
54432
+ }
54433
+
54434
+ .tooltip-uptime-fill {
54435
+ height: 100%;
54436
+ border-radius: 2px;
54437
+ }
54438
+
54439
+ .no-data-message {
54440
+ grid-column: 1 / -1;
54441
+ text-align: center;
54442
+ padding: ${r(spacing["2xl"])};
54443
+ color: ${colors.text.secondary};
54444
+ animation: fadeInUp 0.4s ${r(easings.default)} both;
54445
+ }
54446
+
54447
+ @media (max-width: 640px) {
54448
+ .container {
54449
+ padding: 0 ${r(spacing.md)} ${r(spacing.md)} ${r(spacing.md)};
53644
54450
  }
53645
54451
 
53646
- .no-data-message {
53647
- grid-column: 1 / -1;
53648
- text-align: center;
53649
- padding: ${r(spacing["2xl"])};
53650
- color: ${colors.text.secondary};
54452
+ .mainbox {
54453
+ grid-template-columns: 1fr;
54454
+ gap: ${r(spacing.md)};
53651
54455
  }
53652
54456
 
53653
- @media (max-width: 640px) {
53654
- .container {
53655
- padding: 0 ${r(spacing.md)} ${r(spacing.md)} ${r(spacing.md)};
53656
- }
54457
+ .statusMonth {
54458
+ padding: ${r(spacing.md)};
54459
+ min-height: 260px;
54460
+ }
53657
54461
 
53658
- .mainbox {
53659
- grid-template-columns: 1fr;
53660
- gap: ${r(spacing.md)};
53661
- }
54462
+ .days-grid {
54463
+ gap: 3px;
54464
+ }
53662
54465
 
53663
- .statusMonth {
53664
- padding: ${r(spacing.md)};
53665
- min-height: 260px;
53666
- }
54466
+ .statusDay:hover:not(.empty) {
54467
+ transform: scale(1.1);
54468
+ }
53667
54469
 
53668
- .loading-skeleton {
53669
- height: 180px;
53670
- padding: ${r(spacing.md)};
53671
- }
54470
+ .loading-skeleton {
54471
+ height: 180px;
54472
+ padding: ${r(spacing.md)};
53672
54473
  }
54474
+ }
53673
54475
  `
53674
54476
  ]);
53675
54477
  __runInitializers(_init9, 1, UplStatuspageStatusmonth);
@@ -53982,18 +54784,23 @@ var UplStatuspageStatsgrid = class extends (_a10 = DeesElement, _uptime_dec = [n
53982
54784
  </div>
53983
54785
  ` : x`
53984
54786
  <div class="stats-grid">
53985
- <div class="stat-card">
54787
+ <div class="stat-card ${this.currentStatus}">
53986
54788
  <div class="stat-label">
53987
54789
  <span class="status-indicator ${this.currentStatus}"></span>
53988
54790
  Current Status
53989
54791
  </div>
53990
- <div class="stat-value">
54792
+ <div class="stat-value ${this.currentStatus}">
53991
54793
  ${this.formatStatus(this.currentStatus)}
53992
54794
  </div>
53993
54795
  </div>
53994
54796
 
53995
- <div class="stat-card">
53996
- <div class="stat-label">Uptime</div>
54797
+ <div class="stat-card ${this.getUptimeCardStatus()}">
54798
+ <div class="stat-label">
54799
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
54800
+ <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline>
54801
+ </svg>
54802
+ Uptime
54803
+ </div>
53997
54804
  <div class="stat-value">
53998
54805
  ${this.uptime.toFixed(2)}<span class="stat-unit">%</span>
53999
54806
  </div>
@@ -54002,21 +54809,34 @@ var UplStatuspageStatsgrid = class extends (_a10 = DeesElement, _uptime_dec = [n
54002
54809
  </div>
54003
54810
  </div>
54004
54811
 
54005
- <div class="stat-card">
54006
- <div class="stat-label">Avg Response Time</div>
54812
+ <div class="stat-card ${this.getResponseCardStatus()}">
54813
+ <div class="stat-label">
54814
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
54815
+ <circle cx="12" cy="12" r="10"></circle>
54816
+ <polyline points="12 6 12 12 16 14"></polyline>
54817
+ </svg>
54818
+ Avg Response
54819
+ </div>
54007
54820
  <div class="stat-value">
54008
54821
  ${this.avgResponseTime}<span class="stat-unit">ms</span>
54009
54822
  </div>
54010
54823
  ${this.renderResponseChange()}
54011
54824
  </div>
54012
54825
 
54013
- <div class="stat-card">
54014
- <div class="stat-label">Incidents</div>
54826
+ <div class="stat-card ${this.getIncidentCardStatus()}">
54827
+ <div class="stat-label">
54828
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
54829
+ <path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path>
54830
+ <line x1="12" y1="9" x2="12" y2="13"></line>
54831
+ <line x1="12" y1="17" x2="12.01" y2="17"></line>
54832
+ </svg>
54833
+ Incidents
54834
+ </div>
54015
54835
  <div class="stat-value">
54016
54836
  ${this.totalIncidents}
54017
54837
  </div>
54018
- <div class="stat-change neutral">
54019
- ${this.affectedServices} of ${this.totalServices} services
54838
+ <div class="stat-change ${this.affectedServices === 0 ? "positive" : "negative"}">
54839
+ ${this.affectedServices === 0 ? "All services ok." : `${this.affectedServices} of ${this.totalServices} services affected`}
54020
54840
  </div>
54021
54841
  </div>
54022
54842
  </div>
@@ -54044,6 +54864,22 @@ var UplStatuspageStatsgrid = class extends (_a10 = DeesElement, _uptime_dec = [n
54044
54864
  </div>
54045
54865
  `;
54046
54866
  }
54867
+ getUptimeCardStatus() {
54868
+ if (this.uptime >= 99.9) return "operational";
54869
+ if (this.uptime >= 99) return "degraded";
54870
+ return "partial_outage";
54871
+ }
54872
+ getResponseCardStatus() {
54873
+ if (this.avgResponseTime < 200) return "operational";
54874
+ if (this.avgResponseTime < 500) return "degraded";
54875
+ return "partial_outage";
54876
+ }
54877
+ getIncidentCardStatus() {
54878
+ if (this.affectedServices === 0) return "operational";
54879
+ if (this.currentStatus === "major_outage") return "major_outage";
54880
+ if (this.currentStatus === "partial_outage") return "partial_outage";
54881
+ return "degraded";
54882
+ }
54047
54883
  };
54048
54884
  _init10 = __decoratorStart(_a10);
54049
54885
  _uptime = new WeakMap();
@@ -54088,66 +54924,159 @@ __publicField(UplStatuspageStatsgrid, "styles", [
54088
54924
  }
54089
54925
 
54090
54926
  .stat-card {
54091
- background: ${cssManager.bdTheme("#ffffff", "#0a0a0a")};
54092
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
54093
- border-radius: ${r(borderRadius.base)};
54927
+ background: ${colors.background.card};
54928
+ border: 1px solid ${colors.border.default};
54929
+ border-radius: ${r(borderRadius.lg)};
54094
54930
  padding: ${r(spacing.lg)};
54095
- transition: all 0.2s ease;
54931
+ transition: all ${r(durations.normal)} ${r(easings.default)};
54932
+ position: relative;
54933
+ overflow: hidden;
54934
+ animation: fadeInUp 0.4s ${r(easings.default)} both;
54935
+ }
54936
+
54937
+ .stat-card:nth-child(1) { animation-delay: 0ms; }
54938
+ .stat-card:nth-child(2) { animation-delay: 50ms; }
54939
+ .stat-card:nth-child(3) { animation-delay: 100ms; }
54940
+ .stat-card:nth-child(4) { animation-delay: 150ms; }
54941
+
54942
+ @keyframes fadeInUp {
54943
+ from {
54944
+ opacity: 0;
54945
+ transform: translateY(12px);
54946
+ }
54947
+ to {
54948
+ opacity: 1;
54949
+ transform: translateY(0);
54950
+ }
54951
+ }
54952
+
54953
+ /* Status-colored top accent */
54954
+ .stat-card::before {
54955
+ content: '';
54956
+ position: absolute;
54957
+ top: 0;
54958
+ left: 0;
54959
+ right: 0;
54960
+ height: 3px;
54961
+ background: ${colors.border.muted};
54962
+ transition: all ${r(durations.fast)} ${r(easings.default)};
54963
+ }
54964
+
54965
+ /* Dynamic status-based accent colors for all stat cards */
54966
+ .stat-card.operational::before {
54967
+ background: ${colors.status.operational};
54968
+ }
54969
+
54970
+ .stat-card.degraded::before {
54971
+ background: ${colors.status.degraded};
54972
+ }
54973
+
54974
+ .stat-card.partial_outage::before {
54975
+ background: ${colors.status.partial};
54976
+ }
54977
+
54978
+ .stat-card.major_outage::before {
54979
+ background: ${colors.status.major};
54980
+ }
54981
+
54982
+ .stat-card.maintenance::before {
54983
+ background: ${colors.status.maintenance};
54096
54984
  }
54097
54985
 
54098
54986
  .stat-card:hover {
54099
- border-color: ${cssManager.bdTheme("#d1d5db", "#3f3f46")};
54100
- box-shadow: ${cssManager.bdTheme(
54101
- "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",
54102
- "0 0 0 1px rgba(255, 255, 255, 0.1)"
54103
- )};
54987
+ border-color: ${colors.border.muted};
54988
+ box-shadow: ${r(shadows.md)};
54989
+ transform: translateY(-3px);
54990
+ }
54991
+
54992
+ .stat-card:hover::before {
54993
+ height: 4px;
54104
54994
  }
54105
54995
 
54106
54996
  .stat-label {
54107
- font-size: 12px;
54108
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
54997
+ font-size: 11px;
54998
+ color: ${colors.text.muted};
54109
54999
  text-transform: uppercase;
54110
- letter-spacing: 0.05em;
54111
- font-weight: 500;
55000
+ letter-spacing: 0.06em;
55001
+ font-weight: 600;
54112
55002
  margin-bottom: ${r(spacing.sm)};
54113
55003
  display: flex;
54114
55004
  align-items: center;
54115
- gap: ${r(spacing.xs)};
55005
+ gap: 6px;
55006
+ }
55007
+
55008
+ .stat-label svg {
55009
+ width: 14px;
55010
+ height: 14px;
55011
+ opacity: 0.7;
54116
55012
  }
54117
55013
 
54118
55014
  .stat-value {
54119
- font-size: 24px;
54120
- font-weight: 600;
54121
- color: ${cssManager.bdTheme("#0a0a0a", "#fafafa")};
55015
+ font-size: 28px;
55016
+ font-weight: 700;
55017
+ color: ${colors.text.primary};
54122
55018
  font-variant-numeric: tabular-nums;
54123
55019
  line-height: 1.2;
55020
+ letter-spacing: -0.02em;
55021
+ transition: transform ${r(durations.fast)} ${r(easings.default)};
55022
+ }
55023
+
55024
+ .stat-card:hover .stat-value {
55025
+ transform: scale(1.02);
54124
55026
  }
54125
55027
 
54126
55028
  .stat-unit {
54127
- font-size: 14px;
54128
- font-weight: 400;
54129
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
54130
- margin-left: 4px;
55029
+ font-size: 16px;
55030
+ font-weight: 500;
55031
+ color: ${colors.text.secondary};
55032
+ margin-left: 2px;
54131
55033
  }
54132
55034
 
54133
55035
  .stat-change {
54134
55036
  font-size: 12px;
54135
- margin-top: ${r(spacing.xs)};
55037
+ margin-top: ${r(spacing.sm)};
54136
55038
  display: flex;
54137
55039
  align-items: center;
54138
55040
  gap: 4px;
55041
+ padding: 4px 8px;
55042
+ border-radius: ${r(borderRadius.sm)};
55043
+ width: fit-content;
54139
55044
  }
54140
55045
 
54141
55046
  .stat-change.positive {
54142
- color: ${cssManager.bdTheme("#10b981", "#10b981")};
55047
+ color: ${colors.status.operational};
55048
+ background: ${cssManager.bdTheme("rgba(22, 163, 74, 0.08)", "rgba(34, 197, 94, 0.12)")};
54143
55049
  }
54144
55050
 
54145
55051
  .stat-change.negative {
54146
- color: ${cssManager.bdTheme("#ef4444", "#ef4444")};
55052
+ color: ${colors.status.partial};
55053
+ background: ${cssManager.bdTheme("rgba(239, 68, 68, 0.08)", "rgba(248, 113, 113, 0.12)")};
54147
55054
  }
54148
55055
 
54149
55056
  .stat-change.neutral {
54150
- color: ${cssManager.bdTheme("#6b7280", "#a1a1aa")};
55057
+ color: ${colors.text.muted};
55058
+ background: ${colors.background.muted};
55059
+ }
55060
+
55061
+ /* Status text color variations */
55062
+ .stat-value.operational {
55063
+ color: ${colors.status.operational};
55064
+ }
55065
+
55066
+ .stat-value.degraded {
55067
+ color: ${colors.status.degraded};
55068
+ }
55069
+
55070
+ .stat-value.partial_outage {
55071
+ color: ${colors.status.partial};
55072
+ }
55073
+
55074
+ .stat-value.major_outage {
55075
+ color: ${colors.status.major};
55076
+ }
55077
+
55078
+ .stat-value.maintenance {
55079
+ color: ${colors.status.maintenance};
54151
55080
  }
54152
55081
 
54153
55082
  .loading-skeleton {
@@ -54157,61 +55086,102 @@ __publicField(UplStatuspageStatsgrid, "styles", [
54157
55086
  }
54158
55087
 
54159
55088
  .skeleton-card {
54160
- background: ${cssManager.bdTheme("#ffffff", "#0a0a0a")};
54161
- border: 1px solid ${cssManager.bdTheme("#e5e7eb", "#27272a")};
54162
- border-radius: ${r(borderRadius.base)};
55089
+ background: ${colors.background.card};
55090
+ border: 1px solid ${colors.border.default};
55091
+ border-radius: ${r(borderRadius.lg)};
54163
55092
  padding: ${r(spacing.lg)};
54164
- height: 100px;
55093
+ height: 110px;
55094
+ position: relative;
55095
+ overflow: hidden;
55096
+ }
55097
+
55098
+ .skeleton-card::before {
55099
+ content: '';
55100
+ position: absolute;
55101
+ top: 0;
55102
+ left: 0;
55103
+ right: 0;
55104
+ height: 3px;
55105
+ background: ${colors.background.muted};
54165
55106
  }
54166
55107
 
54167
55108
  .skeleton-label {
54168
- height: 14px;
55109
+ height: 12px;
54169
55110
  width: 80px;
54170
- background: ${cssManager.bdTheme("#f3f4f6", "#27272a")};
55111
+ background: ${colors.background.muted};
54171
55112
  border-radius: 4px;
54172
55113
  margin-bottom: ${r(spacing.sm)};
54173
- animation: pulse 2s infinite;
55114
+ animation: shimmer 1.5s infinite;
54174
55115
  }
54175
55116
 
54176
55117
  .skeleton-value {
54177
- height: 28px;
54178
- width: 120px;
54179
- background: ${cssManager.bdTheme("#f3f4f6", "#27272a")};
54180
- border-radius: 4px;
54181
- animation: pulse 2s infinite;
55118
+ height: 32px;
55119
+ width: 100px;
55120
+ background: ${colors.background.muted};
55121
+ border-radius: 6px;
55122
+ animation: shimmer 1.5s infinite;
54182
55123
  animation-delay: 0.1s;
54183
55124
  }
54184
55125
 
54185
- @keyframes pulse {
54186
- 0%, 100% { opacity: 1; }
54187
- 50% { opacity: 0.5; }
55126
+ .skeleton-change {
55127
+ height: 20px;
55128
+ width: 70px;
55129
+ background: ${colors.background.muted};
55130
+ border-radius: 4px;
55131
+ margin-top: ${r(spacing.sm)};
55132
+ animation: shimmer 1.5s infinite;
55133
+ animation-delay: 0.2s;
55134
+ }
55135
+
55136
+ @keyframes shimmer {
55137
+ 0% { opacity: 0.5; }
55138
+ 50% { opacity: 1; }
55139
+ 100% { opacity: 0.5; }
54188
55140
  }
54189
55141
 
54190
55142
  .status-indicator {
54191
55143
  display: inline-block;
54192
- width: 6px;
54193
- height: 6px;
55144
+ width: 8px;
55145
+ height: 8px;
54194
55146
  border-radius: 50%;
55147
+ flex-shrink: 0;
54195
55148
  }
54196
55149
 
54197
55150
  .status-indicator.operational {
54198
55151
  background: ${colors.status.operational};
55152
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(22, 163, 74, 0.2)", "rgba(34, 197, 94, 0.25)")};
55153
+ animation: statusPulse 2s ease-in-out infinite;
55154
+ }
55155
+
55156
+ @keyframes statusPulse {
55157
+ 0%, 100% { box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(22, 163, 74, 0.2)", "rgba(34, 197, 94, 0.25)")}; }
55158
+ 50% { box-shadow: 0 0 0 4px ${cssManager.bdTheme("rgba(22, 163, 74, 0.1)", "rgba(34, 197, 94, 0.15)")}; }
54199
55159
  }
54200
55160
 
54201
55161
  .status-indicator.degraded {
54202
55162
  background: ${colors.status.degraded};
55163
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(217, 119, 6, 0.2)", "rgba(251, 191, 36, 0.25)")};
54203
55164
  }
54204
55165
 
54205
55166
  .status-indicator.partial_outage {
54206
55167
  background: ${colors.status.partial};
55168
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(239, 68, 68, 0.2)", "rgba(248, 113, 113, 0.25)")};
54207
55169
  }
54208
55170
 
54209
55171
  .status-indicator.major_outage {
54210
55172
  background: ${colors.status.major};
55173
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(185, 28, 28, 0.2)", "rgba(239, 68, 68, 0.25)")};
55174
+ animation: majorPulse 1s ease-in-out infinite;
55175
+ }
55176
+
55177
+ @keyframes majorPulse {
55178
+ 0%, 100% { opacity: 1; }
55179
+ 50% { opacity: 0.6; }
54211
55180
  }
54212
55181
 
54213
55182
  .status-indicator.maintenance {
54214
55183
  background: ${colors.status.maintenance};
55184
+ box-shadow: 0 0 0 2px ${cssManager.bdTheme("rgba(37, 99, 235, 0.2)", "rgba(96, 165, 250, 0.25)")};
54215
55185
  }
54216
55186
 
54217
55187
  @media (max-width: 640px) {
@@ -54220,7 +55190,7 @@ __publicField(UplStatuspageStatsgrid, "styles", [
54220
55190
  }
54221
55191
 
54222
55192
  .stats-grid {
54223
- grid-template-columns: 1fr;
55193
+ grid-template-columns: repeat(2, 1fr);
54224
55194
  gap: ${r(spacing.sm)};
54225
55195
  }
54226
55196
 
@@ -54229,7 +55199,16 @@ __publicField(UplStatuspageStatsgrid, "styles", [
54229
55199
  }
54230
55200
 
54231
55201
  .stat-value {
54232
- font-size: 20px;
55202
+ font-size: 22px;
55203
+ }
55204
+
55205
+ .stat-label {
55206
+ font-size: 10px;
55207
+ }
55208
+
55209
+ .stat-label svg {
55210
+ width: 12px;
55211
+ height: 12px;
54233
55212
  }
54234
55213
  }
54235
55214
  `