@5even7/dlc-ui 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.
package/dist/index.umd.js CHANGED
@@ -324,7 +324,7 @@
324
324
  var CAPSULE_PRESETS = [{
325
325
  id: 'original',
326
326
  code: 'NC-01',
327
- name: 'ORIGINAL',
327
+ name: '初光',
328
328
  group: 'warm',
329
329
  seed: 1.7,
330
330
  speed: 0.5,
@@ -332,7 +332,7 @@
332
332
  }, {
333
333
  id: 'ocean',
334
334
  code: 'NC-02',
335
- name: 'OCEAN',
335
+ name: '沧溟',
336
336
  group: 'cold',
337
337
  seed: 8.2,
338
338
  speed: 0.48,
@@ -340,7 +340,7 @@
340
340
  }, {
341
341
  id: 'klein',
342
342
  code: 'NC-03',
343
- name: 'KLEIN',
343
+ name: '玄夜',
344
344
  group: 'cold',
345
345
  seed: 14.1,
346
346
  speed: 0.49,
@@ -348,7 +348,7 @@
348
348
  }, {
349
349
  id: 'ultraviolet',
350
350
  code: 'NC-04',
351
- name: 'ULTRAVIOLET',
351
+ name: '紫霄',
352
352
  group: 'cold',
353
353
  seed: 23.4,
354
354
  speed: 0.47,
@@ -356,7 +356,7 @@
356
356
  }, {
357
357
  id: 'chrome',
358
358
  code: 'NC-05',
359
- name: 'CHROME',
359
+ name: '银汉',
360
360
  group: 'cold',
361
361
  seed: 37.8,
362
362
  speed: 0.42,
@@ -364,7 +364,7 @@
364
364
  }, {
365
365
  id: 'plus',
366
366
  code: 'NC-06',
367
- name: 'PLUS',
367
+ name: '熔金',
368
368
  group: 'warm',
369
369
  seed: 51.3,
370
370
  speed: 0.5,
@@ -374,7 +374,7 @@
374
374
  var PROGRESS_PRESETS = [{
375
375
  id: 'model-training',
376
376
  code: 'NC-10',
377
- name: 'MODEL TRAINING',
377
+ name: '星火',
378
378
  subtitle: 'SHA 4.5 + 100 2026 TKN',
379
379
  group: 'progress',
380
380
  initialProgress: 43,
@@ -383,7 +383,7 @@
383
383
  }, {
384
384
  id: 'agent-migration',
385
385
  code: 'NC-11',
386
- name: 'AGENT MIGRATION',
386
+ name: '迁流',
387
387
  subtitle: 'TRANSFERRING PROTOCOL',
388
388
  group: 'progress',
389
389
  initialProgress: 33,
@@ -392,7 +392,7 @@
392
392
  }, {
393
393
  id: 'visual-training',
394
394
  code: 'NC-12',
395
- name: 'VISUAL TRAINING',
395
+ name: '幻境',
396
396
  subtitle: 'GENERATING POWER ++',
397
397
  group: 'progress',
398
398
  initialProgress: 58,
@@ -401,7 +401,7 @@
401
401
  }, {
402
402
  id: 'tide',
403
403
  code: 'NC-13',
404
- name: 'TIDE',
404
+ name: '汐潮',
405
405
  subtitle: 'MOON PULL / COAST',
406
406
  group: 'progress',
407
407
  initialProgress: 30,
@@ -411,23 +411,18 @@
411
411
 
412
412
  var PRESETS = CAPSULE_PRESETS;
413
413
  var ALL_PRESETS = [].concat(_toConsumableArray(CAPSULE_PRESETS), _toConsumableArray(PROGRESS_PRESETS));
414
- function validatePreset(preset) {
415
- return Boolean(preset && typeof preset.id === 'string' && typeof preset.code === 'string' && typeof preset.name === 'string' && Number.isFinite(preset.seed) && Number.isFinite(preset.speed) && Array.isArray(preset.colors) && preset.colors.length === 4);
416
- }
417
- function validateProgressPreset(preset) {
418
- return Boolean(preset && typeof preset.id === 'string' && typeof preset.code === 'string' && typeof preset.name === 'string' && preset.group === 'progress' && Number.isFinite(preset.initialProgress) && ['flow', 'tide'].indexOf(preset.edgeStyle || 'flow') !== -1 && Array.isArray(preset.colors) && preset.colors.length === 4);
419
- }
414
+
415
+ /**
416
+ * Resolve a preset by its literary name (e.g. '沧溟').
417
+ * Matching is case-insensitive and ignores surrounding whitespace,
418
+ * so '沧溟' and ' 沧溟 ' both work.
419
+ */
420
420
  function getPreset(kind, ref) {
421
421
  var list = kind === 'capsule' ? CAPSULE_PRESETS : kind === 'progress' ? PROGRESS_PRESETS : null;
422
422
  if (!list) throw new Error("Unknown preset kind: ".concat(kind, " (use \"capsule\" or \"progress\")"));
423
- if (ref && _typeof(ref) === 'object') {
424
- var valid = kind === 'capsule' ? validatePreset(ref) : validateProgressPreset(ref);
425
- if (!valid) throw new Error("Invalid ".concat(kind, " preset object"));
426
- return ref;
427
- }
428
423
  var key = String(ref).trim().toLowerCase();
429
424
  var found = list.find(function (preset) {
430
- return preset.id.toLowerCase() === key || preset.code.toLowerCase() === key || preset.name.toLowerCase() === key;
425
+ return preset.name.toLowerCase() === key;
431
426
  });
432
427
  if (!found) throw new Error("Unknown ".concat(kind, " preset: ").concat(ref));
433
428
  return found;
@@ -440,7 +435,6 @@
440
435
  quality: 'auto',
441
436
  renderer: 'auto',
442
437
  respectReducedMotion: true,
443
- interactive: true,
444
438
  mouseColor: true,
445
439
  showCopy: true
446
440
  },
@@ -873,8 +867,8 @@
873
867
  * Mount a cosmic (nebula) capsule into `container`.
874
868
  *
875
869
  * Options: preset (id/code/name or object), width, height (number=px or
876
- * string with px/%/vw/vh/em/rem), colors, seed, speed, quality, interactive,
877
- * respectReducedMotion, copy, cssVars.
870
+ * string with px/%/vw/vh/em/rem), colors, seed, speed, quality,
871
+ * respectReducedMotion, copy, cssVars.
878
872
  */
879
873
  function createCapsule(container) {
880
874
  var _options$preset;
@@ -882,7 +876,7 @@
882
876
  if (!container || typeof container.appendChild !== 'function') {
883
877
  throw new Error('createCapsule: container element is required');
884
878
  }
885
- var preset = _objectSpread2({}, getPreset('capsule', (_options$preset = options.preset) !== null && _options$preset !== void 0 ? _options$preset : 'NC-01'));
879
+ var preset = _objectSpread2({}, getPreset('capsule', (_options$preset = options.preset) !== null && _options$preset !== void 0 ? _options$preset : '初光'));
886
880
  var merged = normalizeOptions(DEFAULTS.capsule, preset, options);
887
881
  var copy = _objectSpread2(_objectSpread2({}, COPY), merged.copy || {});
888
882
  var root = document.createElement('div');
@@ -961,18 +955,16 @@
961
955
  }) : null;
962
956
  if (resizeObserver) resizeObserver.observe(root);else window.addEventListener('resize', renderer.resize);
963
957
  var visibility = createVisibilityGuard(root);
964
- if (merged.interactive !== false) {
965
- root.addEventListener('pointerenter', function () {
966
- return emitter.emit('pointerenter', {
967
- preset: _objectSpread2({}, preset)
968
- });
958
+ root.addEventListener('pointerenter', function () {
959
+ return emitter.emit('pointerenter', {
960
+ preset: _objectSpread2({}, preset)
969
961
  });
970
- root.addEventListener('pointerleave', function () {
971
- return emitter.emit('pointerleave', {
972
- preset: _objectSpread2({}, preset)
973
- });
962
+ });
963
+ root.addEventListener('pointerleave', function () {
964
+ return emitter.emit('pointerleave', {
965
+ preset: _objectSpread2({}, preset)
974
966
  });
975
- }
967
+ });
976
968
  root.addEventListener('click', function (event) {
977
969
  emitter.emit('click', {
978
970
  event: event,
@@ -1037,6 +1029,20 @@
1037
1029
  }));
1038
1030
  return this;
1039
1031
  },
1032
+ setSeed: function setSeed(seed) {
1033
+ var value = Number(seed);
1034
+ if (!Number.isFinite(value)) return this;
1035
+ preset.seed = value;
1036
+ renderer.setPreset(_objectSpread2({}, preset));
1037
+ return this;
1038
+ },
1039
+ setSpeed: function setSpeed(speed) {
1040
+ var value = Number(speed);
1041
+ if (!Number.isFinite(value)) return this;
1042
+ preset.speed = value;
1043
+ renderer.setPreset(_objectSpread2({}, preset));
1044
+ return this;
1045
+ },
1040
1046
  setSize: function setSize(width, height) {
1041
1047
  if (width !== undefined) merged.width = width;
1042
1048
  if (height !== undefined) merged.height = height;
@@ -2065,7 +2071,7 @@
2065
2071
  if (!container || typeof container.appendChild !== 'function') {
2066
2072
  throw new Error('createProgressCapsule: container element is required');
2067
2073
  }
2068
- var preset = _objectSpread2({}, getPreset('progress', (_options$preset = options.preset) !== null && _options$preset !== void 0 ? _options$preset : 'NC-10'));
2074
+ var preset = _objectSpread2({}, getPreset('progress', (_options$preset = options.preset) !== null && _options$preset !== void 0 ? _options$preset : '星火'));
2069
2075
  var merged = normalizeOptions(DEFAULTS.progress, preset, options);
2070
2076
  var copy = _objectSpread2(_objectSpread2({}, COPY), merged.copy || {});
2071
2077
  var root = document.createElement('div');
@@ -2221,6 +2227,26 @@
2221
2227
  });
2222
2228
  return this;
2223
2229
  },
2230
+ setEdgeStyle: function setEdgeStyle(edgeStyle) {
2231
+ var value = String(edgeStyle || '').toLowerCase();
2232
+ if (value !== 'flow' && value !== 'tide') return this;
2233
+ preset.edgeStyle = value;
2234
+ controller.profile = value === 'tide' ? FLOW_PROFILES.tide : FLOW_PROFILES[preset.id] || FLOW_PROFILES['visual-training'];
2235
+ if (overlay) {
2236
+ overlay.dispose();
2237
+ overlay = attachProgressFlowOverlay({
2238
+ root: root,
2239
+ canvas: canvas,
2240
+ preset: preset,
2241
+ getProgress: function getProgress() {
2242
+ return controller.value;
2243
+ }
2244
+ });
2245
+ }
2246
+ controller.webglActive = Boolean(overlay);
2247
+ controller.resizeCanvas();
2248
+ return this;
2249
+ },
2224
2250
  setColors: function setColors(colors) {
2225
2251
  if (!Array.isArray(colors) || colors.length !== 4) return this;
2226
2252
  controller.setColors(colors);
@@ -2286,7 +2312,7 @@
2286
2312
  if (!host || typeof host.appendChild !== 'function') {
2287
2313
  throw new Error('createColorBackground: host element is required');
2288
2314
  }
2289
- var preset = _objectSpread2({}, getPreset('capsule', (_options$preset = options.preset) !== null && _options$preset !== void 0 ? _options$preset : 'NC-01'));
2315
+ var preset = _objectSpread2({}, getPreset('capsule', (_options$preset = options.preset) !== null && _options$preset !== void 0 ? _options$preset : '初光'));
2290
2316
  var merged = normalizeOptions({
2291
2317
  quality: DEFAULTS.capsule.quality,
2292
2318
  renderer: DEFAULTS.capsule.renderer,
@@ -2430,7 +2456,5 @@
2430
2456
  exports.pauseAll = pauseAll;
2431
2457
  exports.resumeAll = resumeAll;
2432
2458
  exports.validateColors = validateColors;
2433
- exports.validatePreset = validatePreset;
2434
- exports.validateProgressPreset = validateProgressPreset;
2435
2459
 
2436
2460
  }));
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).CosmicCapsules={})}(this,function(e){"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=Array(t);r<t;r++)o[r]=e[r];return o}function r(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function i(e,t,r){return t&&function(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,h(o.key),o)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=p(e))||t){r&&(e=r);var o=0,n=function(){};return{s:n,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e,t,r){return(t=h(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach(function(t){s(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o,n,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(o=i.call(r)).done)&&(s.push(o.value),s.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw n}}return s}}(e,t)||p(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t);if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function p(e,r){if(e){if("string"==typeof e)return t(e,r);var o={}.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?t(e,r):void 0}}function v(){var e=Object.create(null);return{on:function(t,r){return e[t]||(e[t]=[]),e[t].push(r),function(){var o=e[t];if(o){var n=o.indexOf(r);-1!==n&&o.splice(n,1)}}},off:function(t,r){var o=e[t];if(!o)return!1;var n=o.indexOf(r);return-1!==n&&(o.splice(n,1),!0)},emit:function(t){var r=e[t];if(r){for(var o=arguments.length,n=new Array(o>1?o-1:0),i=1;i<o;i++)n[i-1]=arguments[i];var s,l=a(r.slice());try{for(l.s();!(s=l.n()).done;){s.value.apply(void 0,n)}}catch(e){l.e(e)}finally{l.f()}}}}}var m=/^[\d.]+(?:px|%|vw|vh|vmin|vmax|em|rem)$/;function g(e){if("number"==typeof e){if(!Number.isFinite(e)||e<0)throw new Error("Invalid size: ".concat(e));return"".concat(e,"px")}if("string"!=typeof e)throw new Error("Invalid size: ".concat(String(e)));var t=e.trim();if(!t)throw new Error("Invalid size: empty string");if(/^\d+(?:\.\d+)?$/.test(t))return"".concat(t,"px");if(!m.test(t))throw new Error('Invalid size or unsupported unit: "'.concat(e,'" (use px, %, vw, vh, vmin, vmax, em, rem)'));return t}var y={low:{dpr:1},medium:{dpr:1.5},high:{dpr:2}};function b(e){return"auto"===e?(t="undefined"!=typeof navigator?navigator:null,r=t&&"number"==typeof t.deviceMemory?t.deviceMemory:8,o=t&&"number"==typeof t.hardwareConcurrency?t.hardwareConcurrency:8,r<=4||o<=4?1.5:2):(y[e]||y.medium).dpr;var t,r,o}function w(e,t,r){var o=function(e){for(var t={},r=0,o=Object.keys(e);r<o.length;r++){var n=o[r];void 0!==e[n]&&(t[n]=e[n])}return t},n=o(t&&"object"===f(t)?t:{}),i=o(r&&"object"===f(r)?r:{});return c(c(c({},e),n),i)}var E=["#EAF6FF","#8FD0FF","#3B87F6","#6B58E9"],C=["#EDF2FF","#2F58D5","#1B2040","#E07A43"],x=["#F2EEFF","#B99AF1","#8F74DB","#D7D85C"],A=["#F5F6F8","#B9C0CC","#7F8793","#4A4F59"],S=["#FFF0E6","#F6C26B","#F98A64","#E86D74"],_=[{id:"original",code:"NC-01",name:"ORIGINAL",group:"warm",seed:1.7,speed:.5,colors:d(["#FFF3EA","#F5B27A","#F67BC6","#A978E8"])},{id:"ocean",code:"NC-02",name:"OCEAN",group:"cold",seed:8.2,speed:.48,colors:d(E)},{id:"klein",code:"NC-03",name:"KLEIN",group:"cold",seed:14.1,speed:.49,colors:d(C)},{id:"ultraviolet",code:"NC-04",name:"ULTRAVIOLET",group:"cold",seed:23.4,speed:.47,colors:d(x)},{id:"chrome",code:"NC-05",name:"CHROME",group:"cold",seed:37.8,speed:.42,colors:d(A)},{id:"plus",code:"NC-06",name:"PLUS",group:"warm",seed:51.3,speed:.5,colors:d(S)}],P=[{id:"model-training",code:"NC-10",name:"MODEL TRAINING",subtitle:"SHA 4.5 + 100 2026 TKN",group:"progress",initialProgress:43,edgeStyle:"flow",colors:["#2B1025","#FF3F94","#FF8A3D","#FFF06A"]},{id:"agent-migration",code:"NC-11",name:"AGENT MIGRATION",subtitle:"TRANSFERRING PROTOCOL",group:"progress",initialProgress:33,edgeStyle:"flow",colors:["#101C37","#245BFF","#00CFFF","#5DFFE6"]},{id:"visual-training",code:"NC-12",name:"VISUAL TRAINING",subtitle:"GENERATING POWER ++",group:"progress",initialProgress:58,edgeStyle:"flow",colors:["#21142D","#7042FF","#42F58D","#C4FF8A"]},{id:"tide",code:"NC-13",name:"TIDE",subtitle:"MOON PULL / COAST",group:"progress",initialProgress:30,edgeStyle:"tide",colors:["#0A2239","#2E9BFF","#7FE3FF","#EAF9FF"]}],T=_,M=[].concat(d(_),d(P));function R(e){return Boolean(e&&"string"==typeof e.id&&"string"==typeof e.code&&"string"==typeof e.name&&Number.isFinite(e.seed)&&Number.isFinite(e.speed)&&Array.isArray(e.colors)&&4===e.colors.length)}function k(e){return Boolean(e&&"string"==typeof e.id&&"string"==typeof e.code&&"string"==typeof e.name&&"progress"===e.group&&Number.isFinite(e.initialProgress)&&-1!==["flow","tide"].indexOf(e.edgeStyle||"flow")&&Array.isArray(e.colors)&&4===e.colors.length)}function F(e,t){var r="capsule"===e?_:"progress"===e?P:null;if(!r)throw new Error("Unknown preset kind: ".concat(e,' (use "capsule" or "progress")'));if(t&&"object"===f(t)){if(!("capsule"===e?R(t):k(t)))throw new Error("Invalid ".concat(e," preset object"));return t}var o=String(t).trim().toLowerCase(),n=r.find(function(e){return e.id.toLowerCase()===o||e.code.toLowerCase()===o||e.name.toLowerCase()===o});if(!n)throw new Error("Unknown ".concat(e," preset: ").concat(t));return n}var L={capsule:{width:"100%",height:160,quality:"auto",renderer:"auto",respectReducedMotion:!0,interactive:!0,mouseColor:!0,showCopy:!0},progress:{width:454,height:104,min:0,max:100,draggable:!0,keyboard:!0,edgeStyle:"flow",quality:"auto",renderer:"auto",showCopy:!0,respectReducedMotion:!0}},D={brandName:"画境观屿",dragLabel:"DRAG",valueSuffix:"%",progressAria:"{brand} {code} 加载进度",capsuleAria:"打开 {name} 沉浸预览"};function B(e){var t=e.replace("#",""),r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(255&r)/255]}function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=e.replace("#",""),o=Number.parseInt(r,16),n=o>>8&255,i=255&o;return"rgba(".concat(o>>16&255,", ").concat(n,", ").concat(i,", ").concat(t,")")}function U(e,t,r){var o=e.createShader(t);if(e.shaderSource(o,r),e.compileShader(o),!e.getShaderParameter(o,e.COMPILE_STATUS)){var n=e.getShaderInfoLog(o)||"Unknown shader compile error";throw e.deleteShader(o),new Error(n)}return o}var I=new WeakSet,N=function(){return i(function e(t,i){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(o(this,e),n(this,I),this.canvas=t,this.preset=c({},i),this.options=c({dprCap:1.75,mouseColor:!0},a),this.gl=t.getContext("webgl2",{alpha:!1,antialias:!1,depth:!1,powerPreference:"high-performance",preserveDrawingBuffer:!1}),!this.gl)throw new Error("WebGL2 is not available");this.program=function(e){var t=U(e,e.VERTEX_SHADER,"#version 300 es\nin vec2 a_position;\nout vec2 v_uv;\nvoid main() {\n v_uv = a_position * 0.5 + 0.5;\n gl_Position = vec4(a_position, 0.0, 1.0);\n}"),r=U(e,e.FRAGMENT_SHADER,"#version 300 es\nprecision highp float;\n\nin vec2 v_uv;\nout vec4 outColor;\n\nuniform vec2 u_resolution;\nuniform float u_time;\nuniform float u_seed;\nuniform float u_motion;\nuniform vec2 u_pointer;\nuniform vec3 u_colorA;\nuniform vec3 u_colorB;\nuniform vec3 u_colorC;\nuniform vec3 u_colorD;\n\nfloat hash21(vec2 p) {\n p = fract(p * vec2(123.34, 456.21));\n p += dot(p, p + 45.32 + u_seed);\n return fract(p.x * p.y);\n}\n\nfloat noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n float a = hash21(i);\n float b = hash21(i + vec2(1.0, 0.0));\n float c = hash21(i + vec2(0.0, 1.0));\n float d = hash21(i + vec2(1.0, 1.0));\n return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nfloat fbm(vec2 p) {\n float value = 0.0;\n float amplitude = 0.52;\n mat2 rotation = mat2(0.80, 0.60, -0.60, 0.80);\n for (int i = 0; i < 6; i++) {\n value += amplitude * noise(p);\n p = rotation * p * 2.03 + 17.7;\n amplitude *= 0.5;\n }\n return value;\n}\n\nfloat gaussian(float value, float center, float width) {\n return exp(-pow(value - center, 2.0) / max(width, 0.0001));\n}\n\nvec3 palette(float t) {\n t = clamp(t, 0.0, 1.0);\n vec3 shadow = mix(u_colorA, u_colorB, smoothstep(0.06, 0.62, t));\n vec3 body = mix(u_colorB, u_colorC, smoothstep(0.30, 0.82, t));\n vec3 highlight = mix(u_colorC, u_colorD, smoothstep(0.74, 1.0, t));\n vec3 restrained = mix(shadow, body, smoothstep(0.26, 0.72, t));\n return mix(restrained, highlight, smoothstep(0.78, 0.97, t));\n}\n\nvec3 renderNebula(vec2 uv, vec2 p, vec2 pointer, float distanceToPointer, float t) {\n vec2 delta = p - pointer;\n float influence = exp(-distanceToPointer * 4.6) * u_motion;\n float angle = influence * 1.7;\n mat2 swirl = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n p = pointer + swirl * delta;\n p += normalize(delta + 0.0001) * influence * 0.08;\n\n vec2 drift = vec2(t * 0.22, -t * 0.13);\n vec2 q = vec2(\n fbm(p * 1.35 + drift + u_seed),\n fbm(p * 1.35 + vec2(5.2, 1.3) - drift * 0.85)\n );\n vec2 r = vec2(\n fbm(p * 2.0 + 3.6 * q + vec2(1.7, 9.2) + t * 0.10),\n fbm(p * 2.0 + 3.0 * q + vec2(8.3, 2.8) - t * 0.085)\n );\n\n float cloud = fbm(p * 1.7 + 4.2 * r);\n float veins = fbm(p * 4.0 - 2.0 * q + t * 0.065);\n float nebula = smoothstep(0.18, 0.91, cloud * 0.9 + veins * 0.22);\n\n vec3 color = palette(nebula);\n color += u_colorD * pow(max(cloud - 0.63, 0.0), 2.0) * 1.05;\n color *= 0.78 + 0.34 * smoothstep(0.15, 0.9, veins);\n\n vec2 starGrid = floor((uv + vec2(u_seed * 0.013, 0.0)) * vec2(132.0, 58.0));\n vec2 starCell = fract(uv * vec2(132.0, 58.0)) - 0.5;\n float starRandom = hash21(starGrid);\n float starShape = smoothstep(0.075, 0.0, length(starCell));\n float starMask = step(0.989, starRandom) * starShape;\n float twinkle = 0.35 + 0.65 * sin(t * (1.0 + starRandom * 2.4) + starRandom * 40.0) * 0.5 + 0.5;\n color += starMask * twinkle * mix(u_colorC, u_colorD, starRandom) * 1.05;\n\n float pointerGlow = exp(-distanceToPointer * 7.0) * u_motion;\n color += u_colorD * pointerGlow * 0.28;\n return color;\n}\n\nvoid main() {\n vec2 uv = v_uv;\n vec2 p = uv - 0.5;\n p.x *= u_resolution.x / max(u_resolution.y, 1.0);\n\n vec2 pointer = u_pointer - 0.5;\n pointer.x *= u_resolution.x / max(u_resolution.y, 1.0);\n float distanceToPointer = length(p - pointer);\n\n vec3 color = renderNebula(uv, p, pointer, distanceToPointer, u_time);\n float vignette = smoothstep(0.94, 0.18, length((uv - 0.5) * vec2(1.0, 1.35)));\n color *= 0.70 + vignette * 0.42;\n color = pow(max(color, vec3(0.0)), vec3(0.88));\n\n outColor = vec4(color, 1.0);\n}"),o=e.createProgram();if(e.attachShader(o,t),e.attachShader(o,r),e.linkProgram(o),e.deleteShader(t),e.deleteShader(r),!e.getProgramParameter(o,e.LINK_STATUS)){var n=e.getProgramInfoLog(o)||"Unknown program link error";throw e.deleteProgram(o),new Error(n)}return o}(this.gl),this.locations=r(I,this,z).call(this),this.pointer=[.72,.45],this.pointerTarget=d(this.pointer),this.motion=0,this.motionTarget=0,this.timeOffset=.73*i.seed,this.visible=!0,this.disposed=!1,r(I,this,j).call(this),r(I,this,G).call(this),this.resize()},[{key:"setPreset",value:function(e){this.preset=c({},e),this.timeOffset=.73*e.seed}},{key:"setDprCap",value:function(e){this.options.dprCap=e,this.resize()}},{key:"randomize",value:function(){this.preset.seed=100*Math.random(),this.timeOffset=40*Math.random()}},{key:"resize",value:function(){var e=Math.min(window.devicePixelRatio||1,this.options.dprCap),t=this.canvas.getBoundingClientRect(),r=Math.max(2,Math.round(t.width*e)),o=Math.max(2,Math.round(t.height*e));this.canvas.width===r&&this.canvas.height===o||(this.canvas.width=r,this.canvas.height=o,this.gl.viewport(0,0,r,o))}},{key:"draw",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.disposed&&this.visible){this.resize();var r=this.gl;this.pointer[0]+=.08*(this.pointerTarget[0]-this.pointer[0]),this.pointer[1]+=.08*(this.pointerTarget[1]-this.pointer[1]),this.motion+=.07*(this.motionTarget-this.motion),r.useProgram(this.program),r.bindBuffer(r.ARRAY_BUFFER,this.buffer),r.enableVertexAttribArray(this.locations.position),r.vertexAttribPointer(this.locations.position,2,r.FLOAT,!1,0,0);var o=this.preset.colors.map(B);r.uniform2f(this.locations.resolution,this.canvas.width,this.canvas.height),r.uniform1f(this.locations.time,this.timeOffset+(t?0:e*this.preset.speed)),r.uniform1f(this.locations.seed,this.preset.seed),r.uniform1f(this.locations.motion,this.motion),r.uniform2f(this.locations.pointer,this.pointer[0],this.pointer[1]),r.uniform3fv(this.locations.colorA,o[0]),r.uniform3fv(this.locations.colorB,o[1]),r.uniform3fv(this.locations.colorC,o[2]),r.uniform3fv(this.locations.colorD,o[3]),r.drawArrays(r.TRIANGLES,0,3)}}},{key:"dispose",value:function(){this.disposed=!0;var e=this.eventTarget||this.canvas;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerMove),e.removeEventListener("pointerleave",this.onPointerLeave),this.gl.deleteBuffer(this.buffer),this.gl.deleteProgram(this.program);var t=this.gl.getExtension("WEBGL_lose_context");t&&t.loseContext()}}])}();function z(){var e=this,t=this.gl,r=function(r){return t.getUniformLocation(e.program,r)};return{position:t.getAttribLocation(this.program,"a_position"),resolution:r("u_resolution"),time:r("u_time"),seed:r("u_seed"),motion:r("u_motion"),pointer:r("u_pointer"),colorA:r("u_colorA"),colorB:r("u_colorB"),colorC:r("u_colorC"),colorD:r("u_colorD")}}function j(){var e=this.gl,t=new Float32Array([-1,-1,3,-1,-1,3]);this.buffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,this.buffer),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)}function G(){var e=this;!1!==this.options.mouseColor&&(this.eventTarget=this.options.eventTarget||this.canvas.parentElement||this.canvas,this.onPointerMove=function(t){var r=e.canvas.getBoundingClientRect();e.pointerTarget[0]=(t.clientX-r.left)/Math.max(r.width,1),e.pointerTarget[1]=1-(t.clientY-r.top)/Math.max(r.height,1),e.motionTarget=1},this.onPointerLeave=function(){e.motionTarget=0},this.eventTarget.addEventListener("pointermove",this.onPointerMove,{passive:!0}),this.eventTarget.addEventListener("pointerdown",this.onPointerMove,{passive:!0}),this.eventTarget.addEventListener("pointerleave",this.onPointerLeave,{passive:!0}))}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=u(B(e).map(function(e){return Math.round(255*e)}),3),o=r[0],n=r[1],i=r[2];return"rgba(".concat(o,", ").concat(n,", ").concat(i,", ").concat(t,")")}var W=function(){return i(function e(t,r){o(this,e),this.canvas=t,this.preset=r,this.context=t.getContext("2d"),this.visible=!0},[{key:"resize",value:function(){var e=this.canvas.getBoundingClientRect(),t=Math.min(window.devicePixelRatio||1,1.5),r=Math.max(2,Math.round(e.width*t)),o=Math.max(2,Math.round(e.height*t));this.canvas.width===r&&this.canvas.height===o||(this.canvas.width=r,this.canvas.height=o)}},{key:"drawNebula",value:function(e){var t=this.context,r=this.canvas,o=r.width,n=r.height,i=t.createLinearGradient(0,0,o,n);i.addColorStop(0,this.preset.colors[0]),i.addColorStop(.38,this.preset.colors[1]),i.addColorStop(.72,this.preset.colors[2]),i.addColorStop(1,this.preset.colors[3]),t.fillStyle=i,t.fillRect(0,0,o,n),t.globalCompositeOperation="screen";for(var a=0;a<6;a+=1){var s=(.5+.45*Math.sin(.32*e+1.7*a))*o,l=(.5+.4*Math.cos(.25*e+a))*n,c=Math.max(o,n)*(.08+a%3*.04),u=t.createRadialGradient(s,l,0,s,l,c);u.addColorStop(0,X(this.preset.colors[(a+1)%4],.24)),u.addColorStop(1,X(this.preset.colors[a%4],0)),t.fillStyle=u,t.fillRect(s-c,l-c,2*c,2*c)}t.globalCompositeOperation="source-over"}},{key:"draw",value:function(e){this.visible&&(this.resize(),this.drawNebula(e))}},{key:"setPreset",value:function(e){this.preset=e}},{key:"randomize",value:function(){}},{key:"dispose",value:function(){}}])}(),q=[],Y=!1,V=!1,H=0,K=0;function $(e){if(Y){var t=K?Math.min((e-K)/1e3,.05):0;if(K=e,H=requestAnimationFrame($),!V){var r,o=a(q.slice());try{for(o.s();!(r=o.n()).done;){var n=r.value;try{n.isPaused()||n.onFrame(t,e)}catch(e){console.warn("[dlc-ui] frame error:",e)}}}catch(e){o.e(e)}finally{o.f()}}0===q.length&&(cancelAnimationFrame(H),Y=!1,H=0)}}function Q(e,t){var r={onFrame:e,isPaused:t};return q.push(r),Y||(Y=!0,K=0,H=requestAnimationFrame($)),function(){var e=q.indexOf(r);-1!==e&&q.splice(e,1),0===q.length&&H&&(cancelAnimationFrame(H),Y=!1,H=0)}}function J(e){var t=!0,r="undefined"==typeof document||!document.hidden,o=!1,n=null;"undefined"!=typeof IntersectionObserver&&(n=new IntersectionObserver(function(e){t=e.some(function(e){return e.isIntersecting})},{rootMargin:"180px"})).observe(e);var i=function(){r="undefined"!=typeof document&&!document.hidden};return"undefined"!=typeof document&&document.addEventListener("visibilitychange",i),{isVisible:function(){return t&&r},dispose:function(){o||(o=!0,n&&n.disconnect(),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",i))}}}var Z=240,ee={"model-training":{seed:.37,broad:.58,middle:.25,detail:.13,lobe:.24},"agent-migration":{seed:1.71,broad:.72,middle:.1,detail:.03,lobe:.18},"visual-training":{seed:2.83,broad:.66,middle:.16,detail:.06,lobe:.23},tide:{seed:4.12,broad:.82,middle:.07,detail:.02,lobe:.3,warp:.5}},te=Object.create(null);function re(e,t,r){var o=(e-t)/Math.max(r,.001);return Math.exp(-o*o)}function oe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"flow",r="".concat(e,":").concat(t);return te[r]||(te[r]=function(e){for(var t="tide"===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"flow")?ee.tide:ee[e]||ee["visual-training"],r=new Uint8Array(19200),o=0;o<Z;o+=1){var n=o/Z*Math.PI*2;t.warp&&(n+=t.warp*Math.sin(2*n));for(var i=.28+.13*Math.sin(.53*n+t.seed),a=.7+.12*Math.cos(.47*n+1.7*t.seed),s=0;s<80;s+=1){var l=s/Math.max(79,1),c=Math.pow(Math.max(Math.sin(Math.PI*l),0),.48),u=Math.sin(l*Math.PI*2*1.35+.58*n+t.seed)*t.broad,d=Math.sin(l*Math.PI*2*3.2-.91*n+2.1*t.seed)*t.middle,h=Math.sin(l*Math.PI*2*6.1+1.31*n+3.2*t.seed)*t.detail,f=(re(l,i,.09)*Math.sin(1.11*n+4*t.seed)-re(l,a,.1)*Math.cos(.97*n+3.3*t.seed))*t.lobe,p=Math.max(-1,Math.min(1,(u+d+h+f)*c));r[s*Z+o]=Math.round(255*(.5*p+.5))}}return r}(e,t)),te[r]}function ne(e){var t=Number.parseInt(e.replace("#",""),16);return[(t>>16&255)/255,(t>>8&255)/255,(255&t)/255]}var ie={"model-training":0,"agent-migration":1,"visual-training":2,tide:3},ae={"model-training":1.05,"agent-migration":1.04,"visual-training":1.04,tide:1.18};function se(e,t,r){var o=e.createShader(t);if(e.shaderSource(o,r),e.compileShader(o),!e.getShaderParameter(o,e.COMPILE_STATUS)){var n=e.getShaderInfoLog(o)||"Unknown shader compile error";throw e.deleteShader(o),new Error(n)}return o}var le=function(){return i(function e(t,r){var n;o(this,e);var i=t.getContext("webgl2",{alpha:!1,antialias:!0,premultipliedAlpha:!1,powerPreference:"high-performance"});if(!i)throw new Error("WebGL2 unavailable");this.canvas=t,this.gl=i,this.program=function(e){var t=se(e,e.VERTEX_SHADER,"#version 300 es\nin vec2 a_position;\nout vec2 v_uv;\nvoid main() {\n v_uv = a_position * 0.5 + 0.5;\n gl_Position = vec4(a_position, 0.0, 1.0);\n}"),r=se(e,e.FRAGMENT_SHADER,"#version 300 es\nprecision highp float;\n\nin vec2 v_uv;\nout vec4 outColor;\n\nuniform vec2 u_resolution;\nuniform float u_time;\nuniform float u_progress;\nuniform float u_seed;\nuniform float u_profile;\nuniform sampler2D u_motion;\nuniform sampler2D u_effect;\nuniform float u_hasEffect;\nuniform float u_effectFrames;\nuniform float u_motionDuration;\nuniform float u_motionScale;\nuniform vec3 u_dark;\nuniform vec3 u_accentA;\nuniform vec3 u_accentB;\nuniform vec3 u_glow;\n\nfloat hash21(vec2 p) {\n p = fract(p * vec2(123.34, 456.21));\n p += dot(p, p + 45.32 + u_seed * 11.7);\n return fract(p.x * p.y);\n}\n\nfloat noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n float a = hash21(i);\n float b = hash21(i + vec2(1.0, 0.0));\n float c = hash21(i + vec2(0.0, 1.0));\n float d = hash21(i + vec2(1.0, 1.0));\n return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nfloat fbm(vec2 p) {\n float value = 0.0;\n float amplitude = 0.55;\n mat2 rotation = mat2(0.82, 0.57, -0.57, 0.82);\n for (int i = 0; i < 6; i++) {\n value += noise(p) * amplitude;\n p = rotation * p * 2.02 + 13.7;\n amplitude *= 0.48;\n }\n return value;\n}\n\nfloat gaussian(float value, float center, float width) {\n float delta = (value - center) / max(width, 0.0001);\n return exp(-delta * delta);\n}\n\nfloat profileMix(float model, float agent, float visual) {\n if (u_profile < 0.5) return model;\n if (u_profile < 1.5) return agent;\n return visual;\n}\n\nfloat motionSample(float y, float t) {\n float phase = fract(t / max(u_motionDuration, 0.001));\n float captured = texture(u_motion, vec2(phase, 1.0 - clamp(y, 0.0, 1.0))).r;\n return (captured * 2.0 - 1.0) * u_motionScale;\n}\n\nfloat edgeDisplacement(float y, float t) {\n return motionSample(y, t);\n}\n\nfloat flowDisplacement(float y, float t) {\n return (\n motionSample(y - 0.024, t) * 0.08 +\n motionSample(y - 0.012, t) * 0.18 +\n motionSample(y, t) * 0.48 +\n motionSample(y + 0.012, t) * 0.18 +\n motionSample(y + 0.024, t) * 0.08\n );\n}\n\nfloat ellipseRing(vec2 p, float radius, float width) {\n return gaussian(length(p), radius, width);\n}\n\nvoid main() {\n vec2 uv = v_uv;\n float t = u_time;\n float edge = u_progress + edgeDisplacement(uv.y, t);\n float flowEdge = u_progress + flowDisplacement(uv.y, t);\n float d = uv.x - edge;\n float fd = uv.x - flowEdge;\n\n vec3 rightBase = vec3(0.125, 0.129, 0.145);\n vec3 color = rightBase;\n\n float leftMask = 1.0 - smoothstep(-0.001, 0.002, d);\n color = mix(color, u_dark, leftMask * profileMix(0.96, 0.92, 0.96));\n\n vec2 flowP = vec2((fd + 0.10) * 6.2, uv.y * 1.95);\n float flowA = fbm(flowP + vec2(-t * 0.22, t * 0.27) + u_seed * 1.7);\n float flowB = fbm(flowP * 1.52 + vec2(t * 0.28, -t * 0.36) + 8.2 + u_seed);\n float flowC = fbm(flowP * 2.25 + vec2(-t * 0.41, t * 0.46) + 19.0);\n\n float farCenter = profileMix(-0.060, -0.079, -0.045) + (flowA - 0.5) * profileMix(0.018, 0.022, 0.014);\n float midCenter = profileMix(-0.039, -0.052, -0.030) + (flowB - 0.5) * profileMix(0.013, 0.016, 0.010);\n float hotCenter = profileMix(-0.026, -0.029, -0.023) + (flowC - 0.5) * 0.010;\n\n float farBand = gaussian(fd, farCenter, profileMix(0.035, 0.049, 0.030));\n float midBand = gaussian(fd, midCenter, profileMix(0.026, 0.034, 0.026));\n float hotBand = gaussian(fd, hotCenter, profileMix(0.023, 0.027, 0.026));\n float darkTrough = gaussian(fd, profileMix(-0.050, -0.058, -0.044) + (flowB - 0.5) * 0.010, profileMix(0.020, 0.025, 0.021));\n\n float ringY = 0.47 + sin(t * 0.58 + u_seed * 2.4) * 0.12;\n vec2 ringP = vec2((fd + 0.086) / 0.078, (uv.y - ringY) / 0.25);\n ringP += vec2((flowB - 0.5) * 0.08, (flowA - 0.5) * 0.06);\n float ringTexture = fbm(ringP * 2.15 + vec2(t * 0.18, -t * 0.14) + u_seed * 1.9);\n float ring = ellipseRing(ringP, 0.66, 0.32) * (0.30 + 0.64 * ringTexture);\n float ringCore = gaussian(length(ringP), 0.25, 0.25);\n float ringPulse = smoothstep(0.58, 0.90, 0.5 + 0.5 * sin(t * 0.82 + u_seed * 4.1));\n float modelRing = ring * ringPulse * (1.0 - step(0.5, u_profile));\n float visualRing = ring * 0.16 * step(1.5, u_profile) * ringPulse;\n\n float cloudGate = leftMask * smoothstep(-0.30, -0.008, fd);\n float textureA = smoothstep(0.24, 0.92, flowA * 0.72 + flowB * 0.42);\n float textureB = smoothstep(0.28, 0.94, flowB * 0.68 + flowC * 0.38);\n\n vec3 hotColor = u_accentB;\n color += u_accentA * farBand * cloudGate * (0.07 + textureA * profileMix(0.42, 0.24, 0.40));\n color += u_accentB * midBand * cloudGate * (0.15 + textureB * profileMix(0.70, 0.46, 0.68));\n color += hotColor * hotBand * cloudGate * profileMix(0.88, 0.62, 0.84);\n float modelMask = 1.0 - step(0.5, u_profile);\n color += u_accentA * (modelRing + visualRing) * cloudGate * profileMix(0.54, 0.0, 0.34);\n color *= 1.0 - darkTrough * profileMix(0.44, 0.24, 0.24) * cloudGate;\n color *= 1.0 - ringCore * modelMask * ringPulse * 0.44 * cloudGate;\n\n float broadHalo = exp(-abs(d) * 96.0);\n float innerHalo = exp(-abs(d) * 176.0);\n float colorCore = exp(-abs(d) * 360.0);\n float sharpCore = exp(-abs(d) * 760.0);\n float leftGate = 1.0 - smoothstep(-0.003, 0.005, d);\n\n color += u_accentA * broadHalo * leftGate * profileMix(0.09, 0.04, 0.06);\n color += hotColor * innerHalo * leftGate * profileMix(0.76, 0.72, 0.78);\n color += u_glow * colorCore * profileMix(0.72, 0.34, 0.24);\n\n float whiteStrength = profileMix(0.10, 0.0, 0.0);\n color += vec3(1.0, 0.99, 0.91) * sharpCore * whiteStrength;\n\n float rightCut = smoothstep(0.001, 0.006, d);\n color = mix(color, rightBase, rightCut);\n\n float effectX = (d * 1257.0 + 260.0) / 320.0;\n float atlasPhase = fract(t / 12.0) * u_effectFrames;\n float atlasFrameA = floor(atlasPhase);\n float atlasFrameB = mod(atlasFrameA + 1.0, u_effectFrames);\n float atlasMix = smoothstep(0.0, 1.0, fract(atlasPhase));\n float atlasXA = (atlasFrameA + clamp(effectX, 0.0, 1.0)) / u_effectFrames;\n float atlasXB = (atlasFrameB + clamp(effectX, 0.0, 1.0)) / u_effectFrames;\n vec3 referenceA = texture(u_effect, vec2(atlasXA, uv.y)).rgb;\n vec3 referenceB = texture(u_effect, vec2(atlasXB, uv.y)).rgb;\n vec3 referenceColor = mix(referenceA, referenceB, atlasMix);\n float stripMask = smoothstep(0.0, 0.018, effectX) * (1.0 - smoothstep(0.982, 1.0, effectX));\n float referenceLeft = 1.0 - smoothstep(-0.026, -0.012, d);\n color = mix(color, referenceColor, stripMask * referenceLeft * u_hasEffect);\n\n outColor = vec4(clamp(color, 0.0, 1.0), 1.0);\n}"),o=e.createProgram();if(e.attachShader(o,t),e.attachShader(o,r),e.linkProgram(o),e.deleteShader(t),e.deleteShader(r),!e.getProgramParameter(o,e.LINK_STATUS)){var n=e.getProgramInfoLog(o)||"Unknown shader link error";throw e.deleteProgram(o),new Error(n)}return o}(i),this.profile="tide"===r.edgeStyle?3:null!==(n=ie[r.id])&&void 0!==n?n:2,this.seed=13.7*function(e){var t,r=2166136261,o=a(e);try{for(o.s();!(t=o.n()).done;)r^=t.value.charCodeAt(0),r=Math.imul(r,16777619)}catch(e){o.e(e)}finally{o.f()}return(r>>>0)/4294967295}("".concat(r.id,"-shader"))+1,this.colors=r.colors.map(ne),this.motionData=oe(r.id,r.edgeStyle);var s="tide"===r.edgeStyle?ae.tide:ae[r.id]||1.04;this.motionScale=40*s/1257,this.position=i.getAttribLocation(this.program,"a_position"),this.uniforms={resolution:i.getUniformLocation(this.program,"u_resolution"),time:i.getUniformLocation(this.program,"u_time"),progress:i.getUniformLocation(this.program,"u_progress"),seed:i.getUniformLocation(this.program,"u_seed"),profile:i.getUniformLocation(this.program,"u_profile"),motion:i.getUniformLocation(this.program,"u_motion"),effect:i.getUniformLocation(this.program,"u_effect"),hasEffect:i.getUniformLocation(this.program,"u_hasEffect"),effectFrames:i.getUniformLocation(this.program,"u_effectFrames"),motionDuration:i.getUniformLocation(this.program,"u_motionDuration"),motionScale:i.getUniformLocation(this.program,"u_motionScale"),dark:i.getUniformLocation(this.program,"u_dark"),accentA:i.getUniformLocation(this.program,"u_accentA"),accentB:i.getUniformLocation(this.program,"u_accentB"),glow:i.getUniformLocation(this.program,"u_glow")},this.buffer=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,this.buffer),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),i.STATIC_DRAW),this.motionTexture=i.createTexture(),i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,this.motionTexture),i.pixelStorei(i.UNPACK_ALIGNMENT,1),i.texImage2D(i.TEXTURE_2D,0,i.R8,Z,80,0,i.RED,i.UNSIGNED_BYTE,this.motionData),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.REPEAT),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),this.effectTexture=i.createTexture(),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,this.effectTexture),i.texImage2D(i.TEXTURE_2D,0,i.RGB,1,1,0,i.RGB,i.UNSIGNED_BYTE,new Uint8Array([32,33,38])),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),this.effectUploaded=!1},[{key:"resize",value:function(e,t,r){var o=Math.max(1,Math.round(e*r)),n=Math.max(1,Math.round(t*r));this.canvas.width===o&&this.canvas.height===n||(this.canvas.width=o,this.canvas.height=n),this.gl.viewport(0,0,o,n)}},{key:"draw",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=this.gl;o.useProgram(this.program),o.bindBuffer(o.ARRAY_BUFFER,this.buffer),o.enableVertexAttribArray(this.position),o.vertexAttribPointer(this.position,2,o.FLOAT,!1,0,0),o.uniform2f(this.uniforms.resolution,this.canvas.width,this.canvas.height),o.uniform1f(this.uniforms.time,e),o.uniform1f(this.uniforms.progress,t/100),o.uniform1f(this.uniforms.seed,this.seed),o.uniform1f(this.uniforms.profile,this.profile),o.activeTexture(o.TEXTURE0),o.bindTexture(o.TEXTURE_2D,this.motionTexture),o.uniform1i(this.uniforms.motion,0),o.uniform1f(this.uniforms.motionDuration,12),o.uniform1f(this.uniforms.motionScale,this.motionScale);var n=this.effectUploaded?1:0;if(!this.effectUploaded&&r&&r.complete&&r.naturalWidth>0){o.activeTexture(o.TEXTURE1),o.bindTexture(o.TEXTURE_2D,this.effectTexture),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,!0);try{o.texImage2D(o.TEXTURE_2D,0,o.RGB,o.RGB,o.UNSIGNED_BYTE,r),this.effectUploaded=!0,n=1}catch(e){console.warn("[画境观屿] 参考纹理图集上传失败,继续使用程序化降级。",e)}o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,!1)}o.activeTexture(o.TEXTURE1),o.bindTexture(o.TEXTURE_2D,this.effectTexture),o.uniform1i(this.uniforms.effect,1),o.uniform1f(this.uniforms.hasEffect,n),o.uniform1f(this.uniforms.effectFrames,24),o.uniform3fv(this.uniforms.dark,this.colors[0]),o.uniform3fv(this.uniforms.accentA,this.colors[1]),o.uniform3fv(this.uniforms.accentB,this.colors[2]),o.uniform3fv(this.uniforms.glow,this.colors[3]),o.drawArrays(o.TRIANGLES,0,6)}},{key:"setColors",value:function(e){this.colors=e.map(ne)}},{key:"dispose",value:function(){var e=this.gl;e.deleteBuffer(this.buffer),e.deleteTexture(this.motionTexture),e.deleteTexture(this.effectTexture),e.deleteProgram(this.program);var t=e.getExtension("WEBGL_lose_context");t&&t.loseContext()}}])}();var ce=Object.create(null),ue={"model-training":["#20131f","#ff3f94","#ff8a3d","#fff06a"],"agent-migration":["#111a31","#245bff","#00cfff","#5dffe6"],"visual-training":["#1f172b","#7042ff","#42f58d","#c4ff8a"],tide:["#0a2239","#2e9bff","#7fe3ff","#eaf9ff"]};function de(e,t,r,o,n,i,a){e.save(),e.translate(t,r),e.scale(1,n/o);var s=e.createRadialGradient(0,0,0,0,0,o);s.addColorStop(0,"".concat(i).concat(Math.round(255*a).toString(16).padStart(2,"0"))),s.addColorStop(.46,"".concat(i).concat(Math.round(.42*a*255).toString(16).padStart(2,"0"))),s.addColorStop(1,"".concat(i,"00")),e.fillStyle=s,e.fillRect(-o,-o,2*o,2*o),e.restore()}function he(e){return ce[e]||(ce[e]=function(e){var t=ue[e]||ue["visual-training"],r=document.createElement("canvas");r.width=1536,r.height=32;for(var o=r.getContext("2d"),n=0;n<24;n+=1){var i=n/24*Math.PI*2,a=64*n;o.save(),o.translate(a,0),o.fillStyle=t[0],o.fillRect(0,0,64,32),o.globalCompositeOperation="screen",de(o,35+5*Math.sin(.83*i),10+5*Math.cos(.61*i),27,18,t[1],"agent-migration"===e?.32:.42),de(o,45+4*Math.cos(.72*i),23+4*Math.sin(.54*i),22,15,t[2],.44),de(o,53+2*Math.sin(1.07*i),16+6*Math.cos(.89*i),12,13,t[3],"model-training"===e?.3:.2),o.globalCompositeOperation="source-over";var s=o.createRadialGradient(41,16,1,41,16,17);s.addColorStop(0,"rgba(5,6,11,0.64)"),s.addColorStop(.58,"rgba(6,7,12,0.26)"),s.addColorStop(1,"rgba(6,7,12,0)"),o.fillStyle=s,o.fillRect(20,0,44,32),o.restore()}var l=new Image;l.decoding="async";var c={image:l,ready:!1};return l.addEventListener("load",function(){c.ready=!0},{once:!0}),l.addEventListener("error",function(){c.ready=!1},{once:!0}),l.src=r.toDataURL("image/png"),c}(e)),ce[e]}function fe(e){var t=e.root,r=e.canvas,o=e.preset,n=e.getProgress,i=document.createElement("canvas");i.className="hj-progress-canvas hj-progress-overlay",i.setAttribute("aria-hidden","true"),r.insertAdjacentElement("afterend",i);var a=function(e,t){try{return new le(e,t)}catch(e){return console.warn("[画境观屿] 进度流体 WebGL2 不可用,使用 Canvas 2D 降级。",e),null}}(i,o);if(!a)return i.remove(),null;var s=he(o.id);t.classList.add("has-webgl-progress");var l=function(){var e=t.getBoundingClientRect(),r=Math.max(1,e.width),o=Math.max(1,e.height),n=Math.min(window.devicePixelRatio||1,2);i.style.width="".concat(r,"px"),i.style.height="".concat(o,"px"),a.resize(r,o,n)},c=null,u=null;return"undefined"!=typeof ResizeObserver?(c=new ResizeObserver(l)).observe(t):(u=l,window.addEventListener("resize",u)),l(),{update:function(e){var t=e%12,r=n();a.draw(t,Number.isFinite(r)?r:o.initialProgress,s.ready?s.image:null)},setColors:function(e){a.setColors(e)},dispose:function(){c&&c.disconnect(),u&&window.removeEventListener("resize",u),a.dispose(),i.remove(),t.classList.remove("has-webgl-progress")}}}var pe=function(e,t,r){return Math.min(Math.max(e,t),r)},ve="undefined"!=typeof CanvasRenderingContext2D&&"filter"in CanvasRenderingContext2D.prototype;function me(e){var t,r=2166136261,o=a(e);try{for(o.s();!(t=o.n()).done;){r^=t.value.charCodeAt(0),r=Math.imul(r,16777619)}}catch(e){o.e(e)}finally{o.f()}return(r>>>0)/4294967295}function ge(e,t){return e.replace(/\{(\w+)\}/g,function(e,r){return void 0!==t[r]?t[r]:""})}var ye={"model-training":{cycles:[.98,3.05,5.45],amplitudes:[11.2,11,5.2],speeds:[.31,-.53,.78],bulgeAmplitude:8.2,timeScale:1,glowWidth:5.8,haloWidth:20,whiteAlpha:.72,whiteWidth:1.15,cloudWidth:.17,autoRange:[25,66]},"agent-migration":{cycles:[.62,1.55,2.95],amplitudes:[16,7.8,2.3],speeds:[.25,-.4,.6],bulgeAmplitude:8.4,timeScale:.82,glowWidth:6.3,haloWidth:21,whiteAlpha:.18,whiteWidth:.45,cloudWidth:.18,autoRange:[24,62]},"visual-training":{cycles:[.88,2.45,4.35],amplitudes:[12.8,10.2,4.3],speeds:[.28,-.47,.69],bulgeAmplitude:7.3,timeScale:.91,glowWidth:6,haloWidth:21,whiteAlpha:.3,whiteWidth:.55,cloudWidth:.175,autoRange:[20,75]},tide:{cycles:[.72,1.9,4.2],amplitudes:[19,6.5,1.5],speeds:[.42,-.5,.66],bulgeAmplitude:9.5,timeScale:.85,glowWidth:6.2,haloWidth:21,whiteAlpha:.5,whiteWidth:1,cloudWidth:.18,autoRange:[18,70],surge:.55}},be=function(){return i(function e(t){var r,n,i,a=this,s=t.root,l=t.canvas,c=t.valueElement,u=t.preset,d=t.emitter,h=t.options,f=t.copy;o(this,e),this.root=s,this.canvas=l,this.valueElement=c,this.preset=u,this.emitter=d,this.options=h,this.copy=f,this.profile="tide"===u.edgeStyle?ye.tide:ye[u.id]||ye["visual-training"],this.min=null!==(r=h.min)&&void 0!==r?r:0,this.max=null!==(n=h.max)&&void 0!==n?n:100,this.dprCap=b(h.quality),this.ctx=l.getContext("2d"),this.value=pe(null!==(i=h.value)&&void 0!==i?i:u.initialProgress,this.min,this.max),this.dragging=!1,this.webglActive=!1,this.flowTime=31*me(u.id),this.seed=me("".concat(u.id,"-reference"))*Math.PI*2,this.randomState=Math.floor(2147483647*me("".concat(u.id,"-auto")))||1,this.dpr=1,this.width=0,this.height=0,this.handlers={},this.resizeObserver="undefined"!=typeof ResizeObserver?new ResizeObserver(function(){return a.resizeCanvas()}):null,this.resizeObserver?this.resizeObserver.observe(this.root):window.addEventListener("resize",this.resizeCanvas),this.suppressEvents=!0,this.setProgress(this.value,"init"),this.suppressEvents=!1,this.bindEvents(),this.resizeCanvas()},[{key:"random",value:function(){return this.randomState=Math.imul(this.randomState,1664525)+1013904223>>>0,this.randomState/4294967296}},{key:"setProgress",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto";this.value=pe(e,this.min,this.max);var r=Math.round(this.value);this.root.style.setProperty("--progress",this.value.toFixed(2)),this.root.setAttribute("aria-valuenow",String(r)),this.root.setAttribute("aria-valuetext","".concat(r).concat(this.copy.valueSuffix)),this.valueElement.textContent="".concat(r).concat(this.copy.valueSuffix),this.suppressEvents||this.emitter.emit("change",{value:this.value,source:t})}},{key:"resizeCanvas",value:function(){var e=this.root.getBoundingClientRect();this.dpr=Math.min(window.devicePixelRatio||1,this.dprCap),this.width=Math.max(1,e.width),this.height=Math.max(1,e.height),this.canvas.width=Math.round(this.width*this.dpr),this.canvas.height=Math.round(this.height*this.dpr),this.canvas.style.width="".concat(this.width,"px"),this.canvas.style.height="".concat(this.height,"px"),this.ctx.setTransform(this.dpr,0,0,this.dpr,0,0)}},{key:"edgeEnvelope",value:function(e){var t=Math.sin(Math.PI*pe(e,0,1));return Math.pow(Math.max(t,0),.48)}},{key:"localBulge",value:function(e,t,r){var o=0===r?1:-1,n=.28+.4*r+.13*Math.sin(t*(.19+.035*r)+this.seed*(1.1+r)),i=.075+.016*r+.012*Math.sin(.13*t+2.1*this.seed),a=(e-n)/Math.max(i,.035);return Math.exp(-.5*a*a)*Math.sin(t*(.71+.09*r)+this.seed*(2.7+r))*this.profile.bulgeAmplitude*o}},{key:"edgeOffset",value:function(e,t){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,n=this.height>0?e/this.height:0,i=this.edgeEnvelope(n),a=t*this.profile.timeScale,s=this.profile.surge?a+this.profile.surge*Math.sin(2*a):a,l=0,c=0;c<this.profile.cycles.length;c+=1){var u=this.profile.cycles[c],d=this.profile.amplitudes[c],h=this.profile.speeds[c],f=.74+.26*Math.sin(s*(.17+.045*c)+this.seed*(c+2.4));l+=Math.sin(n*Math.PI*2*u+s*h*Math.PI*2+this.seed*(c+1)+r)*d*f}return l+=this.localBulge(n,s+r,0),(l+=this.localBulge(n,s-.7*r,1))*i*o}},{key:"createEdgePath",value:function(e,t,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,i=Math.max(1.8,this.height/92);e.beginPath();for(var a=0;a<=this.height+i;a+=i){var s=t+this.edgeOffset(a,r,o,n);0===a?e.moveTo(s,a):e.lineTo(s,a)}}},{key:"createFillPath",value:function(e,t,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,i=Math.max(1.8,this.height/92);e.beginPath(),e.moveTo(0,0),e.lineTo(t+this.edgeOffset(0,r,o,n),0);for(var a=i;a<=this.height+i;a+=i)e.lineTo(t+this.edgeOffset(a,r,o,n),a);e.lineTo(0,this.height),e.closePath()}},{key:"drawEllipticalGlow",value:function(e,t,r,o,n,i){var a=this.ctx;a.save(),a.translate(e,t),a.scale(1,o/r);var s=a.createRadialGradient(0,0,0,0,0,r);s.addColorStop(0,O(n,i)),s.addColorStop(.42,O(n,.48*i)),s.addColorStop(1,O(n,0)),a.globalCompositeOperation="screen",a.fillStyle=s,a.fillRect(-r,-r,2*r,2*r),a.restore()}},{key:"drawDarkEllipticalShadow",value:function(e,t,r,o,n){var i=this.ctx;i.save(),i.translate(e,t),i.scale(1,o/r);var a=i.createRadialGradient(0,0,0,0,0,r);a.addColorStop(0,"rgba(6, 6, 11, ".concat(n,")")),a.addColorStop(.54,"rgba(8, 8, 14, ".concat(.62*n,")")),a.addColorStop(1,"rgba(8, 8, 14, 0)"),i.globalCompositeOperation="source-over",i.fillStyle=a,i.fillRect(-r,-r,2*r,2*r),i.restore()}},{key:"drawColorClouds",value:function(e,t,r,o,n){this.ctx;var i=this.width,a=this.height,s=this.profile.cloudWidth,l=t*this.profile.timeScale,c=a*(.28+.13*Math.sin(.24*l+this.seed)),u=a*(.7+.12*Math.cos(.21*l+1.7*this.seed)),d=a*(.49+.15*Math.sin(.31*l+2.3*this.seed)),h=e-.095*i,f=Math.max(52,i*s),p=.42*a;this.drawEllipticalGlow(h,c,f,p,r,.38),this.drawDarkEllipticalShadow(h+.16*f,c,.58*f,.66*p,.74);var v=e-.072*i,m=Math.max(44,i*s*.82),g=.36*a;this.drawEllipticalGlow(v,u,m,g,o,.31),this.drawDarkEllipticalShadow(v+.14*m,u,.54*m,.62*g,.64),this.drawEllipticalGlow(e-.034*i,d,Math.max(30,i*s*.48),.27*a,n,.2)}},{key:"drawPathBand",value:function(e){var t=e.baseX,r=e.time,o=e.phase,n=e.amplitudeScale,i=e.color,a=e.alpha,s=e.blur,l=e.width,c=e.composite,u=void 0===c?"screen":c,d=this.ctx;this.createEdgePath(d,t,r,o,n),d.save(),d.globalCompositeOperation=u,d.globalAlpha=a,ve&&(d.filter="blur(".concat(s,"px)")),d.strokeStyle=i,d.lineWidth=l,d.stroke(),d.restore()}},{key:"setRange",value:function(e,t){this.min=e,this.max=t;var r=pe(this.value,this.min,this.max);r!==this.value&&this.setProgress(r,"prop")}},{key:"drawReferenceFlow",value:function(){var e=this.ctx,t=this.width,r=this.height;if(!(!e||t<=0||r<=0)){var o=t*(this.value/100),n=this.flowTime,i=u(this.preset.colors,4),a=i[0],s=i[1],l=i[2],c=i[3];e.clearRect(0,0,t,r),e.fillStyle="#202126",e.fillRect(0,0,t,r),this.createFillPath(e,o,n,0,1);var d=e.createLinearGradient(0,0,Math.max(o,1),0);d.addColorStop(0,a),d.addColorStop(.74,a),d.addColorStop(.89,O(a,.99)),d.addColorStop(.955,O(s,.09)),d.addColorStop(.992,O(l,.54)),d.addColorStop(1,O(c,.78)),e.fillStyle=d,e.fill(),this.drawColorClouds(o,n,s,l,c),this.drawPathBand({baseX:o-.105*t,time:n,phase:1.42,amplitudeScale:1.18,color:s,alpha:.22,blur:21,width:54}),this.drawPathBand({baseX:o-.073*t,time:n,phase:-.92,amplitudeScale:1.06,color:l,alpha:.3,blur:15,width:42}),this.drawPathBand({baseX:o-.047*t,time:n,phase:.42,amplitudeScale:.94,color:"rgba(5, 5, 10, 0.92)",alpha:.72,blur:12,width:34,composite:"source-over"}),this.drawPathBand({baseX:o-.025*t,time:n,phase:-.28,amplitudeScale:.96,color:l,alpha:.66,blur:8,width:28}),e.save(),this.createFillPath(e,o,n,0,1),e.clip(),this.createEdgePath(e,o,n,0,1),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=O(s,.2),e.lineWidth=this.profile.haloWidth,e.shadowColor=s,e.shadowBlur=.72*this.profile.haloWidth,e.stroke(),e.restore(),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=O(l,.78),e.lineWidth=this.profile.glowWidth+4.2,e.shadowColor=l,e.shadowBlur=8,e.stroke(),e.restore(),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=O(c,.88),e.lineWidth=this.profile.glowWidth,e.shadowColor=c,e.shadowBlur=5,e.stroke(),e.restore(),e.restore(),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=O(c,.84),e.lineWidth=2.15,e.shadowColor=c,e.shadowBlur=2.5,this.createEdgePath(e,o,n,0,1),e.stroke(),e.restore(),this.profile.whiteAlpha>.05&&(e.save(),e.globalCompositeOperation="screen",e.strokeStyle="rgba(255,255,245,".concat(this.profile.whiteAlpha,")"),e.lineWidth=this.profile.whiteWidth,this.createEdgePath(e,o,n,0,1),e.stroke(),e.restore())}}},{key:"updateFromPointer",value:function(e){var t=this.root.getBoundingClientRect(),r=t.width>0?(e.clientX-t.left)/t.width:0;this.setProgress(100*r,"drag")}},{key:"beginDrag",value:function(e){if(void 0===e.button||0===e.button){e.preventDefault(),this.dragging=!0,this.root.classList.add("is-dragging");try{var t,r;null===(t=(r=this.root).setPointerCapture)||void 0===t||t.call(r,e.pointerId)}catch(e){}this.emitter.emit("dragstart",{value:this.value}),this.updateFromPointer(e)}}},{key:"moveDrag",value:function(e){this.dragging&&(e.preventDefault(),this.updateFromPointer(e))}},{key:"endDrag",value:function(e){if(this.dragging){this.dragging=!1,this.root.classList.remove("is-dragging");try{var t,r;void 0!==(null==e?void 0:e.pointerId)&&null!==(t=(r=this.root).hasPointerCapture)&&void 0!==t&&t.call(r,e.pointerId)&&this.root.releasePointerCapture(e.pointerId)}catch(e){}this.emitter.emit("dragend",{value:this.value})}}},{key:"bindEvents",value:function(){var e=this;!1!==this.options.draggable&&(this.handlers.pointerdown=function(t){return e.beginDrag(t)},this.handlers.pointermove=function(t){return e.moveDrag(t)},this.handlers.pointerup=function(t){return e.endDrag(t)},this.handlers.pointercancel=function(t){return e.endDrag(t)},this.root.addEventListener("pointerdown",this.handlers.pointerdown),this.root.addEventListener("pointermove",this.handlers.pointermove),this.root.addEventListener("pointerup",this.handlers.pointerup),this.root.addEventListener("pointercancel",this.handlers.pointercancel)),!1!==this.options.keyboard&&(this.handlers.keydown=function(t){var r={ArrowLeft:-2,ArrowDown:-2,ArrowRight:2,ArrowUp:2,PageDown:-10,PageUp:10};if("Home"===t.key)t.preventDefault(),e.setProgress(e.min,"keyboard");else if("End"===t.key)t.preventDefault(),e.setProgress(e.max,"keyboard");else{if(!r[t.key])return;t.preventDefault(),e.setProgress(e.value+r[t.key],"keyboard")}},this.root.addEventListener("keydown",this.handlers.keydown))}},{key:"update",value:function(e,t){t||(this.flowTime+=e)}},{key:"draw",value:function(){this.webglActive||this.drawReferenceFlow()}},{key:"randomize",value:function(){this.flowTime=40*this.random()}},{key:"setColors",value:function(e){Array.isArray(e)&&4===e.length&&(this.preset=c(c({},this.preset),{},{colors:e}))}},{key:"dispose",value:function(){this.resizeObserver?this.resizeObserver.disconnect():window.removeEventListener("resize",this.resizeCanvas);for(var e=0,t=Object.keys(this.handlers);e<t.length;e++){var r=t[e],o=this.handlers[r];this.root.removeEventListener(r,o)}this.handlers={}}}])}();e.ALL_PRESETS=M,e.COPY=D,e.CosmicRenderer=N,e.DEFAULTS=L,e.FallbackRenderer=W,e.PRESETS=T,e.PROGRESS_PRESETS=P,e.ProgressCapsuleController=be,e.ProgressFlowRenderer=le,e.QUALITY_TIERS=y,e.createCapsule=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"function"!=typeof e.appendChild)throw new Error("createCapsule: container element is required");var o=c({},F("capsule",null!==(t=r.preset)&&void 0!==t?t:"NC-01")),n=w(L.capsule,o,r),i=c(c({},D),n.copy||{}),a=document.createElement("div");a.className="hj-capsule-root hj-capsule-cosmic",a.dataset.group=o.group,a.dataset.mode="nebula",a.dataset.theme=o.theme||"light",a.setAttribute("aria-label",i.capsuleAria.replace("{name}",o.name));var s=!1!==i.enabled&&!1!==n.showCopy,l=function(e,t){var r=i[e];return void 0===r?t:r},u=document.createElement("div");u.className="hj-capsule-copy";var d,h=function(){var e,t,r,n,i;s&&(u.innerHTML=(e=l("code",o.code),t=l("name",o.name),r=l("subtitle",o.subtitle),n=l("state","LIVE COSMIC STUDY"),i="",e&&(i+='<span class="hj-capsule-code">'.concat(e,"</span>")),t&&(i+='<span class="hj-capsule-name">'.concat(t,"</span>")),r&&(i+='<span class="hj-capsule-brand">'.concat(r,"</span>")),n&&(i+='<span class="hj-capsule-state">'.concat(n,"</span>")),i))};h(),i.background&&a.style.setProperty("--hj-copy-bg","string"==typeof(d=i.background)&&/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(d)?"linear-gradient(90deg, ".concat(i.background," 0%, ").concat(i.background," 74%, ").concat(O(i.background,.97)," 84%, ").concat(O(i.background,0)," 100%)"):i.background),i.color&&a.style.setProperty("--hj-copy-color",i.color);var f=document.createElement("canvas");f.className="hj-capsule-canvas",f.setAttribute("aria-hidden","true"),s&&a.appendChild(u),a.appendChild(f),e.appendChild(a);var p,m=v(),y=n.respectReducedMotion&&"undefined"!=typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches;if("canvas2d"!==n.renderer)try{p=new N(f,n,{dprCap:b(n.quality)})}catch(e){p=new W(f,n),m.emit("error",{message:String(e&&e.message?e.message:e)})}else p=new W(f,n);var E=function(){a.style.width=g(n.width),a.style.height=g(n.height);for(var e=n.cssVars||{},t=0,r=Object.keys(e);t<r.length;t++){var o=r[t];a.style.setProperty(o,e[o])}p.resize()};E();var C="undefined"!=typeof ResizeObserver?new ResizeObserver(function(){return p.resize()}):null;C?C.observe(a):window.addEventListener("resize",p.resize);var x=J(a);!1!==n.interactive&&(a.addEventListener("pointerenter",function(){return m.emit("pointerenter",{preset:c({},o)})}),a.addEventListener("pointerleave",function(){return m.emit("pointerleave",{preset:c({},o)})})),a.addEventListener("click",function(e){m.emit("click",{event:e,preset:c({},o)})}),a.addEventListener("pointerdown",function(e){return m.emit("pointerdown",{event:e,preset:c({},o)})}),a.addEventListener("pointerup",function(e){return m.emit("pointerup",{event:e,preset:c({},o)})}),a.addEventListener("dblclick",function(e){return m.emit("dblclick",{event:e,preset:c({},o)})});var A=0,S=Q(function(e){A+=e,x.isVisible()&&p.draw(A)},function(){return y});return m.emit("ready",{preset:c({},o)}),{element:a,canvas:f,preset:o,on:m.on,off:m.off,setPreset:function(e){var t=F("capsule",e);return Object.assign(o,t),p.setPreset(t),a.dataset.mode="nebula",a.dataset.theme=o.theme||"light",h(),p.resize(),m.emit("presetchange",{preset:c({},t)}),this},setColors:function(e){return Array.isArray(e)&&4===e.length?(o.colors=e,p.setPreset(c(c({},o),{},{colors:e})),this):this},setSize:function(e,t){return void 0!==e&&(n.width=e),void 0!==t&&(n.height=t),E(),this},randomize:function(){return p.randomize(),this},pause:function(){return y=!0,this},resume:function(){return y=!1,this},setQuality:function(e){return n.quality=e,"function"==typeof p.setDprCap&&p.setDprCap(b(e)),this},dispose:function(){S(),x.dispose(),C?C.disconnect():window.removeEventListener("resize",p.resize),p.dispose(),a.remove()}}},e.createColorBackground=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"function"!=typeof e.appendChild)throw new Error("createColorBackground: host element is required");var o=c({},F("capsule",null!==(t=r.preset)&&void 0!==t?t:"NC-01")),n=w({quality:L.capsule.quality,renderer:L.capsule.renderer,respectReducedMotion:L.capsule.respectReducedMotion,mouseColor:!0,opacity:1,fallbackColor:!0},o,r),i=getComputedStyle(e);"static"!==i.position&&""!==i.position||(e.style.position="relative"),e.style.isolation="isolate";var a=document.createElement("div");a.className="dlc-color-layer";var s=function(){a.style.setProperty("--dlc-color-opacity",String(n.opacity));var e=!1===n.fallbackColor||null==n.fallbackColor?"transparent":"string"==typeof n.fallbackColor?n.fallbackColor:o.colors[0];a.style.setProperty("--dlc-color-bg",e)};s();var l=document.createElement("canvas");l.className="dlc-color-canvas",l.setAttribute("aria-hidden","true"),a.appendChild(l),e.appendChild(a);var u,d=v(),h=n.respectReducedMotion&&"undefined"!=typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches;if("canvas2d"!==n.renderer)try{u=new N(l,n,{dprCap:b(n.quality),mouseColor:!1!==n.mouseColor,eventTarget:e})}catch(e){u=new W(l,n),d.emit("error",{message:String(e&&e.message?e.message:e)})}else u=new W(l,n);var f="undefined"!=typeof ResizeObserver?new ResizeObserver(function(){return u.resize()}):null;f?f.observe(e):window.addEventListener("resize",u.resize);var p=J(a),m=0,g=Q(function(e){m+=e,p.isVisible()&&u.draw(m)},function(){return h});return d.emit("ready",{preset:c({},o)}),{element:e,layer:a,canvas:l,preset:o,on:d.on,off:d.off,setPreset:function(e){var t=F("capsule",e);return Object.assign(o,t),u.setPreset(t),u.resize(),s(),d.emit("presetchange",{preset:c({},t)}),this},setColors:function(e){return Array.isArray(e)&&4===e.length?(o.colors=e,u.setPreset(c(c({},o),{},{colors:e})),s(),this):this},setQuality:function(e){return n.quality=e,"function"==typeof u.setDprCap&&u.setDprCap(b(e)),this},setOpacity:function(e){var t=Number(e);return Number.isFinite(t)?(n.opacity=Math.min(1,Math.max(0,t)),a.style.setProperty("--dlc-color-opacity",String(n.opacity)),this):this},randomize:function(){return u.randomize(),this},pause:function(){return h=!0,this},resume:function(){return h=!1,this},dispose:function(){g(),p.dispose(),f?f.disconnect():window.removeEventListener("resize",u.resize),u.dispose(),a.remove()}}},e.createProgressCapsule=function(e){var t,r,o,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"function"!=typeof e.appendChild)throw new Error("createProgressCapsule: container element is required");var i=c({},F("progress",null!==(t=n.preset)&&void 0!==t?t:"NC-10")),a=w(L.progress,i,n),s=c(c({},D),a.copy||{}),l=document.createElement("div");l.className="hj-capsule-root hj-progress-root",l.setAttribute("role","slider"),l.setAttribute("tabindex","0"),l.setAttribute("data-draggable",String(!1!==a.draggable)),l.setAttribute("aria-valuemin",String(null!==(r=a.min)&&void 0!==r?r:0)),l.setAttribute("aria-valuemax",String(null!==(o=a.max)&&void 0!==o?o:100)),l.setAttribute("aria-valuenow",String(i.initialProgress)),l.setAttribute("aria-label",ge(s.progressAria,{brand:s.brandName,code:i.code,name:i.name})),!1===a.keyboard&&l.setAttribute("tabindex","-1");var u=document.createElement("canvas");u.className="hj-progress-canvas",u.setAttribute("aria-hidden","true");var d=!1!==s.enabled&&!1!==a.showCopy;function h(){var e,t,r,o="",n=s.brandName||"",a=(e="subtitle",t=i.subtitle,void 0===(r=s[e])?t:r);return n&&(o+='<span class="hj-progress-name">'.concat(n,"</span>")),a&&(o+='<span class="hj-progress-subtitle">'.concat(a,"</span>")),o}var f=document.createElement("div");f.className="hj-progress-copy";var p=function(){d&&(f.innerHTML=h())};p(),s.background&&(l.style.setProperty("--hj-progress-copy-bg",s.background),l.style.setProperty("--hj-progress-copy-pad","6px 12px")),s.color&&l.style.setProperty("--hj-progress-copy-color",s.color);var m=document.createElement("div");m.className="hj-progress-value",m.setAttribute("aria-hidden","true");var y=document.createElement("span");y.className="hj-progress-drag-label",y.setAttribute("aria-hidden","true"),y.textContent=s.dragLabel,l.appendChild(u),d&&l.appendChild(f),l.appendChild(m),l.appendChild(y),e.appendChild(l);var E=v(),C=a.respectReducedMotion&&"undefined"!=typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches,x=function(){l.style.width=g(a.width),l.style.height=g(a.height);for(var e=a.cssVars||{},t=0,r=Object.keys(e);t<r.length;t++){var o=r[t];l.style.setProperty(o,e[o])}};x();var A=new be({root:l,canvas:u,valueElement:m,preset:i,emitter:E,options:a,copy:s}),S=null;"canvas2d"!==a.renderer&&(S=fe({root:l,canvas:u,preset:i,getProgress:function(){return A.value}})),S&&(A.webglActive=!0);var _=J(l),P=0,T=Q(function(e,t){P+=e,A.update(e,!1),_.isVisible()&&(A.draw(),S&&S.update(P))},function(){return C});return E.emit("ready",{preset:c({},i)}),{element:l,canvas:u,preset:i,on:E.on,off:E.off,setValue:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"prop";return A.setProgress(e,t),this},getValue:function(){return A.value},setRange:function(e,t){return A.setRange(e,t),this},setPreset:function(e){var t=F("progress",e);return Object.assign(i,t),A.preset=t,A.profile="tide"===t.edgeStyle?ye.tide:ye[t.id]||ye["visual-training"],A.flowTime=31*me(t.id),A.seed=me("".concat(t.id,"-reference"))*Math.PI*2,l.setAttribute("aria-label",ge(s.progressAria,{brand:s.brandName,code:i.code,name:i.name})),p(),S&&(S.dispose(),S=fe({root:l,canvas:u,preset:t,getProgress:function(){return A.value}})),A.webglActive=Boolean(S),A.resizeCanvas(),E.emit("presetchange",{preset:c({},t)}),this},setColors:function(e){return Array.isArray(e)&&4===e.length?(A.setColors(e),S&&S.setColors(e),A.resizeCanvas(),this):this},setSize:function(e,t){return void 0!==e&&(a.width=e),void 0!==t&&(a.height=t),x(),A.resizeCanvas(),this},randomize:function(){return A.randomize(),this},pause:function(){return C=!0,this},resume:function(){return C=!1,this},setQuality:function(e){return a.quality=e,A.dprCap=b(e),A.resizeCanvas(),this},dispose:function(){T(),_.dispose(),S&&S.dispose(),A.dispose(),l.remove()}}},e.dprCapFor=b,e.getPreset=F,e.hexToRgb01=B,e.hexToRgba=O,e.parseSize=g,e.pauseAll=function(){V=!0},e.resumeAll=function(){V=!1},e.validateColors=function(e){return Array.isArray(e)&&4===e.length&&e.every(function(e){return"string"==typeof e&&/^#[0-9a-f]{6}$/i.test(e)})},e.validatePreset=R,e.validateProgressPreset=k});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).CosmicCapsules={})}(this,function(e){"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=Array(t);r<t;r++)o[r]=e[r];return o}function r(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function i(e,t,r){return t&&function(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,h(o.key),o)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=p(e))||t){r&&(e=r);var o=0,n=function(){};return{s:n,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function s(e,t,r){return(t=h(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach(function(t){s(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o,n,i,a,s=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(o=i.call(r)).done)&&(s.push(o.value),s.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw n}}return s}}(e,t)||p(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||p(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t);if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function p(e,r){if(e){if("string"==typeof e)return t(e,r);var o={}.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?t(e,r):void 0}}function v(){var e=Object.create(null);return{on:function(t,r){return e[t]||(e[t]=[]),e[t].push(r),function(){var o=e[t];if(o){var n=o.indexOf(r);-1!==n&&o.splice(n,1)}}},off:function(t,r){var o=e[t];if(!o)return!1;var n=o.indexOf(r);return-1!==n&&(o.splice(n,1),!0)},emit:function(t){var r=e[t];if(r){for(var o=arguments.length,n=new Array(o>1?o-1:0),i=1;i<o;i++)n[i-1]=arguments[i];var s,l=a(r.slice());try{for(l.s();!(s=l.n()).done;){s.value.apply(void 0,n)}}catch(e){l.e(e)}finally{l.f()}}}}}var m=/^[\d.]+(?:px|%|vw|vh|vmin|vmax|em|rem)$/;function g(e){if("number"==typeof e){if(!Number.isFinite(e)||e<0)throw new Error("Invalid size: ".concat(e));return"".concat(e,"px")}if("string"!=typeof e)throw new Error("Invalid size: ".concat(String(e)));var t=e.trim();if(!t)throw new Error("Invalid size: empty string");if(/^\d+(?:\.\d+)?$/.test(t))return"".concat(t,"px");if(!m.test(t))throw new Error('Invalid size or unsupported unit: "'.concat(e,'" (use px, %, vw, vh, vmin, vmax, em, rem)'));return t}var y={low:{dpr:1},medium:{dpr:1.5},high:{dpr:2}};function b(e){return"auto"===e?(t="undefined"!=typeof navigator?navigator:null,r=t&&"number"==typeof t.deviceMemory?t.deviceMemory:8,o=t&&"number"==typeof t.hardwareConcurrency?t.hardwareConcurrency:8,r<=4||o<=4?1.5:2):(y[e]||y.medium).dpr;var t,r,o}function w(e,t,r){var o=function(e){for(var t={},r=0,o=Object.keys(e);r<o.length;r++){var n=o[r];void 0!==e[n]&&(t[n]=e[n])}return t},n=o(t&&"object"===f(t)?t:{}),i=o(r&&"object"===f(r)?r:{});return c(c(c({},e),n),i)}var E=["#EAF6FF","#8FD0FF","#3B87F6","#6B58E9"],C=["#EDF2FF","#2F58D5","#1B2040","#E07A43"],x=["#F2EEFF","#B99AF1","#8F74DB","#D7D85C"],S=["#F5F6F8","#B9C0CC","#7F8793","#4A4F59"],_=["#FFF0E6","#F6C26B","#F98A64","#E86D74"],P=[{id:"original",code:"NC-01",name:"初光",group:"warm",seed:1.7,speed:.5,colors:d(["#FFF3EA","#F5B27A","#F67BC6","#A978E8"])},{id:"ocean",code:"NC-02",name:"沧溟",group:"cold",seed:8.2,speed:.48,colors:d(E)},{id:"klein",code:"NC-03",name:"玄夜",group:"cold",seed:14.1,speed:.49,colors:d(C)},{id:"ultraviolet",code:"NC-04",name:"紫霄",group:"cold",seed:23.4,speed:.47,colors:d(x)},{id:"chrome",code:"NC-05",name:"银汉",group:"cold",seed:37.8,speed:.42,colors:d(S)},{id:"plus",code:"NC-06",name:"熔金",group:"warm",seed:51.3,speed:.5,colors:d(_)}],A=[{id:"model-training",code:"NC-10",name:"星火",subtitle:"SHA 4.5 + 100 2026 TKN",group:"progress",initialProgress:43,edgeStyle:"flow",colors:["#2B1025","#FF3F94","#FF8A3D","#FFF06A"]},{id:"agent-migration",code:"NC-11",name:"迁流",subtitle:"TRANSFERRING PROTOCOL",group:"progress",initialProgress:33,edgeStyle:"flow",colors:["#101C37","#245BFF","#00CFFF","#5DFFE6"]},{id:"visual-training",code:"NC-12",name:"幻境",subtitle:"GENERATING POWER ++",group:"progress",initialProgress:58,edgeStyle:"flow",colors:["#21142D","#7042FF","#42F58D","#C4FF8A"]},{id:"tide",code:"NC-13",name:"汐潮",subtitle:"MOON PULL / COAST",group:"progress",initialProgress:30,edgeStyle:"tide",colors:["#0A2239","#2E9BFF","#7FE3FF","#EAF9FF"]}],T=P,M=[].concat(d(P),d(A));function R(e,t){var r="capsule"===e?P:"progress"===e?A:null;if(!r)throw new Error("Unknown preset kind: ".concat(e,' (use "capsule" or "progress")'));var o=String(t).trim().toLowerCase(),n=r.find(function(e){return e.name.toLowerCase()===o});if(!n)throw new Error("Unknown ".concat(e," preset: ").concat(t));return n}var k={capsule:{width:"100%",height:160,quality:"auto",renderer:"auto",respectReducedMotion:!0,mouseColor:!0,showCopy:!0},progress:{width:454,height:104,min:0,max:100,draggable:!0,keyboard:!0,edgeStyle:"flow",quality:"auto",renderer:"auto",showCopy:!0,respectReducedMotion:!0}},F={brandName:"画境观屿",dragLabel:"DRAG",valueSuffix:"%",progressAria:"{brand} {code} 加载进度",capsuleAria:"打开 {name} 沉浸预览"};function L(e){var t=e.replace("#",""),r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(255&r)/255]}function D(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=e.replace("#",""),o=Number.parseInt(r,16),n=o>>8&255,i=255&o;return"rgba(".concat(o>>16&255,", ").concat(n,", ").concat(i,", ").concat(t,")")}function B(e,t,r){var o=e.createShader(t);if(e.shaderSource(o,r),e.compileShader(o),!e.getShaderParameter(o,e.COMPILE_STATUS)){var n=e.getShaderInfoLog(o)||"Unknown shader compile error";throw e.deleteShader(o),new Error(n)}return o}var O=new WeakSet,U=function(){return i(function e(t,i){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(o(this,e),n(this,O),this.canvas=t,this.preset=c({},i),this.options=c({dprCap:1.75,mouseColor:!0},a),this.gl=t.getContext("webgl2",{alpha:!1,antialias:!1,depth:!1,powerPreference:"high-performance",preserveDrawingBuffer:!1}),!this.gl)throw new Error("WebGL2 is not available");this.program=function(e){var t=B(e,e.VERTEX_SHADER,"#version 300 es\nin vec2 a_position;\nout vec2 v_uv;\nvoid main() {\n v_uv = a_position * 0.5 + 0.5;\n gl_Position = vec4(a_position, 0.0, 1.0);\n}"),r=B(e,e.FRAGMENT_SHADER,"#version 300 es\nprecision highp float;\n\nin vec2 v_uv;\nout vec4 outColor;\n\nuniform vec2 u_resolution;\nuniform float u_time;\nuniform float u_seed;\nuniform float u_motion;\nuniform vec2 u_pointer;\nuniform vec3 u_colorA;\nuniform vec3 u_colorB;\nuniform vec3 u_colorC;\nuniform vec3 u_colorD;\n\nfloat hash21(vec2 p) {\n p = fract(p * vec2(123.34, 456.21));\n p += dot(p, p + 45.32 + u_seed);\n return fract(p.x * p.y);\n}\n\nfloat noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n float a = hash21(i);\n float b = hash21(i + vec2(1.0, 0.0));\n float c = hash21(i + vec2(0.0, 1.0));\n float d = hash21(i + vec2(1.0, 1.0));\n return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nfloat fbm(vec2 p) {\n float value = 0.0;\n float amplitude = 0.52;\n mat2 rotation = mat2(0.80, 0.60, -0.60, 0.80);\n for (int i = 0; i < 6; i++) {\n value += amplitude * noise(p);\n p = rotation * p * 2.03 + 17.7;\n amplitude *= 0.5;\n }\n return value;\n}\n\nfloat gaussian(float value, float center, float width) {\n return exp(-pow(value - center, 2.0) / max(width, 0.0001));\n}\n\nvec3 palette(float t) {\n t = clamp(t, 0.0, 1.0);\n vec3 shadow = mix(u_colorA, u_colorB, smoothstep(0.06, 0.62, t));\n vec3 body = mix(u_colorB, u_colorC, smoothstep(0.30, 0.82, t));\n vec3 highlight = mix(u_colorC, u_colorD, smoothstep(0.74, 1.0, t));\n vec3 restrained = mix(shadow, body, smoothstep(0.26, 0.72, t));\n return mix(restrained, highlight, smoothstep(0.78, 0.97, t));\n}\n\nvec3 renderNebula(vec2 uv, vec2 p, vec2 pointer, float distanceToPointer, float t) {\n vec2 delta = p - pointer;\n float influence = exp(-distanceToPointer * 4.6) * u_motion;\n float angle = influence * 1.7;\n mat2 swirl = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n p = pointer + swirl * delta;\n p += normalize(delta + 0.0001) * influence * 0.08;\n\n vec2 drift = vec2(t * 0.22, -t * 0.13);\n vec2 q = vec2(\n fbm(p * 1.35 + drift + u_seed),\n fbm(p * 1.35 + vec2(5.2, 1.3) - drift * 0.85)\n );\n vec2 r = vec2(\n fbm(p * 2.0 + 3.6 * q + vec2(1.7, 9.2) + t * 0.10),\n fbm(p * 2.0 + 3.0 * q + vec2(8.3, 2.8) - t * 0.085)\n );\n\n float cloud = fbm(p * 1.7 + 4.2 * r);\n float veins = fbm(p * 4.0 - 2.0 * q + t * 0.065);\n float nebula = smoothstep(0.18, 0.91, cloud * 0.9 + veins * 0.22);\n\n vec3 color = palette(nebula);\n color += u_colorD * pow(max(cloud - 0.63, 0.0), 2.0) * 1.05;\n color *= 0.78 + 0.34 * smoothstep(0.15, 0.9, veins);\n\n vec2 starGrid = floor((uv + vec2(u_seed * 0.013, 0.0)) * vec2(132.0, 58.0));\n vec2 starCell = fract(uv * vec2(132.0, 58.0)) - 0.5;\n float starRandom = hash21(starGrid);\n float starShape = smoothstep(0.075, 0.0, length(starCell));\n float starMask = step(0.989, starRandom) * starShape;\n float twinkle = 0.35 + 0.65 * sin(t * (1.0 + starRandom * 2.4) + starRandom * 40.0) * 0.5 + 0.5;\n color += starMask * twinkle * mix(u_colorC, u_colorD, starRandom) * 1.05;\n\n float pointerGlow = exp(-distanceToPointer * 7.0) * u_motion;\n color += u_colorD * pointerGlow * 0.28;\n return color;\n}\n\nvoid main() {\n vec2 uv = v_uv;\n vec2 p = uv - 0.5;\n p.x *= u_resolution.x / max(u_resolution.y, 1.0);\n\n vec2 pointer = u_pointer - 0.5;\n pointer.x *= u_resolution.x / max(u_resolution.y, 1.0);\n float distanceToPointer = length(p - pointer);\n\n vec3 color = renderNebula(uv, p, pointer, distanceToPointer, u_time);\n float vignette = smoothstep(0.94, 0.18, length((uv - 0.5) * vec2(1.0, 1.35)));\n color *= 0.70 + vignette * 0.42;\n color = pow(max(color, vec3(0.0)), vec3(0.88));\n\n outColor = vec4(color, 1.0);\n}"),o=e.createProgram();if(e.attachShader(o,t),e.attachShader(o,r),e.linkProgram(o),e.deleteShader(t),e.deleteShader(r),!e.getProgramParameter(o,e.LINK_STATUS)){var n=e.getProgramInfoLog(o)||"Unknown program link error";throw e.deleteProgram(o),new Error(n)}return o}(this.gl),this.locations=r(O,this,I).call(this),this.pointer=[.72,.45],this.pointerTarget=d(this.pointer),this.motion=0,this.motionTarget=0,this.timeOffset=.73*i.seed,this.visible=!0,this.disposed=!1,r(O,this,N).call(this),r(O,this,z).call(this),this.resize()},[{key:"setPreset",value:function(e){this.preset=c({},e),this.timeOffset=.73*e.seed}},{key:"setDprCap",value:function(e){this.options.dprCap=e,this.resize()}},{key:"randomize",value:function(){this.preset.seed=100*Math.random(),this.timeOffset=40*Math.random()}},{key:"resize",value:function(){var e=Math.min(window.devicePixelRatio||1,this.options.dprCap),t=this.canvas.getBoundingClientRect(),r=Math.max(2,Math.round(t.width*e)),o=Math.max(2,Math.round(t.height*e));this.canvas.width===r&&this.canvas.height===o||(this.canvas.width=r,this.canvas.height=o,this.gl.viewport(0,0,r,o))}},{key:"draw",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.disposed&&this.visible){this.resize();var r=this.gl;this.pointer[0]+=.08*(this.pointerTarget[0]-this.pointer[0]),this.pointer[1]+=.08*(this.pointerTarget[1]-this.pointer[1]),this.motion+=.07*(this.motionTarget-this.motion),r.useProgram(this.program),r.bindBuffer(r.ARRAY_BUFFER,this.buffer),r.enableVertexAttribArray(this.locations.position),r.vertexAttribPointer(this.locations.position,2,r.FLOAT,!1,0,0);var o=this.preset.colors.map(L);r.uniform2f(this.locations.resolution,this.canvas.width,this.canvas.height),r.uniform1f(this.locations.time,this.timeOffset+(t?0:e*this.preset.speed)),r.uniform1f(this.locations.seed,this.preset.seed),r.uniform1f(this.locations.motion,this.motion),r.uniform2f(this.locations.pointer,this.pointer[0],this.pointer[1]),r.uniform3fv(this.locations.colorA,o[0]),r.uniform3fv(this.locations.colorB,o[1]),r.uniform3fv(this.locations.colorC,o[2]),r.uniform3fv(this.locations.colorD,o[3]),r.drawArrays(r.TRIANGLES,0,3)}}},{key:"dispose",value:function(){this.disposed=!0;var e=this.eventTarget||this.canvas;e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerdown",this.onPointerMove),e.removeEventListener("pointerleave",this.onPointerLeave),this.gl.deleteBuffer(this.buffer),this.gl.deleteProgram(this.program);var t=this.gl.getExtension("WEBGL_lose_context");t&&t.loseContext()}}])}();function I(){var e=this,t=this.gl,r=function(r){return t.getUniformLocation(e.program,r)};return{position:t.getAttribLocation(this.program,"a_position"),resolution:r("u_resolution"),time:r("u_time"),seed:r("u_seed"),motion:r("u_motion"),pointer:r("u_pointer"),colorA:r("u_colorA"),colorB:r("u_colorB"),colorC:r("u_colorC"),colorD:r("u_colorD")}}function N(){var e=this.gl,t=new Float32Array([-1,-1,3,-1,-1,3]);this.buffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,this.buffer),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)}function z(){var e=this;!1!==this.options.mouseColor&&(this.eventTarget=this.options.eventTarget||this.canvas.parentElement||this.canvas,this.onPointerMove=function(t){var r=e.canvas.getBoundingClientRect();e.pointerTarget[0]=(t.clientX-r.left)/Math.max(r.width,1),e.pointerTarget[1]=1-(t.clientY-r.top)/Math.max(r.height,1),e.motionTarget=1},this.onPointerLeave=function(){e.motionTarget=0},this.eventTarget.addEventListener("pointermove",this.onPointerMove,{passive:!0}),this.eventTarget.addEventListener("pointerdown",this.onPointerMove,{passive:!0}),this.eventTarget.addEventListener("pointerleave",this.onPointerLeave,{passive:!0}))}function j(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=u(L(e).map(function(e){return Math.round(255*e)}),3),o=r[0],n=r[1],i=r[2];return"rgba(".concat(o,", ").concat(n,", ").concat(i,", ").concat(t,")")}var G=function(){return i(function e(t,r){o(this,e),this.canvas=t,this.preset=r,this.context=t.getContext("2d"),this.visible=!0},[{key:"resize",value:function(){var e=this.canvas.getBoundingClientRect(),t=Math.min(window.devicePixelRatio||1,1.5),r=Math.max(2,Math.round(e.width*t)),o=Math.max(2,Math.round(e.height*t));this.canvas.width===r&&this.canvas.height===o||(this.canvas.width=r,this.canvas.height=o)}},{key:"drawNebula",value:function(e){var t=this.context,r=this.canvas,o=r.width,n=r.height,i=t.createLinearGradient(0,0,o,n);i.addColorStop(0,this.preset.colors[0]),i.addColorStop(.38,this.preset.colors[1]),i.addColorStop(.72,this.preset.colors[2]),i.addColorStop(1,this.preset.colors[3]),t.fillStyle=i,t.fillRect(0,0,o,n),t.globalCompositeOperation="screen";for(var a=0;a<6;a+=1){var s=(.5+.45*Math.sin(.32*e+1.7*a))*o,l=(.5+.4*Math.cos(.25*e+a))*n,c=Math.max(o,n)*(.08+a%3*.04),u=t.createRadialGradient(s,l,0,s,l,c);u.addColorStop(0,j(this.preset.colors[(a+1)%4],.24)),u.addColorStop(1,j(this.preset.colors[a%4],0)),t.fillStyle=u,t.fillRect(s-c,l-c,2*c,2*c)}t.globalCompositeOperation="source-over"}},{key:"draw",value:function(e){this.visible&&(this.resize(),this.drawNebula(e))}},{key:"setPreset",value:function(e){this.preset=e}},{key:"randomize",value:function(){}},{key:"dispose",value:function(){}}])}(),X=[],W=!1,q=!1,Y=0,V=0;function H(e){if(W){var t=V?Math.min((e-V)/1e3,.05):0;if(V=e,Y=requestAnimationFrame(H),!q){var r,o=a(X.slice());try{for(o.s();!(r=o.n()).done;){var n=r.value;try{n.isPaused()||n.onFrame(t,e)}catch(e){console.warn("[dlc-ui] frame error:",e)}}}catch(e){o.e(e)}finally{o.f()}}0===X.length&&(cancelAnimationFrame(Y),W=!1,Y=0)}}function K(e,t){var r={onFrame:e,isPaused:t};return X.push(r),W||(W=!0,V=0,Y=requestAnimationFrame(H)),function(){var e=X.indexOf(r);-1!==e&&X.splice(e,1),0===X.length&&Y&&(cancelAnimationFrame(Y),W=!1,Y=0)}}function $(e){var t=!0,r="undefined"==typeof document||!document.hidden,o=!1,n=null;"undefined"!=typeof IntersectionObserver&&(n=new IntersectionObserver(function(e){t=e.some(function(e){return e.isIntersecting})},{rootMargin:"180px"})).observe(e);var i=function(){r="undefined"!=typeof document&&!document.hidden};return"undefined"!=typeof document&&document.addEventListener("visibilitychange",i),{isVisible:function(){return t&&r},dispose:function(){o||(o=!0,n&&n.disconnect(),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",i))}}}var Q=240,J={"model-training":{seed:.37,broad:.58,middle:.25,detail:.13,lobe:.24},"agent-migration":{seed:1.71,broad:.72,middle:.1,detail:.03,lobe:.18},"visual-training":{seed:2.83,broad:.66,middle:.16,detail:.06,lobe:.23},tide:{seed:4.12,broad:.82,middle:.07,detail:.02,lobe:.3,warp:.5}},Z=Object.create(null);function ee(e,t,r){var o=(e-t)/Math.max(r,.001);return Math.exp(-o*o)}function te(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"flow",r="".concat(e,":").concat(t);return Z[r]||(Z[r]=function(e){for(var t="tide"===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"flow")?J.tide:J[e]||J["visual-training"],r=new Uint8Array(19200),o=0;o<Q;o+=1){var n=o/Q*Math.PI*2;t.warp&&(n+=t.warp*Math.sin(2*n));for(var i=.28+.13*Math.sin(.53*n+t.seed),a=.7+.12*Math.cos(.47*n+1.7*t.seed),s=0;s<80;s+=1){var l=s/Math.max(79,1),c=Math.pow(Math.max(Math.sin(Math.PI*l),0),.48),u=Math.sin(l*Math.PI*2*1.35+.58*n+t.seed)*t.broad,d=Math.sin(l*Math.PI*2*3.2-.91*n+2.1*t.seed)*t.middle,h=Math.sin(l*Math.PI*2*6.1+1.31*n+3.2*t.seed)*t.detail,f=(ee(l,i,.09)*Math.sin(1.11*n+4*t.seed)-ee(l,a,.1)*Math.cos(.97*n+3.3*t.seed))*t.lobe,p=Math.max(-1,Math.min(1,(u+d+h+f)*c));r[s*Q+o]=Math.round(255*(.5*p+.5))}}return r}(e,t)),Z[r]}function re(e){var t=Number.parseInt(e.replace("#",""),16);return[(t>>16&255)/255,(t>>8&255)/255,(255&t)/255]}var oe={"model-training":0,"agent-migration":1,"visual-training":2,tide:3},ne={"model-training":1.05,"agent-migration":1.04,"visual-training":1.04,tide:1.18};function ie(e,t,r){var o=e.createShader(t);if(e.shaderSource(o,r),e.compileShader(o),!e.getShaderParameter(o,e.COMPILE_STATUS)){var n=e.getShaderInfoLog(o)||"Unknown shader compile error";throw e.deleteShader(o),new Error(n)}return o}var ae=function(){return i(function e(t,r){var n;o(this,e);var i=t.getContext("webgl2",{alpha:!1,antialias:!0,premultipliedAlpha:!1,powerPreference:"high-performance"});if(!i)throw new Error("WebGL2 unavailable");this.canvas=t,this.gl=i,this.program=function(e){var t=ie(e,e.VERTEX_SHADER,"#version 300 es\nin vec2 a_position;\nout vec2 v_uv;\nvoid main() {\n v_uv = a_position * 0.5 + 0.5;\n gl_Position = vec4(a_position, 0.0, 1.0);\n}"),r=ie(e,e.FRAGMENT_SHADER,"#version 300 es\nprecision highp float;\n\nin vec2 v_uv;\nout vec4 outColor;\n\nuniform vec2 u_resolution;\nuniform float u_time;\nuniform float u_progress;\nuniform float u_seed;\nuniform float u_profile;\nuniform sampler2D u_motion;\nuniform sampler2D u_effect;\nuniform float u_hasEffect;\nuniform float u_effectFrames;\nuniform float u_motionDuration;\nuniform float u_motionScale;\nuniform vec3 u_dark;\nuniform vec3 u_accentA;\nuniform vec3 u_accentB;\nuniform vec3 u_glow;\n\nfloat hash21(vec2 p) {\n p = fract(p * vec2(123.34, 456.21));\n p += dot(p, p + 45.32 + u_seed * 11.7);\n return fract(p.x * p.y);\n}\n\nfloat noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n float a = hash21(i);\n float b = hash21(i + vec2(1.0, 0.0));\n float c = hash21(i + vec2(0.0, 1.0));\n float d = hash21(i + vec2(1.0, 1.0));\n return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nfloat fbm(vec2 p) {\n float value = 0.0;\n float amplitude = 0.55;\n mat2 rotation = mat2(0.82, 0.57, -0.57, 0.82);\n for (int i = 0; i < 6; i++) {\n value += noise(p) * amplitude;\n p = rotation * p * 2.02 + 13.7;\n amplitude *= 0.48;\n }\n return value;\n}\n\nfloat gaussian(float value, float center, float width) {\n float delta = (value - center) / max(width, 0.0001);\n return exp(-delta * delta);\n}\n\nfloat profileMix(float model, float agent, float visual) {\n if (u_profile < 0.5) return model;\n if (u_profile < 1.5) return agent;\n return visual;\n}\n\nfloat motionSample(float y, float t) {\n float phase = fract(t / max(u_motionDuration, 0.001));\n float captured = texture(u_motion, vec2(phase, 1.0 - clamp(y, 0.0, 1.0))).r;\n return (captured * 2.0 - 1.0) * u_motionScale;\n}\n\nfloat edgeDisplacement(float y, float t) {\n return motionSample(y, t);\n}\n\nfloat flowDisplacement(float y, float t) {\n return (\n motionSample(y - 0.024, t) * 0.08 +\n motionSample(y - 0.012, t) * 0.18 +\n motionSample(y, t) * 0.48 +\n motionSample(y + 0.012, t) * 0.18 +\n motionSample(y + 0.024, t) * 0.08\n );\n}\n\nfloat ellipseRing(vec2 p, float radius, float width) {\n return gaussian(length(p), radius, width);\n}\n\nvoid main() {\n vec2 uv = v_uv;\n float t = u_time;\n float edge = u_progress + edgeDisplacement(uv.y, t);\n float flowEdge = u_progress + flowDisplacement(uv.y, t);\n float d = uv.x - edge;\n float fd = uv.x - flowEdge;\n\n vec3 rightBase = vec3(0.125, 0.129, 0.145);\n vec3 color = rightBase;\n\n float leftMask = 1.0 - smoothstep(-0.001, 0.002, d);\n color = mix(color, u_dark, leftMask * profileMix(0.96, 0.92, 0.96));\n\n vec2 flowP = vec2((fd + 0.10) * 6.2, uv.y * 1.95);\n float flowA = fbm(flowP + vec2(-t * 0.22, t * 0.27) + u_seed * 1.7);\n float flowB = fbm(flowP * 1.52 + vec2(t * 0.28, -t * 0.36) + 8.2 + u_seed);\n float flowC = fbm(flowP * 2.25 + vec2(-t * 0.41, t * 0.46) + 19.0);\n\n float farCenter = profileMix(-0.060, -0.079, -0.045) + (flowA - 0.5) * profileMix(0.018, 0.022, 0.014);\n float midCenter = profileMix(-0.039, -0.052, -0.030) + (flowB - 0.5) * profileMix(0.013, 0.016, 0.010);\n float hotCenter = profileMix(-0.026, -0.029, -0.023) + (flowC - 0.5) * 0.010;\n\n float farBand = gaussian(fd, farCenter, profileMix(0.035, 0.049, 0.030));\n float midBand = gaussian(fd, midCenter, profileMix(0.026, 0.034, 0.026));\n float hotBand = gaussian(fd, hotCenter, profileMix(0.023, 0.027, 0.026));\n float darkTrough = gaussian(fd, profileMix(-0.050, -0.058, -0.044) + (flowB - 0.5) * 0.010, profileMix(0.020, 0.025, 0.021));\n\n float ringY = 0.47 + sin(t * 0.58 + u_seed * 2.4) * 0.12;\n vec2 ringP = vec2((fd + 0.086) / 0.078, (uv.y - ringY) / 0.25);\n ringP += vec2((flowB - 0.5) * 0.08, (flowA - 0.5) * 0.06);\n float ringTexture = fbm(ringP * 2.15 + vec2(t * 0.18, -t * 0.14) + u_seed * 1.9);\n float ring = ellipseRing(ringP, 0.66, 0.32) * (0.30 + 0.64 * ringTexture);\n float ringCore = gaussian(length(ringP), 0.25, 0.25);\n float ringPulse = smoothstep(0.58, 0.90, 0.5 + 0.5 * sin(t * 0.82 + u_seed * 4.1));\n float modelRing = ring * ringPulse * (1.0 - step(0.5, u_profile));\n float visualRing = ring * 0.16 * step(1.5, u_profile) * ringPulse;\n\n float cloudGate = leftMask * smoothstep(-0.30, -0.008, fd);\n float textureA = smoothstep(0.24, 0.92, flowA * 0.72 + flowB * 0.42);\n float textureB = smoothstep(0.28, 0.94, flowB * 0.68 + flowC * 0.38);\n\n vec3 hotColor = u_accentB;\n color += u_accentA * farBand * cloudGate * (0.07 + textureA * profileMix(0.42, 0.24, 0.40));\n color += u_accentB * midBand * cloudGate * (0.15 + textureB * profileMix(0.70, 0.46, 0.68));\n color += hotColor * hotBand * cloudGate * profileMix(0.88, 0.62, 0.84);\n float modelMask = 1.0 - step(0.5, u_profile);\n color += u_accentA * (modelRing + visualRing) * cloudGate * profileMix(0.54, 0.0, 0.34);\n color *= 1.0 - darkTrough * profileMix(0.44, 0.24, 0.24) * cloudGate;\n color *= 1.0 - ringCore * modelMask * ringPulse * 0.44 * cloudGate;\n\n float broadHalo = exp(-abs(d) * 96.0);\n float innerHalo = exp(-abs(d) * 176.0);\n float colorCore = exp(-abs(d) * 360.0);\n float sharpCore = exp(-abs(d) * 760.0);\n float leftGate = 1.0 - smoothstep(-0.003, 0.005, d);\n\n color += u_accentA * broadHalo * leftGate * profileMix(0.09, 0.04, 0.06);\n color += hotColor * innerHalo * leftGate * profileMix(0.76, 0.72, 0.78);\n color += u_glow * colorCore * profileMix(0.72, 0.34, 0.24);\n\n float whiteStrength = profileMix(0.10, 0.0, 0.0);\n color += vec3(1.0, 0.99, 0.91) * sharpCore * whiteStrength;\n\n float rightCut = smoothstep(0.001, 0.006, d);\n color = mix(color, rightBase, rightCut);\n\n float effectX = (d * 1257.0 + 260.0) / 320.0;\n float atlasPhase = fract(t / 12.0) * u_effectFrames;\n float atlasFrameA = floor(atlasPhase);\n float atlasFrameB = mod(atlasFrameA + 1.0, u_effectFrames);\n float atlasMix = smoothstep(0.0, 1.0, fract(atlasPhase));\n float atlasXA = (atlasFrameA + clamp(effectX, 0.0, 1.0)) / u_effectFrames;\n float atlasXB = (atlasFrameB + clamp(effectX, 0.0, 1.0)) / u_effectFrames;\n vec3 referenceA = texture(u_effect, vec2(atlasXA, uv.y)).rgb;\n vec3 referenceB = texture(u_effect, vec2(atlasXB, uv.y)).rgb;\n vec3 referenceColor = mix(referenceA, referenceB, atlasMix);\n float stripMask = smoothstep(0.0, 0.018, effectX) * (1.0 - smoothstep(0.982, 1.0, effectX));\n float referenceLeft = 1.0 - smoothstep(-0.026, -0.012, d);\n color = mix(color, referenceColor, stripMask * referenceLeft * u_hasEffect);\n\n outColor = vec4(clamp(color, 0.0, 1.0), 1.0);\n}"),o=e.createProgram();if(e.attachShader(o,t),e.attachShader(o,r),e.linkProgram(o),e.deleteShader(t),e.deleteShader(r),!e.getProgramParameter(o,e.LINK_STATUS)){var n=e.getProgramInfoLog(o)||"Unknown shader link error";throw e.deleteProgram(o),new Error(n)}return o}(i),this.profile="tide"===r.edgeStyle?3:null!==(n=oe[r.id])&&void 0!==n?n:2,this.seed=13.7*function(e){var t,r=2166136261,o=a(e);try{for(o.s();!(t=o.n()).done;)r^=t.value.charCodeAt(0),r=Math.imul(r,16777619)}catch(e){o.e(e)}finally{o.f()}return(r>>>0)/4294967295}("".concat(r.id,"-shader"))+1,this.colors=r.colors.map(re),this.motionData=te(r.id,r.edgeStyle);var s="tide"===r.edgeStyle?ne.tide:ne[r.id]||1.04;this.motionScale=40*s/1257,this.position=i.getAttribLocation(this.program,"a_position"),this.uniforms={resolution:i.getUniformLocation(this.program,"u_resolution"),time:i.getUniformLocation(this.program,"u_time"),progress:i.getUniformLocation(this.program,"u_progress"),seed:i.getUniformLocation(this.program,"u_seed"),profile:i.getUniformLocation(this.program,"u_profile"),motion:i.getUniformLocation(this.program,"u_motion"),effect:i.getUniformLocation(this.program,"u_effect"),hasEffect:i.getUniformLocation(this.program,"u_hasEffect"),effectFrames:i.getUniformLocation(this.program,"u_effectFrames"),motionDuration:i.getUniformLocation(this.program,"u_motionDuration"),motionScale:i.getUniformLocation(this.program,"u_motionScale"),dark:i.getUniformLocation(this.program,"u_dark"),accentA:i.getUniformLocation(this.program,"u_accentA"),accentB:i.getUniformLocation(this.program,"u_accentB"),glow:i.getUniformLocation(this.program,"u_glow")},this.buffer=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,this.buffer),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),i.STATIC_DRAW),this.motionTexture=i.createTexture(),i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,this.motionTexture),i.pixelStorei(i.UNPACK_ALIGNMENT,1),i.texImage2D(i.TEXTURE_2D,0,i.R8,Q,80,0,i.RED,i.UNSIGNED_BYTE,this.motionData),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.REPEAT),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),this.effectTexture=i.createTexture(),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,this.effectTexture),i.texImage2D(i.TEXTURE_2D,0,i.RGB,1,1,0,i.RGB,i.UNSIGNED_BYTE,new Uint8Array([32,33,38])),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),this.effectUploaded=!1},[{key:"resize",value:function(e,t,r){var o=Math.max(1,Math.round(e*r)),n=Math.max(1,Math.round(t*r));this.canvas.width===o&&this.canvas.height===n||(this.canvas.width=o,this.canvas.height=n),this.gl.viewport(0,0,o,n)}},{key:"draw",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=this.gl;o.useProgram(this.program),o.bindBuffer(o.ARRAY_BUFFER,this.buffer),o.enableVertexAttribArray(this.position),o.vertexAttribPointer(this.position,2,o.FLOAT,!1,0,0),o.uniform2f(this.uniforms.resolution,this.canvas.width,this.canvas.height),o.uniform1f(this.uniforms.time,e),o.uniform1f(this.uniforms.progress,t/100),o.uniform1f(this.uniforms.seed,this.seed),o.uniform1f(this.uniforms.profile,this.profile),o.activeTexture(o.TEXTURE0),o.bindTexture(o.TEXTURE_2D,this.motionTexture),o.uniform1i(this.uniforms.motion,0),o.uniform1f(this.uniforms.motionDuration,12),o.uniform1f(this.uniforms.motionScale,this.motionScale);var n=this.effectUploaded?1:0;if(!this.effectUploaded&&r&&r.complete&&r.naturalWidth>0){o.activeTexture(o.TEXTURE1),o.bindTexture(o.TEXTURE_2D,this.effectTexture),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,!0);try{o.texImage2D(o.TEXTURE_2D,0,o.RGB,o.RGB,o.UNSIGNED_BYTE,r),this.effectUploaded=!0,n=1}catch(e){console.warn("[画境观屿] 参考纹理图集上传失败,继续使用程序化降级。",e)}o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,!1)}o.activeTexture(o.TEXTURE1),o.bindTexture(o.TEXTURE_2D,this.effectTexture),o.uniform1i(this.uniforms.effect,1),o.uniform1f(this.uniforms.hasEffect,n),o.uniform1f(this.uniforms.effectFrames,24),o.uniform3fv(this.uniforms.dark,this.colors[0]),o.uniform3fv(this.uniforms.accentA,this.colors[1]),o.uniform3fv(this.uniforms.accentB,this.colors[2]),o.uniform3fv(this.uniforms.glow,this.colors[3]),o.drawArrays(o.TRIANGLES,0,6)}},{key:"setColors",value:function(e){this.colors=e.map(re)}},{key:"dispose",value:function(){var e=this.gl;e.deleteBuffer(this.buffer),e.deleteTexture(this.motionTexture),e.deleteTexture(this.effectTexture),e.deleteProgram(this.program);var t=e.getExtension("WEBGL_lose_context");t&&t.loseContext()}}])}();var se=Object.create(null),le={"model-training":["#20131f","#ff3f94","#ff8a3d","#fff06a"],"agent-migration":["#111a31","#245bff","#00cfff","#5dffe6"],"visual-training":["#1f172b","#7042ff","#42f58d","#c4ff8a"],tide:["#0a2239","#2e9bff","#7fe3ff","#eaf9ff"]};function ce(e,t,r,o,n,i,a){e.save(),e.translate(t,r),e.scale(1,n/o);var s=e.createRadialGradient(0,0,0,0,0,o);s.addColorStop(0,"".concat(i).concat(Math.round(255*a).toString(16).padStart(2,"0"))),s.addColorStop(.46,"".concat(i).concat(Math.round(.42*a*255).toString(16).padStart(2,"0"))),s.addColorStop(1,"".concat(i,"00")),e.fillStyle=s,e.fillRect(-o,-o,2*o,2*o),e.restore()}function ue(e){return se[e]||(se[e]=function(e){var t=le[e]||le["visual-training"],r=document.createElement("canvas");r.width=1536,r.height=32;for(var o=r.getContext("2d"),n=0;n<24;n+=1){var i=n/24*Math.PI*2,a=64*n;o.save(),o.translate(a,0),o.fillStyle=t[0],o.fillRect(0,0,64,32),o.globalCompositeOperation="screen",ce(o,35+5*Math.sin(.83*i),10+5*Math.cos(.61*i),27,18,t[1],"agent-migration"===e?.32:.42),ce(o,45+4*Math.cos(.72*i),23+4*Math.sin(.54*i),22,15,t[2],.44),ce(o,53+2*Math.sin(1.07*i),16+6*Math.cos(.89*i),12,13,t[3],"model-training"===e?.3:.2),o.globalCompositeOperation="source-over";var s=o.createRadialGradient(41,16,1,41,16,17);s.addColorStop(0,"rgba(5,6,11,0.64)"),s.addColorStop(.58,"rgba(6,7,12,0.26)"),s.addColorStop(1,"rgba(6,7,12,0)"),o.fillStyle=s,o.fillRect(20,0,44,32),o.restore()}var l=new Image;l.decoding="async";var c={image:l,ready:!1};return l.addEventListener("load",function(){c.ready=!0},{once:!0}),l.addEventListener("error",function(){c.ready=!1},{once:!0}),l.src=r.toDataURL("image/png"),c}(e)),se[e]}function de(e){var t=e.root,r=e.canvas,o=e.preset,n=e.getProgress,i=document.createElement("canvas");i.className="hj-progress-canvas hj-progress-overlay",i.setAttribute("aria-hidden","true"),r.insertAdjacentElement("afterend",i);var a=function(e,t){try{return new ae(e,t)}catch(e){return console.warn("[画境观屿] 进度流体 WebGL2 不可用,使用 Canvas 2D 降级。",e),null}}(i,o);if(!a)return i.remove(),null;var s=ue(o.id);t.classList.add("has-webgl-progress");var l=function(){var e=t.getBoundingClientRect(),r=Math.max(1,e.width),o=Math.max(1,e.height),n=Math.min(window.devicePixelRatio||1,2);i.style.width="".concat(r,"px"),i.style.height="".concat(o,"px"),a.resize(r,o,n)},c=null,u=null;return"undefined"!=typeof ResizeObserver?(c=new ResizeObserver(l)).observe(t):(u=l,window.addEventListener("resize",u)),l(),{update:function(e){var t=e%12,r=n();a.draw(t,Number.isFinite(r)?r:o.initialProgress,s.ready?s.image:null)},setColors:function(e){a.setColors(e)},dispose:function(){c&&c.disconnect(),u&&window.removeEventListener("resize",u),a.dispose(),i.remove(),t.classList.remove("has-webgl-progress")}}}var he=function(e,t,r){return Math.min(Math.max(e,t),r)},fe="undefined"!=typeof CanvasRenderingContext2D&&"filter"in CanvasRenderingContext2D.prototype;function pe(e){var t,r=2166136261,o=a(e);try{for(o.s();!(t=o.n()).done;){r^=t.value.charCodeAt(0),r=Math.imul(r,16777619)}}catch(e){o.e(e)}finally{o.f()}return(r>>>0)/4294967295}function ve(e,t){return e.replace(/\{(\w+)\}/g,function(e,r){return void 0!==t[r]?t[r]:""})}var me={"model-training":{cycles:[.98,3.05,5.45],amplitudes:[11.2,11,5.2],speeds:[.31,-.53,.78],bulgeAmplitude:8.2,timeScale:1,glowWidth:5.8,haloWidth:20,whiteAlpha:.72,whiteWidth:1.15,cloudWidth:.17,autoRange:[25,66]},"agent-migration":{cycles:[.62,1.55,2.95],amplitudes:[16,7.8,2.3],speeds:[.25,-.4,.6],bulgeAmplitude:8.4,timeScale:.82,glowWidth:6.3,haloWidth:21,whiteAlpha:.18,whiteWidth:.45,cloudWidth:.18,autoRange:[24,62]},"visual-training":{cycles:[.88,2.45,4.35],amplitudes:[12.8,10.2,4.3],speeds:[.28,-.47,.69],bulgeAmplitude:7.3,timeScale:.91,glowWidth:6,haloWidth:21,whiteAlpha:.3,whiteWidth:.55,cloudWidth:.175,autoRange:[20,75]},tide:{cycles:[.72,1.9,4.2],amplitudes:[19,6.5,1.5],speeds:[.42,-.5,.66],bulgeAmplitude:9.5,timeScale:.85,glowWidth:6.2,haloWidth:21,whiteAlpha:.5,whiteWidth:1,cloudWidth:.18,autoRange:[18,70],surge:.55}},ge=function(){return i(function e(t){var r,n,i,a=this,s=t.root,l=t.canvas,c=t.valueElement,u=t.preset,d=t.emitter,h=t.options,f=t.copy;o(this,e),this.root=s,this.canvas=l,this.valueElement=c,this.preset=u,this.emitter=d,this.options=h,this.copy=f,this.profile="tide"===u.edgeStyle?me.tide:me[u.id]||me["visual-training"],this.min=null!==(r=h.min)&&void 0!==r?r:0,this.max=null!==(n=h.max)&&void 0!==n?n:100,this.dprCap=b(h.quality),this.ctx=l.getContext("2d"),this.value=he(null!==(i=h.value)&&void 0!==i?i:u.initialProgress,this.min,this.max),this.dragging=!1,this.webglActive=!1,this.flowTime=31*pe(u.id),this.seed=pe("".concat(u.id,"-reference"))*Math.PI*2,this.randomState=Math.floor(2147483647*pe("".concat(u.id,"-auto")))||1,this.dpr=1,this.width=0,this.height=0,this.handlers={},this.resizeObserver="undefined"!=typeof ResizeObserver?new ResizeObserver(function(){return a.resizeCanvas()}):null,this.resizeObserver?this.resizeObserver.observe(this.root):window.addEventListener("resize",this.resizeCanvas),this.suppressEvents=!0,this.setProgress(this.value,"init"),this.suppressEvents=!1,this.bindEvents(),this.resizeCanvas()},[{key:"random",value:function(){return this.randomState=Math.imul(this.randomState,1664525)+1013904223>>>0,this.randomState/4294967296}},{key:"setProgress",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"auto";this.value=he(e,this.min,this.max);var r=Math.round(this.value);this.root.style.setProperty("--progress",this.value.toFixed(2)),this.root.setAttribute("aria-valuenow",String(r)),this.root.setAttribute("aria-valuetext","".concat(r).concat(this.copy.valueSuffix)),this.valueElement.textContent="".concat(r).concat(this.copy.valueSuffix),this.suppressEvents||this.emitter.emit("change",{value:this.value,source:t})}},{key:"resizeCanvas",value:function(){var e=this.root.getBoundingClientRect();this.dpr=Math.min(window.devicePixelRatio||1,this.dprCap),this.width=Math.max(1,e.width),this.height=Math.max(1,e.height),this.canvas.width=Math.round(this.width*this.dpr),this.canvas.height=Math.round(this.height*this.dpr),this.canvas.style.width="".concat(this.width,"px"),this.canvas.style.height="".concat(this.height,"px"),this.ctx.setTransform(this.dpr,0,0,this.dpr,0,0)}},{key:"edgeEnvelope",value:function(e){var t=Math.sin(Math.PI*he(e,0,1));return Math.pow(Math.max(t,0),.48)}},{key:"localBulge",value:function(e,t,r){var o=0===r?1:-1,n=.28+.4*r+.13*Math.sin(t*(.19+.035*r)+this.seed*(1.1+r)),i=.075+.016*r+.012*Math.sin(.13*t+2.1*this.seed),a=(e-n)/Math.max(i,.035);return Math.exp(-.5*a*a)*Math.sin(t*(.71+.09*r)+this.seed*(2.7+r))*this.profile.bulgeAmplitude*o}},{key:"edgeOffset",value:function(e,t){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,n=this.height>0?e/this.height:0,i=this.edgeEnvelope(n),a=t*this.profile.timeScale,s=this.profile.surge?a+this.profile.surge*Math.sin(2*a):a,l=0,c=0;c<this.profile.cycles.length;c+=1){var u=this.profile.cycles[c],d=this.profile.amplitudes[c],h=this.profile.speeds[c],f=.74+.26*Math.sin(s*(.17+.045*c)+this.seed*(c+2.4));l+=Math.sin(n*Math.PI*2*u+s*h*Math.PI*2+this.seed*(c+1)+r)*d*f}return l+=this.localBulge(n,s+r,0),(l+=this.localBulge(n,s-.7*r,1))*i*o}},{key:"createEdgePath",value:function(e,t,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,i=Math.max(1.8,this.height/92);e.beginPath();for(var a=0;a<=this.height+i;a+=i){var s=t+this.edgeOffset(a,r,o,n);0===a?e.moveTo(s,a):e.lineTo(s,a)}}},{key:"createFillPath",value:function(e,t,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,i=Math.max(1.8,this.height/92);e.beginPath(),e.moveTo(0,0),e.lineTo(t+this.edgeOffset(0,r,o,n),0);for(var a=i;a<=this.height+i;a+=i)e.lineTo(t+this.edgeOffset(a,r,o,n),a);e.lineTo(0,this.height),e.closePath()}},{key:"drawEllipticalGlow",value:function(e,t,r,o,n,i){var a=this.ctx;a.save(),a.translate(e,t),a.scale(1,o/r);var s=a.createRadialGradient(0,0,0,0,0,r);s.addColorStop(0,D(n,i)),s.addColorStop(.42,D(n,.48*i)),s.addColorStop(1,D(n,0)),a.globalCompositeOperation="screen",a.fillStyle=s,a.fillRect(-r,-r,2*r,2*r),a.restore()}},{key:"drawDarkEllipticalShadow",value:function(e,t,r,o,n){var i=this.ctx;i.save(),i.translate(e,t),i.scale(1,o/r);var a=i.createRadialGradient(0,0,0,0,0,r);a.addColorStop(0,"rgba(6, 6, 11, ".concat(n,")")),a.addColorStop(.54,"rgba(8, 8, 14, ".concat(.62*n,")")),a.addColorStop(1,"rgba(8, 8, 14, 0)"),i.globalCompositeOperation="source-over",i.fillStyle=a,i.fillRect(-r,-r,2*r,2*r),i.restore()}},{key:"drawColorClouds",value:function(e,t,r,o,n){this.ctx;var i=this.width,a=this.height,s=this.profile.cloudWidth,l=t*this.profile.timeScale,c=a*(.28+.13*Math.sin(.24*l+this.seed)),u=a*(.7+.12*Math.cos(.21*l+1.7*this.seed)),d=a*(.49+.15*Math.sin(.31*l+2.3*this.seed)),h=e-.095*i,f=Math.max(52,i*s),p=.42*a;this.drawEllipticalGlow(h,c,f,p,r,.38),this.drawDarkEllipticalShadow(h+.16*f,c,.58*f,.66*p,.74);var v=e-.072*i,m=Math.max(44,i*s*.82),g=.36*a;this.drawEllipticalGlow(v,u,m,g,o,.31),this.drawDarkEllipticalShadow(v+.14*m,u,.54*m,.62*g,.64),this.drawEllipticalGlow(e-.034*i,d,Math.max(30,i*s*.48),.27*a,n,.2)}},{key:"drawPathBand",value:function(e){var t=e.baseX,r=e.time,o=e.phase,n=e.amplitudeScale,i=e.color,a=e.alpha,s=e.blur,l=e.width,c=e.composite,u=void 0===c?"screen":c,d=this.ctx;this.createEdgePath(d,t,r,o,n),d.save(),d.globalCompositeOperation=u,d.globalAlpha=a,fe&&(d.filter="blur(".concat(s,"px)")),d.strokeStyle=i,d.lineWidth=l,d.stroke(),d.restore()}},{key:"setRange",value:function(e,t){this.min=e,this.max=t;var r=he(this.value,this.min,this.max);r!==this.value&&this.setProgress(r,"prop")}},{key:"drawReferenceFlow",value:function(){var e=this.ctx,t=this.width,r=this.height;if(!(!e||t<=0||r<=0)){var o=t*(this.value/100),n=this.flowTime,i=u(this.preset.colors,4),a=i[0],s=i[1],l=i[2],c=i[3];e.clearRect(0,0,t,r),e.fillStyle="#202126",e.fillRect(0,0,t,r),this.createFillPath(e,o,n,0,1);var d=e.createLinearGradient(0,0,Math.max(o,1),0);d.addColorStop(0,a),d.addColorStop(.74,a),d.addColorStop(.89,D(a,.99)),d.addColorStop(.955,D(s,.09)),d.addColorStop(.992,D(l,.54)),d.addColorStop(1,D(c,.78)),e.fillStyle=d,e.fill(),this.drawColorClouds(o,n,s,l,c),this.drawPathBand({baseX:o-.105*t,time:n,phase:1.42,amplitudeScale:1.18,color:s,alpha:.22,blur:21,width:54}),this.drawPathBand({baseX:o-.073*t,time:n,phase:-.92,amplitudeScale:1.06,color:l,alpha:.3,blur:15,width:42}),this.drawPathBand({baseX:o-.047*t,time:n,phase:.42,amplitudeScale:.94,color:"rgba(5, 5, 10, 0.92)",alpha:.72,blur:12,width:34,composite:"source-over"}),this.drawPathBand({baseX:o-.025*t,time:n,phase:-.28,amplitudeScale:.96,color:l,alpha:.66,blur:8,width:28}),e.save(),this.createFillPath(e,o,n,0,1),e.clip(),this.createEdgePath(e,o,n,0,1),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=D(s,.2),e.lineWidth=this.profile.haloWidth,e.shadowColor=s,e.shadowBlur=.72*this.profile.haloWidth,e.stroke(),e.restore(),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=D(l,.78),e.lineWidth=this.profile.glowWidth+4.2,e.shadowColor=l,e.shadowBlur=8,e.stroke(),e.restore(),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=D(c,.88),e.lineWidth=this.profile.glowWidth,e.shadowColor=c,e.shadowBlur=5,e.stroke(),e.restore(),e.restore(),e.save(),e.globalCompositeOperation="screen",e.strokeStyle=D(c,.84),e.lineWidth=2.15,e.shadowColor=c,e.shadowBlur=2.5,this.createEdgePath(e,o,n,0,1),e.stroke(),e.restore(),this.profile.whiteAlpha>.05&&(e.save(),e.globalCompositeOperation="screen",e.strokeStyle="rgba(255,255,245,".concat(this.profile.whiteAlpha,")"),e.lineWidth=this.profile.whiteWidth,this.createEdgePath(e,o,n,0,1),e.stroke(),e.restore())}}},{key:"updateFromPointer",value:function(e){var t=this.root.getBoundingClientRect(),r=t.width>0?(e.clientX-t.left)/t.width:0;this.setProgress(100*r,"drag")}},{key:"beginDrag",value:function(e){if(void 0===e.button||0===e.button){e.preventDefault(),this.dragging=!0,this.root.classList.add("is-dragging");try{var t,r;null===(t=(r=this.root).setPointerCapture)||void 0===t||t.call(r,e.pointerId)}catch(e){}this.emitter.emit("dragstart",{value:this.value}),this.updateFromPointer(e)}}},{key:"moveDrag",value:function(e){this.dragging&&(e.preventDefault(),this.updateFromPointer(e))}},{key:"endDrag",value:function(e){if(this.dragging){this.dragging=!1,this.root.classList.remove("is-dragging");try{var t,r;void 0!==(null==e?void 0:e.pointerId)&&null!==(t=(r=this.root).hasPointerCapture)&&void 0!==t&&t.call(r,e.pointerId)&&this.root.releasePointerCapture(e.pointerId)}catch(e){}this.emitter.emit("dragend",{value:this.value})}}},{key:"bindEvents",value:function(){var e=this;!1!==this.options.draggable&&(this.handlers.pointerdown=function(t){return e.beginDrag(t)},this.handlers.pointermove=function(t){return e.moveDrag(t)},this.handlers.pointerup=function(t){return e.endDrag(t)},this.handlers.pointercancel=function(t){return e.endDrag(t)},this.root.addEventListener("pointerdown",this.handlers.pointerdown),this.root.addEventListener("pointermove",this.handlers.pointermove),this.root.addEventListener("pointerup",this.handlers.pointerup),this.root.addEventListener("pointercancel",this.handlers.pointercancel)),!1!==this.options.keyboard&&(this.handlers.keydown=function(t){var r={ArrowLeft:-2,ArrowDown:-2,ArrowRight:2,ArrowUp:2,PageDown:-10,PageUp:10};if("Home"===t.key)t.preventDefault(),e.setProgress(e.min,"keyboard");else if("End"===t.key)t.preventDefault(),e.setProgress(e.max,"keyboard");else{if(!r[t.key])return;t.preventDefault(),e.setProgress(e.value+r[t.key],"keyboard")}},this.root.addEventListener("keydown",this.handlers.keydown))}},{key:"update",value:function(e,t){t||(this.flowTime+=e)}},{key:"draw",value:function(){this.webglActive||this.drawReferenceFlow()}},{key:"randomize",value:function(){this.flowTime=40*this.random()}},{key:"setColors",value:function(e){Array.isArray(e)&&4===e.length&&(this.preset=c(c({},this.preset),{},{colors:e}))}},{key:"dispose",value:function(){this.resizeObserver?this.resizeObserver.disconnect():window.removeEventListener("resize",this.resizeCanvas);for(var e=0,t=Object.keys(this.handlers);e<t.length;e++){var r=t[e],o=this.handlers[r];this.root.removeEventListener(r,o)}this.handlers={}}}])}();e.ALL_PRESETS=M,e.COPY=F,e.CosmicRenderer=U,e.DEFAULTS=k,e.FallbackRenderer=G,e.PRESETS=T,e.PROGRESS_PRESETS=A,e.ProgressCapsuleController=ge,e.ProgressFlowRenderer=ae,e.QUALITY_TIERS=y,e.createCapsule=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"function"!=typeof e.appendChild)throw new Error("createCapsule: container element is required");var o=c({},R("capsule",null!==(t=r.preset)&&void 0!==t?t:"初光")),n=w(k.capsule,o,r),i=c(c({},F),n.copy||{}),a=document.createElement("div");a.className="hj-capsule-root hj-capsule-cosmic",a.dataset.group=o.group,a.dataset.mode="nebula",a.dataset.theme=o.theme||"light",a.setAttribute("aria-label",i.capsuleAria.replace("{name}",o.name));var s=!1!==i.enabled&&!1!==n.showCopy,l=function(e,t){var r=i[e];return void 0===r?t:r},u=document.createElement("div");u.className="hj-capsule-copy";var d,h=function(){var e,t,r,n,i;s&&(u.innerHTML=(e=l("code",o.code),t=l("name",o.name),r=l("subtitle",o.subtitle),n=l("state","LIVE COSMIC STUDY"),i="",e&&(i+='<span class="hj-capsule-code">'.concat(e,"</span>")),t&&(i+='<span class="hj-capsule-name">'.concat(t,"</span>")),r&&(i+='<span class="hj-capsule-brand">'.concat(r,"</span>")),n&&(i+='<span class="hj-capsule-state">'.concat(n,"</span>")),i))};h(),i.background&&a.style.setProperty("--hj-copy-bg","string"==typeof(d=i.background)&&/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(d)?"linear-gradient(90deg, ".concat(i.background," 0%, ").concat(i.background," 74%, ").concat(D(i.background,.97)," 84%, ").concat(D(i.background,0)," 100%)"):i.background),i.color&&a.style.setProperty("--hj-copy-color",i.color);var f=document.createElement("canvas");f.className="hj-capsule-canvas",f.setAttribute("aria-hidden","true"),s&&a.appendChild(u),a.appendChild(f),e.appendChild(a);var p,m=v(),y=n.respectReducedMotion&&"undefined"!=typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches;if("canvas2d"!==n.renderer)try{p=new U(f,n,{dprCap:b(n.quality)})}catch(e){p=new G(f,n),m.emit("error",{message:String(e&&e.message?e.message:e)})}else p=new G(f,n);var E=function(){a.style.width=g(n.width),a.style.height=g(n.height);for(var e=n.cssVars||{},t=0,r=Object.keys(e);t<r.length;t++){var o=r[t];a.style.setProperty(o,e[o])}p.resize()};E();var C="undefined"!=typeof ResizeObserver?new ResizeObserver(function(){return p.resize()}):null;C?C.observe(a):window.addEventListener("resize",p.resize);var x=$(a);a.addEventListener("pointerenter",function(){return m.emit("pointerenter",{preset:c({},o)})}),a.addEventListener("pointerleave",function(){return m.emit("pointerleave",{preset:c({},o)})}),a.addEventListener("click",function(e){m.emit("click",{event:e,preset:c({},o)})}),a.addEventListener("pointerdown",function(e){return m.emit("pointerdown",{event:e,preset:c({},o)})}),a.addEventListener("pointerup",function(e){return m.emit("pointerup",{event:e,preset:c({},o)})}),a.addEventListener("dblclick",function(e){return m.emit("dblclick",{event:e,preset:c({},o)})});var S=0,_=K(function(e){S+=e,x.isVisible()&&p.draw(S)},function(){return y});return m.emit("ready",{preset:c({},o)}),{element:a,canvas:f,preset:o,on:m.on,off:m.off,setPreset:function(e){var t=R("capsule",e);return Object.assign(o,t),p.setPreset(t),a.dataset.mode="nebula",a.dataset.theme=o.theme||"light",h(),p.resize(),m.emit("presetchange",{preset:c({},t)}),this},setColors:function(e){return Array.isArray(e)&&4===e.length?(o.colors=e,p.setPreset(c(c({},o),{},{colors:e})),this):this},setSeed:function(e){var t=Number(e);return Number.isFinite(t)?(o.seed=t,p.setPreset(c({},o)),this):this},setSpeed:function(e){var t=Number(e);return Number.isFinite(t)?(o.speed=t,p.setPreset(c({},o)),this):this},setSize:function(e,t){return void 0!==e&&(n.width=e),void 0!==t&&(n.height=t),E(),this},randomize:function(){return p.randomize(),this},pause:function(){return y=!0,this},resume:function(){return y=!1,this},setQuality:function(e){return n.quality=e,"function"==typeof p.setDprCap&&p.setDprCap(b(e)),this},dispose:function(){_(),x.dispose(),C?C.disconnect():window.removeEventListener("resize",p.resize),p.dispose(),a.remove()}}},e.createColorBackground=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"function"!=typeof e.appendChild)throw new Error("createColorBackground: host element is required");var o=c({},R("capsule",null!==(t=r.preset)&&void 0!==t?t:"初光")),n=w({quality:k.capsule.quality,renderer:k.capsule.renderer,respectReducedMotion:k.capsule.respectReducedMotion,mouseColor:!0,opacity:1,fallbackColor:!0},o,r),i=getComputedStyle(e);"static"!==i.position&&""!==i.position||(e.style.position="relative"),e.style.isolation="isolate";var a=document.createElement("div");a.className="dlc-color-layer";var s=function(){a.style.setProperty("--dlc-color-opacity",String(n.opacity));var e=!1===n.fallbackColor||null==n.fallbackColor?"transparent":"string"==typeof n.fallbackColor?n.fallbackColor:o.colors[0];a.style.setProperty("--dlc-color-bg",e)};s();var l=document.createElement("canvas");l.className="dlc-color-canvas",l.setAttribute("aria-hidden","true"),a.appendChild(l),e.appendChild(a);var u,d=v(),h=n.respectReducedMotion&&"undefined"!=typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches;if("canvas2d"!==n.renderer)try{u=new U(l,n,{dprCap:b(n.quality),mouseColor:!1!==n.mouseColor,eventTarget:e})}catch(e){u=new G(l,n),d.emit("error",{message:String(e&&e.message?e.message:e)})}else u=new G(l,n);var f="undefined"!=typeof ResizeObserver?new ResizeObserver(function(){return u.resize()}):null;f?f.observe(e):window.addEventListener("resize",u.resize);var p=$(a),m=0,g=K(function(e){m+=e,p.isVisible()&&u.draw(m)},function(){return h});return d.emit("ready",{preset:c({},o)}),{element:e,layer:a,canvas:l,preset:o,on:d.on,off:d.off,setPreset:function(e){var t=R("capsule",e);return Object.assign(o,t),u.setPreset(t),u.resize(),s(),d.emit("presetchange",{preset:c({},t)}),this},setColors:function(e){return Array.isArray(e)&&4===e.length?(o.colors=e,u.setPreset(c(c({},o),{},{colors:e})),s(),this):this},setQuality:function(e){return n.quality=e,"function"==typeof u.setDprCap&&u.setDprCap(b(e)),this},setOpacity:function(e){var t=Number(e);return Number.isFinite(t)?(n.opacity=Math.min(1,Math.max(0,t)),a.style.setProperty("--dlc-color-opacity",String(n.opacity)),this):this},randomize:function(){return u.randomize(),this},pause:function(){return h=!0,this},resume:function(){return h=!1,this},dispose:function(){g(),p.dispose(),f?f.disconnect():window.removeEventListener("resize",u.resize),u.dispose(),a.remove()}}},e.createProgressCapsule=function(e){var t,r,o,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"function"!=typeof e.appendChild)throw new Error("createProgressCapsule: container element is required");var i=c({},R("progress",null!==(t=n.preset)&&void 0!==t?t:"星火")),a=w(k.progress,i,n),s=c(c({},F),a.copy||{}),l=document.createElement("div");l.className="hj-capsule-root hj-progress-root",l.setAttribute("role","slider"),l.setAttribute("tabindex","0"),l.setAttribute("data-draggable",String(!1!==a.draggable)),l.setAttribute("aria-valuemin",String(null!==(r=a.min)&&void 0!==r?r:0)),l.setAttribute("aria-valuemax",String(null!==(o=a.max)&&void 0!==o?o:100)),l.setAttribute("aria-valuenow",String(i.initialProgress)),l.setAttribute("aria-label",ve(s.progressAria,{brand:s.brandName,code:i.code,name:i.name})),!1===a.keyboard&&l.setAttribute("tabindex","-1");var u=document.createElement("canvas");u.className="hj-progress-canvas",u.setAttribute("aria-hidden","true");var d=!1!==s.enabled&&!1!==a.showCopy;function h(){var e,t,r,o="",n=s.brandName||"",a=(e="subtitle",t=i.subtitle,void 0===(r=s[e])?t:r);return n&&(o+='<span class="hj-progress-name">'.concat(n,"</span>")),a&&(o+='<span class="hj-progress-subtitle">'.concat(a,"</span>")),o}var f=document.createElement("div");f.className="hj-progress-copy";var p=function(){d&&(f.innerHTML=h())};p(),s.background&&(l.style.setProperty("--hj-progress-copy-bg",s.background),l.style.setProperty("--hj-progress-copy-pad","6px 12px")),s.color&&l.style.setProperty("--hj-progress-copy-color",s.color);var m=document.createElement("div");m.className="hj-progress-value",m.setAttribute("aria-hidden","true");var y=document.createElement("span");y.className="hj-progress-drag-label",y.setAttribute("aria-hidden","true"),y.textContent=s.dragLabel,l.appendChild(u),d&&l.appendChild(f),l.appendChild(m),l.appendChild(y),e.appendChild(l);var E=v(),C=a.respectReducedMotion&&"undefined"!=typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches,x=function(){l.style.width=g(a.width),l.style.height=g(a.height);for(var e=a.cssVars||{},t=0,r=Object.keys(e);t<r.length;t++){var o=r[t];l.style.setProperty(o,e[o])}};x();var S=new ge({root:l,canvas:u,valueElement:m,preset:i,emitter:E,options:a,copy:s}),_=null;"canvas2d"!==a.renderer&&(_=de({root:l,canvas:u,preset:i,getProgress:function(){return S.value}})),_&&(S.webglActive=!0);var P=$(l),A=0,T=K(function(e,t){A+=e,S.update(e,!1),P.isVisible()&&(S.draw(),_&&_.update(A))},function(){return C});return E.emit("ready",{preset:c({},i)}),{element:l,canvas:u,preset:i,on:E.on,off:E.off,setValue:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"prop";return S.setProgress(e,t),this},getValue:function(){return S.value},setRange:function(e,t){return S.setRange(e,t),this},setPreset:function(e){var t=R("progress",e);return Object.assign(i,t),S.preset=t,S.profile="tide"===t.edgeStyle?me.tide:me[t.id]||me["visual-training"],S.flowTime=31*pe(t.id),S.seed=pe("".concat(t.id,"-reference"))*Math.PI*2,l.setAttribute("aria-label",ve(s.progressAria,{brand:s.brandName,code:i.code,name:i.name})),p(),_&&(_.dispose(),_=de({root:l,canvas:u,preset:t,getProgress:function(){return S.value}})),S.webglActive=Boolean(_),S.resizeCanvas(),E.emit("presetchange",{preset:c({},t)}),this},setEdgeStyle:function(e){var t=String(e||"").toLowerCase();return"flow"!==t&&"tide"!==t||(i.edgeStyle=t,S.profile="tide"===t?me.tide:me[i.id]||me["visual-training"],_&&(_.dispose(),_=de({root:l,canvas:u,preset:i,getProgress:function(){return S.value}})),S.webglActive=Boolean(_),S.resizeCanvas()),this},setColors:function(e){return Array.isArray(e)&&4===e.length?(S.setColors(e),_&&_.setColors(e),S.resizeCanvas(),this):this},setSize:function(e,t){return void 0!==e&&(a.width=e),void 0!==t&&(a.height=t),x(),S.resizeCanvas(),this},randomize:function(){return S.randomize(),this},pause:function(){return C=!0,this},resume:function(){return C=!1,this},setQuality:function(e){return a.quality=e,S.dprCap=b(e),S.resizeCanvas(),this},dispose:function(){T(),P.dispose(),_&&_.dispose(),S.dispose(),l.remove()}}},e.dprCapFor=b,e.getPreset=R,e.hexToRgb01=L,e.hexToRgba=D,e.parseSize=g,e.pauseAll=function(){q=!0},e.resumeAll=function(){q=!1},e.validateColors=function(e){return Array.isArray(e)&&4===e.length&&e.every(function(e){return"string"==typeof e&&/^#[0-9a-f]{6}$/i.test(e)})}});