accessify-widget 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +57 -3
  2. package/dist/accessify.min.js +1 -1
  3. package/dist/accessify.min.js.map +1 -1
  4. package/dist/accessify.mjs +1 -1
  5. package/dist/{alt-text-CLxbmwG6.js → alt-text-CrPRUX83.js} +2 -2
  6. package/dist/{alt-text-CLxbmwG6.js.map → alt-text-CrPRUX83.js.map} +1 -1
  7. package/dist/contrast-CqsICAkU.js +139 -0
  8. package/dist/contrast-CqsICAkU.js.map +1 -0
  9. package/dist/{index-CUQfpnwR.js → index-B6b-ij4T.js} +1815 -732
  10. package/dist/index-B6b-ij4T.js.map +1 -0
  11. package/dist/{keyboard-nav-BdPyLaZt.js → keyboard-nav-YtijlLYi.js} +16 -12
  12. package/dist/keyboard-nav-YtijlLYi.js.map +1 -0
  13. package/dist/{page-structure-2X8mOSpC.js → page-structure-WFqy5QjQ.js} +11 -7
  14. package/dist/page-structure-WFqy5QjQ.js.map +1 -0
  15. package/dist/text-size-C6OFhCGi.js +186 -0
  16. package/dist/text-size-C6OFhCGi.js.map +1 -0
  17. package/dist/widget.js +1 -1
  18. package/dist/widget.js.map +1 -1
  19. package/package.json +10 -10
  20. package/LICENSE +0 -21
  21. package/dist/color-blind-0LFng55r.js +0 -108
  22. package/dist/color-blind-0LFng55r.js.map +0 -1
  23. package/dist/contrast-DCkE0NXZ.js +0 -64
  24. package/dist/contrast-DCkE0NXZ.js.map +0 -1
  25. package/dist/dyslexia-font-wONgIy2T.js +0 -77
  26. package/dist/dyslexia-font-wONgIy2T.js.map +0 -1
  27. package/dist/index-CUQfpnwR.js.map +0 -1
  28. package/dist/keyboard-nav-BdPyLaZt.js.map +0 -1
  29. package/dist/line-height-BT98qgEF.js +0 -54
  30. package/dist/line-height-BT98qgEF.js.map +0 -1
  31. package/dist/page-structure-2X8mOSpC.js.map +0 -1
  32. package/dist/saturation-D8ZXpWAN.js +0 -59
  33. package/dist/saturation-D8ZXpWAN.js.map +0 -1
  34. package/dist/spacing-DENai3JU.js +0 -106
  35. package/dist/spacing-DENai3JU.js.map +0 -1
  36. package/dist/text-align-BDRPqPvl.js +0 -51
  37. package/dist/text-align-BDRPqPvl.js.map +0 -1
  38. package/dist/text-size-B-uv436p.js +0 -69
  39. package/dist/text-size-B-uv436p.js.map +0 -1
@@ -279,6 +279,15 @@ https://svelte.dev/e/lifecycle_double_unmount`, bold, normal);
279
279
  console.warn(`https://svelte.dev/e/lifecycle_double_unmount`);
280
280
  }
281
281
  }
282
+ function select_multiple_invalid_value() {
283
+ if (DEV) {
284
+ console.warn(`%c[svelte] select_multiple_invalid_value
285
+ %cThe \`value\` property of a \`<select multiple>\` element should be an array, but it received a non-array value. The selection will be kept as is.
286
+ https://svelte.dev/e/select_multiple_invalid_value`, bold, normal);
287
+ } else {
288
+ console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
289
+ }
290
+ }
282
291
  function state_proxy_equality_mismatch(operator) {
283
292
  if (DEV) {
284
293
  console.warn(`%c[svelte] state_proxy_equality_mismatch
@@ -2310,6 +2319,9 @@ function get_proxied_value(value) {
2310
2319
  }
2311
2320
  return value;
2312
2321
  }
2322
+ function is(a, b) {
2323
+ return Object.is(get_proxied_value(a), get_proxied_value(b));
2324
+ }
2313
2325
  const ARRAY_MUTATING_METHODS = /* @__PURE__ */ new Set([
2314
2326
  "copyWithin",
2315
2327
  "fill",
@@ -2464,7 +2476,7 @@ function clear_text_content(node) {
2464
2476
  function should_defer_append() {
2465
2477
  return false;
2466
2478
  }
2467
- function create_element(tag2, namespace, is) {
2479
+ function create_element(tag2, namespace, is2) {
2468
2480
  let options = void 0;
2469
2481
  return (
2470
2482
  /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */
@@ -4233,6 +4245,56 @@ function html(node, get_value, is_controlled = false, svg = false, mathml = fals
4233
4245
  }
4234
4246
  });
4235
4247
  }
4248
+ function select_option(select, value, mounting = false) {
4249
+ if (select.multiple) {
4250
+ if (value == void 0) {
4251
+ return;
4252
+ }
4253
+ if (!is_array(value)) {
4254
+ return select_multiple_invalid_value();
4255
+ }
4256
+ for (var option of select.options) {
4257
+ option.selected = value.includes(get_option_value(option));
4258
+ }
4259
+ return;
4260
+ }
4261
+ for (option of select.options) {
4262
+ var option_value = get_option_value(option);
4263
+ if (is(option_value, value)) {
4264
+ option.selected = true;
4265
+ return;
4266
+ }
4267
+ }
4268
+ if (!mounting || value !== void 0) {
4269
+ select.selectedIndex = -1;
4270
+ }
4271
+ }
4272
+ function init_select(select) {
4273
+ var observer = new MutationObserver(() => {
4274
+ select_option(select, select.__value);
4275
+ });
4276
+ observer.observe(select, {
4277
+ // Listen to option element changes
4278
+ childList: true,
4279
+ subtree: true,
4280
+ // because of <optgroup>
4281
+ // Listen to option element value attribute changes
4282
+ // (doesn't get notified of select value changes,
4283
+ // because that property is not reflected as an attribute)
4284
+ attributes: true,
4285
+ attributeFilter: ["value"]
4286
+ });
4287
+ teardown(() => {
4288
+ observer.disconnect();
4289
+ });
4290
+ }
4291
+ function get_option_value(option) {
4292
+ if ("__value" in option) {
4293
+ return option.__value;
4294
+ } else {
4295
+ return option.value;
4296
+ }
4297
+ }
4236
4298
  const IS_CUSTOM_ELEMENT = Symbol("is custom element");
4237
4299
  const IS_HTML = Symbol("is html");
4238
4300
  function set_attribute(element, attribute, value, skip_warning) {
@@ -4671,7 +4733,7 @@ const icons = {
4671
4733
  globe: iconGlobe,
4672
4734
  profile: iconProfile
4673
4735
  };
4674
- const de = {
4736
+ const deJson = {
4675
4737
  "widget.title": "Barrierefreiheit",
4676
4738
  "widget.open": "Barrierefreiheit-Einstellungen öffnen",
4677
4739
  "widget.close": "Schließen",
@@ -4760,7 +4822,7 @@ const de = {
4760
4822
  "footer.github": "GitHub",
4761
4823
  "bfsg.notice": "Hinweis: Dieses Overlay-Tool allein erfüllt nicht die Anforderungen des BFSG. Professionelle Barrierefreiheit erfordert strukturelle Änderungen am Quellcode."
4762
4824
  };
4763
- const en = {
4825
+ const enJson = {
4764
4826
  "widget.title": "Accessibility",
4765
4827
  "widget.open": "Open accessibility settings",
4766
4828
  "widget.close": "Close",
@@ -4849,15 +4911,874 @@ const en = {
4849
4911
  "footer.github": "GitHub",
4850
4912
  "bfsg.notice": "Note: This overlay tool alone does not meet BFSG requirements. Full accessibility requires structural changes to the source code."
4851
4913
  };
4852
- const locales = { de, en };
4914
+ const EN_BASE = {
4915
+ ...enJson,
4916
+ "widget.subtitle": "Adjust contrast, text and navigation on this page",
4917
+ "widget.language": "Language",
4918
+ "widget.poweredBy": "Powered by Accessify-Widget",
4919
+ "section.essentials": "Most used",
4920
+ "section.essentials.desc": "Start with contrast, text size and keyboard support.",
4921
+ "section.support": "Reading and navigation",
4922
+ "section.support.desc": "Tools for focus, reduced motion and page structure.",
4923
+ "section.ai": "AI assistance",
4924
+ "section.ai.desc": "Simplify content, generate alt text and scan the current page.",
4925
+ "control.mostUsed": "Most used",
4926
+ "control.chooseMode": "Choose a mode",
4927
+ "control.default": "Default",
4928
+ "contrast.mode.light": "Light contrast",
4929
+ "contrast.mode.dark": "Dark contrast",
4930
+ "contrast.mode.high": "High contrast",
4931
+ "keyboard.shortcuts": "Keyboard shortcuts",
4932
+ "keyboard.shortcut": "Shortcut",
4933
+ "keyboard.action": "Action",
4934
+ "keyboard.nextHeading": "Go to the next heading",
4935
+ "keyboard.nextLandmark": "Go to the next landmark",
4936
+ "keyboard.toggleHelp": "Open or close this help overlay",
4937
+ "keyboard.nextFocusable": "Move to the next focusable element",
4938
+ "keyboard.closeOverlay": "Close this overlay",
4939
+ "keyboard.skipToContent": "Skip to main content",
4940
+ "pageStructure.title": "Page structure",
4941
+ "pageStructure.headings": "Headings",
4942
+ "pageStructure.landmarks": "Landmarks",
4943
+ "pageStructure.empty": "No headings or landmarks found on this page."
4944
+ };
4945
+ const DE_BASE = {
4946
+ ...deJson,
4947
+ "widget.subtitle": "Passe Kontrast, Text und Navigation auf dieser Seite an",
4948
+ "widget.language": "Sprache",
4949
+ "widget.poweredBy": "Bereitgestellt von Accessify-Widget",
4950
+ "section.essentials": "Am haeufigsten genutzt",
4951
+ "section.essentials.desc": "Starte mit Kontrast, Textgroesse und Tastaturhilfe.",
4952
+ "section.support": "Lesen und Navigation",
4953
+ "section.support.desc": "Hilfen fuer Fokus, reduzierte Bewegung und Seitenstruktur.",
4954
+ "section.ai": "KI-Unterstuetzung",
4955
+ "section.ai.desc": "Inhalte vereinfachen, Alt-Texte erzeugen und die Seite pruefen.",
4956
+ "control.mostUsed": "Meistgenutzt",
4957
+ "control.chooseMode": "Modus waehlen",
4958
+ "control.default": "Standard",
4959
+ "contrast.mode.light": "Heller Kontrast",
4960
+ "contrast.mode.dark": "Dunkler Kontrast",
4961
+ "contrast.mode.high": "Hoher Kontrast",
4962
+ "keyboard.shortcuts": "Tastaturhilfe",
4963
+ "keyboard.shortcut": "Tastaturkuerzel",
4964
+ "keyboard.action": "Aktion",
4965
+ "keyboard.nextHeading": "Zur naechsten Ueberschrift springen",
4966
+ "keyboard.nextLandmark": "Zur naechsten Landmarke springen",
4967
+ "keyboard.toggleHelp": "Diese Hilfe ein- oder ausblenden",
4968
+ "keyboard.nextFocusable": "Zum naechsten fokussierbaren Element wechseln",
4969
+ "keyboard.closeOverlay": "Diese Hilfe schliessen",
4970
+ "keyboard.skipToContent": "Zum Hauptinhalt springen",
4971
+ "pageStructure.title": "Seitenstruktur",
4972
+ "pageStructure.headings": "Ueberschriften",
4973
+ "pageStructure.landmarks": "Landmarken",
4974
+ "pageStructure.empty": "Auf dieser Seite wurden keine Ueberschriften oder Landmarken gefunden."
4975
+ };
4976
+ function withEnglish(overrides) {
4977
+ return { ...EN_BASE, ...overrides };
4978
+ }
4979
+ const locales = {
4980
+ en: EN_BASE,
4981
+ de: DE_BASE,
4982
+ zh: withEnglish({
4983
+ "widget.title": "无障碍",
4984
+ "widget.subtitle": "调整此页面的对比度、文字和导航",
4985
+ "widget.open": "打开无障碍设置",
4986
+ "widget.close": "关闭",
4987
+ "widget.reset": "全部重置",
4988
+ "widget.resetConfirm": "已重置所有调整",
4989
+ "widget.poweredBy": "由 Accessify-Widget 提供支持",
4990
+ "widget.statement": "无障碍声明",
4991
+ "widget.language": "语言",
4992
+ "status.active": "已启用 {count} 项",
4993
+ "status.noActive": "当前未启用调整",
4994
+ "status.activated": "已启用",
4995
+ "status.deactivated": "已关闭",
4996
+ "section.essentials": "最常用",
4997
+ "section.essentials.desc": "先从对比度、文字大小和键盘支持开始。",
4998
+ "section.support": "阅读与导航",
4999
+ "section.support.desc": "用于聚焦、减少动画和查看页面结构的工具。",
5000
+ "section.ai": "AI 辅助",
5001
+ "section.ai.desc": "简化内容、生成替代文本并扫描当前页面。",
5002
+ "control.mostUsed": "最常用",
5003
+ "control.chooseMode": "选择模式",
5004
+ "control.default": "默认",
5005
+ "contrast.mode.light": "浅色高对比",
5006
+ "contrast.mode.dark": "深色高对比",
5007
+ "contrast.mode.high": "高对比",
5008
+ "feature.contrast": "对比度",
5009
+ "feature.textSize": "更大文字",
5010
+ "feature.keyboardNav": "键盘导航",
5011
+ "feature.focusHighlight": "焦点高亮",
5012
+ "feature.linkHighlight": "突出链接",
5013
+ "feature.animationStop": "停止动画",
5014
+ "feature.readingGuide": "阅读指引线",
5015
+ "feature.readingMask": "阅读遮罩",
5016
+ "feature.hideImages": "隐藏图片",
5017
+ "feature.bigCursor": "大号光标",
5018
+ "feature.pageStructure": "页面结构",
5019
+ "feature.tts": "朗读",
5020
+ "feature.textSimplify": "简化文本",
5021
+ "feature.altText": "生成替代文本",
5022
+ "feature.autoScan": "WCAG 扫描"
5023
+ }),
5024
+ hi: withEnglish({
5025
+ "widget.title": "सुलभता",
5026
+ "widget.subtitle": "इस पेज पर कंट्रास्ट, टेक्स्ट और नेविगेशन समायोजित करें",
5027
+ "widget.open": "सुलभता सेटिंग खोलें",
5028
+ "widget.close": "बंद करें",
5029
+ "widget.reset": "सब रीसेट करें",
5030
+ "widget.resetConfirm": "सभी बदलाव रीसेट हो गए",
5031
+ "widget.poweredBy": "Accessify-Widget द्वारा संचालित",
5032
+ "widget.statement": "एक्सेसिबिलिटी स्टेटमेंट",
5033
+ "widget.language": "भाषा",
5034
+ "status.active": "{count} सक्रिय",
5035
+ "status.noActive": "कोई बदलाव सक्रिय नहीं",
5036
+ "status.activated": "सक्रिय",
5037
+ "status.deactivated": "निष्क्रिय",
5038
+ "section.essentials": "सबसे ज्यादा उपयोग",
5039
+ "section.essentials.desc": "कंट्रास्ट, टेक्स्ट साइज और कीबोर्ड सहायता से शुरू करें।",
5040
+ "section.support": "पढ़ना और नेविगेशन",
5041
+ "section.support.desc": "फोकस, कम मोशन और पेज स्ट्रक्चर के लिए टूल।",
5042
+ "section.ai": "AI सहायता",
5043
+ "section.ai.desc": "कंटेंट सरल करें, ऑल्ट टेक्स्ट बनाएं और मौजूदा पेज स्कैन करें।",
5044
+ "control.mostUsed": "सबसे उपयोगी",
5045
+ "control.chooseMode": "मोड चुनें",
5046
+ "control.default": "डिफ़ॉल्ट",
5047
+ "contrast.mode.light": "लाइट कंट्रास्ट",
5048
+ "contrast.mode.dark": "डार्क कंट्रास्ट",
5049
+ "contrast.mode.high": "हाई कंट्रास्ट",
5050
+ "feature.contrast": "कंट्रास्ट",
5051
+ "feature.textSize": "बड़ा टेक्स्ट",
5052
+ "feature.keyboardNav": "कीबोर्ड नेविगेशन",
5053
+ "feature.focusHighlight": "फोकस हाइलाइट",
5054
+ "feature.linkHighlight": "लिंक हाइलाइट",
5055
+ "feature.animationStop": "एनिमेशन रोकें",
5056
+ "feature.readingGuide": "रीडिंग गाइड",
5057
+ "feature.readingMask": "रीडिंग मास्क",
5058
+ "feature.hideImages": "तस्वीरें छिपाएँ",
5059
+ "feature.bigCursor": "बड़ा कर्सर",
5060
+ "feature.pageStructure": "पेज संरचना",
5061
+ "feature.tts": "जोर से पढ़ें",
5062
+ "feature.textSimplify": "टेक्स्ट सरल करें",
5063
+ "feature.altText": "ऑल्ट-टेक्स्ट बनाएँ",
5064
+ "feature.autoScan": "WCAG स्कैन"
5065
+ }),
5066
+ es: withEnglish({
5067
+ "widget.title": "Accesibilidad",
5068
+ "widget.subtitle": "Ajusta contraste, texto y navegacion en esta pagina",
5069
+ "widget.open": "Abrir ajustes de accesibilidad",
5070
+ "widget.close": "Cerrar",
5071
+ "widget.reset": "Restablecer todo",
5072
+ "widget.resetConfirm": "Se restablecieron todos los ajustes",
5073
+ "widget.poweredBy": "Impulsado por Accessify-Widget",
5074
+ "widget.statement": "Declaracion de accesibilidad",
5075
+ "widget.language": "Idioma",
5076
+ "status.active": "{count} activas",
5077
+ "status.noActive": "No hay ajustes activos",
5078
+ "status.activated": "activado",
5079
+ "status.deactivated": "desactivado",
5080
+ "section.essentials": "Lo mas usado",
5081
+ "section.essentials.desc": "Empieza con contraste, tamano de texto y apoyo para teclado.",
5082
+ "section.support": "Lectura y navegacion",
5083
+ "section.support.desc": "Herramientas para foco, menos movimiento y estructura de pagina.",
5084
+ "section.ai": "Asistencia de IA",
5085
+ "section.ai.desc": "Simplifica contenido, genera texto alternativo y analiza la pagina actual.",
5086
+ "control.mostUsed": "Mas usado",
5087
+ "control.chooseMode": "Elegir modo",
5088
+ "control.default": "Predeterminado",
5089
+ "contrast.mode.light": "Contraste claro",
5090
+ "contrast.mode.dark": "Contraste oscuro",
5091
+ "contrast.mode.high": "Alto contraste",
5092
+ "feature.contrast": "Contraste",
5093
+ "feature.textSize": "Texto mas grande",
5094
+ "feature.keyboardNav": "Navegacion por teclado",
5095
+ "feature.focusHighlight": "Resaltar foco",
5096
+ "feature.linkHighlight": "Resaltar enlaces",
5097
+ "feature.animationStop": "Detener animaciones",
5098
+ "feature.readingGuide": "Guia de lectura",
5099
+ "feature.readingMask": "Mascara de lectura",
5100
+ "feature.hideImages": "Ocultar imagenes",
5101
+ "feature.bigCursor": "Cursor grande",
5102
+ "feature.pageStructure": "Estructura de pagina",
5103
+ "feature.tts": "Lectura en voz alta",
5104
+ "feature.textSimplify": "Simplificar texto",
5105
+ "feature.altText": "Generar texto alternativo",
5106
+ "feature.autoScan": "Escaneo WCAG"
5107
+ }),
5108
+ fr: withEnglish({
5109
+ "widget.title": "Accessibilite",
5110
+ "widget.subtitle": "Ajustez le contraste, le texte et la navigation sur cette page",
5111
+ "widget.open": "Ouvrir les reglages d'accessibilite",
5112
+ "widget.close": "Fermer",
5113
+ "widget.reset": "Tout reinitialiser",
5114
+ "widget.resetConfirm": "Tous les ajustements ont ete reinitialises",
5115
+ "widget.poweredBy": "Propulse par Accessify-Widget",
5116
+ "widget.statement": "Declaration d'accessibilite",
5117
+ "widget.language": "Langue",
5118
+ "status.active": "{count} actives",
5119
+ "status.noActive": "Aucun ajustement actif",
5120
+ "status.activated": "active",
5121
+ "status.deactivated": "desactive",
5122
+ "section.essentials": "Les plus utilises",
5123
+ "section.essentials.desc": "Commencez par le contraste, la taille du texte et le clavier.",
5124
+ "section.support": "Lecture et navigation",
5125
+ "section.support.desc": "Outils pour la mise au point, moins de mouvement et la structure de page.",
5126
+ "section.ai": "Assistance IA",
5127
+ "section.ai.desc": "Simplifiez le contenu, generez un texte alternatif et analysez la page.",
5128
+ "control.mostUsed": "Les plus utilises",
5129
+ "control.chooseMode": "Choisir un mode",
5130
+ "control.default": "Par defaut",
5131
+ "contrast.mode.light": "Contraste clair",
5132
+ "contrast.mode.dark": "Contraste sombre",
5133
+ "contrast.mode.high": "Contraste eleve",
5134
+ "feature.contrast": "Contraste",
5135
+ "feature.textSize": "Texte plus grand",
5136
+ "feature.keyboardNav": "Navigation clavier",
5137
+ "feature.focusHighlight": "Mise en evidence du focus",
5138
+ "feature.linkHighlight": "Mettre les liens en evidence",
5139
+ "feature.animationStop": "Arreter les animations",
5140
+ "feature.readingGuide": "Guide de lecture",
5141
+ "feature.readingMask": "Masque de lecture",
5142
+ "feature.hideImages": "Masquer les images",
5143
+ "feature.bigCursor": "Grand curseur",
5144
+ "feature.pageStructure": "Structure de page",
5145
+ "feature.tts": "Lecture audio",
5146
+ "feature.textSimplify": "Simplifier le texte",
5147
+ "feature.altText": "Generer un texte alternatif",
5148
+ "feature.autoScan": "Analyse WCAG"
5149
+ }),
5150
+ ar: withEnglish({
5151
+ "widget.title": "إمكانية الوصول",
5152
+ "widget.subtitle": "اضبط التباين والنص والتنقل في هذه الصفحة",
5153
+ "widget.open": "افتح إعدادات إمكانية الوصول",
5154
+ "widget.close": "إغلاق",
5155
+ "widget.reset": "إعادة ضبط الكل",
5156
+ "widget.resetConfirm": "تمت إعادة ضبط جميع التعديلات",
5157
+ "widget.poweredBy": "مدعوم بواسطة Accessify-Widget",
5158
+ "widget.statement": "بيان إمكانية الوصول",
5159
+ "widget.language": "اللغة",
5160
+ "status.active": "{count} عناصر نشطة",
5161
+ "status.noActive": "لا توجد تعديلات نشطة",
5162
+ "status.activated": "مفعل",
5163
+ "status.deactivated": "معطل",
5164
+ "section.essentials": "الأكثر استخدامًا",
5165
+ "section.essentials.desc": "ابدأ بالتباين وحجم النص ودعم لوحة المفاتيح.",
5166
+ "section.support": "القراءة والتنقل",
5167
+ "section.support.desc": "أدوات للتركيز وتقليل الحركة وبنية الصفحة.",
5168
+ "section.ai": "مساعدة الذكاء الاصطناعي",
5169
+ "section.ai.desc": "بسّط المحتوى وأنشئ نصًا بديلاً وافحص الصفحة الحالية.",
5170
+ "control.mostUsed": "الأكثر استخدامًا",
5171
+ "control.chooseMode": "اختر وضعًا",
5172
+ "control.default": "افتراضي",
5173
+ "contrast.mode.light": "تباين فاتح",
5174
+ "contrast.mode.dark": "تباين داكن",
5175
+ "contrast.mode.high": "تباين عالٍ",
5176
+ "feature.contrast": "التباين",
5177
+ "feature.textSize": "نص أكبر",
5178
+ "feature.keyboardNav": "تنقل بلوحة المفاتيح",
5179
+ "feature.focusHighlight": "إبراز التركيز",
5180
+ "feature.linkHighlight": "إبراز الروابط",
5181
+ "feature.animationStop": "إيقاف الرسوم المتحركة",
5182
+ "feature.readingGuide": "دليل القراءة",
5183
+ "feature.readingMask": "قناع القراءة",
5184
+ "feature.hideImages": "إخفاء الصور",
5185
+ "feature.bigCursor": "مؤشر كبير",
5186
+ "feature.pageStructure": "بنية الصفحة",
5187
+ "feature.tts": "القراءة بصوت عالٍ",
5188
+ "feature.textSimplify": "تبسيط النص",
5189
+ "feature.altText": "إنشاء نص بديل",
5190
+ "feature.autoScan": "فحص WCAG"
5191
+ }),
5192
+ bn: withEnglish({
5193
+ "widget.title": "অ্যাক্সেসিবিলিটি",
5194
+ "widget.subtitle": "এই পাতায় কনট্রাস্ট, টেক্সট এবং নেভিগেশন ঠিক করুন",
5195
+ "widget.open": "অ্যাক্সেসিবিলিটি সেটিংস খুলুন",
5196
+ "widget.close": "বন্ধ করুন",
5197
+ "widget.reset": "সব রিসেট করুন",
5198
+ "widget.resetConfirm": "সব পরিবর্তন রিসেট হয়েছে",
5199
+ "widget.poweredBy": "Accessify-Widget দ্বারা চালিত",
5200
+ "widget.statement": "অ্যাক্সেসিবিলিটি বিবৃতি",
5201
+ "widget.language": "ভাষা",
5202
+ "status.active": "{count} টি সক্রিয়",
5203
+ "status.noActive": "কোনও সমন্বয় সক্রিয় নেই",
5204
+ "status.activated": "সক্রিয়",
5205
+ "status.deactivated": "নিষ্ক্রিয়",
5206
+ "section.essentials": "সবচেয়ে ব্যবহৃত",
5207
+ "section.essentials.desc": "কনট্রাস্ট, টেক্সট সাইজ এবং কিবোর্ড সহায়তা দিয়ে শুরু করুন।",
5208
+ "section.support": "পড়া ও নেভিগেশন",
5209
+ "section.support.desc": "ফোকাস, কম মুভমেন্ট এবং পেজ স্ট্রাকচারের টুল।",
5210
+ "section.ai": "AI সহায়তা",
5211
+ "section.ai.desc": "কনটেন্ট সহজ করুন, অল্ট টেক্সট তৈরি করুন এবং পেজ স্ক্যান করুন।",
5212
+ "control.mostUsed": "সবচেয়ে ব্যবহৃত",
5213
+ "control.chooseMode": "মোড বেছে নিন",
5214
+ "control.default": "ডিফল্ট",
5215
+ "contrast.mode.light": "লাইট কনট্রাস্ট",
5216
+ "contrast.mode.dark": "ডার্ক কনট্রাস্ট",
5217
+ "contrast.mode.high": "হাই কনট্রাস্ট",
5218
+ "feature.contrast": "কনট্রাস্ট",
5219
+ "feature.textSize": "বড় টেক্সট",
5220
+ "feature.keyboardNav": "কিবোর্ড নেভিগেশন",
5221
+ "feature.focusHighlight": "ফোকাস হাইলাইট",
5222
+ "feature.linkHighlight": "লিংক হাইলাইট",
5223
+ "feature.animationStop": "অ্যানিমেশন বন্ধ",
5224
+ "feature.readingGuide": "রিডিং গাইড",
5225
+ "feature.readingMask": "রিডিং মাস্ক",
5226
+ "feature.hideImages": "ছবি লুকান",
5227
+ "feature.bigCursor": "বড় কার্সর",
5228
+ "feature.pageStructure": "পেজ স্ট্রাকচার",
5229
+ "feature.tts": "জোরে পড়া",
5230
+ "feature.textSimplify": "টেক্সট সহজ করুন",
5231
+ "feature.altText": "অল্ট-টেক্সট তৈরি",
5232
+ "feature.autoScan": "WCAG স্ক্যান"
5233
+ }),
5234
+ pt: withEnglish({
5235
+ "widget.title": "Acessibilidade",
5236
+ "widget.subtitle": "Ajuste contraste, texto e navegacao nesta pagina",
5237
+ "widget.open": "Abrir configuracoes de acessibilidade",
5238
+ "widget.close": "Fechar",
5239
+ "widget.reset": "Redefinir tudo",
5240
+ "widget.resetConfirm": "Todos os ajustes foram redefinidos",
5241
+ "widget.poweredBy": "Desenvolvido por Accessify-Widget",
5242
+ "widget.statement": "Declaracao de acessibilidade",
5243
+ "widget.language": "Idioma",
5244
+ "status.active": "{count} ativas",
5245
+ "status.noActive": "Nenhum ajuste ativo",
5246
+ "status.activated": "ativado",
5247
+ "status.deactivated": "desativado",
5248
+ "section.essentials": "Mais usados",
5249
+ "section.essentials.desc": "Comece com contraste, tamanho do texto e apoio ao teclado.",
5250
+ "section.support": "Leitura e navegacao",
5251
+ "section.support.desc": "Ferramentas para foco, menos movimento e estrutura da pagina.",
5252
+ "section.ai": "Assistencia de IA",
5253
+ "section.ai.desc": "Simplifique conteudo, gere texto alternativo e analise a pagina atual.",
5254
+ "control.mostUsed": "Mais usados",
5255
+ "control.chooseMode": "Escolher modo",
5256
+ "control.default": "Padrao",
5257
+ "contrast.mode.light": "Contraste claro",
5258
+ "contrast.mode.dark": "Contraste escuro",
5259
+ "contrast.mode.high": "Alto contraste",
5260
+ "feature.contrast": "Contraste",
5261
+ "feature.textSize": "Texto maior",
5262
+ "feature.keyboardNav": "Navegacao por teclado",
5263
+ "feature.focusHighlight": "Destaque de foco",
5264
+ "feature.linkHighlight": "Destacar links",
5265
+ "feature.animationStop": "Parar animacoes",
5266
+ "feature.readingGuide": "Guia de leitura",
5267
+ "feature.readingMask": "Mascara de leitura",
5268
+ "feature.hideImages": "Ocultar imagens",
5269
+ "feature.bigCursor": "Cursor grande",
5270
+ "feature.pageStructure": "Estrutura da pagina",
5271
+ "feature.tts": "Leitura em voz alta",
5272
+ "feature.textSimplify": "Simplificar texto",
5273
+ "feature.altText": "Gerar texto alternativo",
5274
+ "feature.autoScan": "Varredura WCAG"
5275
+ }),
5276
+ ru: withEnglish({
5277
+ "widget.title": "Доступность",
5278
+ "widget.subtitle": "Настройте контраст, текст и навигацию на этой странице",
5279
+ "widget.open": "Открыть настройки доступности",
5280
+ "widget.close": "Закрыть",
5281
+ "widget.reset": "Сбросить все",
5282
+ "widget.resetConfirm": "Все настройки сброшены",
5283
+ "widget.poweredBy": "Работает на Accessify-Widget",
5284
+ "widget.statement": "Заявление о доступности",
5285
+ "widget.language": "Язык",
5286
+ "status.active": "Активно: {count}",
5287
+ "status.noActive": "Нет активных настроек",
5288
+ "status.activated": "включено",
5289
+ "status.deactivated": "выключено",
5290
+ "section.essentials": "Самое используемое",
5291
+ "section.essentials.desc": "Начните с контраста, размера текста и поддержки клавиатуры.",
5292
+ "section.support": "Чтение и навигация",
5293
+ "section.support.desc": "Инструменты для фокуса, уменьшения движения и структуры страницы.",
5294
+ "section.ai": "Помощь ИИ",
5295
+ "section.ai.desc": "Упрощайте текст, создавайте alt-текст и проверяйте текущую страницу.",
5296
+ "control.mostUsed": "Популярное",
5297
+ "control.chooseMode": "Выберите режим",
5298
+ "control.default": "По умолчанию",
5299
+ "contrast.mode.light": "Светлый контраст",
5300
+ "contrast.mode.dark": "Темный контраст",
5301
+ "contrast.mode.high": "Высокий контраст",
5302
+ "feature.contrast": "Контраст",
5303
+ "feature.textSize": "Крупный текст",
5304
+ "feature.keyboardNav": "Навигация с клавиатуры",
5305
+ "feature.focusHighlight": "Подсветка фокуса",
5306
+ "feature.linkHighlight": "Выделить ссылки",
5307
+ "feature.animationStop": "Остановить анимацию",
5308
+ "feature.readingGuide": "Линейка для чтения",
5309
+ "feature.readingMask": "Маска чтения",
5310
+ "feature.hideImages": "Скрыть изображения",
5311
+ "feature.bigCursor": "Большой курсор",
5312
+ "feature.pageStructure": "Структура страницы",
5313
+ "feature.tts": "Озвучивание",
5314
+ "feature.textSimplify": "Упростить текст",
5315
+ "feature.altText": "Создать alt-текст",
5316
+ "feature.autoScan": "Проверка WCAG"
5317
+ }),
5318
+ ur: withEnglish({
5319
+ "widget.title": "رسائی",
5320
+ "widget.subtitle": "اس صفحے پر کنٹراسٹ، متن اور نیویگیشن کو ایڈجسٹ کریں",
5321
+ "widget.open": "رسائی کی ترتیبات کھولیں",
5322
+ "widget.close": "بند کریں",
5323
+ "widget.reset": "سب ری سیٹ کریں",
5324
+ "widget.resetConfirm": "تمام تبدیلیاں ری سیٹ ہو گئیں",
5325
+ "widget.poweredBy": "Accessify-Widget کے ذریعے",
5326
+ "widget.statement": "رسائی کا بیان",
5327
+ "widget.language": "زبان",
5328
+ "status.active": "{count} فعال",
5329
+ "status.noActive": "کوئی تبدیلی فعال نہیں",
5330
+ "status.activated": "فعال",
5331
+ "status.deactivated": "غیر فعال",
5332
+ "section.essentials": "سب سے زیادہ استعمال",
5333
+ "section.essentials.desc": "کنٹراسٹ، متن کے سائز اور کی بورڈ مدد سے شروع کریں۔",
5334
+ "section.support": "مطالعہ اور نیویگیشن",
5335
+ "section.support.desc": "فوکس، کم حرکت اور صفحہ ساخت کے لیے ٹولز۔",
5336
+ "section.ai": "AI مدد",
5337
+ "section.ai.desc": "مواد آسان کریں، آلٹ ٹیکسٹ بنائیں اور موجودہ صفحہ اسکین کریں۔",
5338
+ "control.mostUsed": "زیادہ استعمال",
5339
+ "control.chooseMode": "موڈ منتخب کریں",
5340
+ "control.default": "ڈیفالٹ",
5341
+ "contrast.mode.light": "لائٹ کنٹراسٹ",
5342
+ "contrast.mode.dark": "ڈارک کنٹراسٹ",
5343
+ "contrast.mode.high": "ہائی کنٹراسٹ",
5344
+ "feature.contrast": "کنٹراسٹ",
5345
+ "feature.textSize": "بڑا متن",
5346
+ "feature.keyboardNav": "کی بورڈ نیویگیشن",
5347
+ "feature.focusHighlight": "فوکس ہائی لائٹ",
5348
+ "feature.linkHighlight": "لنکس نمایاں کریں",
5349
+ "feature.animationStop": "اینیمیشن روکیں",
5350
+ "feature.readingGuide": "مطالعہ گائیڈ",
5351
+ "feature.readingMask": "مطالعہ ماسک",
5352
+ "feature.hideImages": "تصاویر چھپائیں",
5353
+ "feature.bigCursor": "بڑا کرسر",
5354
+ "feature.pageStructure": "صفحہ ساخت",
5355
+ "feature.tts": "بلند آواز میں پڑھیں",
5356
+ "feature.textSimplify": "متن آسان کریں",
5357
+ "feature.altText": "آلٹ ٹیکسٹ بنائیں",
5358
+ "feature.autoScan": "WCAG اسکین"
5359
+ }),
5360
+ id: withEnglish({
5361
+ "widget.title": "Aksesibilitas",
5362
+ "widget.subtitle": "Atur kontras, teks, dan navigasi di halaman ini",
5363
+ "widget.open": "Buka pengaturan aksesibilitas",
5364
+ "widget.close": "Tutup",
5365
+ "widget.reset": "Reset semua",
5366
+ "widget.resetConfirm": "Semua penyesuaian telah direset",
5367
+ "widget.poweredBy": "Didukung oleh Accessify-Widget",
5368
+ "widget.statement": "Pernyataan aksesibilitas",
5369
+ "widget.language": "Bahasa",
5370
+ "status.active": "{count} aktif",
5371
+ "status.noActive": "Tidak ada penyesuaian aktif",
5372
+ "status.activated": "aktif",
5373
+ "status.deactivated": "nonaktif",
5374
+ "section.essentials": "Paling sering dipakai",
5375
+ "section.essentials.desc": "Mulai dari kontras, ukuran teks, dan dukungan keyboard.",
5376
+ "section.support": "Membaca dan navigasi",
5377
+ "section.support.desc": "Alat untuk fokus, gerakan rendah, dan struktur halaman.",
5378
+ "section.ai": "Bantuan AI",
5379
+ "section.ai.desc": "Sederhanakan konten, buat alt text, dan pindai halaman saat ini.",
5380
+ "control.mostUsed": "Paling sering",
5381
+ "control.chooseMode": "Pilih mode",
5382
+ "control.default": "Default",
5383
+ "contrast.mode.light": "Kontras terang",
5384
+ "contrast.mode.dark": "Kontras gelap",
5385
+ "contrast.mode.high": "Kontras tinggi",
5386
+ "feature.contrast": "Kontras",
5387
+ "feature.textSize": "Teks lebih besar",
5388
+ "feature.keyboardNav": "Navigasi keyboard",
5389
+ "feature.focusHighlight": "Sorot fokus",
5390
+ "feature.linkHighlight": "Sorot tautan",
5391
+ "feature.animationStop": "Hentikan animasi",
5392
+ "feature.readingGuide": "Panduan baca",
5393
+ "feature.readingMask": "Masker baca",
5394
+ "feature.hideImages": "Sembunyikan gambar",
5395
+ "feature.bigCursor": "Kursor besar",
5396
+ "feature.pageStructure": "Struktur halaman",
5397
+ "feature.tts": "Bacakan",
5398
+ "feature.textSimplify": "Sederhanakan teks",
5399
+ "feature.altText": "Buat alt-text",
5400
+ "feature.autoScan": "Pindai WCAG"
5401
+ }),
5402
+ ja: withEnglish({
5403
+ "widget.title": "アクセシビリティ",
5404
+ "widget.subtitle": "このページのコントラスト、文字、ナビゲーションを調整します",
5405
+ "widget.open": "アクセシビリティ設定を開く",
5406
+ "widget.close": "閉じる",
5407
+ "widget.reset": "すべてリセット",
5408
+ "widget.resetConfirm": "すべての調整をリセットしました",
5409
+ "widget.poweredBy": "Accessify-Widget 提供",
5410
+ "widget.statement": "アクセシビリティ宣言",
5411
+ "widget.language": "言語",
5412
+ "status.active": "{count} 件が有効",
5413
+ "status.noActive": "有効な調整はありません",
5414
+ "status.activated": "有効",
5415
+ "status.deactivated": "無効",
5416
+ "section.essentials": "よく使う設定",
5417
+ "section.essentials.desc": "まずはコントラスト、文字サイズ、キーボード支援から始めてください。",
5418
+ "section.support": "読みやすさとナビゲーション",
5419
+ "section.support.desc": "フォーカス、動きの抑制、ページ構造のためのツールです。",
5420
+ "section.ai": "AI 支援",
5421
+ "section.ai.desc": "文章を簡単にし、代替テキストを生成し、現在のページを確認します。",
5422
+ "control.mostUsed": "よく使う",
5423
+ "control.chooseMode": "モードを選択",
5424
+ "control.default": "標準",
5425
+ "contrast.mode.light": "ライトコントラスト",
5426
+ "contrast.mode.dark": "ダークコントラスト",
5427
+ "contrast.mode.high": "ハイコントラスト",
5428
+ "feature.contrast": "コントラスト",
5429
+ "feature.textSize": "大きな文字",
5430
+ "feature.keyboardNav": "キーボード操作",
5431
+ "feature.focusHighlight": "フォーカス強調",
5432
+ "feature.linkHighlight": "リンク強調",
5433
+ "feature.animationStop": "アニメーション停止",
5434
+ "feature.readingGuide": "読書ガイド",
5435
+ "feature.readingMask": "読書マスク",
5436
+ "feature.hideImages": "画像を隠す",
5437
+ "feature.bigCursor": "大きいカーソル",
5438
+ "feature.pageStructure": "ページ構造",
5439
+ "feature.tts": "読み上げ",
5440
+ "feature.textSimplify": "文章を簡単にする",
5441
+ "feature.altText": "代替テキスト生成",
5442
+ "feature.autoScan": "WCAG スキャン"
5443
+ }),
5444
+ pcm: withEnglish({
5445
+ "widget.title": "Accessibility",
5446
+ "widget.subtitle": "Adjust contrast, text and navigation for dis page",
5447
+ "widget.open": "Open accessibility settings",
5448
+ "widget.close": "Close",
5449
+ "widget.reset": "Reset all",
5450
+ "widget.resetConfirm": "All adjustments don reset",
5451
+ "widget.poweredBy": "Powered by Accessify-Widget",
5452
+ "widget.statement": "Accessibility statement",
5453
+ "widget.language": "Language",
5454
+ "status.active": "{count} active",
5455
+ "status.noActive": "No adjustment dey active",
5456
+ "status.activated": "activated",
5457
+ "status.deactivated": "deactivated",
5458
+ "section.essentials": "Wetin people use pass",
5459
+ "section.essentials.desc": "Start with contrast, text size and keyboard support.",
5460
+ "section.support": "Reading and navigation",
5461
+ "section.support.desc": "Tools for focus, reduced motion and page structure.",
5462
+ "section.ai": "AI help",
5463
+ "section.ai.desc": "Simplify content, generate alt text and scan dis page.",
5464
+ "control.mostUsed": "Most used",
5465
+ "control.chooseMode": "Choose mode",
5466
+ "control.default": "Default",
5467
+ "contrast.mode.light": "Light contrast",
5468
+ "contrast.mode.dark": "Dark contrast",
5469
+ "contrast.mode.high": "High contrast",
5470
+ "feature.contrast": "Contrast",
5471
+ "feature.textSize": "Bigger text",
5472
+ "feature.keyboardNav": "Keyboard navigation",
5473
+ "feature.focusHighlight": "Focus highlight",
5474
+ "feature.linkHighlight": "Highlight links",
5475
+ "feature.animationStop": "Stop animations",
5476
+ "feature.readingGuide": "Reading guide",
5477
+ "feature.readingMask": "Reading mask",
5478
+ "feature.hideImages": "Hide images",
5479
+ "feature.bigCursor": "Big cursor",
5480
+ "feature.pageStructure": "Page structure",
5481
+ "feature.tts": "Read aloud",
5482
+ "feature.textSimplify": "Simplify text",
5483
+ "feature.altText": "Generate alt-text",
5484
+ "feature.autoScan": "WCAG scan"
5485
+ }),
5486
+ mr: withEnglish({
5487
+ "widget.title": "प्रवेशयोग्यता",
5488
+ "widget.subtitle": "या पानावर कॉन्ट्रास्ट, मजकूर आणि नेव्हिगेशन समायोजित करा",
5489
+ "widget.open": "प्रवेशयोग्यता सेटिंग्ज उघडा",
5490
+ "widget.close": "बंद करा",
5491
+ "widget.reset": "सर्व रीसेट करा",
5492
+ "widget.resetConfirm": "सर्व बदल रीसेट झाले",
5493
+ "widget.poweredBy": "Accessify-Widget द्वारे समर्थित",
5494
+ "widget.statement": "प्रवेशयोग्यता निवेदन",
5495
+ "widget.language": "भाषा",
5496
+ "status.active": "{count} सक्रिय",
5497
+ "status.noActive": "कोणतेही बदल सक्रिय नाहीत",
5498
+ "status.activated": "सक्रिय",
5499
+ "status.deactivated": "निष्क्रिय",
5500
+ "section.essentials": "सर्वात जास्त वापरलेले",
5501
+ "section.essentials.desc": "कॉन्ट्रास्ट, मजकूर आकार आणि कीबोर्ड सहाय्यापासून सुरुवात करा.",
5502
+ "section.support": "वाचन आणि नेव्हिगेशन",
5503
+ "section.support.desc": "फोकस, कमी हालचाल आणि पृष्ठरचना यासाठी साधने.",
5504
+ "section.ai": "AI मदत",
5505
+ "section.ai.desc": "मजकूर सोपा करा, alt-text तयार करा आणि हे पान स्कॅन करा.",
5506
+ "control.mostUsed": "सर्वाधिक वापरलेले",
5507
+ "control.chooseMode": "मोड निवडा",
5508
+ "control.default": "डीफॉल्ट",
5509
+ "contrast.mode.light": "लाईट कॉन्ट्रास्ट",
5510
+ "contrast.mode.dark": "डार्क कॉन्ट्रास्ट",
5511
+ "contrast.mode.high": "हाय कॉन्ट्रास्ट",
5512
+ "feature.contrast": "कॉन्ट्रास्ट",
5513
+ "feature.textSize": "मोठा मजकूर",
5514
+ "feature.keyboardNav": "कीबोर्ड नेव्हिगेशन",
5515
+ "feature.focusHighlight": "फोकस हायलाइट",
5516
+ "feature.linkHighlight": "लिंक हायलाइट",
5517
+ "feature.animationStop": "अ‍ॅनिमेशन थांबवा",
5518
+ "feature.readingGuide": "वाचन मार्गदर्शक",
5519
+ "feature.readingMask": "वाचन मास्क",
5520
+ "feature.hideImages": "प्रतिमा लपवा",
5521
+ "feature.bigCursor": "मोठा कर्सर",
5522
+ "feature.pageStructure": "पृष्ठरचना",
5523
+ "feature.tts": "मोठ्याने वाचा",
5524
+ "feature.textSimplify": "मजकूर सोपा करा",
5525
+ "feature.altText": "alt-text तयार करा",
5526
+ "feature.autoScan": "WCAG स्कॅन"
5527
+ }),
5528
+ te: withEnglish({
5529
+ "widget.title": "అందుబాటు",
5530
+ "widget.subtitle": "ఈ పేజీలో కాంట్రాస్ట్, టెక్స్ట్ మరియు నావిగేషన్‌ను సర్దుబాటు చేయండి",
5531
+ "widget.open": "అందుబాటు సెట్టింగ్స్ తెరువు",
5532
+ "widget.close": "మూసివేయి",
5533
+ "widget.reset": "అన్నీ రీసెట్ చేయి",
5534
+ "widget.resetConfirm": "అన్ని మార్పులు రీసెట్ అయ్యాయి",
5535
+ "widget.poweredBy": "Accessify-Widget ద్వారా",
5536
+ "widget.statement": "అందుబాటు ప్రకటన",
5537
+ "widget.language": "భాష",
5538
+ "status.active": "{count} సక్రియం",
5539
+ "status.noActive": "ఏ మార్పూ సక్రియంగా లేదు",
5540
+ "status.activated": "సక్రియం",
5541
+ "status.deactivated": "నిష్క్రియం",
5542
+ "section.essentials": "ఎక్కువగా ఉపయోగించేవి",
5543
+ "section.essentials.desc": "కాంట్రాస్ట్, టెక్స్ట్ సైజు మరియు కీబోర్డ్ సహాయంతో మొదలుపెట్టండి.",
5544
+ "section.support": "చదువు మరియు నావిగేషన్",
5545
+ "section.support.desc": "ఫోకస్, తక్కువ మోషన్ మరియు పేజీ నిర్మాణానికి టూల్స్.",
5546
+ "section.ai": "AI సహాయం",
5547
+ "section.ai.desc": "కంటెంట్‌ను సులభతరం చేయండి, alt-text తయారు చేయండి, ఈ పేజీని స్కాన్ చేయండి.",
5548
+ "control.mostUsed": "ఎక్కువ ఉపయోగం",
5549
+ "control.chooseMode": "మోడ్ ఎంచుకోండి",
5550
+ "control.default": "డిఫాల్ట్",
5551
+ "contrast.mode.light": "లైట్ కాంట్రాస్ట్",
5552
+ "contrast.mode.dark": "డార్క్ కాంట్రాస్ట్",
5553
+ "contrast.mode.high": "హై కాంట్రాస్ట్",
5554
+ "feature.contrast": "కాంట్రాస్ట్",
5555
+ "feature.textSize": "పెద్ద టెక్స్ట్",
5556
+ "feature.keyboardNav": "కీబోర్డ్ నావిగేషన్",
5557
+ "feature.focusHighlight": "ఫోకస్ హైలైట్",
5558
+ "feature.linkHighlight": "లింక్ హైలైట్",
5559
+ "feature.animationStop": "యానిమేషన్స్ ఆపండి",
5560
+ "feature.readingGuide": "రీడింగ్ గైడ్",
5561
+ "feature.readingMask": "రీడింగ్ మాస్క్",
5562
+ "feature.hideImages": "చిత్రాలు దాచు",
5563
+ "feature.bigCursor": "పెద్ద కర్సర్",
5564
+ "feature.pageStructure": "పేజీ నిర్మాణం",
5565
+ "feature.tts": "గట్టిగా చదవండి",
5566
+ "feature.textSimplify": "టెక్స్ట్ సులభతరం చేయి",
5567
+ "feature.altText": "alt-text రూపొందించు",
5568
+ "feature.autoScan": "WCAG స్కాన్"
5569
+ }),
5570
+ tr: withEnglish({
5571
+ "widget.title": "Erisilebilirlik",
5572
+ "widget.subtitle": "Bu sayfada kontrast, metin ve gezinmeyi ayarlayin",
5573
+ "widget.open": "Erisilebilirlik ayarlarini ac",
5574
+ "widget.close": "Kapat",
5575
+ "widget.reset": "Tumunu sifirla",
5576
+ "widget.resetConfirm": "Tum ayarlar sifirlandi",
5577
+ "widget.poweredBy": "Accessify-Widget ile calisir",
5578
+ "widget.statement": "Erisilebilirlik bildirimi",
5579
+ "widget.language": "Dil",
5580
+ "status.active": "{count} etkin",
5581
+ "status.noActive": "Etkin ayar yok",
5582
+ "status.activated": "etkin",
5583
+ "status.deactivated": "devre disi",
5584
+ "section.essentials": "En cok kullanilanlar",
5585
+ "section.essentials.desc": "Kontrast, yazi boyutu ve klavye destegi ile baslayin.",
5586
+ "section.support": "Okuma ve gezinme",
5587
+ "section.support.desc": "Odak, azaltulmis hareket ve sayfa yapisi icin araclar.",
5588
+ "section.ai": "YZ yardimi",
5589
+ "section.ai.desc": "Icerigi sadeletir, alt metin olusturur ve mevcut sayfayi tarar.",
5590
+ "control.mostUsed": "En cok kullanilan",
5591
+ "control.chooseMode": "Mod sec",
5592
+ "control.default": "Varsayilan",
5593
+ "contrast.mode.light": "Acik kontrast",
5594
+ "contrast.mode.dark": "Koyu kontrast",
5595
+ "contrast.mode.high": "Yuksek kontrast",
5596
+ "feature.contrast": "Kontrast",
5597
+ "feature.textSize": "Buyuk metin",
5598
+ "feature.keyboardNav": "Klavye gezintisi",
5599
+ "feature.focusHighlight": "Odak vurgusu",
5600
+ "feature.linkHighlight": "Baglantilari vurgula",
5601
+ "feature.animationStop": "Animasyonlari durdur",
5602
+ "feature.readingGuide": "Okuma kilavuzu",
5603
+ "feature.readingMask": "Okuma maskesi",
5604
+ "feature.hideImages": "Gorselleri gizle",
5605
+ "feature.bigCursor": "Buyuk imlec",
5606
+ "feature.pageStructure": "Sayfa yapisi",
5607
+ "feature.tts": "Sesli oku",
5608
+ "feature.textSimplify": "Metni sadeletir",
5609
+ "feature.altText": "Alt metin olustur",
5610
+ "feature.autoScan": "WCAG taramasi"
5611
+ }),
5612
+ ta: withEnglish({
5613
+ "widget.title": "அணுகல்திறன்",
5614
+ "widget.subtitle": "இந்த பக்கத்தில் எதிரொலி, உரை மற்றும் வழிசெலுத்தலை மாற்றுங்கள்",
5615
+ "widget.open": "அணுகல்திறன் அமைப்புகளை திறக்கவும்",
5616
+ "widget.close": "மூடு",
5617
+ "widget.reset": "அனைத்தையும் மீட்டமை",
5618
+ "widget.resetConfirm": "அனைத்து மாற்றங்களும் மீட்டமைக்கப்பட்டன",
5619
+ "widget.poweredBy": "Accessify-Widget மூலம்",
5620
+ "widget.statement": "அணுகல்திறன் அறிக்கை",
5621
+ "widget.language": "மொழி",
5622
+ "status.active": "{count} செயலில்",
5623
+ "status.noActive": "செயலில் மாற்றங்கள் இல்லை",
5624
+ "status.activated": "செயலில்",
5625
+ "status.deactivated": "செயலற்றது",
5626
+ "section.essentials": "அதிகம் பயன்படுத்தப்படும்",
5627
+ "section.essentials.desc": "எதிரொலி, எழுத்து அளவு மற்றும் விசைப்பலகை உதவியுடன் தொடங்குங்கள்.",
5628
+ "section.support": "வாசிப்பு மற்றும் வழிசெலுத்தல்",
5629
+ "section.support.desc": "கவனம், குறைந்த இயக்கம் மற்றும் பக்க அமைப்புக்கான கருவிகள்.",
5630
+ "section.ai": "AI உதவி",
5631
+ "section.ai.desc": "உள்ளடக்கத்தை எளிமைப்படுத்தி, alt-text உருவாக்கி, இந்த பக்கத்தை ஸ்கேன் செய்யுங்கள்.",
5632
+ "control.mostUsed": "அதிகம் பயன்படுத்தப்படும்",
5633
+ "control.chooseMode": "முறையை தேர்வு செய்",
5634
+ "control.default": "இயல்புநிலை",
5635
+ "contrast.mode.light": "ஒளி எதிரொலி",
5636
+ "contrast.mode.dark": "இருண்ட எதிரொலி",
5637
+ "contrast.mode.high": "உயர் எதிரொலி",
5638
+ "feature.contrast": "எதிரொலி",
5639
+ "feature.textSize": "பெரிய எழுத்து",
5640
+ "feature.keyboardNav": "விசைப்பலகை வழிசெலுத்தல்",
5641
+ "feature.focusHighlight": "கவனத்தை வெளிப்படுத்து",
5642
+ "feature.linkHighlight": "இணைப்புகளை வெளிப்படுத்து",
5643
+ "feature.animationStop": "அனிமேஷனை நிறுத்து",
5644
+ "feature.readingGuide": "வாசிப்பு வழிகாட்டி",
5645
+ "feature.readingMask": "வாசிப்பு மறைப்பு",
5646
+ "feature.hideImages": "படங்களை மறை",
5647
+ "feature.bigCursor": "பெரிய கர்சர்",
5648
+ "feature.pageStructure": "பக்க அமைப்பு",
5649
+ "feature.tts": "சத்தமாக வாசி",
5650
+ "feature.textSimplify": "உரையை எளிமைப்படுத்து",
5651
+ "feature.altText": "alt-text உருவாக்கு",
5652
+ "feature.autoScan": "WCAG ஸ்கேன்"
5653
+ }),
5654
+ vi: withEnglish({
5655
+ "widget.title": "Tro nang truy cap",
5656
+ "widget.subtitle": "Dieu chinh tuong phan, van ban va dieu huong tren trang nay",
5657
+ "widget.open": "Mo cai dat tro nang truy cap",
5658
+ "widget.close": "Dong",
5659
+ "widget.reset": "Dat lai tat ca",
5660
+ "widget.resetConfirm": "Da dat lai moi dieu chinh",
5661
+ "widget.poweredBy": "Van hanh boi Accessify-Widget",
5662
+ "widget.statement": "Tuyen bo tro nang truy cap",
5663
+ "widget.language": "Ngon ngu",
5664
+ "status.active": "{count} muc dang bat",
5665
+ "status.noActive": "Khong co dieu chinh nao dang bat",
5666
+ "status.activated": "da bat",
5667
+ "status.deactivated": "da tat",
5668
+ "section.essentials": "Dung nhieu nhat",
5669
+ "section.essentials.desc": "Bat dau voi tuong phan, co chu va ho tro ban phim.",
5670
+ "section.support": "Doc va dieu huong",
5671
+ "section.support.desc": "Cong cu cho tap trung, giam chuyen dong va cau truc trang.",
5672
+ "section.ai": "Ho tro AI",
5673
+ "section.ai.desc": "Don gian hoa noi dung, tao alt-text va quet trang hien tai.",
5674
+ "control.mostUsed": "Pho bien",
5675
+ "control.chooseMode": "Chon che do",
5676
+ "control.default": "Mac dinh",
5677
+ "contrast.mode.light": "Tuong phan sang",
5678
+ "contrast.mode.dark": "Tuong phan toi",
5679
+ "contrast.mode.high": "Tuong phan cao",
5680
+ "feature.contrast": "Tuong phan",
5681
+ "feature.textSize": "Chu lon hon",
5682
+ "feature.keyboardNav": "Dieu huong ban phim",
5683
+ "feature.focusHighlight": "Noi bat tieu diem",
5684
+ "feature.linkHighlight": "Noi bat lien ket",
5685
+ "feature.animationStop": "Dung hieu ung",
5686
+ "feature.readingGuide": "Thuoc doc",
5687
+ "feature.readingMask": "Mat na doc",
5688
+ "feature.hideImages": "An hinh anh",
5689
+ "feature.bigCursor": "Con tro lon",
5690
+ "feature.pageStructure": "Cau truc trang",
5691
+ "feature.tts": "Doc thanh tieng",
5692
+ "feature.textSimplify": "Don gian hoa van ban",
5693
+ "feature.altText": "Tao alt-text",
5694
+ "feature.autoScan": "Quet WCAG"
5695
+ }),
5696
+ ko: withEnglish({
5697
+ "widget.title": "접근성",
5698
+ "widget.subtitle": "이 페이지의 대비, 텍스트, 내비게이션을 조정하세요",
5699
+ "widget.open": "접근성 설정 열기",
5700
+ "widget.close": "닫기",
5701
+ "widget.reset": "모두 재설정",
5702
+ "widget.resetConfirm": "모든 조정이 재설정되었습니다",
5703
+ "widget.poweredBy": "Accessify-Widget 제공",
5704
+ "widget.statement": "접근성 안내문",
5705
+ "widget.language": "언어",
5706
+ "status.active": "{count}개 활성",
5707
+ "status.noActive": "활성화된 조정이 없습니다",
5708
+ "status.activated": "활성화됨",
5709
+ "status.deactivated": "비활성화됨",
5710
+ "section.essentials": "가장 많이 사용됨",
5711
+ "section.essentials.desc": "대비, 글자 크기, 키보드 지원부터 시작하세요.",
5712
+ "section.support": "읽기 및 내비게이션",
5713
+ "section.support.desc": "초점, 움직임 감소, 페이지 구조를 위한 도구입니다.",
5714
+ "section.ai": "AI 지원",
5715
+ "section.ai.desc": "콘텐츠를 쉽게 만들고 대체 텍스트를 생성하며 현재 페이지를 검사합니다.",
5716
+ "control.mostUsed": "가장 많이 사용됨",
5717
+ "control.chooseMode": "모드 선택",
5718
+ "control.default": "기본값",
5719
+ "contrast.mode.light": "라이트 대비",
5720
+ "contrast.mode.dark": "다크 대비",
5721
+ "contrast.mode.high": "고대비",
5722
+ "feature.contrast": "대비",
5723
+ "feature.textSize": "큰 글자",
5724
+ "feature.keyboardNav": "키보드 내비게이션",
5725
+ "feature.focusHighlight": "포커스 강조",
5726
+ "feature.linkHighlight": "링크 강조",
5727
+ "feature.animationStop": "애니메이션 중지",
5728
+ "feature.readingGuide": "읽기 가이드",
5729
+ "feature.readingMask": "읽기 마스크",
5730
+ "feature.hideImages": "이미지 숨기기",
5731
+ "feature.bigCursor": "큰 커서",
5732
+ "feature.pageStructure": "페이지 구조",
5733
+ "feature.tts": "소리 내어 읽기",
5734
+ "feature.textSimplify": "텍스트 단순화",
5735
+ "feature.altText": "대체 텍스트 생성",
5736
+ "feature.autoScan": "WCAG 검사"
5737
+ })
5738
+ };
5739
+ const LANGUAGE_OPTIONS = [
5740
+ { code: "en", label: "English" },
5741
+ { code: "zh", label: "中文" },
5742
+ { code: "hi", label: "हिन्दी" },
5743
+ { code: "es", label: "Español" },
5744
+ { code: "fr", label: "Français" },
5745
+ { code: "ar", label: "العربية" },
5746
+ { code: "bn", label: "বাংলা" },
5747
+ { code: "pt", label: "Português" },
5748
+ { code: "ru", label: "Русский" },
5749
+ { code: "ur", label: "اردو" },
5750
+ { code: "id", label: "Bahasa Indonesia" },
5751
+ { code: "de", label: "Deutsch" },
5752
+ { code: "ja", label: "日本語" },
5753
+ { code: "pcm", label: "Naijá" },
5754
+ { code: "mr", label: "मराठी" },
5755
+ { code: "te", label: "తెలుగు" },
5756
+ { code: "tr", label: "Türkçe" },
5757
+ { code: "ta", label: "தமிழ்" },
5758
+ { code: "vi", label: "Tiếng Việt" },
5759
+ { code: "ko", label: "한국어" }
5760
+ ];
5761
+ const RTL_LANGS = /* @__PURE__ */ new Set(["ar", "ur"]);
5762
+ let currentWidgetLang = "en";
4853
5763
  function getSupportedLang(lang) {
4854
5764
  if (!lang) return "en";
4855
- const normalized = lang.toLowerCase().split("-")[0];
4856
- return locales[normalized] ? normalized : "en";
5765
+ const normalized = lang.toLowerCase();
5766
+ if (locales[normalized]) return normalized;
5767
+ const base = normalized.split("-")[0];
5768
+ return locales[base] ? base : "en";
5769
+ }
5770
+ function setCurrentWidgetLang(lang) {
5771
+ currentWidgetLang = getSupportedLang(lang);
5772
+ }
5773
+ function getCurrentWidgetLang() {
5774
+ return currentWidgetLang;
5775
+ }
5776
+ function isRtlLang(lang) {
5777
+ return RTL_LANGS.has(getSupportedLang(lang));
4857
5778
  }
4858
5779
  function t(key, lang = "en") {
4859
5780
  const resolved = getSupportedLang(lang);
4860
- return locales[resolved]?.[key] || locales["en"]?.[key] || key;
5781
+ return locales[resolved]?.[key] || EN_BASE[key] || key;
4861
5782
  }
4862
5783
  var root$5 = /* @__PURE__ */ from_html(`<button class="accessify-trigger"></button>`);
4863
5784
  function TriggerButton($$anchor, $$props) {
@@ -4882,72 +5803,105 @@ function TriggerButton($$anchor, $$props) {
4882
5803
  pop();
4883
5804
  }
4884
5805
  delegate(["click"]);
4885
- var root_1$3 = /* @__PURE__ */ from_html(`<button class="accessify-lang-toggle" title="Switch language"> </button>`);
4886
- var root$4 = /* @__PURE__ */ from_html(`<div class="accessify-header"><h2> </h2> <div class="accessify-header-actions"><!> <button class="accessify-header-btn"><!> <span> </span></button> <button class="accessify-header-btn"></button></div></div>`);
5806
+ var root_2$1 = /* @__PURE__ */ from_html(`<option> </option>`);
5807
+ var root_1$3 = /* @__PURE__ */ from_html(`<label class="accessify-language-picker"><span class="sr-only"> </span> <span class="accessify-language-icon" aria-hidden="true"></span> <select class="accessify-language-select"></select></label>`);
5808
+ var root$4 = /* @__PURE__ */ from_html(`<div class="accessify-header"><div class="accessify-header-copy"><span class="accessify-header-kicker"> </span> <div class="accessify-header-title"><h2> </h2> <p> </p></div></div> <div class="accessify-header-toolbar"><!> <div class="accessify-header-actions"><button class="accessify-header-btn"><!> <span> </span></button> <button class="accessify-header-btn accessify-header-btn--icon"></button></div></div></div>`);
4887
5809
  function PanelHeader($$anchor, $$props) {
4888
5810
  push($$props, true);
4889
5811
  let lang = prop($$props, "lang", 3, "en");
4890
- function toggleLang() {
4891
- const next = lang().startsWith("de") ? "en" : "de";
4892
- $$props.onlangchange?.(next);
5812
+ function handleLanguageChange(event2) {
5813
+ const target = event2.currentTarget;
5814
+ $$props.onlangchange?.(target.value);
4893
5815
  }
4894
5816
  var div = root$4();
4895
- var h2 = child(div);
4896
- var text = child(h2);
4897
- var div_1 = sibling(h2, 2);
4898
- var node = child(div_1);
5817
+ var div_1 = child(div);
5818
+ var span = child(div_1);
5819
+ var text = child(span);
5820
+ var div_2 = sibling(span, 2);
5821
+ var h2 = child(div_2);
5822
+ var text_1 = child(h2);
5823
+ var p = sibling(h2, 2);
5824
+ var text_2 = child(p);
5825
+ var div_3 = sibling(div_1, 2);
5826
+ var node = child(div_3);
4899
5827
  {
4900
5828
  var consequent = ($$anchor2) => {
4901
- var button = root_1$3();
4902
- var text_1 = child(button);
5829
+ var label = root_1$3();
5830
+ var span_1 = child(label);
5831
+ var text_3 = child(span_1);
5832
+ var span_2 = sibling(span_1, 2);
5833
+ html(span_2, iconGlobe, true);
5834
+ var select = sibling(span_2, 2);
5835
+ each(select, 21, () => LANGUAGE_OPTIONS, index, ($$anchor3, option) => {
5836
+ var option_1 = root_2$1();
5837
+ var text_4 = child(option_1);
5838
+ var option_1_value = {};
5839
+ template_effect(() => {
5840
+ set_text(text_4, get(option).label);
5841
+ if (option_1_value !== (option_1_value = get(option).code)) {
5842
+ option_1.value = (option_1.__value = get(option).code) ?? "";
5843
+ }
5844
+ });
5845
+ append($$anchor3, option_1);
5846
+ });
5847
+ var select_value;
5848
+ init_select(select);
4903
5849
  template_effect(
4904
5850
  ($0, $1) => {
4905
- set_attribute(button, "aria-label", `Language: ${$0 ?? ""}`);
4906
- set_text(text_1, $1);
5851
+ set_text(text_3, $0);
5852
+ set_attribute(select, "aria-label", $1);
5853
+ if (select_value !== (select_value = lang())) {
5854
+ select.value = (select.__value = lang()) ?? "", select_option(select, lang());
5855
+ }
4907
5856
  },
4908
5857
  [
4909
- () => lang().startsWith("de") ? "Deutsch" : "English",
4910
- () => lang().startsWith("de") ? "DE" : "EN"
5858
+ () => t("widget.language", lang()),
5859
+ () => t("widget.language", lang())
4911
5860
  ]
4912
5861
  );
4913
- delegated("click", button, toggleLang);
4914
- append($$anchor2, button);
5862
+ delegated("change", select, handleLanguageChange);
5863
+ append($$anchor2, label);
4915
5864
  };
4916
5865
  if_block(node, ($$render) => {
4917
5866
  if ($$props.onlangchange) $$render(consequent);
4918
5867
  });
4919
5868
  }
4920
- var button_1 = sibling(node, 2);
4921
- var node_1 = child(button_1);
5869
+ var div_4 = sibling(node, 2);
5870
+ var button = child(div_4);
5871
+ var node_1 = child(button);
4922
5872
  html(node_1, iconReset);
4923
- var span = sibling(node_1, 2);
4924
- var text_2 = child(span);
4925
- var button_2 = sibling(button_1, 2);
4926
- html(button_2, iconClose, true);
5873
+ var span_3 = sibling(node_1, 2);
5874
+ var text_5 = child(span_3);
5875
+ var button_1 = sibling(button, 2);
5876
+ html(button_1, iconClose, true);
4927
5877
  template_effect(
4928
- ($0, $1, $2, $3) => {
5878
+ ($0, $1, $2, $3, $4, $5) => {
4929
5879
  set_text(text, $0);
4930
- set_attribute(button_1, "aria-label", $1);
5880
+ set_text(text_1, $1);
4931
5881
  set_text(text_2, $2);
4932
- set_attribute(button_2, "aria-label", $3);
5882
+ set_attribute(button, "aria-label", $3);
5883
+ set_text(text_5, $4);
5884
+ set_attribute(button_1, "aria-label", $5);
4933
5885
  },
4934
5886
  [
5887
+ () => t("control.mostUsed", lang()),
4935
5888
  () => t("widget.title", lang()),
5889
+ () => t("widget.subtitle", lang()),
4936
5890
  () => t("widget.reset", lang()),
4937
5891
  () => t("widget.reset", lang()),
4938
5892
  () => t("widget.close", lang())
4939
5893
  ]
4940
5894
  );
4941
- delegated("click", button_1, function(...$$args) {
5895
+ delegated("click", button, function(...$$args) {
4942
5896
  $$props.onreset?.apply(this, $$args);
4943
5897
  });
4944
- delegated("click", button_2, function(...$$args) {
5898
+ delegated("click", button_1, function(...$$args) {
4945
5899
  $$props.onclose?.apply(this, $$args);
4946
5900
  });
4947
5901
  append($$anchor, div);
4948
5902
  pop();
4949
5903
  }
4950
- delegate(["click"]);
5904
+ delegate(["change", "click"]);
4951
5905
  var root_1$2 = /* @__PURE__ */ from_html(`<button class="accessify-status-reset"> </button>`);
4952
5906
  var root$3 = /* @__PURE__ */ from_html(`<div class="accessify-status" role="status" aria-live="polite"><span class="accessify-status-count"> </span> <!></div>`);
4953
5907
  function StatusBar($$anchor, $$props) {
@@ -4980,111 +5934,6 @@ function StatusBar($$anchor, $$props) {
4980
5934
  pop();
4981
5935
  }
4982
5936
  delegate(["click"]);
4983
- const PROFILES = [
4984
- {
4985
- id: "vision-impaired",
4986
- nameKey: "profile.visionImpaired",
4987
- descKey: "profile.visionImpaired.desc",
4988
- iconId: "eye",
4989
- features: ["contrast", "text-size", "big-cursor", "focus-highlight", "link-highlight"],
4990
- featureSettings: { "text-size": 150, contrast: "high" }
4991
- },
4992
- {
4993
- id: "motor-impaired",
4994
- nameKey: "profile.motorImpaired",
4995
- descKey: "profile.motorImpaired.desc",
4996
- iconId: "keyboard",
4997
- features: ["keyboard-nav", "focus-highlight", "big-cursor"]
4998
- },
4999
- {
5000
- id: "cognitive",
5001
- nameKey: "profile.cognitive",
5002
- descKey: "profile.cognitive.desc",
5003
- iconId: "brain",
5004
- features: ["reading-guide", "text-size", "spacing", "dyslexia-font", "animation-stop"],
5005
- featureSettings: { "text-size": 130 }
5006
- },
5007
- {
5008
- id: "seizure-safe",
5009
- nameKey: "profile.seizureSafe",
5010
- descKey: "profile.seizureSafe.desc",
5011
- iconId: "shield",
5012
- features: ["animation-stop", "saturation"],
5013
- featureSettings: { saturation: "low" }
5014
- },
5015
- {
5016
- id: "adhd-friendly",
5017
- nameKey: "profile.adhdFriendly",
5018
- descKey: "profile.adhdFriendly.desc",
5019
- iconId: "focus",
5020
- features: ["animation-stop", "reading-mask", "focus-highlight", "hide-images"]
5021
- }
5022
- ];
5023
- var root_1$1 = /* @__PURE__ */ from_html(`<button class="accessify-profile-card"><span aria-hidden="true"></span> <span> </span></button>`);
5024
- var root$2 = /* @__PURE__ */ from_html(`<div class="accessify-profiles"><div class="accessify-section-title"> </div> <div class="accessify-profile-grid" role="group"></div></div>`);
5025
- function ProfileSection($$anchor, $$props) {
5026
- push($$props, true);
5027
- let lang = prop($$props, "lang", 3, "en"), activeProfileId = prop($$props, "activeProfileId", 3, null);
5028
- function getIcon(iconId) {
5029
- const iconFn = icons[iconId];
5030
- return iconFn ? iconFn() : "";
5031
- }
5032
- var div = root$2();
5033
- var div_1 = child(div);
5034
- var text = child(div_1);
5035
- var div_2 = sibling(div_1, 2);
5036
- each(div_2, 21, () => PROFILES, (profile) => profile.id, ($$anchor2, profile) => {
5037
- var button = root_1$1();
5038
- var span = child(button);
5039
- html(span, () => getIcon(get(profile).iconId), true);
5040
- var span_1 = sibling(span, 2);
5041
- var text_1 = child(span_1);
5042
- template_effect(
5043
- ($0, $1, $2) => {
5044
- set_attribute(button, "aria-pressed", activeProfileId() === get(profile).id);
5045
- set_attribute(button, "aria-label", $0);
5046
- set_attribute(button, "title", $1);
5047
- set_text(text_1, $2);
5048
- },
5049
- [
5050
- () => t(get(profile).nameKey, lang()),
5051
- () => t(get(profile).descKey, lang()),
5052
- () => t(get(profile).nameKey, lang())
5053
- ]
5054
- );
5055
- delegated("click", button, () => $$props.onactivate(get(profile)));
5056
- append($$anchor2, button);
5057
- });
5058
- template_effect(
5059
- ($0, $1) => {
5060
- set_text(text, $0);
5061
- set_attribute(div_2, "aria-label", $1);
5062
- },
5063
- [
5064
- () => t("section.profiles", lang()),
5065
- () => t("section.profiles", lang())
5066
- ]
5067
- );
5068
- append($$anchor, div);
5069
- pop();
5070
- }
5071
- delegate(["click"]);
5072
- const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
5073
- const v = glob[path];
5074
- if (v) {
5075
- return typeof v === "function" ? v() : Promise.resolve(v);
5076
- }
5077
- return new Promise((_, reject) => {
5078
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
5079
- reject.bind(
5080
- null,
5081
- new Error(
5082
- "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
5083
- )
5084
- )
5085
- );
5086
- });
5087
- };
5088
5937
  const DEFAULT_PROXY = "https://accessify-api.accessify.workers.dev";
5089
5938
  const OPENROUTER_BASE = "https://openrouter.ai/api/v1";
5090
5939
  const DEFAULTS = {
@@ -5233,175 +6082,168 @@ function getEnglishSimplificationPrompt() {
5233
6082
 
5234
6083
  Return ONLY the simplified text.`;
5235
6084
  }
5236
- var root_3 = /* @__PURE__ */ from_html(`<button class="accessify-card" role="switch"><span class="accessify-card-icon" aria-hidden="true"></span> <span class="accessify-card-label"> </span> <span class="accessify-card-desc" aria-hidden="true"> </span></button>`);
5237
- var root_2 = /* @__PURE__ */ from_html(`<div class="accessify-category"><div class="accessify-category-title"> </div> <div class="accessify-features" role="group"></div></div>`);
6085
+ var root_3 = /* @__PURE__ */ from_html(`<button class="accessify-chip"> </button>`);
6086
+ var root_2 = /* @__PURE__ */ from_html(`<article class="accessify-control-card accessify-control-card--contrast"><div class="accessify-control-copy"><span class="accessify-card-icon" aria-hidden="true"></span> <div><h4> </h4> <p> </p></div></div> <div class="accessify-chip-group" role="group"></div></article>`);
6087
+ var root_5 = /* @__PURE__ */ from_html(`<button class="accessify-chip"> </button>`);
6088
+ var root_4 = /* @__PURE__ */ from_html(`<article class="accessify-control-card accessify-control-card--text-size"><div class="accessify-control-copy"><span class="accessify-card-icon" aria-hidden="true"></span> <div><h4> </h4> <p> </p></div></div> <div class="accessify-chip-group accessify-chip-group--sizes" role="group"></div></article>`);
6089
+ var root_7 = /* @__PURE__ */ from_html(`<button class="accessify-card" role="switch"><div class="accessify-card-top"><span class="accessify-card-icon" aria-hidden="true"></span></div> <span class="accessify-card-label"> </span> <span class="accessify-card-desc"> </span></button>`);
6090
+ var root_6 = /* @__PURE__ */ from_html(`<div class="accessify-features"></div>`);
6091
+ var root_1$1 = /* @__PURE__ */ from_html(`<section class="accessify-section accessify-section--spotlight"><div class="accessify-section-head"><div><span class="accessify-section-kicker"> </span> <h3> </h3> <p> </p></div></div> <div class="accessify-control-grid"><!> <!></div> <!></section>`);
6092
+ var root_10 = /* @__PURE__ */ from_html(`<button class="accessify-card" role="switch"><div class="accessify-card-top"><span class="accessify-card-icon" aria-hidden="true"></span></div> <span class="accessify-card-label"> </span> <span class="accessify-card-desc"> </span></button>`);
6093
+ var root_9 = /* @__PURE__ */ from_html(`<section class="accessify-section"><div class="accessify-section-head"><div><h3> </h3> <p> </p></div></div> <div class="accessify-features"></div></section>`);
6094
+ var root$2 = /* @__PURE__ */ from_html(`<div class="accessify-body"><!> <!></div>`);
5238
6095
  function FeatureGrid($$anchor, $$props) {
5239
6096
  push($$props, true);
5240
6097
  const FEATURE_REGISTRY = {
5241
- contrast: {
5242
- id: "contrast",
5243
- nameKey: "feature.contrast",
5244
- descKey: "feature.contrast.desc",
5245
- iconId: "contrast",
5246
- category: "visual"
5247
- },
5248
- "text-size": {
5249
- id: "text-size",
5250
- nameKey: "feature.textSize",
5251
- descKey: "feature.textSize.desc",
5252
- iconId: "text-size",
5253
- category: "visual"
5254
- },
5255
- spacing: {
5256
- id: "spacing",
5257
- nameKey: "feature.spacing",
5258
- descKey: "feature.spacing.desc",
5259
- iconId: "spacing",
5260
- category: "visual"
5261
- },
5262
- "dyslexia-font": {
5263
- id: "dyslexia-font",
5264
- nameKey: "feature.dyslexiaFont",
5265
- descKey: "feature.dyslexiaFont.desc",
5266
- iconId: "font",
5267
- category: "visual"
6098
+ "keyboard-nav": {
6099
+ id: "keyboard-nav",
6100
+ nameKey: "feature.keyboardNav",
6101
+ descKey: "feature.keyboardNav.desc",
6102
+ iconId: "keyboard"
5268
6103
  },
5269
- "color-blindness": {
5270
- id: "color-blindness",
5271
- nameKey: "feature.colorBlind",
5272
- descKey: "feature.colorBlind.desc",
5273
- iconId: "color-blindness",
5274
- category: "visual"
6104
+ "focus-highlight": {
6105
+ id: "focus-highlight",
6106
+ nameKey: "feature.focusHighlight",
6107
+ descKey: "feature.focusHighlight.desc",
6108
+ iconId: "focus"
5275
6109
  },
5276
6110
  "link-highlight": {
5277
6111
  id: "link-highlight",
5278
6112
  nameKey: "feature.linkHighlight",
5279
6113
  descKey: "feature.linkHighlight.desc",
5280
- iconId: "link-highlight",
5281
- category: "visual"
5282
- },
5283
- saturation: {
5284
- id: "saturation",
5285
- nameKey: "feature.saturation",
5286
- descKey: "feature.saturation.desc",
5287
- iconId: "saturation",
5288
- category: "visual"
5289
- },
5290
- "hide-images": {
5291
- id: "hide-images",
5292
- nameKey: "feature.hideImages",
5293
- descKey: "feature.hideImages.desc",
5294
- iconId: "hide-images",
5295
- category: "visual"
5296
- },
5297
- "text-align": {
5298
- id: "text-align",
5299
- nameKey: "feature.textAlign",
5300
- descKey: "feature.textAlign.desc",
5301
- iconId: "text-align",
5302
- category: "visual"
5303
- },
5304
- "line-height": {
5305
- id: "line-height",
5306
- nameKey: "feature.lineHeight",
5307
- descKey: "feature.lineHeight.desc",
5308
- iconId: "line-height",
5309
- category: "visual"
6114
+ iconId: "link-highlight"
5310
6115
  },
5311
6116
  "reading-guide": {
5312
6117
  id: "reading-guide",
5313
6118
  nameKey: "feature.readingGuide",
5314
6119
  descKey: "feature.readingGuide.desc",
5315
- iconId: "reading-guide",
5316
- category: "motor"
6120
+ iconId: "reading-guide"
5317
6121
  },
5318
6122
  "reading-mask": {
5319
6123
  id: "reading-mask",
5320
6124
  nameKey: "feature.readingMask",
5321
6125
  descKey: "feature.readingMask.desc",
5322
- iconId: "reading-mask",
5323
- category: "motor"
6126
+ iconId: "reading-mask"
5324
6127
  },
5325
- "focus-highlight": {
5326
- id: "focus-highlight",
5327
- nameKey: "feature.focusHighlight",
5328
- descKey: "feature.focusHighlight.desc",
5329
- iconId: "focus",
5330
- category: "motor"
6128
+ "animation-stop": {
6129
+ id: "animation-stop",
6130
+ nameKey: "feature.animationStop",
6131
+ descKey: "feature.animationStop.desc",
6132
+ iconId: "animation-pause"
6133
+ },
6134
+ "hide-images": {
6135
+ id: "hide-images",
6136
+ nameKey: "feature.hideImages",
6137
+ descKey: "feature.hideImages.desc",
6138
+ iconId: "hide-images"
5331
6139
  },
5332
6140
  "big-cursor": {
5333
6141
  id: "big-cursor",
5334
6142
  nameKey: "feature.bigCursor",
5335
6143
  descKey: "feature.bigCursor.desc",
5336
- iconId: "cursor",
5337
- category: "motor"
5338
- },
5339
- "keyboard-nav": {
5340
- id: "keyboard-nav",
5341
- nameKey: "feature.keyboardNav",
5342
- descKey: "feature.keyboardNav.desc",
5343
- iconId: "keyboard",
5344
- category: "motor"
6144
+ iconId: "cursor"
5345
6145
  },
5346
6146
  "page-structure": {
5347
6147
  id: "page-structure",
5348
6148
  nameKey: "feature.pageStructure",
5349
6149
  descKey: "feature.pageStructure.desc",
5350
- iconId: "page-structure",
5351
- category: "motor"
5352
- },
5353
- "animation-stop": {
5354
- id: "animation-stop",
5355
- nameKey: "feature.animationStop",
5356
- descKey: "feature.animationStop.desc",
5357
- iconId: "animation-pause",
5358
- category: "cognitive"
6150
+ iconId: "page-structure"
5359
6151
  },
5360
6152
  tts: {
5361
6153
  id: "tts",
5362
6154
  nameKey: "feature.tts",
5363
6155
  descKey: "feature.tts.desc",
5364
- iconId: "tts",
5365
- category: "cognitive"
6156
+ iconId: "tts"
5366
6157
  },
5367
6158
  "text-simplify": {
5368
6159
  id: "text-simplify",
5369
6160
  nameKey: "feature.textSimplify",
5370
6161
  descKey: "feature.textSimplify.desc",
5371
- iconId: "simplify-text",
5372
- category: "ai"
6162
+ iconId: "simplify-text"
5373
6163
  },
5374
6164
  "alt-text": {
5375
6165
  id: "alt-text",
5376
6166
  nameKey: "feature.altText",
5377
6167
  descKey: "feature.altText.desc",
5378
- iconId: "alt-text",
5379
- category: "ai"
6168
+ iconId: "alt-text"
5380
6169
  },
5381
6170
  "auto-scan": {
5382
6171
  id: "auto-scan",
5383
6172
  nameKey: "feature.autoScan",
5384
6173
  descKey: "feature.autoScan.desc",
5385
- iconId: "scan",
5386
- category: "ai"
6174
+ iconId: "scan"
5387
6175
  }
5388
6176
  };
5389
- const CATEGORIES = [
5390
- { key: "visual", labelKey: "category.visual" },
5391
- { key: "motor", labelKey: "category.motor" },
5392
- { key: "cognitive", labelKey: "category.cognitive" },
5393
- { key: "ai", labelKey: "category.ai" }
6177
+ const SECTIONS = [
6178
+ {
6179
+ id: "essentials",
6180
+ labelKey: "section.essentials",
6181
+ descKey: "section.essentials.desc",
6182
+ featureIds: ["keyboard-nav", "focus-highlight", "link-highlight"]
6183
+ },
6184
+ {
6185
+ id: "support",
6186
+ labelKey: "section.support",
6187
+ descKey: "section.support.desc",
6188
+ featureIds: [
6189
+ "reading-guide",
6190
+ "reading-mask",
6191
+ "animation-stop",
6192
+ "hide-images",
6193
+ "page-structure",
6194
+ "big-cursor",
6195
+ "tts"
6196
+ ]
6197
+ },
6198
+ {
6199
+ id: "ai",
6200
+ labelKey: "section.ai",
6201
+ descKey: "section.ai.desc",
6202
+ featureIds: ["text-simplify", "alt-text", "auto-scan"]
6203
+ }
5394
6204
  ];
5395
- let groupedFeatures = /* @__PURE__ */ user_derived(() => {
5396
- const groups = /* @__PURE__ */ new Map();
5397
- for (const cat of CATEGORIES) groups.set(cat.key, []);
5398
- for (const slug of $$props.config.features) {
5399
- const def = FEATURE_REGISTRY[slug];
5400
- if (def) groups.get(def.category).push(def);
5401
- }
5402
- return groups;
5403
- });
6205
+ const CONTRAST_MODES = [
6206
+ { id: "off", labelKey: "control.default" },
6207
+ { id: "light", labelKey: "contrast.mode.light" },
6208
+ { id: "dark", labelKey: "contrast.mode.dark" },
6209
+ { id: "high", labelKey: "contrast.mode.high" }
6210
+ ];
6211
+ const TEXT_SIZE_PRESETS = [100, 120, 140, 160, 180];
6212
+ const AI_FEATURES = /* @__PURE__ */ new Set(["text-simplify", "alt-text"]);
6213
+ const loadedModules = /* @__PURE__ */ new Map();
6214
+ const FEATURE_LOADERS = {
6215
+ contrast: () => import("./contrast-CqsICAkU.js"),
6216
+ "text-size": () => import("./text-size-C6OFhCGi.js"),
6217
+ "keyboard-nav": () => import("./keyboard-nav-YtijlLYi.js"),
6218
+ "focus-highlight": () => import("./focus-highlight-CjERyyUF.js"),
6219
+ "link-highlight": () => import("./link-highlight-DBGm067Y.js"),
6220
+ "reading-guide": () => import("./reading-guide-VT8NciIL.js"),
6221
+ "reading-mask": () => import("./reading-mask-BABChuCz.js"),
6222
+ "animation-stop": () => import("./animation-stop-DXebPS8D.js"),
6223
+ "hide-images": () => import("./hide-images-DJwmsV2C.js"),
6224
+ "big-cursor": () => import("./big-cursor-B2UKu9dQ.js"),
6225
+ "page-structure": () => import("./page-structure-WFqy5QjQ.js"),
6226
+ tts: () => import("./tts-02b9iV0h.js"),
6227
+ "text-simplify": () => import("./text-simplify-CELklw5A.js"),
6228
+ "alt-text": () => import("./alt-text-CrPRUX83.js"),
6229
+ "auto-scan": () => import("./auto-scan-pg-09o7A.js")
6230
+ };
6231
+ let contrastMode = /* @__PURE__ */ state(proxy(readStoredContrastMode()));
6232
+ let textSize = /* @__PURE__ */ state(proxy(readStoredTextSize()));
6233
+ let visibleFeatureIds = /* @__PURE__ */ user_derived(() => new Set($$props.config.features));
6234
+ let essentialFeatures = /* @__PURE__ */ user_derived(() => getFeatureDefs(SECTIONS[0].featureIds));
6235
+ let activeSignature = /* @__PURE__ */ user_derived(() => Array.from($$props.activeFeatures.entries()).sort(([left], [right]) => left.localeCompare(right)).map(([id, enabled]) => `${id}:${enabled}`).join("|"));
5404
6236
  let aiService;
6237
+ function readStoredContrastMode() {
6238
+ if (typeof window === "undefined") return "off";
6239
+ const stored = localStorage.getItem("accessify-contrast-mode");
6240
+ return stored === "light" || stored === "dark" || stored === "high" ? stored : "off";
6241
+ }
6242
+ function readStoredTextSize() {
6243
+ if (typeof window === "undefined") return 100;
6244
+ const stored = Number.parseInt(localStorage.getItem("accessify-text-size") || "100", 10);
6245
+ return Number.isFinite(stored) ? Math.max(100, Math.min(200, stored)) : 100;
6246
+ }
5405
6247
  function getAIService() {
5406
6248
  if (!aiService) {
5407
6249
  aiService = createAIService({
@@ -5412,78 +6254,303 @@ function FeatureGrid($$anchor, $$props) {
5412
6254
  }
5413
6255
  return aiService;
5414
6256
  }
5415
- const AI_FEATURES = /* @__PURE__ */ new Set(["text-simplify", "alt-text"]);
5416
- const loadedModules = /* @__PURE__ */ new Map();
6257
+ function getIcon(iconId) {
6258
+ const iconFn = icons[iconId];
6259
+ return iconFn ? iconFn() : "";
6260
+ }
6261
+ function getFeatureDefs(ids) {
6262
+ return ids.filter((id) => get(visibleFeatureIds).has(id)).map((id) => FEATURE_REGISTRY[id]).filter(Boolean);
6263
+ }
6264
+ function updateControlState(id, module) {
6265
+ if (!module) return;
6266
+ const state2 = module.getState();
6267
+ if (id === "contrast") {
6268
+ set(contrastMode, state2.value === "light" || state2.value === "dark" || state2.value === "high" ? state2.value : "off", true);
6269
+ }
6270
+ if (id === "text-size") {
6271
+ set(textSize, typeof state2.value === "number" ? state2.value : 100, true);
6272
+ }
6273
+ }
5417
6274
  function handleReset() {
5418
- for (const [, mod] of loadedModules) {
6275
+ for (const [, module] of loadedModules) {
5419
6276
  try {
5420
- mod.deactivate();
6277
+ module.deactivate();
5421
6278
  } catch {
5422
6279
  }
5423
6280
  }
6281
+ set(contrastMode, "off");
6282
+ set(textSize, 100);
5424
6283
  }
5425
6284
  if (typeof window !== "undefined") {
5426
6285
  window.addEventListener("accessify:reset", handleReset);
5427
6286
  }
5428
6287
  async function loadFeatureModule(id) {
5429
6288
  if (loadedModules.has(id)) return loadedModules.get(id);
6289
+ const loader = FEATURE_LOADERS[id];
6290
+ if (!loader) return null;
5430
6291
  try {
5431
- const mod = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "../features/alt-text.ts": () => import("./alt-text-CLxbmwG6.js"), "../features/animation-stop.ts": () => import("./animation-stop-DXebPS8D.js"), "../features/auto-scan.ts": () => import("./auto-scan-pg-09o7A.js"), "../features/big-cursor.ts": () => import("./big-cursor-B2UKu9dQ.js"), "../features/color-blind.ts": () => import("./color-blind-0LFng55r.js"), "../features/contrast.ts": () => import("./contrast-DCkE0NXZ.js"), "../features/dyslexia-font.ts": () => import("./dyslexia-font-wONgIy2T.js"), "../features/focus-highlight.ts": () => import("./focus-highlight-CjERyyUF.js"), "../features/hide-images.ts": () => import("./hide-images-DJwmsV2C.js"), "../features/keyboard-nav.ts": () => import("./keyboard-nav-BdPyLaZt.js"), "../features/line-height.ts": () => import("./line-height-BT98qgEF.js"), "../features/link-highlight.ts": () => import("./link-highlight-DBGm067Y.js"), "../features/page-structure.ts": () => import("./page-structure-2X8mOSpC.js"), "../features/reading-guide.ts": () => import("./reading-guide-VT8NciIL.js"), "../features/reading-mask.ts": () => import("./reading-mask-BABChuCz.js"), "../features/saturation.ts": () => import("./saturation-D8ZXpWAN.js"), "../features/spacing.ts": () => import("./spacing-DENai3JU.js"), "../features/text-align.ts": () => import("./text-align-BDRPqPvl.js"), "../features/text-simplify.ts": () => import("./text-simplify-CELklw5A.js"), "../features/text-size.ts": () => import("./text-size-B-uv436p.js"), "../features/tts.ts": () => import("./tts-02b9iV0h.js") }), `../features/${id}.ts`, 3);
6292
+ const mod = await loader();
5432
6293
  const exported = mod.default ?? mod;
5433
- let featureModule;
5434
- if (typeof exported === "function") {
5435
- featureModule = AI_FEATURES.has(id) ? exported(getAIService(), $$props.config.lang) : exported();
5436
- } else {
5437
- featureModule = exported;
5438
- }
6294
+ const featureModule = typeof exported === "function" ? AI_FEATURES.has(id) ? exported(getAIService(), $$props.config.lang) : exported() : exported;
5439
6295
  loadedModules.set(id, featureModule);
5440
6296
  return featureModule;
5441
- } catch (err) {
5442
- console.warn(`[Accessify] Failed to load feature module "${id}":`, err);
6297
+ } catch (error) {
6298
+ console.warn(`[Accessify] Failed to load feature module "${id}":`, error);
5443
6299
  return null;
5444
6300
  }
5445
6301
  }
6302
+ async function syncActiveModules(_) {
6303
+ const idsToSync = /* @__PURE__ */ new Set(["contrast", "text-size", ...$$props.config.features]);
6304
+ for (const id of idsToSync) {
6305
+ const shouldBeEnabled = $$props.activeFeatures.get(id) ?? false;
6306
+ const alreadyLoaded = loadedModules.get(id);
6307
+ if (!shouldBeEnabled && !alreadyLoaded) {
6308
+ if (id === "contrast") set(contrastMode, "off");
6309
+ if (id === "text-size") set(textSize, 100);
6310
+ continue;
6311
+ }
6312
+ const module = shouldBeEnabled ? await loadFeatureModule(id) : alreadyLoaded;
6313
+ if (!module) continue;
6314
+ const isEnabled = module.getState().enabled;
6315
+ if (shouldBeEnabled && !isEnabled) module.activate();
6316
+ if (!shouldBeEnabled && isEnabled) module.deactivate();
6317
+ updateControlState(id, module);
6318
+ }
6319
+ }
5446
6320
  async function handleToggle(id) {
5447
- const isCurrentlyActive = $$props.activeFeatures.get(id) ?? false;
5448
- const newState = !isCurrentlyActive;
5449
- const mod = await loadFeatureModule(id);
5450
- if (mod) {
5451
- if (newState) mod.activate();
5452
- else mod.deactivate();
6321
+ const isActive = $$props.activeFeatures.get(id) ?? false;
6322
+ const nextState = !isActive;
6323
+ const module = await loadFeatureModule(id);
6324
+ if (module) {
6325
+ if (nextState) module.activate();
6326
+ else module.deactivate();
6327
+ updateControlState(id, module);
6328
+ }
6329
+ $$props.ontoggle(id, nextState);
6330
+ }
6331
+ async function setContrastMode(mode) {
6332
+ const module = await loadFeatureModule("contrast");
6333
+ if (!module) return;
6334
+ if (mode === "off") {
6335
+ module.deactivate();
6336
+ set(contrastMode, "off");
6337
+ $$props.ontoggle("contrast", false);
6338
+ return;
5453
6339
  }
5454
- $$props.ontoggle(id, newState);
6340
+ if (!module.getState().enabled) module.activate();
6341
+ module.setState?.(mode);
6342
+ set(contrastMode, mode, true);
6343
+ $$props.ontoggle("contrast", true);
6344
+ }
6345
+ async function setTextSize(value) {
6346
+ const module = await loadFeatureModule("text-size");
6347
+ if (!module) return;
6348
+ if (value === 100) {
6349
+ module.deactivate();
6350
+ set(textSize, 100);
6351
+ $$props.ontoggle("text-size", false);
6352
+ return;
6353
+ }
6354
+ if (!module.getState().enabled) module.activate();
6355
+ module.setState?.(value);
6356
+ set(textSize, value, true);
6357
+ $$props.ontoggle("text-size", true);
5455
6358
  }
5456
- function getIcon(iconId) {
5457
- const iconFn = icons[iconId];
5458
- return iconFn ? iconFn() : "";
6359
+ user_effect(() => {
6360
+ `${$$props.config.features.join("|")}|${get(activeSignature)}`;
6361
+ void syncActiveModules();
6362
+ });
6363
+ var div = root$2();
6364
+ var node = child(div);
6365
+ {
6366
+ var consequent_3 = ($$anchor2) => {
6367
+ var section_1 = root_1$1();
6368
+ var div_1 = child(section_1);
6369
+ var div_2 = child(div_1);
6370
+ var span = child(div_2);
6371
+ var text = child(span);
6372
+ var h3 = sibling(span, 2);
6373
+ var text_1 = child(h3);
6374
+ var p = sibling(h3, 2);
6375
+ var text_2 = child(p);
6376
+ var div_3 = sibling(div_1, 2);
6377
+ var node_1 = child(div_3);
6378
+ {
6379
+ var consequent = ($$anchor3) => {
6380
+ var article = root_2();
6381
+ var div_4 = child(article);
6382
+ var span_1 = child(div_4);
6383
+ html(span_1, () => getIcon("contrast"), true);
6384
+ var div_5 = sibling(span_1, 2);
6385
+ var h4 = child(div_5);
6386
+ var text_3 = child(h4);
6387
+ var p_1 = sibling(h4, 2);
6388
+ var text_4 = child(p_1);
6389
+ var div_6 = sibling(div_4, 2);
6390
+ each(div_6, 21, () => CONTRAST_MODES, index, ($$anchor4, mode) => {
6391
+ var button = root_3();
6392
+ var text_5 = child(button);
6393
+ template_effect(
6394
+ ($0) => {
6395
+ set_attribute(button, "data-active", get(contrastMode) === get(mode).id);
6396
+ set_attribute(button, "aria-pressed", get(contrastMode) === get(mode).id);
6397
+ set_text(text_5, $0);
6398
+ },
6399
+ [() => t(get(mode).labelKey, $$props.config.lang)]
6400
+ );
6401
+ delegated("click", button, () => setContrastMode(get(mode).id));
6402
+ append($$anchor4, button);
6403
+ });
6404
+ template_effect(
6405
+ ($0, $1, $2) => {
6406
+ set_text(text_3, $0);
6407
+ set_text(text_4, $1);
6408
+ set_attribute(div_6, "aria-label", $2);
6409
+ },
6410
+ [
6411
+ () => t("feature.contrast", $$props.config.lang),
6412
+ () => t("feature.contrast.desc", $$props.config.lang),
6413
+ () => t("control.chooseMode", $$props.config.lang)
6414
+ ]
6415
+ );
6416
+ append($$anchor3, article);
6417
+ };
6418
+ var d = /* @__PURE__ */ user_derived(() => get(visibleFeatureIds).has("contrast"));
6419
+ if_block(node_1, ($$render) => {
6420
+ if (get(d)) $$render(consequent);
6421
+ });
6422
+ }
6423
+ var node_2 = sibling(node_1, 2);
6424
+ {
6425
+ var consequent_1 = ($$anchor3) => {
6426
+ var article_1 = root_4();
6427
+ var div_7 = child(article_1);
6428
+ var span_2 = child(div_7);
6429
+ html(span_2, () => getIcon("text-size"), true);
6430
+ var div_8 = sibling(span_2, 2);
6431
+ var h4_1 = child(div_8);
6432
+ var text_6 = child(h4_1);
6433
+ var p_2 = sibling(h4_1, 2);
6434
+ var text_7 = child(p_2);
6435
+ var div_9 = sibling(div_7, 2);
6436
+ each(div_9, 21, () => TEXT_SIZE_PRESETS, index, ($$anchor4, preset) => {
6437
+ var button_1 = root_5();
6438
+ var text_8 = child(button_1);
6439
+ template_effect(() => {
6440
+ set_attribute(button_1, "data-active", get(textSize) === get(preset));
6441
+ set_attribute(button_1, "aria-pressed", get(textSize) === get(preset));
6442
+ set_text(text_8, `${get(preset) ?? ""}%`);
6443
+ });
6444
+ delegated("click", button_1, () => setTextSize(get(preset)));
6445
+ append($$anchor4, button_1);
6446
+ });
6447
+ template_effect(
6448
+ ($0, $1, $2) => {
6449
+ set_text(text_6, $0);
6450
+ set_text(text_7, $1);
6451
+ set_attribute(div_9, "aria-label", $2);
6452
+ },
6453
+ [
6454
+ () => t("feature.textSize", $$props.config.lang),
6455
+ () => t("feature.textSize.desc", $$props.config.lang),
6456
+ () => t("feature.textSize", $$props.config.lang)
6457
+ ]
6458
+ );
6459
+ append($$anchor3, article_1);
6460
+ };
6461
+ var d_1 = /* @__PURE__ */ user_derived(() => get(visibleFeatureIds).has("text-size"));
6462
+ if_block(node_2, ($$render) => {
6463
+ if (get(d_1)) $$render(consequent_1);
6464
+ });
6465
+ }
6466
+ var node_3 = sibling(div_3, 2);
6467
+ {
6468
+ var consequent_2 = ($$anchor3) => {
6469
+ var div_10 = root_6();
6470
+ each(div_10, 21, () => get(essentialFeatures), (feature) => feature.id, ($$anchor4, feature) => {
6471
+ const isActive = /* @__PURE__ */ user_derived(() => $$props.activeFeatures.get(get(feature).id) ?? false);
6472
+ var button_2 = root_7();
6473
+ var div_11 = child(button_2);
6474
+ var span_3 = child(div_11);
6475
+ html(span_3, () => getIcon(get(feature).iconId), true);
6476
+ var span_4 = sibling(div_11, 2);
6477
+ var text_9 = child(span_4);
6478
+ var span_5 = sibling(span_4, 2);
6479
+ var text_10 = child(span_5);
6480
+ template_effect(
6481
+ ($0, $1, $2) => {
6482
+ set_attribute(button_2, "data-active", get(isActive));
6483
+ set_attribute(button_2, "aria-checked", get(isActive));
6484
+ set_attribute(button_2, "aria-label", $0);
6485
+ set_text(text_9, $1);
6486
+ set_text(text_10, $2);
6487
+ },
6488
+ [
6489
+ () => t(get(feature).nameKey, $$props.config.lang),
6490
+ () => t(get(feature).nameKey, $$props.config.lang),
6491
+ () => t(get(feature).descKey, $$props.config.lang)
6492
+ ]
6493
+ );
6494
+ delegated("click", button_2, () => handleToggle(get(feature).id));
6495
+ append($$anchor4, button_2);
6496
+ });
6497
+ append($$anchor3, div_10);
6498
+ };
6499
+ if_block(node_3, ($$render) => {
6500
+ if (get(essentialFeatures).length > 0) $$render(consequent_2);
6501
+ });
6502
+ }
6503
+ template_effect(
6504
+ ($0, $1, $2) => {
6505
+ set_text(text, $0);
6506
+ set_text(text_1, $1);
6507
+ set_text(text_2, $2);
6508
+ },
6509
+ [
6510
+ () => t("control.mostUsed", $$props.config.lang),
6511
+ () => t(SECTIONS[0].labelKey, $$props.config.lang),
6512
+ () => t(SECTIONS[0].descKey, $$props.config.lang)
6513
+ ]
6514
+ );
6515
+ append($$anchor2, section_1);
6516
+ };
6517
+ var d_2 = /* @__PURE__ */ user_derived(() => get(visibleFeatureIds).has("contrast") || get(visibleFeatureIds).has("text-size") || getFeatureDefs(SECTIONS[0].featureIds).length > 0);
6518
+ if_block(node, ($$render) => {
6519
+ if (get(d_2)) $$render(consequent_3);
6520
+ });
5459
6521
  }
5460
- var fragment = comment();
5461
- var node = first_child(fragment);
5462
- each(node, 17, () => CATEGORIES, index, ($$anchor2, category) => {
5463
- const features = /* @__PURE__ */ user_derived(() => get(groupedFeatures).get(get(category).key) ?? []);
5464
- var fragment_1 = comment();
5465
- var node_1 = first_child(fragment_1);
6522
+ var node_4 = sibling(node, 2);
6523
+ each(node_4, 17, () => SECTIONS.slice(1), index, ($$anchor2, section) => {
6524
+ const features = /* @__PURE__ */ user_derived(() => getFeatureDefs(get(section).featureIds));
6525
+ var fragment = comment();
6526
+ var node_5 = first_child(fragment);
5466
6527
  {
5467
- var consequent = ($$anchor3) => {
5468
- var div = root_2();
5469
- var div_1 = child(div);
5470
- var text = child(div_1);
5471
- var div_2 = sibling(div_1, 2);
5472
- each(div_2, 21, () => get(features), (feature) => feature.id, ($$anchor4, feature) => {
6528
+ var consequent_4 = ($$anchor3) => {
6529
+ var section_2 = root_9();
6530
+ var div_12 = child(section_2);
6531
+ var div_13 = child(div_12);
6532
+ var h3_1 = child(div_13);
6533
+ var text_11 = child(h3_1);
6534
+ var p_3 = sibling(h3_1, 2);
6535
+ var text_12 = child(p_3);
6536
+ var div_14 = sibling(div_12, 2);
6537
+ each(div_14, 21, () => get(features), (feature) => feature.id, ($$anchor4, feature) => {
5473
6538
  const isActive = /* @__PURE__ */ user_derived(() => $$props.activeFeatures.get(get(feature).id) ?? false);
5474
- var button = root_3();
5475
- var span = child(button);
5476
- html(span, () => getIcon(get(feature).iconId), true);
5477
- var span_1 = sibling(span, 2);
5478
- var text_1 = child(span_1);
5479
- var span_2 = sibling(span_1, 2);
5480
- var text_2 = child(span_2);
6539
+ var button_3 = root_10();
6540
+ var div_15 = child(button_3);
6541
+ var span_6 = child(div_15);
6542
+ html(span_6, () => getIcon(get(feature).iconId), true);
6543
+ var span_7 = sibling(div_15, 2);
6544
+ var text_13 = child(span_7);
6545
+ var span_8 = sibling(span_7, 2);
6546
+ var text_14 = child(span_8);
5481
6547
  template_effect(
5482
6548
  ($0, $1, $2) => {
5483
- set_attribute(button, "aria-checked", get(isActive));
5484
- set_attribute(button, "aria-label", $0);
5485
- set_text(text_1, $1);
5486
- set_text(text_2, $2);
6549
+ set_attribute(button_3, "data-active", get(isActive));
6550
+ set_attribute(button_3, "aria-checked", get(isActive));
6551
+ set_attribute(button_3, "aria-label", $0);
6552
+ set_text(text_13, $1);
6553
+ set_text(text_14, $2);
5487
6554
  },
5488
6555
  [
5489
6556
  () => t(get(feature).nameKey, $$props.config.lang),
@@ -5491,28 +6558,28 @@ function FeatureGrid($$anchor, $$props) {
5491
6558
  () => t(get(feature).descKey, $$props.config.lang)
5492
6559
  ]
5493
6560
  );
5494
- delegated("click", button, () => handleToggle(get(feature).id));
5495
- append($$anchor4, button);
6561
+ delegated("click", button_3, () => handleToggle(get(feature).id));
6562
+ append($$anchor4, button_3);
5496
6563
  });
5497
6564
  template_effect(
5498
6565
  ($0, $1) => {
5499
- set_text(text, $0);
5500
- set_attribute(div_2, "aria-label", $1);
6566
+ set_text(text_11, $0);
6567
+ set_text(text_12, $1);
5501
6568
  },
5502
6569
  [
5503
- () => t(get(category).labelKey, $$props.config.lang),
5504
- () => t(get(category).labelKey, $$props.config.lang)
6570
+ () => t(get(section).labelKey, $$props.config.lang),
6571
+ () => t(get(section).descKey, $$props.config.lang)
5505
6572
  ]
5506
6573
  );
5507
- append($$anchor3, div);
6574
+ append($$anchor3, section_2);
5508
6575
  };
5509
- if_block(node_1, ($$render) => {
5510
- if (get(features).length > 0) $$render(consequent);
6576
+ if_block(node_5, ($$render) => {
6577
+ if (get(features).length > 0) $$render(consequent_4);
5511
6578
  });
5512
6579
  }
5513
- append($$anchor2, fragment_1);
6580
+ append($$anchor2, fragment);
5514
6581
  });
5515
- append($$anchor, fragment);
6582
+ append($$anchor, div);
5516
6583
  pop();
5517
6584
  }
5518
6585
  delegate(["click"]);
@@ -5547,7 +6614,7 @@ function PanelFooter($$anchor, $$props) {
5547
6614
  append($$anchor, div);
5548
6615
  pop();
5549
6616
  }
5550
- var root = /* @__PURE__ */ from_html(`<div class="sr-only" role="status" aria-live="polite" aria-atomic="true"> </div> <!> <div class="accessify-panel" role="dialog"><!> <!> <!> <!> <!></div>`, 1);
6617
+ var root = /* @__PURE__ */ from_html(`<div class="sr-only" role="status" aria-live="polite" aria-atomic="true"> </div> <!> <div class="accessify-panel" role="dialog"><!> <!> <!> <!></div>`, 1);
5551
6618
  function WidgetApp($$anchor, $$props) {
5552
6619
  push($$props, true);
5553
6620
  let config2 = prop($$props, "config", 7);
@@ -5557,10 +6624,8 @@ function WidgetApp($$anchor, $$props) {
5557
6624
  let panelEl = /* @__PURE__ */ state(null);
5558
6625
  let triggerEl = /* @__PURE__ */ state(null);
5559
6626
  let announcement = /* @__PURE__ */ state("");
5560
- let activeProfileId = /* @__PURE__ */ state(null);
5561
- let widgetLang = /* @__PURE__ */ state(proxy(config2().lang || "en"));
6627
+ let widgetLang = /* @__PURE__ */ state("en");
5562
6628
  const STORAGE_KEY = "accessify-prefs";
5563
- const PROFILE_STORAGE_KEY = "accessify-profile";
5564
6629
  let activeCount = /* @__PURE__ */ user_derived(() => Array.from(get(activeFeatures).values()).filter(Boolean).length);
5565
6630
  function announce(message) {
5566
6631
  set(announcement, "");
@@ -5575,8 +6640,6 @@ function WidgetApp($$anchor, $$props) {
5575
6640
  const prefs = JSON.parse(saved);
5576
6641
  set(activeFeatures, new Map(Object.entries(prefs)), true);
5577
6642
  }
5578
- const savedProfile = localStorage.getItem(PROFILE_STORAGE_KEY);
5579
- if (savedProfile) set(activeProfileId, savedProfile, true);
5580
6643
  } catch {
5581
6644
  }
5582
6645
  }
@@ -5584,11 +6647,6 @@ function WidgetApp($$anchor, $$props) {
5584
6647
  try {
5585
6648
  const obj = Object.fromEntries(get(activeFeatures));
5586
6649
  localStorage.setItem(STORAGE_KEY, JSON.stringify(obj));
5587
- if (get(activeProfileId)) {
5588
- localStorage.setItem(PROFILE_STORAGE_KEY, get(activeProfileId));
5589
- } else {
5590
- localStorage.removeItem(PROFILE_STORAGE_KEY);
5591
- }
5592
6650
  } catch {
5593
6651
  }
5594
6652
  }
@@ -5613,6 +6671,17 @@ function WidgetApp($$anchor, $$props) {
5613
6671
  else mount2.setAttribute("data-theme", get(currentTheme));
5614
6672
  }
5615
6673
  }
6674
+ function applyLanguage() {
6675
+ const mount2 = $$props.shadow.getElementById("accessify-mount");
6676
+ const dir = isRtlLang(get(widgetLang)) ? "rtl" : "ltr";
6677
+ if (mount2) {
6678
+ mount2.setAttribute("lang", get(widgetLang));
6679
+ mount2.setAttribute("dir", dir);
6680
+ }
6681
+ $$props.shadow.host.setAttribute("lang", get(widgetLang));
6682
+ $$props.shadow.host.setAttribute("dir", dir);
6683
+ setCurrentWidgetLang(get(widgetLang));
6684
+ }
5616
6685
  function open() {
5617
6686
  set(isOpen, true);
5618
6687
  requestAnimationFrame(() => {
@@ -5634,7 +6703,6 @@ function WidgetApp($$anchor, $$props) {
5634
6703
  function handleFeatureToggle(id, enabled) {
5635
6704
  get(activeFeatures).set(id, enabled);
5636
6705
  set(activeFeatures, new Map(get(activeFeatures)), true);
5637
- set(activeProfileId, null);
5638
6706
  savePrefs();
5639
6707
  const featureKey = `feature.${id.replace(/-([a-z])/g, (_, c) => c.toUpperCase())}`;
5640
6708
  const name = t(featureKey, get(widgetLang)) || id;
@@ -5643,33 +6711,14 @@ function WidgetApp($$anchor, $$props) {
5643
6711
  }
5644
6712
  function resetAll() {
5645
6713
  set(activeFeatures, /* @__PURE__ */ new Map(), true);
5646
- set(activeProfileId, null);
5647
6714
  savePrefs();
5648
6715
  window.dispatchEvent(new CustomEvent("accessify:reset"));
5649
6716
  announce(t("widget.resetConfirm", get(widgetLang)));
5650
6717
  }
5651
- function handleProfileActivate(profile) {
5652
- if (get(activeProfileId) === profile.id) {
5653
- resetAll();
5654
- return;
5655
- }
5656
- window.dispatchEvent(new CustomEvent("accessify:reset"));
5657
- const newActive = /* @__PURE__ */ new Map();
5658
- for (const featureId of profile.features) {
5659
- newActive.set(featureId, true);
5660
- }
5661
- set(activeFeatures, newActive, true);
5662
- set(activeProfileId, profile.id, true);
5663
- savePrefs();
5664
- for (const featureId of profile.features) {
5665
- window.dispatchEvent(new CustomEvent("accessify:feature-activate", { detail: { id: featureId } }));
5666
- }
5667
- const profileName = t(profile.nameKey, get(widgetLang));
5668
- announce(`${profileName} ${t("status.activated", get(widgetLang))}`);
5669
- }
5670
6718
  function handleLangChange(newLang) {
5671
- set(widgetLang, newLang, true);
5672
- config2().lang = newLang;
6719
+ set(widgetLang, getSupportedLang(newLang), true);
6720
+ config2().lang = get(widgetLang);
6721
+ applyLanguage();
5673
6722
  }
5674
6723
  function handleKeydown(e) {
5675
6724
  if (e.key === "Escape" && get(isOpen)) {
@@ -5692,20 +6741,12 @@ function WidgetApp($$anchor, $$props) {
5692
6741
  }
5693
6742
  }
5694
6743
  }
5695
- function restoreSavedFeatures() {
5696
- for (const [id, enabled] of get(activeFeatures)) {
5697
- if (enabled) {
5698
- window.dispatchEvent(new CustomEvent("accessify:feature-activate", { detail: { id } }));
5699
- }
5700
- }
5701
- }
5702
6744
  onMount(() => {
6745
+ set(widgetLang, getSupportedLang(config2().lang || "en"), true);
5703
6746
  detectTheme();
5704
6747
  applyTheme();
5705
6748
  loadPrefs();
5706
- queueMicrotask(() => {
5707
- restoreSavedFeatures();
5708
- });
6749
+ applyLanguage();
5709
6750
  });
5710
6751
  var $$exports = { open, close };
5711
6752
  var fragment = root();
@@ -5749,19 +6790,9 @@ function WidgetApp($$anchor, $$props) {
5749
6790
  onreset: resetAll
5750
6791
  });
5751
6792
  var node_3 = sibling(node_2, 2);
5752
- ProfileSection(node_3, {
5753
- get lang() {
5754
- return get(widgetLang);
5755
- },
5756
- get activeProfileId() {
5757
- return get(activeProfileId);
5758
- },
5759
- onactivate: handleProfileActivate
5760
- });
5761
- var node_4 = sibling(node_3, 2);
5762
6793
  {
5763
6794
  let $0 = /* @__PURE__ */ user_derived(() => ({ ...config2(), lang: get(widgetLang) }));
5764
- FeatureGrid(node_4, {
6795
+ FeatureGrid(node_3, {
5765
6796
  get config() {
5766
6797
  return get($0);
5767
6798
  },
@@ -5771,8 +6802,8 @@ function WidgetApp($$anchor, $$props) {
5771
6802
  ontoggle: handleFeatureToggle
5772
6803
  });
5773
6804
  }
5774
- var node_5 = sibling(node_4, 2);
5775
- PanelFooter(node_5, {
6805
+ var node_4 = sibling(node_3, 2);
6806
+ PanelFooter(node_4, {
5776
6807
  get lang() {
5777
6808
  return get(widgetLang);
5778
6809
  },
@@ -5782,12 +6813,17 @@ function WidgetApp($$anchor, $$props) {
5782
6813
  });
5783
6814
  bind_this(div_1, ($$value) => set(panelEl, $$value), () => get(panelEl));
5784
6815
  template_effect(
5785
- ($0) => {
6816
+ ($0, $1) => {
5786
6817
  set_text(text, get(announcement));
5787
6818
  set_attribute(div_1, "aria-label", $0);
5788
6819
  set_attribute(div_1, "aria-hidden", !get(isOpen));
6820
+ set_attribute(div_1, "dir", $1);
6821
+ div_1.dir = div_1.dir;
5789
6822
  },
5790
- [() => t("widget.title", get(widgetLang))]
6823
+ [
6824
+ () => t("widget.title", get(widgetLang)),
6825
+ () => isRtlLang(get(widgetLang)) ? "rtl" : "ltr"
6826
+ ]
5791
6827
  );
5792
6828
  append($$anchor, fragment);
5793
6829
  return pop($$exports);
@@ -5801,14 +6837,9 @@ function createWidgetStyles(config2) {
5801
6837
  const isBottom = pos.includes("bottom");
5802
6838
  const z = config2.zIndex || 999999;
5803
6839
  return `
5804
- /* ===================================================================
5805
- DESIGN TOKENS
5806
- =================================================================== */
5807
-
5808
6840
  :host {
5809
6841
  all: initial;
5810
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
5811
- 'Helvetica Neue', Arial, sans-serif;
6842
+ font-family: ui-rounded, "SF Pro Rounded", "Avenir Next", "Segoe UI", sans-serif;
5812
6843
  font-size: 15px;
5813
6844
  line-height: 1.5;
5814
6845
  color-scheme: light dark;
@@ -5821,7 +6852,6 @@ function createWidgetStyles(config2) {
5821
6852
  }
5822
6853
 
5823
6854
  #accessify-mount {
5824
- /* Spacing scale (4px base) */
5825
6855
  --space-1: 4px;
5826
6856
  --space-2: 8px;
5827
6857
  --space-3: 12px;
@@ -5829,84 +6859,76 @@ function createWidgetStyles(config2) {
5829
6859
  --space-5: 20px;
5830
6860
  --space-6: 24px;
5831
6861
  --space-7: 32px;
5832
- --space-8: 40px;
5833
-
5834
- /* Radius system */
5835
- --radius-sm: 6px;
5836
- --radius-md: 10px;
5837
- --radius-lg: 14px;
5838
- --radius-full: 9999px;
5839
-
5840
- /* Typography */
6862
+ --radius-sm: 10px;
6863
+ --radius-md: 16px;
6864
+ --radius-lg: 24px;
6865
+ --radius-pill: 999px;
5841
6866
  --text-xs: 11px;
5842
6867
  --text-sm: 13px;
5843
6868
  --text-base: 15px;
5844
- --text-lg: 17px;
5845
- --text-xl: 20px;
5846
- --font-normal: 400;
6869
+ --text-lg: 18px;
6870
+ --text-xl: 24px;
5847
6871
  --font-medium: 500;
5848
6872
  --font-semibold: 600;
5849
-
5850
- /* Shadows */
5851
- --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
5852
- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.10);
5853
- --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.14);
5854
-
5855
- /* Colors: Light mode (default) */
5856
- --primary: #0055CC;
5857
- --primary-hover: #003D99;
5858
- --primary-soft: color-mix(in srgb, #0055CC 10%, #ffffff);
5859
- --surface: #ffffff;
5860
- --surface-raised: #f7f7f8;
5861
- --text: #1a1a1a;
5862
- --text-secondary: #5c5c5c;
5863
- --text-on-primary: #ffffff;
5864
- --border: #e2e2e5;
5865
- --border-strong: #c8c8cc;
5866
- --success: #008A00;
5867
- --warning: #B95000;
5868
- --error: #CC0000;
5869
-
5870
- /* Transition */
5871
- --transition-fast: 120ms ease;
5872
- --transition-normal: 200ms ease;
6873
+ --font-bold: 700;
6874
+ --surface: #f6efe4;
6875
+ --surface-strong: #fffdf9;
6876
+ --surface-muted: #ece4d8;
6877
+ --surface-tint: #e2eee8;
6878
+ --text: #17212b;
6879
+ --text-secondary: #52616f;
6880
+ --border: rgba(23, 33, 43, 0.12);
6881
+ --border-strong: rgba(23, 33, 43, 0.22);
6882
+ --accent: #0f766e;
6883
+ --accent-strong: #0b5c56;
6884
+ --accent-soft: rgba(15, 118, 110, 0.12);
6885
+ --signal: #c97a1e;
6886
+ --signal-soft: rgba(201, 122, 30, 0.14);
6887
+ --text-on-accent: #ffffff;
6888
+ --shadow-sm: 0 12px 24px rgba(16, 24, 32, 0.08);
6889
+ --shadow-lg: 0 28px 80px rgba(9, 21, 30, 0.2);
6890
+ --transition-fast: 140ms ease;
6891
+ --transition-normal: 220ms ease;
5873
6892
  }
5874
6893
 
5875
- /* ── Dark mode ── */
5876
6894
  @media (prefers-color-scheme: dark) {
5877
6895
  #accessify-mount:not([data-theme="light"]) {
5878
- --primary: #4D9FFF;
5879
- --primary-hover: #3385E6;
5880
- --primary-soft: color-mix(in srgb, #4D9FFF 12%, #1a1a1a);
5881
- --surface: #1a1a1a;
5882
- --surface-raised: #242428;
5883
- --text: #f0f0f0;
5884
- --text-secondary: #a0a0a5;
5885
- --text-on-primary: #ffffff;
5886
- --border: #38383c;
5887
- --border-strong: #505055;
5888
- --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.4);
6896
+ --surface: #0f1a22;
6897
+ --surface-strong: #132330;
6898
+ --surface-muted: #1a2b38;
6899
+ --surface-tint: #17323a;
6900
+ --text: #f4f7fa;
6901
+ --text-secondary: #b4c3ce;
6902
+ --border: rgba(244, 247, 250, 0.12);
6903
+ --border-strong: rgba(244, 247, 250, 0.22);
6904
+ --accent: #2dd4bf;
6905
+ --accent-strong: #16b5a1;
6906
+ --accent-soft: rgba(45, 212, 191, 0.12);
6907
+ --signal: #f6ad55;
6908
+ --signal-soft: rgba(246, 173, 85, 0.16);
6909
+ --shadow-sm: 0 12px 24px rgba(0, 0, 0, 0.28);
6910
+ --shadow-lg: 0 28px 80px rgba(0, 0, 0, 0.45);
5889
6911
  }
5890
6912
  }
5891
6913
 
5892
6914
  #accessify-mount[data-theme="dark"] {
5893
- --primary: #4D9FFF;
5894
- --primary-hover: #3385E6;
5895
- --primary-soft: color-mix(in srgb, #4D9FFF 12%, #1a1a1a);
5896
- --surface: #1a1a1a;
5897
- --surface-raised: #242428;
5898
- --text: #f0f0f0;
5899
- --text-secondary: #a0a0a5;
5900
- --text-on-primary: #ffffff;
5901
- --border: #38383c;
5902
- --border-strong: #505055;
5903
- --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.4);
6915
+ --surface: #0f1a22;
6916
+ --surface-strong: #132330;
6917
+ --surface-muted: #1a2b38;
6918
+ --surface-tint: #17323a;
6919
+ --text: #f4f7fa;
6920
+ --text-secondary: #b4c3ce;
6921
+ --border: rgba(244, 247, 250, 0.12);
6922
+ --border-strong: rgba(244, 247, 250, 0.22);
6923
+ --accent: #2dd4bf;
6924
+ --accent-strong: #16b5a1;
6925
+ --accent-soft: rgba(45, 212, 191, 0.12);
6926
+ --signal: #f6ad55;
6927
+ --signal-soft: rgba(246, 173, 85, 0.16);
6928
+ --shadow-sm: 0 12px 24px rgba(0, 0, 0, 0.28);
6929
+ --shadow-lg: 0 28px 80px rgba(0, 0, 0, 0.45);
5904
6930
  }
5905
6931
 
5906
- /* ===================================================================
5907
- UTILITIES
5908
- =================================================================== */
5909
-
5910
6932
  .sr-only {
5911
6933
  position: absolute;
5912
6934
  width: 1px;
@@ -5920,73 +6942,72 @@ function createWidgetStyles(config2) {
5920
6942
  }
5921
6943
 
5922
6944
  *:focus-visible {
5923
- outline: 3px solid var(--primary);
5924
- outline-offset: 2px;
5925
- border-radius: var(--radius-sm);
6945
+ outline: 3px solid var(--signal);
6946
+ outline-offset: 3px;
6947
+ border-radius: 12px;
5926
6948
  }
5927
6949
 
5928
- /* ===================================================================
5929
- TRIGGER BUTTON (FAB)
5930
- =================================================================== */
5931
-
5932
6950
  .accessify-trigger {
5933
6951
  position: fixed;
5934
6952
  ${isBottom ? "bottom: 20px" : "top: 20px"};
5935
6953
  ${isRight ? "right: 20px" : "left: 20px"};
5936
6954
  z-index: ${z};
5937
- width: 56px;
5938
- height: 56px;
5939
- border-radius: var(--radius-full);
6955
+ width: 64px;
6956
+ height: 64px;
5940
6957
  border: none;
5941
- background: var(--primary);
5942
- color: var(--text-on-primary);
6958
+ border-radius: 22px;
6959
+ background:
6960
+ radial-gradient(circle at 20% 20%, rgba(255, 255, 255, 0.22), transparent 42%),
6961
+ linear-gradient(145deg, #0f766e 0%, #144f67 55%, #c97a1e 100%);
6962
+ color: #ffffff;
5943
6963
  cursor: pointer;
5944
6964
  display: flex;
5945
6965
  align-items: center;
5946
6966
  justify-content: center;
5947
- box-shadow: var(--shadow-md);
5948
- transition: transform var(--transition-fast), box-shadow var(--transition-fast);
6967
+ box-shadow: 0 18px 42px rgba(12, 36, 46, 0.34);
6968
+ transition: transform var(--transition-fast), box-shadow var(--transition-fast), filter var(--transition-fast);
5949
6969
  }
5950
6970
 
5951
6971
  .accessify-trigger:hover {
5952
- transform: scale(1.05);
5953
- box-shadow: var(--shadow-lg);
5954
- background: var(--primary-hover);
6972
+ transform: translateY(-2px) scale(1.02);
6973
+ box-shadow: 0 22px 48px rgba(12, 36, 46, 0.42);
6974
+ filter: saturate(1.06);
5955
6975
  }
5956
6976
 
5957
6977
  .accessify-trigger:active {
5958
- transform: scale(0.95);
6978
+ transform: translateY(0) scale(0.98);
5959
6979
  }
5960
6980
 
5961
6981
  .accessify-trigger svg {
5962
- width: 28px;
5963
- height: 28px;
6982
+ width: 30px;
6983
+ height: 30px;
5964
6984
  }
5965
6985
 
5966
- /* ===================================================================
5967
- PANEL
5968
- =================================================================== */
5969
-
5970
6986
  .accessify-panel {
5971
6987
  position: fixed;
5972
- ${isBottom ? "bottom: 90px" : "top: 90px"};
6988
+ ${isBottom ? "bottom: 96px" : "top: 96px"};
5973
6989
  ${isRight ? "right: 20px" : "left: 20px"};
5974
6990
  z-index: ${z - 1};
5975
- width: 440px;
5976
- max-height: calc(100vh - 110px);
5977
- overflow-y: auto;
5978
- overflow-x: hidden;
5979
- background: var(--surface);
5980
- border-radius: var(--radius-lg);
5981
- box-shadow: var(--shadow-lg);
6991
+ width: 476px;
6992
+ max-height: calc(100vh - 120px);
6993
+ display: flex;
6994
+ flex-direction: column;
6995
+ overflow: hidden;
6996
+ border-radius: 28px;
5982
6997
  border: 1px solid var(--border);
6998
+ background:
6999
+ radial-gradient(circle at top right, rgba(201, 122, 30, 0.16), transparent 36%),
7000
+ linear-gradient(180deg, var(--surface-strong) 0%, var(--surface) 100%);
7001
+ color: var(--text);
7002
+ box-shadow: var(--shadow-lg);
5983
7003
  transform-origin: ${isBottom ? "bottom" : "top"} ${isRight ? "right" : "left"};
5984
7004
  transition: opacity var(--transition-normal), transform var(--transition-normal);
7005
+ backdrop-filter: blur(18px);
5985
7006
  }
5986
7007
 
5987
7008
  .accessify-panel[aria-hidden="true"] {
5988
7009
  opacity: 0;
5989
- transform: scale(0.96) translateY(${isBottom ? "8px" : "-8px"});
7010
+ transform: scale(0.96) translateY(${isBottom ? "12px" : "-12px"});
5990
7011
  pointer-events: none;
5991
7012
  display: none;
5992
7013
  }
@@ -5996,276 +7017,357 @@ function createWidgetStyles(config2) {
5996
7017
  transform: scale(1) translateY(0);
5997
7018
  }
5998
7019
 
5999
- /* Scroll indicator (only visible if panel overflows) */
6000
- .accessify-panel-scroll {
7020
+ .accessify-header {
6001
7021
  position: relative;
7022
+ display: grid;
7023
+ gap: var(--space-4);
7024
+ padding: var(--space-5);
7025
+ background:
7026
+ radial-gradient(circle at top left, rgba(255, 255, 255, 0.12), transparent 34%),
7027
+ linear-gradient(145deg, #0f2430 0%, #103e4c 52%, #1a5d4b 100%);
7028
+ color: #f5fbff;
6002
7029
  }
6003
7030
 
6004
- /* ===================================================================
6005
- HEADER (Utility Bar)
6006
- =================================================================== */
7031
+ .accessify-header-copy {
7032
+ display: grid;
7033
+ gap: var(--space-2);
7034
+ }
6007
7035
 
6008
- .accessify-header {
6009
- display: flex;
7036
+ .accessify-header-kicker {
7037
+ display: inline-flex;
6010
7038
  align-items: center;
6011
- gap: var(--space-2);
6012
- padding: var(--space-2) var(--space-3);
6013
- border-bottom: 1px solid var(--border);
6014
- background: var(--surface);
6015
- position: sticky;
6016
- top: 0;
6017
- z-index: 2;
7039
+ width: fit-content;
7040
+ padding: 6px 10px;
7041
+ border-radius: var(--radius-pill);
7042
+ background: rgba(255, 255, 255, 0.12);
7043
+ color: #ffe2b8;
7044
+ font-size: var(--text-xs);
7045
+ font-weight: var(--font-semibold);
7046
+ letter-spacing: 0.06em;
7047
+ text-transform: uppercase;
7048
+ }
7049
+
7050
+ .accessify-header-title {
7051
+ display: grid;
7052
+ gap: 6px;
6018
7053
  }
6019
7054
 
6020
7055
  .accessify-header h2 {
6021
- font-size: var(--text-base);
6022
- font-weight: var(--font-semibold);
6023
- color: var(--text);
6024
- margin: 0;
6025
- flex: 1;
6026
- min-width: 0;
7056
+ font-size: var(--text-xl);
7057
+ font-weight: var(--font-bold);
7058
+ line-height: 1.1;
6027
7059
  }
6028
7060
 
6029
- .accessify-header-actions {
7061
+ .accessify-header p {
7062
+ color: rgba(245, 251, 255, 0.82);
7063
+ font-size: var(--text-sm);
7064
+ max-width: 34ch;
7065
+ }
7066
+
7067
+ .accessify-header-toolbar {
6030
7068
  display: flex;
6031
7069
  align-items: center;
6032
- gap: var(--space-2);
6033
- flex-shrink: 0;
7070
+ gap: var(--space-3);
7071
+ justify-content: space-between;
7072
+ flex-wrap: wrap;
6034
7073
  }
6035
7074
 
6036
- /* Small pill buttons in header */
6037
- .accessify-header-btn {
6038
- background: var(--surface-raised);
6039
- border: 1px solid var(--border);
6040
- border-radius: var(--radius-sm);
6041
- padding: var(--space-1) var(--space-2);
6042
- cursor: pointer;
6043
- color: var(--text-secondary);
6044
- display: flex;
7075
+ .accessify-language-picker {
7076
+ position: relative;
7077
+ display: inline-flex;
6045
7078
  align-items: center;
6046
- gap: var(--space-1);
6047
- font-size: var(--text-xs);
7079
+ gap: 10px;
7080
+ min-width: 172px;
7081
+ padding: 0 14px;
7082
+ border-radius: 16px;
7083
+ border: 1px solid rgba(255, 255, 255, 0.16);
7084
+ background: rgba(10, 23, 29, 0.24);
7085
+ color: #ffffff;
7086
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
7087
+ }
7088
+
7089
+ .accessify-language-icon {
7090
+ display: inline-flex;
7091
+ align-items: center;
7092
+ justify-content: center;
7093
+ color: #9ce4da;
7094
+ }
7095
+
7096
+ .accessify-language-icon svg {
7097
+ width: 16px;
7098
+ height: 16px;
7099
+ }
7100
+
7101
+ .accessify-language-select {
7102
+ appearance: none;
7103
+ width: 100%;
7104
+ border: none;
7105
+ background: transparent;
7106
+ color: #ffffff;
7107
+ padding: 12px 0;
7108
+ font-size: var(--text-sm);
6048
7109
  font-weight: var(--font-medium);
6049
- transition: background var(--transition-fast), color var(--transition-fast);
6050
- white-space: nowrap;
7110
+ cursor: pointer;
6051
7111
  }
6052
7112
 
6053
- .accessify-header-btn:hover {
6054
- background: var(--border);
6055
- color: var(--text);
7113
+ .accessify-language-select option {
7114
+ color: #17212b;
6056
7115
  }
6057
7116
 
6058
- .accessify-header-btn svg {
6059
- width: 14px;
6060
- height: 14px;
7117
+ .accessify-header-actions {
7118
+ display: flex;
7119
+ align-items: center;
7120
+ gap: 10px;
7121
+ flex-wrap: wrap;
6061
7122
  }
6062
7123
 
6063
- /* Language toggle */
6064
- .accessify-lang-toggle {
6065
- background: var(--surface-raised);
6066
- border: 1px solid var(--border);
6067
- border-radius: var(--radius-sm);
6068
- padding: var(--space-1) var(--space-2);
7124
+ .accessify-header-btn {
7125
+ display: inline-flex;
7126
+ align-items: center;
7127
+ justify-content: center;
7128
+ gap: 8px;
7129
+ padding: 11px 14px;
7130
+ border: 1px solid rgba(255, 255, 255, 0.16);
7131
+ border-radius: 16px;
7132
+ background: rgba(10, 23, 29, 0.24);
7133
+ color: #f5fbff;
6069
7134
  cursor: pointer;
6070
- color: var(--text-secondary);
6071
- font-size: var(--text-xs);
6072
- font-weight: var(--font-semibold);
6073
- text-transform: uppercase;
6074
- letter-spacing: 0.5px;
6075
- transition: background var(--transition-fast);
6076
- min-width: 32px;
6077
- text-align: center;
7135
+ font-size: var(--text-sm);
7136
+ font-weight: var(--font-medium);
7137
+ transition: background var(--transition-fast), transform var(--transition-fast), border-color var(--transition-fast);
6078
7138
  }
6079
7139
 
6080
- .accessify-lang-toggle:hover {
6081
- background: var(--border);
6082
- color: var(--text);
7140
+ .accessify-header-btn:hover {
7141
+ background: rgba(255, 255, 255, 0.12);
7142
+ border-color: rgba(255, 255, 255, 0.24);
7143
+ transform: translateY(-1px);
6083
7144
  }
6084
7145
 
6085
- /* ===================================================================
6086
- STATUS BAR
6087
- =================================================================== */
7146
+ .accessify-header-btn svg {
7147
+ width: 16px;
7148
+ height: 16px;
7149
+ }
7150
+
7151
+ .accessify-header-btn--icon {
7152
+ width: 44px;
7153
+ padding-inline: 0;
7154
+ }
6088
7155
 
6089
7156
  .accessify-status {
6090
7157
  display: flex;
6091
7158
  align-items: center;
6092
7159
  justify-content: space-between;
6093
- padding: var(--space-1) var(--space-3);
6094
- background: var(--surface-raised);
7160
+ gap: var(--space-3);
7161
+ padding: 14px var(--space-5);
6095
7162
  border-bottom: 1px solid var(--border);
6096
- font-size: 10px;
6097
- color: var(--text-secondary);
7163
+ background: linear-gradient(180deg, rgba(15, 118, 110, 0.06), transparent);
6098
7164
  }
6099
7165
 
6100
7166
  .accessify-status-count {
7167
+ display: inline-flex;
7168
+ align-items: center;
7169
+ gap: 8px;
7170
+ min-height: 36px;
7171
+ padding: 0 14px;
7172
+ border-radius: var(--radius-pill);
7173
+ background: var(--accent-soft);
7174
+ color: var(--accent-strong);
7175
+ font-size: var(--text-sm);
6101
7176
  font-weight: var(--font-semibold);
6102
- color: var(--primary);
6103
7177
  }
6104
7178
 
6105
7179
  .accessify-status-count[data-count="0"] {
7180
+ background: var(--surface-muted);
6106
7181
  color: var(--text-secondary);
6107
7182
  }
6108
7183
 
6109
7184
  .accessify-status-reset {
6110
- background: none;
6111
7185
  border: none;
7186
+ background: none;
6112
7187
  color: var(--text-secondary);
6113
7188
  cursor: pointer;
6114
- font-size: var(--text-xs);
6115
- padding: var(--space-1) var(--space-2);
6116
- border-radius: var(--radius-sm);
6117
- transition: color var(--transition-fast), background var(--transition-fast);
7189
+ font-size: var(--text-sm);
7190
+ font-weight: var(--font-medium);
7191
+ padding: 8px 0;
7192
+ transition: color var(--transition-fast);
6118
7193
  }
6119
7194
 
6120
7195
  .accessify-status-reset:hover {
6121
- color: var(--error);
6122
- background: color-mix(in srgb, var(--error) 8%, transparent);
7196
+ color: var(--signal);
6123
7197
  }
6124
7198
 
6125
- /* ===================================================================
6126
- PROFILES SECTION
6127
- =================================================================== */
7199
+ .accessify-body {
7200
+ display: grid;
7201
+ gap: var(--space-4);
7202
+ padding: var(--space-4);
7203
+ overflow-y: auto;
7204
+ }
6128
7205
 
6129
- .accessify-profiles {
6130
- padding: var(--space-2) var(--space-3);
6131
- border-bottom: 1px solid var(--border);
7206
+ .accessify-section {
7207
+ display: grid;
7208
+ gap: var(--space-4);
7209
+ padding: var(--space-4);
7210
+ border-radius: var(--radius-lg);
7211
+ border: 1px solid var(--border);
7212
+ background: rgba(255, 255, 255, 0.32);
7213
+ box-shadow: var(--shadow-sm);
6132
7214
  }
6133
7215
 
6134
- .accessify-section-title {
6135
- font-size: 10px;
6136
- font-weight: var(--font-semibold);
6137
- text-transform: uppercase;
6138
- letter-spacing: 0.6px;
6139
- color: var(--text-secondary);
6140
- margin-bottom: var(--space-1);
7216
+ .accessify-section--spotlight {
7217
+ background:
7218
+ linear-gradient(180deg, rgba(15, 118, 110, 0.08) 0%, rgba(255, 255, 255, 0.28) 100%);
7219
+ border-color: color-mix(in srgb, var(--accent) 24%, var(--border));
6141
7220
  }
6142
7221
 
6143
- .accessify-profile-grid {
7222
+ .accessify-section-head {
6144
7223
  display: flex;
6145
- gap: var(--space-1);
6146
- overflow-x: auto;
6147
- scrollbar-width: none;
6148
- -webkit-overflow-scrolling: touch;
7224
+ align-items: flex-start;
7225
+ justify-content: space-between;
7226
+ gap: var(--space-3);
6149
7227
  }
6150
7228
 
6151
- .accessify-profile-grid::-webkit-scrollbar {
6152
- display: none;
7229
+ .accessify-section-head h3 {
7230
+ font-size: var(--text-lg);
7231
+ font-weight: var(--font-semibold);
7232
+ line-height: 1.15;
7233
+ color: var(--text);
6153
7234
  }
6154
7235
 
6155
- .accessify-profile-card {
6156
- display: flex;
6157
- flex-direction: column;
7236
+ .accessify-section-head p {
7237
+ margin-top: 6px;
7238
+ color: var(--text-secondary);
7239
+ font-size: var(--text-sm);
7240
+ max-width: 46ch;
7241
+ }
7242
+
7243
+ .accessify-section-kicker {
7244
+ display: inline-flex;
6158
7245
  align-items: center;
6159
- gap: 2px;
6160
- padding: var(--space-1) var(--space-2);
6161
- border: 1.5px solid var(--border);
6162
- border-radius: var(--radius-sm);
6163
- background: var(--surface);
6164
- color: var(--text);
6165
- cursor: pointer;
6166
- transition: all var(--transition-fast);
6167
- min-width: 68px;
6168
- text-align: center;
6169
- flex-shrink: 0;
6170
- font-size: 10px;
6171
- line-height: 1.2;
7246
+ margin-bottom: 8px;
7247
+ color: var(--signal);
7248
+ font-size: var(--text-xs);
7249
+ font-weight: var(--font-semibold);
7250
+ letter-spacing: 0.06em;
7251
+ text-transform: uppercase;
6172
7252
  }
6173
7253
 
6174
- .accessify-profile-card:hover {
6175
- border-color: var(--primary);
6176
- background: var(--surface-raised);
7254
+ .accessify-control-grid {
7255
+ display: grid;
7256
+ grid-template-columns: repeat(2, minmax(0, 1fr));
7257
+ gap: var(--space-3);
6177
7258
  }
6178
7259
 
6179
- .accessify-profile-card[aria-pressed="true"] {
6180
- background: var(--primary-soft);
6181
- border-color: var(--primary);
6182
- color: var(--primary);
6183
- font-weight: var(--font-medium);
7260
+ .accessify-control-card {
7261
+ display: grid;
7262
+ gap: var(--space-3);
7263
+ padding: var(--space-4);
7264
+ border-radius: 22px;
7265
+ border: 1px solid var(--border);
7266
+ background: var(--surface-strong);
6184
7267
  }
6185
7268
 
6186
- .accessify-profile-card svg {
6187
- width: 16px;
6188
- height: 16px;
7269
+ .accessify-control-copy {
7270
+ display: grid;
7271
+ grid-template-columns: auto 1fr;
7272
+ gap: var(--space-3);
7273
+ align-items: start;
6189
7274
  }
6190
7275
 
6191
- /* ===================================================================
6192
- CATEGORY SECTIONS
6193
- =================================================================== */
7276
+ .accessify-control-copy h4 {
7277
+ font-size: var(--text-base);
7278
+ font-weight: var(--font-semibold);
7279
+ color: var(--text);
7280
+ }
6194
7281
 
6195
- .accessify-category {
6196
- padding: var(--space-1) var(--space-3);
7282
+ .accessify-control-copy p {
7283
+ margin-top: 4px;
7284
+ color: var(--text-secondary);
7285
+ font-size: var(--text-sm);
6197
7286
  }
6198
7287
 
6199
- .accessify-category + .accessify-category {
6200
- border-top: 1px solid var(--border);
7288
+ .accessify-chip-group {
7289
+ display: flex;
7290
+ flex-wrap: wrap;
7291
+ gap: 8px;
6201
7292
  }
6202
7293
 
6203
- .accessify-category-title {
6204
- font-size: 10px;
6205
- font-weight: var(--font-semibold);
6206
- text-transform: uppercase;
6207
- letter-spacing: 0.6px;
6208
- color: var(--text-secondary);
6209
- margin-bottom: var(--space-1);
6210
- padding-left: var(--space-1);
7294
+ .accessify-chip {
7295
+ min-height: 40px;
7296
+ padding: 0 14px;
7297
+ border-radius: var(--radius-pill);
7298
+ border: 1px solid var(--border);
7299
+ background: var(--surface);
7300
+ color: var(--text);
7301
+ cursor: pointer;
7302
+ font-size: var(--text-sm);
7303
+ font-weight: var(--font-medium);
7304
+ transition: transform var(--transition-fast), background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
6211
7305
  }
6212
7306
 
6213
- /* ===================================================================
6214
- FEATURE CARDS
6215
- =================================================================== */
7307
+ .accessify-chip:hover {
7308
+ transform: translateY(-1px);
7309
+ border-color: var(--border-strong);
7310
+ background: var(--surface-strong);
7311
+ }
7312
+
7313
+ .accessify-chip[data-active="true"] {
7314
+ background: linear-gradient(135deg, var(--accent) 0%, var(--accent-strong) 100%);
7315
+ color: var(--text-on-accent);
7316
+ border-color: transparent;
7317
+ box-shadow: 0 12px 22px rgba(15, 118, 110, 0.24);
7318
+ }
7319
+
7320
+ .accessify-chip-group--sizes .accessify-chip {
7321
+ min-width: 68px;
7322
+ justify-content: center;
7323
+ }
6216
7324
 
6217
7325
  .accessify-features {
6218
7326
  display: grid;
6219
- grid-template-columns: repeat(3, 1fr);
6220
- gap: 4px;
7327
+ grid-template-columns: repeat(2, minmax(0, 1fr));
7328
+ gap: var(--space-3);
6221
7329
  }
6222
7330
 
6223
7331
  .accessify-card {
6224
7332
  position: relative;
6225
- display: flex;
6226
- flex-direction: column;
6227
- align-items: center;
6228
- justify-content: center;
6229
- gap: 1px;
6230
- padding: 6px var(--space-1);
6231
- border: 1.5px solid var(--border);
6232
- border-radius: var(--radius-sm);
6233
- background: var(--surface);
7333
+ display: grid;
7334
+ gap: 10px;
7335
+ align-content: start;
7336
+ min-height: 156px;
7337
+ padding: var(--space-4);
7338
+ border-radius: 22px;
7339
+ border: 1px solid var(--border);
7340
+ background: color-mix(in srgb, var(--surface-strong) 88%, transparent);
6234
7341
  color: var(--text);
6235
7342
  cursor: pointer;
6236
- transition: all var(--transition-fast);
6237
- text-align: center;
6238
- min-height: 48px;
7343
+ text-align: left;
6239
7344
  font-family: inherit;
6240
7345
  font-size: inherit;
6241
- line-height: inherit;
7346
+ transition: transform var(--transition-fast), border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast);
6242
7347
  }
6243
7348
 
6244
7349
  .accessify-card:hover {
6245
- border-color: var(--primary);
6246
- background: var(--surface-raised);
7350
+ transform: translateY(-2px);
7351
+ border-color: color-mix(in srgb, var(--accent) 28%, var(--border));
6247
7352
  box-shadow: var(--shadow-sm);
6248
7353
  }
6249
7354
 
6250
- /* ── Active card: bold, unmistakable ── */
6251
- .accessify-card[aria-checked="true"] {
6252
- background: var(--primary-soft);
6253
- border-color: var(--primary);
6254
- border-width: 2px;
6255
- /* Compensate for thicker border to prevent layout shift */
6256
- padding: calc(6px - 0.5px) calc(var(--space-1) - 0.5px);
7355
+ .accessify-card[data-active="true"] {
7356
+ border-color: color-mix(in srgb, var(--accent) 55%, var(--border));
7357
+ background:
7358
+ linear-gradient(180deg, rgba(15, 118, 110, 0.08) 0%, rgba(255, 255, 255, 0.18) 100%);
7359
+ box-shadow: 0 18px 32px rgba(15, 118, 110, 0.16);
6257
7360
  }
6258
7361
 
6259
- /* Checkmark badge */
6260
- .accessify-card[aria-checked="true"]::after {
7362
+ .accessify-card[data-active="true"]::after {
6261
7363
  content: '';
6262
7364
  position: absolute;
6263
- top: var(--space-1);
6264
- right: var(--space-1);
6265
- width: 18px;
6266
- height: 18px;
6267
- border-radius: var(--radius-full);
6268
- background: var(--primary);
7365
+ top: 14px;
7366
+ right: 14px;
7367
+ width: 20px;
7368
+ height: 20px;
7369
+ border-radius: 999px;
7370
+ background: var(--accent);
6269
7371
  mask-image: url("data:image/svg+xml,${CHECKMARK_SVG}");
6270
7372
  mask-size: 12px;
6271
7373
  mask-repeat: no-repeat;
@@ -6276,91 +7378,66 @@ function createWidgetStyles(config2) {
6276
7378
  -webkit-mask-position: center;
6277
7379
  }
6278
7380
 
6279
- .accessify-card[aria-checked="true"] .accessify-card-icon {
6280
- color: var(--primary);
6281
- }
6282
-
6283
- .accessify-card[aria-checked="true"] .accessify-card-label {
6284
- color: var(--primary);
6285
- font-weight: var(--font-semibold);
7381
+ .accessify-card-top {
7382
+ display: flex;
7383
+ align-items: center;
7384
+ justify-content: space-between;
7385
+ gap: var(--space-2);
6286
7386
  }
6287
7387
 
6288
7388
  .accessify-card-icon {
6289
- color: var(--text-secondary);
6290
- transition: color var(--transition-fast);
7389
+ display: inline-flex;
7390
+ align-items: center;
7391
+ justify-content: center;
7392
+ width: 44px;
7393
+ height: 44px;
7394
+ border-radius: 16px;
7395
+ background: var(--surface-tint);
7396
+ color: var(--accent-strong);
7397
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18);
6291
7398
  }
6292
7399
 
6293
7400
  .accessify-card-icon svg {
6294
- width: 18px;
6295
- height: 18px;
7401
+ width: 20px;
7402
+ height: 20px;
6296
7403
  }
6297
7404
 
6298
7405
  .accessify-card-label {
6299
- font-size: 10px;
6300
- font-weight: var(--font-medium);
6301
- line-height: 1.15;
6302
- word-break: break-word;
6303
- transition: color var(--transition-fast);
7406
+ font-size: var(--text-base);
7407
+ font-weight: var(--font-semibold);
7408
+ line-height: 1.2;
7409
+ color: var(--text);
6304
7410
  }
6305
7411
 
6306
7412
  .accessify-card-desc {
6307
- display: none;
7413
+ color: var(--text-secondary);
7414
+ font-size: var(--text-sm);
7415
+ line-height: 1.45;
6308
7416
  }
6309
7417
 
6310
- /* ===================================================================
6311
- FOOTER
6312
- =================================================================== */
6313
-
6314
7418
  .accessify-footer {
6315
- padding: var(--space-1) var(--space-3);
6316
- border-top: 1px solid var(--border);
6317
- font-size: 10px;
6318
- color: var(--text-secondary);
6319
- text-align: center;
6320
7419
  display: flex;
6321
7420
  align-items: center;
6322
7421
  justify-content: center;
6323
7422
  gap: var(--space-2);
7423
+ padding: 14px var(--space-5) var(--space-5);
7424
+ border-top: 1px solid var(--border);
7425
+ color: var(--text-secondary);
7426
+ font-size: var(--text-xs);
7427
+ text-align: center;
7428
+ background: linear-gradient(180deg, transparent, rgba(15, 118, 110, 0.04));
6324
7429
  }
6325
7430
 
6326
7431
  .accessify-footer a {
6327
- color: var(--primary);
7432
+ color: var(--accent-strong);
6328
7433
  text-decoration: none;
7434
+ font-weight: var(--font-medium);
6329
7435
  }
6330
7436
 
6331
7437
  .accessify-footer a:hover {
6332
7438
  text-decoration: underline;
6333
7439
  }
6334
7440
 
6335
- /* ===================================================================
6336
- SUB-PANELS (sliders, selects)
6337
- =================================================================== */
6338
-
6339
- .accessify-subpanel {
6340
- padding: var(--space-3) var(--space-5);
6341
- background: var(--surface-raised);
6342
- border-top: 1px solid var(--border);
6343
- }
6344
-
6345
- .accessify-slider {
6346
- width: 100%;
6347
- accent-color: var(--primary);
6348
- }
6349
-
6350
- .accessify-select {
6351
- width: 100%;
6352
- padding: var(--space-2) var(--space-3);
6353
- border: 1px solid var(--border);
6354
- border-radius: var(--radius-sm);
6355
- background: var(--surface);
6356
- color: var(--text);
6357
- font-size: var(--text-sm);
6358
- }
6359
-
6360
- /* ===================================================================
6361
- REDUCED MOTION
6362
- =================================================================== */
6363
-
6364
7441
  @media (prefers-reduced-motion: reduce) {
6365
7442
  *, *::before, *::after {
6366
7443
  animation-duration: 0.01ms !important;
@@ -6368,40 +7445,52 @@ function createWidgetStyles(config2) {
6368
7445
  }
6369
7446
  }
6370
7447
 
6371
- /* ===================================================================
6372
- MOBILE RESPONSIVE
6373
- =================================================================== */
6374
-
6375
- @media (max-width: 480px) {
7448
+ @media (max-width: 560px) {
6376
7449
  .accessify-panel {
6377
- width: 100%;
6378
- left: 0;
6379
- right: 0;
6380
- ${isBottom ? "bottom: 0" : "top: 0"};
6381
- border-radius: ${isBottom ? "var(--radius-lg) var(--radius-lg) 0 0" : "0 0 var(--radius-lg) var(--radius-lg)"};
6382
- max-height: 85vh;
7450
+ width: calc(100vw - 24px);
7451
+ ${isRight ? "right: 12px" : "left: 12px"};
7452
+ ${isBottom ? "bottom: 86px" : "top: 86px"};
7453
+ max-height: calc(100vh - 102px);
7454
+ }
7455
+
7456
+ .accessify-header,
7457
+ .accessify-status,
7458
+ .accessify-footer {
7459
+ padding-inline: var(--space-4);
7460
+ }
7461
+
7462
+ .accessify-body {
7463
+ padding: var(--space-3);
6383
7464
  }
6384
7465
 
7466
+ .accessify-control-grid,
6385
7467
  .accessify-features {
6386
- grid-template-columns: repeat(2, 1fr);
7468
+ grid-template-columns: 1fr;
6387
7469
  }
6388
7470
 
6389
7471
  .accessify-card {
6390
- min-height: 88px;
6391
- padding: var(--space-3);
7472
+ min-height: 0;
6392
7473
  }
6393
7474
 
6394
7475
  .accessify-trigger {
6395
7476
  ${isBottom ? "bottom: 16px" : "top: 16px"};
6396
7477
  ${isRight ? "right: 16px" : "left: 16px"};
6397
- }
6398
-
6399
- .accessify-card-desc {
6400
- display: none;
7478
+ width: 58px;
7479
+ height: 58px;
7480
+ border-radius: 20px;
6401
7481
  }
6402
7482
  }
6403
7483
  `;
6404
7484
  }
7485
+ const REMOVED_FEATURES = /* @__PURE__ */ new Set([
7486
+ "spacing",
7487
+ "dyslexia-font",
7488
+ "color-blind",
7489
+ "color-blindness",
7490
+ "saturation",
7491
+ "text-align",
7492
+ "line-height"
7493
+ ]);
6405
7494
  const DEFAULT_CONFIG = {
6406
7495
  position: "bottom-right",
6407
7496
  theme: "auto",
@@ -6409,14 +7498,8 @@ const DEFAULT_CONFIG = {
6409
7498
  features: [
6410
7499
  "contrast",
6411
7500
  "text-size",
6412
- "spacing",
6413
- "dyslexia-font",
6414
- "color-blindness",
6415
7501
  "link-highlight",
6416
- "saturation",
6417
7502
  "hide-images",
6418
- "text-align",
6419
- "line-height",
6420
7503
  "reading-guide",
6421
7504
  "reading-mask",
6422
7505
  "focus-highlight",
@@ -6439,13 +7522,11 @@ function init(userConfig = {}) {
6439
7522
  if (widgetInstance) return;
6440
7523
  const dataConfig = window.__accessify_dataConfig || {};
6441
7524
  config = { ...DEFAULT_CONFIG, ...dataConfig, ...userConfig };
7525
+ config.features = (config.features || DEFAULT_CONFIG.features).filter((feature) => !REMOVED_FEATURES.has(feature));
6442
7526
  containerEl = document.createElement("div");
6443
7527
  containerEl.id = "accessify-root";
6444
7528
  containerEl.setAttribute("role", "complementary");
6445
- containerEl.setAttribute(
6446
- "aria-label",
6447
- config.lang?.startsWith("de") ? "Barrierefreiheit-Einstellungen" : "Accessibility settings"
6448
- );
7529
+ containerEl.setAttribute("aria-label", t("widget.title", config.lang));
6449
7530
  const shadow = containerEl.attachShadow({ mode: "open", delegatesFocus: true });
6450
7531
  const sheet = new CSSStyleSheet();
6451
7532
  sheet.replaceSync(createWidgetStyles(config));
@@ -6515,6 +7596,8 @@ window.A11yPlus = window.Accessify;
6515
7596
  export {
6516
7597
  RateLimitError as R,
6517
7598
  destroy as d,
6518
- init as i
7599
+ getCurrentWidgetLang as g,
7600
+ init as i,
7601
+ t
6519
7602
  };
6520
- //# sourceMappingURL=index-CUQfpnwR.js.map
7603
+ //# sourceMappingURL=index-B6b-ij4T.js.map