pickit-color 1.0.1 → 1.0.4

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.
@@ -73,6 +73,8 @@
73
73
  border-radius: 6px;
74
74
  cursor: crosshair;
75
75
  overflow: hidden;
76
+ -ms-touch-action: none;
77
+ touch-action: none;
76
78
  }
77
79
  .colorpicker-saturation:focus {
78
80
  outline: 2px solid #3b82f6;
@@ -105,6 +107,13 @@
105
107
  transition: transform 0.1s ease;
106
108
  transition: transform 0.1s ease, -webkit-transform 0.1s ease;
107
109
  }
110
+ @media (pointer: coarse) {
111
+ .colorpicker-saturation-pointer {
112
+ width: 28px;
113
+ height: 28px;
114
+ border-width: 4px;
115
+ }
116
+ }
108
117
  @media (prefers-reduced-motion: reduce) {
109
118
  .colorpicker-saturation-pointer {
110
119
  -webkit-transition: none;
@@ -156,11 +165,13 @@
156
165
  -webkit-appearance: none;
157
166
  -moz-appearance: none;
158
167
  appearance: none;
159
- width: 100%;
160
- height: 8px;
161
- border-radius: 4px;
162
- outline: none;
163
- cursor: pointer;
168
+ -ms-touch-action: none;
169
+ touch-action: none;
170
+ }
171
+ @media (pointer: coarse) {
172
+ .colorpicker-slider {
173
+ height: 12px;
174
+ }
164
175
  }
165
176
  .colorpicker-slider:focus {
166
177
  -webkit-box-shadow: 0 0 0 2px #3b82f6;
@@ -182,6 +193,13 @@
182
193
  transition: transform 0.1s ease;
183
194
  transition: transform 0.1s ease, -webkit-transform 0.1s ease;
184
195
  }
196
+ @media (pointer: coarse) {
197
+ .colorpicker-slider::-webkit-slider-thumb {
198
+ width: 28px;
199
+ height: 28px;
200
+ border-width: 3px;
201
+ }
202
+ }
185
203
  .colorpicker-slider::-webkit-slider-thumb:hover {
186
204
  -webkit-transform: scale(1.1);
187
205
  transform: scale(1.1);
@@ -202,6 +220,18 @@
202
220
  transition: -webkit-transform 0.1s ease;
203
221
  transition: transform 0.1s ease;
204
222
  transition: transform 0.1s ease, -webkit-transform 0.1s ease;
223
+ background: #fff;
224
+ border: 2px solid #3b82f6;
225
+ cursor: pointer;
226
+ box-shadow: 0 2px 4px rgba(0,0,0,0.2);
227
+ transition: transform 0.1s ease;
228
+ }
229
+ @media (pointer: coarse) {
230
+ .colorpicker-slider::-moz-range-thumb {
231
+ width: 28px;
232
+ height: 28px;
233
+ border-width: 3px;
234
+ }
205
235
  }
206
236
  .colorpicker-slider::-moz-range-thumb:hover {
207
237
  transform: scale(1.1);
@@ -373,6 +403,12 @@
373
403
  -ms-flex-negative: 0;
374
404
  flex-shrink: 0;
375
405
  }
406
+ @media (pointer: coarse) {
407
+ .colorpicker-eyedropper-btn {
408
+ width: 44px;
409
+ height: 44px;
410
+ }
411
+ }
376
412
  .colorpicker-eyedropper-btn:hover {
377
413
  background: #f3f4f6;
378
414
  border-color: #3b82f6;
@@ -456,6 +492,11 @@
456
492
  position: relative;
457
493
  overflow: hidden;
458
494
  }
495
+ @media (pointer: coarse) {
496
+ .colorpicker-preset {
497
+ min-height: 44px;
498
+ }
499
+ }
459
500
  .colorpicker-preset::before {
460
501
  content: '';
461
502
  position: absolute;
@@ -475,6 +516,12 @@
475
516
  -webkit-box-shadow: 0 2px 8px rgba(0,0,0,0.15);
476
517
  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
477
518
  }
519
+ @media (pointer: coarse) {
520
+ .colorpicker-preset:hover {
521
+ -webkit-transform: scale(1.05);
522
+ transform: scale(1.05);
523
+ }
524
+ }
478
525
  .colorpicker-preset:focus {
479
526
  outline: none;
480
527
  border-color: #3b82f6;
@@ -497,6 +544,13 @@
497
544
  gap: 12px;
498
545
  padding: 8px 12px;
499
546
  background: #f9fafb;
547
+ min-height: 48px;
548
+ }
549
+ @media (pointer: coarse) {
550
+ .colorpicker-preset-list-item {
551
+ min-height: 56px;
552
+ padding: 12px;
553
+ }
500
554
  }
501
555
  .colorpicker-preset-list-item:hover {
502
556
  -webkit-transform: none;
@@ -1,4 +1,4 @@
1
- /* Pickit Color v1.0.1, @license Donationware */
1
+ /* Pickit Color v1.0.4, @license Donationware */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
4
4
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
@@ -152,9 +152,11 @@
152
152
  this.setupEventListeners();
153
153
  // Update display
154
154
  this.updateColorDisplay();
155
- // Open if inline
156
- if (this.options.inline) {
157
- this.open();
155
+ // Open if inline (without scrolling)
156
+ if (this.options.inline && this.container) {
157
+ this.isOpen = true;
158
+ this.container.style.display = "block";
159
+ this.options.onOpen();
158
160
  }
159
161
  };
160
162
  ColorPicker.prototype.buildColorPicker = function () {
@@ -171,10 +173,10 @@
171
173
  this.container.setAttribute("role", "dialog");
172
174
  this.container.setAttribute("aria-label", "Color picker");
173
175
  this.container.style.display = "none";
174
- var content = "\n <div class=\"colorpicker-content\">\n ".concat(!this.options.presetsOnly ? "\n ".concat(!this.options.sliderMode ? "\n <div class=\"colorpicker-saturation\" \n role=\"slider\" \n aria-label=\"".concat(this.options.ariaLabels.saturation, "\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow=\"").concat(this.currentColor.s, "\"\n tabindex=\"0\">\n <div class=\"colorpicker-saturation-overlay\"></div>\n <div class=\"colorpicker-saturation-pointer\" role=\"presentation\"></div>\n </div>\n ") : '', "\n \n <div class=\"colorpicker-controls\">\n <div class=\"colorpicker-sliders").concat(this.options.sliderMode ? ' colorpicker-sliders-only' : '', "\">\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-hue\">\n <span class=\"colorpicker-label\">").concat(this.options.ariaLabels.hue, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-hue\"\n class=\"colorpicker-slider colorpicker-hue-slider\"\n min=\"0\" \n max=\"360\" \n value=\"").concat(this.currentColor.h, "\"\n aria-label=\"").concat(this.options.ariaLabels.hue, "\"\n />\n </div>\n ").concat(this.options.sliderMode
175
- ? "\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-saturation\">\n <span class=\"colorpicker-label\">".concat(this.options.ariaLabels.saturation, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-saturation\"\n class=\"colorpicker-slider colorpicker-saturation-slider\"\n min=\"0\" \n max=\"100\" \n value=\"").concat(this.currentColor.s, "\"\n aria-label=\"").concat(this.options.ariaLabels.saturation, "\"\n />\n </div>\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-lightness\">\n <span class=\"colorpicker-label\">").concat(this.options.ariaLabels.lightness, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-lightness\"\n class=\"colorpicker-slider colorpicker-lightness-slider\"\n min=\"0\" \n max=\"100\" \n value=\"").concat(this.currentColor.l, "\"\n aria-label=\"").concat(this.options.ariaLabels.lightness, "\"\n />\n </div>\n ")
176
+ var content = "\n <div class=\"colorpicker-content\">\n ".concat(!this.options.presetsOnly ? "\n ".concat(!this.options.sliderMode ? "\n <div class=\"colorpicker-saturation\" \n role=\"slider\" \n aria-label=\"".concat(this.options.ariaLabels.saturation, "\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow=\"").concat(this.currentColor.s, "\"\n tabindex=\"0\">\n <div class=\"colorpicker-saturation-overlay\"></div>\n <div class=\"colorpicker-saturation-pointer\" role=\"presentation\"></div>\n </div>\n ") : '', "\n \n <div class=\"colorpicker-controls\">\n <div class=\"colorpicker-sliders").concat(this.options.sliderMode ? ' colorpicker-sliders-only' : '', "\">\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-hue\">\n <span class=\"colorpicker-label\">").concat(this.options.ariaLabels.hue, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-hue\"\n class=\"colorpicker-slider colorpicker-hue-slider\"\n min=\"0\" \n max=\"360\" \n value=\"").concat(this.currentColor.h, "\"\n aria-label=\"").concat(this.options.ariaLabels.hue, "\"\n tabindex=\"0\"\n />\n </div>\n ").concat(this.options.sliderMode
177
+ ? "\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-saturation\">\n <span class=\"colorpicker-label\">".concat(this.options.ariaLabels.saturation, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-saturation\"\n class=\"colorpicker-slider colorpicker-saturation-slider\"\n min=\"0\" \n max=\"100\" \n value=\"").concat(this.currentColor.s, "\"\n aria-label=\"").concat(this.options.ariaLabels.saturation, "\"\n tabindex=\"0\"\n />\n </div>\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-lightness\">\n <span class=\"colorpicker-label\">").concat(this.options.ariaLabels.lightness, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-lightness\"\n class=\"colorpicker-slider colorpicker-lightness-slider\"\n min=\"0\" \n max=\"100\" \n value=\"").concat(this.currentColor.l, "\"\n aria-label=\"").concat(this.options.ariaLabels.lightness, "\"\n tabindex=\"0\"\n />\n </div>\n ")
176
178
  : "", "\n ").concat(this.options.showAlpha
177
- ? "\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-alpha\">\n <span class=\"colorpicker-label\">".concat(this.options.ariaLabels.alpha, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-alpha\"\n class=\"colorpicker-slider colorpicker-alpha-slider\"\n min=\"0\" \n max=\"100\" \n value=\"").concat(this.currentColor.a * 100, "\"\n aria-label=\"").concat(this.options.ariaLabels.alpha, "\"\n />\n </div>\n ")
179
+ ? "\n <div class=\"colorpicker-slider-group\">\n <label for=\"colorpicker-alpha\">\n <span class=\"colorpicker-label\">".concat(this.options.ariaLabels.alpha, "</span>\n </label>\n <input \n type=\"range\" \n id=\"colorpicker-alpha\"\n class=\"colorpicker-slider colorpicker-alpha-slider\"\n min=\"0\" \n max=\"100\" \n value=\"").concat(this.currentColor.a * 100, "\"\n aria-label=\"").concat(this.options.ariaLabels.alpha, "\"\n tabindex=\"0\"\n />\n </div>\n ")
178
180
  : "", "\n </div>\n \n <div class=\"colorpicker-preview\">\n <div class=\"colorpicker-preview-color\" role=\"presentation\"></div>\n </div>\n </div>\n \n <div class=\"colorpicker-input-wrapper\">\n <label for=\"colorpicker-hex\">\n <span class=\"colorpicker-sr-only\">Color value</span>\n </label>\n <div class=\"colorpicker-input-row\">\n <input \n type=\"text\" \n id=\"colorpicker-hex\"\n class=\"colorpicker-input\"\n placeholder=\"").concat(this.getPlaceholder(), "\"\n aria-label=\"Color value in ").concat(this.options.format, " format\"\n />\n ").concat(this.options.eyeDropper
179
181
  ? "\n ".concat(this.supportsEyeDropper() ? "\n <button \n type=\"button\"\n class=\"colorpicker-eyedropper-btn\"\n aria-label=\"Pick color from screen\"\n title=\"Pick color from screen\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M2 22l1-1\"/>\n <path d=\"M8.5 16.5l-1-1\"/>\n <path d=\"M17 3l4 4\"/>\n <path d=\"M12 8l4 4\"/>\n <path d=\"M3 21l9-9\"/>\n <path d=\"M14.5 9.5l-1 1\"/>\n <path d=\"M20 14l-8 8\"/>\n </svg>\n </button>\n " : '', "\n <button \n type=\"button\"\n class=\"colorpicker-system-picker-btn\"\n aria-label=\"Open system color picker\"\n title=\"Open system color picker\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <path d=\"M12 2v20\"/>\n <path d=\"M2 12h20\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n </button>\n <input \n type=\"color\"\n class=\"colorpicker-system-picker-input\"\n style=\"position: absolute; opacity: 0; pointer-events: none; width: 0; height: 0;\"\n />\n ")
180
182
  : "", "\n </div>\n </div>\n ") : '', "\n \n ").concat(this.options.presetColors.length > 0
@@ -182,8 +184,8 @@
182
184
  .map(function (color, index) {
183
185
  var label = _this.options.presetLabels[index] || '';
184
186
  return _this.options.listView && label
185
- ? "\n <button \n type=\"button\"\n class=\"colorpicker-preset colorpicker-preset-list-item\" \n data-color=\"".concat(color, "\"\n aria-label=\"Select color ").concat(label, "\"\n >\n <span class=\"colorpicker-preset-color\" style=\"background-color: ").concat(color, "\"></span>\n <span class=\"colorpicker-preset-label\">").concat(label, "</span>\n </button>\n ")
186
- : "\n <button \n type=\"button\"\n class=\"colorpicker-preset\" \n style=\"background-color: ".concat(color, "\"\n data-color=\"").concat(color, "\"\n aria-label=\"Select color ").concat(label || color, "\"\n ></button>\n ");
187
+ ? "\n <button \n type=\"button\"\n class=\"colorpicker-preset colorpicker-preset-list-item\" \n data-color=\"".concat(color, "\"\n aria-label=\"Select color ").concat(label, "\"\n tabindex=\"").concat(index === 0 ? '0' : '-1', "\"\n >\n <span class=\"colorpicker-preset-color\" style=\"background-color: ").concat(color, "\"></span>\n <span class=\"colorpicker-preset-label\">").concat(label, "</span>\n </button>\n ")
188
+ : "\n <button \n type=\"button\"\n class=\"colorpicker-preset\" \n style=\"background-color: ".concat(color, "\"\n data-color=\"").concat(color, "\"\n aria-label=\"Select color ").concat(label || color, "\"\n tabindex=\"").concat(index === 0 ? '0' : '-1', "\"\n ></button>\n ");
187
189
  })
188
190
  .join(""), "\n </div>\n ")
189
191
  : "", "\n </div>\n ");
@@ -328,6 +330,9 @@
328
330
  _this.updateColorDisplay();
329
331
  _this.announceColorChange();
330
332
  });
333
+ this.hueSlider.addEventListener("touchstart", function (e) {
334
+ _this.handleSliderTouch(e, _this.hueSlider, 'h', 0, 360);
335
+ });
331
336
  }
332
337
  // Saturation slider (sliderMode only)
333
338
  if (this.saturationSlider) {
@@ -336,6 +341,9 @@
336
341
  _this.updateColorDisplay();
337
342
  _this.announceColorChange();
338
343
  });
344
+ this.saturationSlider.addEventListener("touchstart", function (e) {
345
+ _this.handleSliderTouch(e, _this.saturationSlider, 's', 0, 100);
346
+ });
339
347
  }
340
348
  // Lightness slider (sliderMode only)
341
349
  if (this.lightnessSlider) {
@@ -344,6 +352,9 @@
344
352
  _this.updateColorDisplay();
345
353
  _this.announceColorChange();
346
354
  });
355
+ this.lightnessSlider.addEventListener("touchstart", function (e) {
356
+ _this.handleSliderTouch(e, _this.lightnessSlider, 'l', 0, 100);
357
+ });
347
358
  }
348
359
  // Alpha slider
349
360
  if (this.alphaSlider) {
@@ -353,12 +364,18 @@
353
364
  _this.updateColorDisplay();
354
365
  _this.announceColorChange();
355
366
  });
367
+ this.alphaSlider.addEventListener("touchstart", function (e) {
368
+ _this.handleSliderTouch(e, _this.alphaSlider, 'a', 0, 100, true);
369
+ });
356
370
  }
357
371
  // Saturation box
358
372
  if (this.colorBox) {
359
373
  this.colorBox.addEventListener("mousedown", function (e) {
360
374
  return _this.onSaturationMouseDown(e);
361
375
  });
376
+ this.colorBox.addEventListener("touchstart", function (e) {
377
+ return _this.onSaturationTouchStart(e);
378
+ });
362
379
  this.colorBox.addEventListener("keydown", function (e) {
363
380
  return _this.onSaturationKeyDown(e);
364
381
  });
@@ -373,18 +390,67 @@
373
390
  }
374
391
  });
375
392
  }
376
- // Preset colors
393
+ // Preset colors - ensure they're in the DOM before binding
377
394
  var presets = (_a = this.container) === null || _a === void 0 ? void 0 : _a.querySelectorAll(".colorpicker-preset");
378
- presets === null || presets === void 0 ? void 0 : presets.forEach(function (preset) {
379
- preset.addEventListener("click", function (e) {
380
- var color = e.currentTarget.dataset.color;
381
- _this.currentColor = _this.parseColor(color);
382
- _this.updateColorDisplay();
383
- if (_this.options.closeOnSelect) {
384
- _this.close();
385
- }
395
+ if (presets && presets.length > 0) {
396
+ presets.forEach(function (preset, index) {
397
+ preset.addEventListener("click", function (e) {
398
+ var color = e.currentTarget.dataset.color;
399
+ _this.currentColor = _this.parseColor(color);
400
+ _this.updateColorDisplay();
401
+ if (_this.options.closeOnSelect) {
402
+ _this.close();
403
+ }
404
+ });
405
+ // Keyboard navigation for presets
406
+ preset.addEventListener("keydown", (function (e) {
407
+ var key = e.key;
408
+ var handled = false;
409
+ var targetIndex = index;
410
+ switch (key) {
411
+ case "ArrowRight":
412
+ case "ArrowDown":
413
+ targetIndex = Math.min(presets.length - 1, index + 1);
414
+ handled = true;
415
+ break;
416
+ case "ArrowLeft":
417
+ case "ArrowUp":
418
+ targetIndex = Math.max(0, index - 1);
419
+ handled = true;
420
+ break;
421
+ case "Home":
422
+ targetIndex = 0;
423
+ handled = true;
424
+ break;
425
+ case "End":
426
+ targetIndex = presets.length - 1;
427
+ handled = true;
428
+ break;
429
+ case "Enter":
430
+ case " ":
431
+ var color = e.currentTarget.dataset.color;
432
+ _this.currentColor = _this.parseColor(color);
433
+ _this.updateColorDisplay();
434
+ if (_this.options.closeOnSelect) {
435
+ _this.close();
436
+ }
437
+ handled = true;
438
+ break;
439
+ }
440
+ if (handled) {
441
+ e.preventDefault();
442
+ if (targetIndex !== index) {
443
+ // Update tabindex for roving tabindex pattern
444
+ presets.forEach(function (p, i) {
445
+ p.setAttribute("tabindex", i === targetIndex ? "0" : "-1");
446
+ });
447
+ // Focus target
448
+ presets[targetIndex].focus();
449
+ }
450
+ }
451
+ }));
386
452
  });
387
- });
453
+ }
388
454
  // EyeDropper button
389
455
  var eyeDropperBtn = (_b = this.container) === null || _b === void 0 ? void 0 : _b.querySelector(".colorpicker-eyedropper-btn");
390
456
  if (eyeDropperBtn) {
@@ -454,6 +520,66 @@
454
520
  document.addEventListener("mousemove", onMouseMove);
455
521
  document.addEventListener("mouseup", onMouseUp);
456
522
  };
523
+ ColorPicker.prototype.onSaturationTouchStart = function (e) {
524
+ var _this = this;
525
+ e.preventDefault();
526
+ var touch = e.touches[0];
527
+ this.updateSaturationFromTouch(touch);
528
+ var onTouchMove = function (e) {
529
+ e.preventDefault();
530
+ var touch = e.touches[0];
531
+ _this.updateSaturationFromTouch(touch);
532
+ };
533
+ var onTouchEnd = function () {
534
+ document.removeEventListener("touchmove", onTouchMove);
535
+ document.removeEventListener("touchend", onTouchEnd);
536
+ };
537
+ document.addEventListener("touchmove", onTouchMove, { passive: false });
538
+ document.addEventListener("touchend", onTouchEnd);
539
+ };
540
+ ColorPicker.prototype.updateSaturationFromTouch = function (touch) {
541
+ if (!this.colorBox)
542
+ return;
543
+ var rect = this.colorBox.getBoundingClientRect();
544
+ var x = Math.max(0, Math.min(touch.clientX - rect.left, rect.width));
545
+ var y = Math.max(0, Math.min(touch.clientY - rect.top, rect.height));
546
+ this.currentColor.s = (x / rect.width) * 100;
547
+ this.currentColor.l = 100 - (y / rect.height) * 100;
548
+ this.updateColorDisplay();
549
+ this.announceColorChange();
550
+ };
551
+ ColorPicker.prototype.handleSliderTouch = function (e, slider, property, min, max, isAlpha) {
552
+ var _this = this;
553
+ if (isAlpha === void 0) { isAlpha = false; }
554
+ var updateFromTouch = function (touch) {
555
+ var rect = slider.getBoundingClientRect();
556
+ var x = Math.max(0, Math.min(touch.clientX - rect.left, rect.width));
557
+ var ratio = x / rect.width;
558
+ var value = min + ratio * (max - min);
559
+ if (isAlpha) {
560
+ _this.currentColor[property] = value / 100;
561
+ }
562
+ else {
563
+ _this.currentColor[property] = Math.round(value);
564
+ }
565
+ slider.value = String(Math.round(value));
566
+ _this.updateColorDisplay();
567
+ _this.announceColorChange();
568
+ };
569
+ var touch = e.touches[0];
570
+ updateFromTouch(touch);
571
+ var onTouchMove = function (e) {
572
+ e.preventDefault();
573
+ var touch = e.touches[0];
574
+ updateFromTouch(touch);
575
+ };
576
+ var onTouchEnd = function () {
577
+ document.removeEventListener("touchmove", onTouchMove);
578
+ document.removeEventListener("touchend", onTouchEnd);
579
+ };
580
+ document.addEventListener("touchmove", onTouchMove, { passive: false });
581
+ document.addEventListener("touchend", onTouchEnd);
582
+ };
457
583
  ColorPicker.prototype.updateSaturationFromMouse = function (e) {
458
584
  if (!this.colorBox)
459
585
  return;
@@ -742,11 +868,28 @@
742
868
  this.positionPicker();
743
869
  }
744
870
  this.options.onOpen();
745
- // Focus first interactive element
746
- setTimeout(function () {
747
- var _a;
748
- (_a = _this.colorBox) === null || _a === void 0 ? void 0 : _a.focus();
749
- }, 0);
871
+ // Auto-focus only for popup mode, not inline
872
+ if (!this.options.inline) {
873
+ setTimeout(function () {
874
+ var _a;
875
+ var focusTarget = null;
876
+ if (_this.options.presetsOnly) {
877
+ // In presets-only mode, focus first preset
878
+ focusTarget = (_a = _this.container) === null || _a === void 0 ? void 0 : _a.querySelector('.colorpicker-preset');
879
+ }
880
+ else if (_this.options.sliderMode) {
881
+ // In slider mode, focus first slider (hue)
882
+ focusTarget = _this.hueSlider;
883
+ }
884
+ else {
885
+ // In standard mode, focus saturation box
886
+ focusTarget = _this.colorBox;
887
+ }
888
+ if (focusTarget) {
889
+ focusTarget.focus();
890
+ }
891
+ }, 0);
892
+ }
750
893
  };
751
894
  ColorPicker.prototype.close = function () {
752
895
  if (!this.isOpen || !this.container)
@@ -1 +1 @@
1
- .colorpicker-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.colorpicker-container{font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#fff;border:1px solid #e5e7eb;border-radius:8px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,0.15);box-shadow:0 4px 12px rgba(0,0,0,0.15);padding:16px;width:280px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.colorpicker-container:focus-within{outline:2px solid #3b82f6;outline-offset:2px}.colorpicker-container.colorpicker-inline{width:100%;max-width:100%;-webkit-box-shadow:none;box-shadow:none}.colorpicker-container.colorpicker-inline .colorpicker-saturation{height:200px}.colorpicker-container.colorpicker-presets-only{width:auto;min-width:200px;max-width:400px}.colorpicker-container.colorpicker-presets-only .colorpicker-presets{margin:0;padding:0}.colorpicker-container.colorpicker-presets-only.colorpicker-inline{max-width:100%}.colorpicker-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:16px}.colorpicker-saturation{position:relative;width:100%;height:180px;background:-webkit-gradient(linear,left bottom, left top,from(#000),to(transparent)),-webkit-gradient(linear,left top, right top,from(#fff),to(transparent));background:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent);border-radius:6px;cursor:crosshair;overflow:hidden}.colorpicker-saturation:focus{outline:2px solid #3b82f6;outline-offset:2px}.colorpicker-saturation:focus:not(:focus-visible){outline:none}.colorpicker-saturation-overlay{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}.colorpicker-saturation-pointer{position:absolute;width:20px;height:20px;border:3px solid #fff;border-radius:50%;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 2px 4px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(0,0,0,0.1);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);pointer-events:none;-webkit-transition:-webkit-transform .1s ease;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease, -webkit-transform .1s ease}@media (prefers-reduced-motion:reduce){.colorpicker-saturation-pointer{-webkit-transition:none;transition:none}}.colorpicker-controls{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.colorpicker-sliders{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.colorpicker-slider-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:4px}.colorpicker-label{font-size:12px;font-weight:500;color:#6b7280;text-transform:uppercase;letter-spacing:.5px}.colorpicker-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:8px;border-radius:4px;outline:none;cursor:pointer}.colorpicker-slider:focus{-webkit-box-shadow:0 0 0 2px #3b82f6;box-shadow:0 0 0 2px #3b82f6}.colorpicker-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#fff;border:2px solid #3b82f6;cursor:pointer;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-transition:-webkit-transform .1s ease;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease, -webkit-transform .1s ease}.colorpicker-slider::-webkit-slider-thumb:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.colorpicker-slider::-webkit-slider-thumb:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#fff;border:2px solid #3b82f6;cursor:pointer;box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-transition:-webkit-transform .1s ease;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease, -webkit-transform .1s ease}.colorpicker-slider::-moz-range-thumb:hover{transform:scale(1.1)}.colorpicker-slider::-moz-range-thumb:active{transform:scale(.95)}.colorpicker-hue-slider{background:-webkit-gradient(linear,left top, right top,from(#f00),color-stop(#ff0),color-stop(#0f0),color-stop(#0ff),color-stop(#00f),color-stop(#f0f),to(#f00));background:linear-gradient(to right,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}.colorpicker-alpha-slider{background:linear-gradient(to right,transparent,currentColor),linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:100%,10px 10px,10px 10px,10px 10px,10px 10px;background-position:0 0,0 0,0 5px,5px -5px,-5px 0}.colorpicker-sliders-only{gap:12px}.colorpicker-controls{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.colorpicker-controls:has(.colorpicker-sliders:not(.colorpicker-sliders-only)){-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.colorpicker-controls:has(.colorpicker-sliders-only){-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.colorpicker-controls:has(.colorpicker-sliders-only) .colorpicker-preview{width:100%;height:48px;min-height:48px;-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.colorpicker-controls:has(.colorpicker-sliders-only) .colorpicker-preview .colorpicker-preview-color{min-height:48px}.colorpicker-preview{width:40px;min-width:40px;height:40px;min-height:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-negative:0;flex-shrink:0}.colorpicker-preview-color{-webkit-box-flex:1;-ms-flex:1;flex:1;border-radius:6px;border:2px solid #e5e7eb;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.05);position:relative}.colorpicker-preview-color::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0;border-radius:4px;z-index:-1}.colorpicker-input-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:4px}.colorpicker-input-row{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.colorpicker-input{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:8px 12px;border:1px solid #e5e7eb;border-radius:6px;font-family:'Monaco','Menlo',monospace;font-size:14px;color:#1f2937;background:#fff;-webkit-transition:border-color .2s ease,-webkit-box-shadow .2s ease;transition:border-color .2s ease,-webkit-box-shadow .2s ease;transition:border-color .2s ease,box-shadow .2s ease;transition:border-color .2s ease,box-shadow .2s ease,-webkit-box-shadow .2s ease}.colorpicker-input:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-input::-webkit-input-placeholder{color:#9ca3af}.colorpicker-input::-moz-placeholder{color:#9ca3af}.colorpicker-input:-ms-input-placeholder{color:#9ca3af}.colorpicker-input::-ms-input-placeholder{color:#9ca3af}.colorpicker-input::placeholder{color:#9ca3af}.colorpicker-eyedropper-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px;height:36px;padding:8px;border:1px solid #e5e7eb;border-radius:6px;background:#fff;color:#1f2937;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;-ms-flex-negative:0;flex-shrink:0}.colorpicker-eyedropper-btn:hover{background:#f3f4f6;border-color:#3b82f6}.colorpicker-eyedropper-btn:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-eyedropper-btn:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-eyedropper-btn svg{width:20px;height:20px;display:block}.colorpicker-system-picker-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px;height:36px;padding:8px;border:1px solid #e5e7eb;border-radius:6px;background:#fff;color:#1f2937;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;-ms-flex-negative:0;flex-shrink:0}.colorpicker-system-picker-btn:hover{background:#f3f4f6;border-color:#3b82f6}.colorpicker-system-picker-btn:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-system-picker-btn:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-system-picker-btn svg{width:20px;height:20px;display:block}.colorpicker-presets{display:grid;grid-template-columns:repeat(8,1fr);gap:8px;padding-top:4px}.colorpicker-presets.colorpicker-presets-list{grid-template-columns:1fr;gap:6px}.colorpicker-preset{width:100%;aspect-ratio:1;border:2px solid transparent;border-radius:4px;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative;overflow:hidden}.colorpicker-preset::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:6px 6px;background-position:0 0,0 3px,3px -3px,-3px 0;z-index:-1}.colorpicker-preset:hover{-webkit-transform:scale(1.15);transform:scale(1.15);border-color:#3b82f6;-webkit-box-shadow:0 2px 8px rgba(0,0,0,0.15);box-shadow:0 2px 8px rgba(0,0,0,0.15)}.colorpicker-preset:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 2px rgba(59,130,246,0.3);box-shadow:0 0 0 2px rgba(59,130,246,0.3)}.colorpicker-preset:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-preset-list-item{aspect-ratio:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:8px 12px;background:#f9fafb}.colorpicker-preset-list-item:hover{-webkit-transform:none;transform:none;background:#f3f4f6}.colorpicker-preset-list-item:focus{background:#f3f4f6}.colorpicker-preset-color{width:32px;height:32px;border-radius:6px;-ms-flex-negative:0;flex-shrink:0;position:relative}.colorpicker-preset-color::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:6px 6px;background-position:0 0,0 3px,3px -3px,-3px 0;border-radius:6px;z-index:-1}.colorpicker-preset-label{font-size:14px;font-weight:500;color:#1f2937;text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1}.colorpicker-input-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%;max-width:400px;border:2px solid #e5e7eb;border-radius:8px;overflow:hidden;-webkit-transition:all .2s ease;transition:all .2s ease;background:#fff}.colorpicker-input-group:focus-within{border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-input-preview{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:48px;min-width:48px;border-right:2px solid #e5e7eb;position:relative;cursor:pointer;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.colorpicker-input-preview::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:8px 8px;background-position:0 0,0 4px,4px -4px,-4px 0;z-index:-1}input.colorpicker-has-preview{border:none;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px 14px;font-size:15px;font-family:'Monaco','Menlo',monospace;background:transparent}input.colorpicker-has-preview:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.colorpicker-compact-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:40px;height:40px;padding:4px;border:2px solid #e5e7eb;border-radius:6px;background:#fff;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;vertical-align:middle}.colorpicker-compact-button:hover{border-color:#3b82f6;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.1);box-shadow:0 2px 4px rgba(0,0,0,0.1);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.colorpicker-compact-button:active{-webkit-transform:translateY(0) scale(.98);transform:translateY(0) scale(.98)}.colorpicker-compact-button:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-compact-button svg{width:20px;height:20px;display:block;color:#1f2937}.colorpicker-compact-button:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-compact-button:active{-webkit-transform:translateY(0);transform:translateY(0)}@media (prefers-reduced-motion:reduce){.colorpicker-compact-button{-webkit-transition:none;transition:none}.colorpicker-compact-button:hover{-webkit-transform:none;transform:none}.colorpicker-compact-button:active{-webkit-transform:none;transform:none}}.colorpicker-compact-preview{display:block;width:100%;height:100%;border-radius:4px;border:1px solid rgba(0,0,0,0.1);position:relative;overflow:hidden}.colorpicker-compact-preview::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:6px 6px;background-position:0 0,0 3px,3px -3px,-3px 0;z-index:-1}@media (prefers-color-scheme:dark){.colorpicker-container{background:#1f2937;border-color:#374151;color:#e5e7eb}.colorpicker-compact-button{background:#1f2937;border-color:#374151}.colorpicker-compact-button:hover{border-color:#60a5fa;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.3);box-shadow:0 2px 4px rgba(0,0,0,0.3)}.colorpicker-compact-button:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-label{color:#9ca3af}.colorpicker-input{background:#111827;border-color:#374151;color:#f9fafb}.colorpicker-input:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-preview-color{border-color:#374151}.colorpicker-eyedropper-btn{background:#1f2937;border-color:#374151;color:#e5e7eb}.colorpicker-eyedropper-btn:hover{background:#111827;border-color:#60a5fa}.colorpicker-eyedropper-btn:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-system-picker-btn{background:#1f2937;border-color:#374151;color:#e5e7eb}.colorpicker-system-picker-btn:hover{background:#111827;border-color:#60a5fa}.colorpicker-system-picker-btn:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-slider:focus{-webkit-box-shadow:0 0 0 2px #60a5fa;box-shadow:0 0 0 2px #60a5fa}.colorpicker-slider::-webkit-slider-thumb{border-color:#60a5fa}.colorpicker-slider::-moz-range-thumb{border-color:#60a5fa}.colorpicker-preset:hover{border-color:#60a5fa}.colorpicker-preset:focus{border-color:#60a5fa}.colorpicker-preset-list-item{background:#1f2937}.colorpicker-preset-list-item:hover{background:#111827;border-color:#374151}.colorpicker-preset-list-item:focus{background:#111827;border-color:#374151}.colorpicker-preset-label{color:#e5e7eb}.colorpicker-input-group{background:#1f2937;border-color:#374151}.colorpicker-input-group:focus-within{border-color:#60a5fa}.colorpicker-input-preview{border-right-color:#374151}input.colorpicker-has-preview{color:#f9fafb}input.colorpicker-has-preview:focus{-webkit-box-shadow:0 0 0 2px rgba(96,165,250,0.3);box-shadow:0 0 0 2px rgba(96,165,250,0.3)}}@media (prefers-contrast:high){.colorpicker-container{border-width:2px}.colorpicker-saturation{outline:2px solid currentColor}.colorpicker-saturation-pointer{border-width:4px}.colorpicker-preset{border-width:3px}}@media (prefers-reduced-motion:reduce){.colorpicker-slider::-webkit-slider-thumb{-webkit-transition:none;transition:none}.colorpicker-slider::-moz-range-thumb{-webkit-transition:none;transition:none}.colorpicker-preset{-webkit-transition:none;transition:none}.colorpicker-input{-webkit-transition:none;transition:none}.colorpicker-saturation-pointer{-webkit-transition:none;transition:none}}.colorpicker-container:not([style*="display: none"]){-webkit-animation:colorpicker-fadeIn .2s ease-out;animation:colorpicker-fadeIn .2s ease-out}@media (prefers-reduced-motion:reduce){.colorpicker-container:not([style*="display: none"]){-webkit-animation:none;animation:none}}@-webkit-keyframes colorpicker-fadeIn{from{opacity:0;-webkit-transform:translateY(-8px);transform:translateY(-8px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes colorpicker-fadeIn{from{opacity:0;-webkit-transform:translateY(-8px);transform:translateY(-8px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}
1
+ .colorpicker-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.colorpicker-container{font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#fff;border:1px solid #e5e7eb;border-radius:8px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,0.15);box-shadow:0 4px 12px rgba(0,0,0,0.15);padding:16px;width:280px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.colorpicker-container:focus-within{outline:2px solid #3b82f6;outline-offset:2px}.colorpicker-container.colorpicker-inline{width:100%;max-width:100%;-webkit-box-shadow:none;box-shadow:none}.colorpicker-container.colorpicker-inline .colorpicker-saturation{height:200px}.colorpicker-container.colorpicker-presets-only{width:auto;min-width:200px;max-width:400px}.colorpicker-container.colorpicker-presets-only .colorpicker-presets{margin:0;padding:0}.colorpicker-container.colorpicker-presets-only.colorpicker-inline{max-width:100%}.colorpicker-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:16px}.colorpicker-saturation{position:relative;width:100%;height:180px;background:-webkit-gradient(linear,left bottom, left top,from(#000),to(transparent)),-webkit-gradient(linear,left top, right top,from(#fff),to(transparent));background:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent);border-radius:6px;cursor:crosshair;overflow:hidden;-ms-touch-action:none;touch-action:none}.colorpicker-saturation:focus{outline:2px solid #3b82f6;outline-offset:2px}.colorpicker-saturation:focus:not(:focus-visible){outline:none}.colorpicker-saturation-overlay{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}.colorpicker-saturation-pointer{position:absolute;width:20px;height:20px;border:3px solid #fff;border-radius:50%;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 2px 4px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(0,0,0,0.1);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);pointer-events:none;-webkit-transition:-webkit-transform .1s ease;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease, -webkit-transform .1s ease}@media (pointer:coarse){.colorpicker-saturation-pointer{width:28px;height:28px;border-width:4px}}@media (prefers-reduced-motion:reduce){.colorpicker-saturation-pointer{-webkit-transition:none;transition:none}}.colorpicker-controls{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.colorpicker-sliders{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.colorpicker-slider-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:4px}.colorpicker-label{font-size:12px;font-weight:500;color:#6b7280;text-transform:uppercase;letter-spacing:.5px}.colorpicker-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;-ms-touch-action:none;touch-action:none}@media (pointer:coarse){.colorpicker-slider{height:12px}}.colorpicker-slider:focus{-webkit-box-shadow:0 0 0 2px #3b82f6;box-shadow:0 0 0 2px #3b82f6}.colorpicker-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:#fff;border:2px solid #3b82f6;cursor:pointer;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-transition:-webkit-transform .1s ease;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease, -webkit-transform .1s ease}@media (pointer:coarse){.colorpicker-slider::-webkit-slider-thumb{width:28px;height:28px;border-width:3px}}.colorpicker-slider::-webkit-slider-thumb:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.colorpicker-slider::-webkit-slider-thumb:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#fff;border:2px solid #3b82f6;cursor:pointer;box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-transition:-webkit-transform .1s ease;transition:-webkit-transform .1s ease;transition:transform .1s ease;transition:transform .1s ease, -webkit-transform .1s ease;background:#fff;border:2px solid #3b82f6;cursor:pointer;box-shadow:0 2px 4px rgba(0,0,0,0.2);transition:transform .1s ease}@media (pointer:coarse){.colorpicker-slider::-moz-range-thumb{width:28px;height:28px;border-width:3px}}.colorpicker-slider::-moz-range-thumb:hover{transform:scale(1.1)}.colorpicker-slider::-moz-range-thumb:active{transform:scale(.95)}.colorpicker-hue-slider{background:-webkit-gradient(linear,left top, right top,from(#f00),color-stop(#ff0),color-stop(#0f0),color-stop(#0ff),color-stop(#00f),color-stop(#f0f),to(#f00));background:linear-gradient(to right,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}.colorpicker-alpha-slider{background:linear-gradient(to right,transparent,currentColor),linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:100%,10px 10px,10px 10px,10px 10px,10px 10px;background-position:0 0,0 0,0 5px,5px -5px,-5px 0}.colorpicker-sliders-only{gap:12px}.colorpicker-controls{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.colorpicker-controls:has(.colorpicker-sliders:not(.colorpicker-sliders-only)){-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.colorpicker-controls:has(.colorpicker-sliders-only){-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.colorpicker-controls:has(.colorpicker-sliders-only) .colorpicker-preview{width:100%;height:48px;min-height:48px;-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.colorpicker-controls:has(.colorpicker-sliders-only) .colorpicker-preview .colorpicker-preview-color{min-height:48px}.colorpicker-preview{width:40px;min-width:40px;height:40px;min-height:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-negative:0;flex-shrink:0}.colorpicker-preview-color{-webkit-box-flex:1;-ms-flex:1;flex:1;border-radius:6px;border:2px solid #e5e7eb;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.05);position:relative}.colorpicker-preview-color::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0;border-radius:4px;z-index:-1}.colorpicker-input-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:4px}.colorpicker-input-row{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.colorpicker-input{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:8px 12px;border:1px solid #e5e7eb;border-radius:6px;font-family:'Monaco','Menlo',monospace;font-size:14px;color:#1f2937;background:#fff;-webkit-transition:border-color .2s ease,-webkit-box-shadow .2s ease;transition:border-color .2s ease,-webkit-box-shadow .2s ease;transition:border-color .2s ease,box-shadow .2s ease;transition:border-color .2s ease,box-shadow .2s ease,-webkit-box-shadow .2s ease}.colorpicker-input:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-input::-webkit-input-placeholder{color:#9ca3af}.colorpicker-input::-moz-placeholder{color:#9ca3af}.colorpicker-input:-ms-input-placeholder{color:#9ca3af}.colorpicker-input::-ms-input-placeholder{color:#9ca3af}.colorpicker-input::placeholder{color:#9ca3af}.colorpicker-eyedropper-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px;height:36px;padding:8px;border:1px solid #e5e7eb;border-radius:6px;background:#fff;color:#1f2937;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;-ms-flex-negative:0;flex-shrink:0}@media (pointer:coarse){.colorpicker-eyedropper-btn{width:44px;height:44px}}.colorpicker-eyedropper-btn:hover{background:#f3f4f6;border-color:#3b82f6}.colorpicker-eyedropper-btn:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-eyedropper-btn:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-eyedropper-btn svg{width:20px;height:20px;display:block}.colorpicker-system-picker-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px;height:36px;padding:8px;border:1px solid #e5e7eb;border-radius:6px;background:#fff;color:#1f2937;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;-ms-flex-negative:0;flex-shrink:0}.colorpicker-system-picker-btn:hover{background:#f3f4f6;border-color:#3b82f6}.colorpicker-system-picker-btn:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-system-picker-btn:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-system-picker-btn svg{width:20px;height:20px;display:block}.colorpicker-presets{display:grid;grid-template-columns:repeat(8,1fr);gap:8px;padding-top:4px}.colorpicker-presets.colorpicker-presets-list{grid-template-columns:1fr;gap:6px}.colorpicker-preset{width:100%;aspect-ratio:1;border:2px solid transparent;border-radius:4px;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative;overflow:hidden}@media (pointer:coarse){.colorpicker-preset{min-height:44px}}.colorpicker-preset::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:6px 6px;background-position:0 0,0 3px,3px -3px,-3px 0;z-index:-1}.colorpicker-preset:hover{-webkit-transform:scale(1.15);transform:scale(1.15);border-color:#3b82f6;-webkit-box-shadow:0 2px 8px rgba(0,0,0,0.15);box-shadow:0 2px 8px rgba(0,0,0,0.15)}@media (pointer:coarse){.colorpicker-preset:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}}.colorpicker-preset:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 2px rgba(59,130,246,0.3);box-shadow:0 0 0 2px rgba(59,130,246,0.3)}.colorpicker-preset:active{-webkit-transform:scale(.95);transform:scale(.95)}.colorpicker-preset-list-item{aspect-ratio:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:8px 12px;background:#f9fafb;min-height:48px}@media (pointer:coarse){.colorpicker-preset-list-item{min-height:56px;padding:12px}}.colorpicker-preset-list-item:hover{-webkit-transform:none;transform:none;background:#f3f4f6}.colorpicker-preset-list-item:focus{background:#f3f4f6}.colorpicker-preset-color{width:32px;height:32px;border-radius:6px;-ms-flex-negative:0;flex-shrink:0;position:relative}.colorpicker-preset-color::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:6px 6px;background-position:0 0,0 3px,3px -3px,-3px 0;border-radius:6px;z-index:-1}.colorpicker-preset-label{font-size:14px;font-weight:500;color:#1f2937;text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1}.colorpicker-input-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%;max-width:400px;border:2px solid #e5e7eb;border-radius:8px;overflow:hidden;-webkit-transition:all .2s ease;transition:all .2s ease;background:#fff}.colorpicker-input-group:focus-within{border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-input-preview{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:48px;min-width:48px;border-right:2px solid #e5e7eb;position:relative;cursor:pointer;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.colorpicker-input-preview::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:8px 8px;background-position:0 0,0 4px,4px -4px,-4px 0;z-index:-1}input.colorpicker-has-preview{border:none;-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px 14px;font-size:15px;font-family:'Monaco','Menlo',monospace;background:transparent}input.colorpicker-has-preview:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.colorpicker-compact-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:40px;height:40px;padding:4px;border:2px solid #e5e7eb;border-radius:6px;background:#fff;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease;vertical-align:middle}.colorpicker-compact-button:hover{border-color:#3b82f6;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.1);box-shadow:0 2px 4px rgba(0,0,0,0.1);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.colorpicker-compact-button:active{-webkit-transform:translateY(0) scale(.98);transform:translateY(0) scale(.98)}.colorpicker-compact-button:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-compact-button svg{width:20px;height:20px;display:block;color:#1f2937}.colorpicker-compact-button:focus{outline:none;border-color:#3b82f6;-webkit-box-shadow:0 0 0 3px rgba(59,130,246,0.1);box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.colorpicker-compact-button:active{-webkit-transform:translateY(0);transform:translateY(0)}@media (prefers-reduced-motion:reduce){.colorpicker-compact-button{-webkit-transition:none;transition:none}.colorpicker-compact-button:hover{-webkit-transform:none;transform:none}.colorpicker-compact-button:active{-webkit-transform:none;transform:none}}.colorpicker-compact-preview{display:block;width:100%;height:100%;border-radius:4px;border:1px solid rgba(0,0,0,0.1);position:relative;overflow:hidden}.colorpicker-compact-preview::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:6px 6px;background-position:0 0,0 3px,3px -3px,-3px 0;z-index:-1}@media (prefers-color-scheme:dark){.colorpicker-container{background:#1f2937;border-color:#374151;color:#e5e7eb}.colorpicker-compact-button{background:#1f2937;border-color:#374151}.colorpicker-compact-button:hover{border-color:#60a5fa;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.3);box-shadow:0 2px 4px rgba(0,0,0,0.3)}.colorpicker-compact-button:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-label{color:#9ca3af}.colorpicker-input{background:#111827;border-color:#374151;color:#f9fafb}.colorpicker-input:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-preview-color{border-color:#374151}.colorpicker-eyedropper-btn{background:#1f2937;border-color:#374151;color:#e5e7eb}.colorpicker-eyedropper-btn:hover{background:#111827;border-color:#60a5fa}.colorpicker-eyedropper-btn:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-system-picker-btn{background:#1f2937;border-color:#374151;color:#e5e7eb}.colorpicker-system-picker-btn:hover{background:#111827;border-color:#60a5fa}.colorpicker-system-picker-btn:focus{border-color:#60a5fa;-webkit-box-shadow:0 0 0 3px rgba(96,165,250,0.2);box-shadow:0 0 0 3px rgba(96,165,250,0.2)}.colorpicker-slider:focus{-webkit-box-shadow:0 0 0 2px #60a5fa;box-shadow:0 0 0 2px #60a5fa}.colorpicker-slider::-webkit-slider-thumb{border-color:#60a5fa}.colorpicker-slider::-moz-range-thumb{border-color:#60a5fa}.colorpicker-preset:hover{border-color:#60a5fa}.colorpicker-preset:focus{border-color:#60a5fa}.colorpicker-preset-list-item{background:#1f2937}.colorpicker-preset-list-item:hover{background:#111827;border-color:#374151}.colorpicker-preset-list-item:focus{background:#111827;border-color:#374151}.colorpicker-preset-label{color:#e5e7eb}.colorpicker-input-group{background:#1f2937;border-color:#374151}.colorpicker-input-group:focus-within{border-color:#60a5fa}.colorpicker-input-preview{border-right-color:#374151}input.colorpicker-has-preview{color:#f9fafb}input.colorpicker-has-preview:focus{-webkit-box-shadow:0 0 0 2px rgba(96,165,250,0.3);box-shadow:0 0 0 2px rgba(96,165,250,0.3)}}@media (prefers-contrast:high){.colorpicker-container{border-width:2px}.colorpicker-saturation{outline:2px solid currentColor}.colorpicker-saturation-pointer{border-width:4px}.colorpicker-preset{border-width:3px}}@media (prefers-reduced-motion:reduce){.colorpicker-slider::-webkit-slider-thumb{-webkit-transition:none;transition:none}.colorpicker-slider::-moz-range-thumb{-webkit-transition:none;transition:none}.colorpicker-preset{-webkit-transition:none;transition:none}.colorpicker-input{-webkit-transition:none;transition:none}.colorpicker-saturation-pointer{-webkit-transition:none;transition:none}}.colorpicker-container:not([style*="display: none"]){-webkit-animation:colorpicker-fadeIn .2s ease-out;animation:colorpicker-fadeIn .2s ease-out}@media (prefers-reduced-motion:reduce){.colorpicker-container:not([style*="display: none"]){-webkit-animation:none;animation:none}}@-webkit-keyframes colorpicker-fadeIn{from{opacity:0;-webkit-transform:translateY(-8px);transform:translateY(-8px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes colorpicker-fadeIn{from{opacity:0;-webkit-transform:translateY(-8px);transform:translateY(-8px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}