agentcss 0.24.2 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/01-tokens/README.md +1 -1
  2. package/01-tokens/tokens.css +67 -1
  3. package/01-tokens/typography.css +1 -1
  4. package/02-primitives/button/demo.html +8 -0
  5. package/02-primitives/card/README.md +15 -0
  6. package/02-primitives/choice/README.md +30 -0
  7. package/02-primitives/choice/choice.css +1 -1
  8. package/02-primitives/input/README.md +1 -0
  9. package/02-primitives/select/README.md +42 -2
  10. package/02-primitives/select/demo.html +11 -6
  11. package/02-primitives/select/select.js +184 -94
  12. package/02-primitives/timeline/demo.html +2 -2
  13. package/02-primitives/timeline/timeline.css +1 -1
  14. package/03-patterns/accordion/README.md +15 -0
  15. package/03-patterns/content/README.md +11 -0
  16. package/03-patterns/drawer/README.md +1 -1
  17. package/03-patterns/dropdown/demo.html +1 -1
  18. package/03-patterns/form-validation/README.md +18 -0
  19. package/03-patterns/form-validation/form-validation.css +12 -1
  20. package/03-patterns/list/README.md +11 -0
  21. package/03-patterns/overlay/README.md +26 -6
  22. package/03-patterns/overlay/overlay.css +22 -3
  23. package/03-patterns/overlay/overlay.js +63 -17
  24. package/03-patterns/states/README.md +15 -0
  25. package/03-patterns/states/states.css +18 -1
  26. package/03-patterns/tooltip/README.md +12 -0
  27. package/04-recipes/longform/longform.html +3 -3
  28. package/04-recipes/report/README.md +9 -0
  29. package/04-recipes/report/report.css +5 -0
  30. package/04-recipes/table/README.md +16 -0
  31. package/04-recipes/tierA-tokens.css +3 -3
  32. package/09-assets/README.md +18 -0
  33. package/09-assets/bar/bar.css +25 -10
  34. package/09-assets/echarts-adapter/demo.html +3 -1
  35. package/09-assets/echarts-adapter/echarts-adapter.js +107 -34
  36. package/09-assets/scientific-plot/README.md +2 -1
  37. package/09-assets/scientific-plot/scientific-plot.js +0 -7
  38. package/AGENTS.md +2 -1
  39. package/CHANGELOG.md +317 -18
  40. package/CONTRIBUTING.md +6 -5
  41. package/README.md +6 -2
  42. package/README.zh-CN.md +19 -7
  43. package/SECURITY.md +5 -2
  44. package/START-HERE.md +7 -7
  45. package/SUPPORT.md +86 -24
  46. package/ai/START-HERE.md +3 -2
  47. package/ai/cli.js +126 -6
  48. package/ai/components.json +258 -2
  49. package/ai/components.meta.json +257 -40
  50. package/ai/components.schema.json +96 -0
  51. package/ai/contract.schema.json +11 -0
  52. package/ai/pdf-pages.js +79 -0
  53. package/ai/pdf.js +354 -0
  54. package/ai/tokens.json +2 -2
  55. package/ai/validate.js +48 -1
  56. package/dist/01-tokens/tokens.css +1 -1
  57. package/dist/02-primitives/select/select.js +158 -71
  58. package/dist/03-patterns/form-validation/form-validation.css +1 -1
  59. package/dist/03-patterns/overlay/overlay.css +1 -1
  60. package/dist/03-patterns/overlay/overlay.js +40 -11
  61. package/dist/03-patterns/states/states.css +1 -1
  62. package/dist/04-recipes/report/report.css +1 -1
  63. package/dist/04-recipes/tierA-tokens.css +1 -1
  64. package/dist/09-assets/bar/bar.css +1 -1
  65. package/dist/09-assets/echarts-adapter/echarts-adapter.js +75 -33
  66. package/dist/09-assets/scientific-plot/scientific-plot.js +0 -7
  67. package/dist/COSTS.md +37 -37
  68. package/docs/ACCESSIBILITY.md +3 -3
  69. package/docs/FACTS.md +1 -1
  70. package/docs/LAYER-BASELINE.md +28 -3
  71. package/docs/PRINT.md +450 -0
  72. package/docs/RELEASE-PROCESS.md +78 -3
  73. package/index.html +1 -1
  74. package/llms-full.txt +7 -7
  75. package/llms.txt +5 -0
  76. package/package.json +6 -1
@@ -232,8 +232,24 @@ if (!list.id) list.id = 'select-list-' + (++uid);
232
232
 
233
233
  var options = [].slice.call(list.querySelectorAll('[role="option"]'));
234
234
  var isMulti = !!opt.multiple;
235
- var selected = opt.value != null ? String(opt.value) : null;
235
+
236
+ var values = [];
236
237
  var activeIdx = -1;
238
+ var destroyed = false;
239
+
240
+ function valueOfOpt(o) { return o ? o.getAttribute('data-value') : null; }
241
+ function hasValue(v) { return v != null && values.indexOf(String(v)) >= 0; }
242
+ function seed(v) {
243
+ if (v == null) return;
244
+ var arr = Object.prototype.toString.call(v) === '[object Array]' ? v : [v];
245
+ var next = [];
246
+ for (var i = 0; i < arr.length; i++) {
247
+ var s = arr[i] == null ? '' : String(arr[i]);
248
+ if (s && next.indexOf(s) < 0) next.push(s);
249
+ }
250
+ values = isMulti ? next : next.slice(0, 1);
251
+ }
252
+ seed(opt.value);
237
253
 
238
254
  list.setAttribute('role', 'listbox');
239
255
  if (isMulti) list.setAttribute('aria-multiselectable', 'true');
@@ -268,38 +284,97 @@ onHit: function (i) { setActive(i, 1); },
268
284
 
269
285
  function selectedIdx() {
270
286
  for (var i = 0; i < options.length; i++) {
271
- if (options[i].getAttribute('data-value') === selected) return i;
287
+ if (hasValue(valueOfOpt(options[i]))) return i;
272
288
  }
273
289
  return -1;
274
290
  }
275
291
  function valueText() {
276
- var i = selectedIdx();
277
- return i < 0 ? (opt.placeholder || '请选择') : optText(options[i]);
292
+ var texts = [];
293
+ for (var i = 0; i < options.length; i++) {
294
+ if (hasValue(valueOfOpt(options[i]))) texts.push(optText(options[i]));
278
295
  }
296
+ return texts.length ? texts.join('、') : (opt.placeholder || '请选择');
297
+ }
298
+
279
299
  function optText(o) {
300
+ if (!o) return '';
280
301
  var t = o.querySelector('.select__opt-text');
281
302
  return ((t || o).textContent || '').replace(/[✓\s]/g, '').trim();
282
303
  }
283
304
 
284
- function paint() {
285
- var v = valueText();
305
+ function value() {
306
+ return isMulti ? values.slice() : (values.length ? values[0] : null);
307
+ }
308
+
309
+ function syncHidden() {
310
+ var all = [].slice.call(root.querySelectorAll('input[type="hidden"]'));
311
+ var mine = [];
312
+ var author = [];
313
+ all.forEach(function (i) {
314
+ if (i.getAttribute('data-select-value') === '1') mine.push(i);
315
+ else author.push(i);
316
+ });
317
+ var name = opt.name || root.getAttribute('data-name') ||
318
+ (author[0] && author[0].name) || (mine[0] && mine[0].name) ||
319
+ root.id || '';
320
+ var slots = author.concat(mine);
321
+ var want = values.slice();
322
+ for (var i = 0; i < want.length; i++) {
323
+ var inp = slots[i];
324
+ if (!inp) {
325
+ inp = document.createElement('input');
326
+ inp.type = 'hidden';
327
+ inp.setAttribute('data-select-value', '1');
328
+ root.appendChild(inp);
329
+ slots.push(inp);
330
+ }
331
+ if (name) inp.name = name;
332
+ else inp.removeAttribute('name');
333
+ inp.value = want[i];
334
+ }
335
+ for (var j = want.length; j < slots.length; j++) {
336
+ var extra = slots[j];
337
+ if (extra.getAttribute('data-select-value') === '1') {
338
+ if (extra.parentNode) extra.parentNode.removeChild(extra);
339
+ } else {
340
+ extra.value = '';
341
+ }
342
+ }
343
+ }
344
+
345
+ function paint(silent) {
346
+ var label = valueText();
347
+ var empty = selectedIdx() < 0;
286
348
  var vEl = btn.querySelector('.select__value');
287
349
  if (vEl) {
288
- vEl.textContent = v;
289
- vEl.classList.toggle('select__value--placeholder', selectedIdx() < 0);
350
+ vEl.textContent = label;
351
+ vEl.classList.toggle('select__value--placeholder', empty);
290
352
  }
353
+
354
+ if (empty) btn.removeAttribute('title');
355
+ else btn.setAttribute('title', label);
291
356
  options.forEach(function (o) {
292
- var on = o.getAttribute('data-value') === selected;
357
+ var on = hasValue(valueOfOpt(o));
293
358
  o.setAttribute('aria-selected', on ? 'true' : 'false');
294
359
  var ck = o.querySelector('.select__check');
295
360
  if (ck) ck.textContent = on ? '✓' : '';
296
361
  });
362
+ syncHidden();
363
+ if (silent) return;
364
+ flEmit(root, 'fl-change', { value: value(), values: values.slice(), text: label });
365
+ if (opt.onChange) opt.onChange(value(), label);
297
366
 
298
- var hidden = root.querySelector('input[type="hidden"]');
299
- if (hidden) hidden.value = selected == null ? '' : selected;
300
- flEmit(root, 'fl-change',
301
- { value: selected, text: optText(options[selectedIdx()] || options[0]) });
302
- if (opt.onChange) opt.onChange(selected, optText(options[selectedIdx()] || options[0]));
367
+ var ev = null;
368
+ if (typeof window.Event === 'function') {
369
+ try { ev = new window.Event('change', { bubbles: true }); } catch (e) { ev = null; }
370
+ }
371
+ if (!ev) {
372
+ try {
373
+ ev = document.createEvent('Event');
374
+ ev.initEvent('change', true, false);
375
+ } catch (e2) { ev = null; }
376
+ }
377
+ if (ev) root.dispatchEvent(ev);
303
378
  }
304
379
 
305
380
  function setActive(i, dir) {
@@ -357,93 +432,105 @@ if (opt.onClose) opt.onClose();
357
432
  function commit(i) {
358
433
  var o = options[i];
359
434
  if (!o || o.getAttribute('aria-disabled') === 'true') return;
435
+ var v = valueOfOpt(o);
360
436
  if (isMulti) {
361
437
 
362
- selected = o.getAttribute('data-value') === selected ? null : o.getAttribute('data-value');
363
- } else {
364
- selected = o.getAttribute('data-value');
365
- close(true);
438
+ var k = values.indexOf(v);
439
+ if (k >= 0) values.splice(k, 1);
440
+ else values.push(v);
441
+ paint();
442
+ return;
366
443
  }
444
+ values = [v];
367
445
  paint();
446
+ close(true);
368
447
  }
369
448
 
370
- btn.addEventListener('keydown', function (e) {
449
+ function onBtnKey(e) {
450
+ if (destroyed) return;
371
451
  var k = e.key;
372
- if (k === 'ArrowDown' || k === 'ArrowUp' || k === 'Enter' || k === ' ' ||
373
- k === 'Spacebar' || (k === 'Alt' && false)) {
374
- if (k === 'ArrowDown' || k === 'ArrowUp') {
375
- e.preventDefault();
376
- if (list.hidden) { open(); return; }
377
- var dir = k === 'ArrowDown' ? 1 : -1;
378
- setActive(activeIndex() + dir, dir);
379
- return;
380
- }
452
+ var opened = !list.hidden;
453
+
454
+ if (k === 'ArrowDown' || k === 'ArrowUp' || k === 'Enter' || k === ' ' || k === 'Spacebar') {
381
455
  e.preventDefault();
382
- if (list.hidden) open();
383
- else if (activeIdx >= 0) commit(activeIdx);
456
+ if (!opened) {
457
+ open();
458
+
459
+ if (k === 'ArrowUp' && options.length) setActive(options.length - 1, -1);
384
460
  return;
385
461
  }
386
-
387
- if (k === 'ArrowDown' && e.altKey) { e.preventDefault(); open(); return; }
388
-
389
- if (list.hidden && (k === 'Home' || k === 'End')) {
390
- e.preventDefault(); open();
391
- if (k === 'Home') setActive(0);
392
- else setActive(options.length - 1);
462
+ if (k === 'ArrowDown') { setActive(activeIndex() + 1, 1); return; }
463
+ if (k === 'ArrowUp') { setActive(activeIndex() - 1, -1); return; }
464
+ if (activeIdx >= 0) commit(activeIdx);
393
465
  return;
394
466
  }
395
- });
396
-
397
- function onListKey(e) {
398
- var k = e.key;
399
- if (k === 'ArrowDown') { e.preventDefault(); setActive(activeIndex() + 1, 1); return; }
400
- if (k === 'ArrowUp') { e.preventDefault(); setActive(activeIndex() - 1, -1); return; }
401
- if (k === 'Home') { e.preventDefault(); setActive(0, 1); return; }
402
- if (k === 'End') { e.preventDefault(); setActive(options.length - 1, -1); return; }
403
-
404
- if (k === 'Tab') { close(false); return; }
405
- if (k === 'Enter' || k === ' ' || k === 'Spacebar') {
467
+ if (k === 'Home' || k === 'End') {
406
468
  e.preventDefault();
407
- if (activeIdx >= 0) commit(activeIdx);
469
+ if (!opened) open();
470
+ if (options.length) setActive(k === 'Home' ? 0 : options.length - 1, k === 'Home' ? 1 : -1);
408
471
  return;
409
472
  }
473
+ if (k === 'Tab') { if (opened) close(false); return; }
410
474
 
411
- if (k.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {
475
+ if (k && k.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {
476
+ if (!opened) open();
412
477
  e.preventDefault();
413
478
  typeahead.type(k);
414
479
  }
415
- }
416
480
 
417
- btn.addEventListener('keydown', function (e) {
418
-
419
- if (list.hidden) return;
420
- var k = e.key;
421
-
422
- if (k === 'Escape' || k === 'Esc' || k === 'ArrowDown' || k === 'ArrowUp' ||
423
- k === 'Home' || k === 'End' || k === 'Enter' || k === ' ' ||
424
- k === 'Spacebar' || k === 'Tab') {
425
-
426
- if (list.hidden) return;
427
- onListKey(e);
428
- return;
429
481
  }
430
- if (k.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) onListKey(e);
431
- });
482
+ btn.addEventListener('keydown', onBtnKey);
432
483
 
433
- btn.addEventListener('click', function () {
484
+ function onBtnClick() {
485
+ if (destroyed) return;
434
486
  if (list.hidden) open(); else close();
435
- });
436
- list.addEventListener('click', function (e) {
487
+ }
488
+ function onListClick(e) {
489
+ if (destroyed) return;
437
490
  var o = e.target.closest ? closest(e.target, '[role="option"]') : null;
438
491
  if (!o) return;
439
492
  commit(options.indexOf(o));
440
- });
493
+ }
494
+ btn.addEventListener('click', onBtnClick);
495
+ list.addEventListener('click', onListClick);
441
496
 
497
+ var initialValues = values.slice();
498
+ var form = closest(root, 'form');
499
+ function onFormReset() {
500
+ setTimeout(function () {
501
+ if (destroyed) return;
502
+ values = initialValues.slice();
442
503
  paint();
504
+ }, 0);
505
+ }
506
+ if (form) form.addEventListener('reset', onFormReset);
507
+
508
+ paint(true);
509
+
443
510
  return {
444
511
  open: open, close: close,
445
- get value() { return selected; },
446
- set value(v) { selected = v == null ? null : String(v); paint(); },
512
+ get value() { return value(); },
513
+ set value(v) { seed(v); paint(); },
514
+ get values() { return values.slice(); },
515
+ set values(v) { seed(v); paint(); },
516
+
517
+ destroy: function () {
518
+ if (destroyed) return;
519
+ destroyed = true;
520
+ btn.removeEventListener('keydown', onBtnKey);
521
+ btn.removeEventListener('click', onBtnClick);
522
+ list.removeEventListener('click', onListClick);
523
+ if (form) form.removeEventListener('reset', onFormReset);
524
+ dismiss.destroy();
525
+ typeahead.destroy();
526
+ fr.clear();
527
+ list.hidden = true;
528
+ btn.setAttribute('aria-expanded', 'false');
529
+ btn.removeAttribute('aria-activedescendant');
530
+
531
+ [].slice.call(root.querySelectorAll('input[type="hidden"][data-select-value="1"]'))
532
+ .forEach(function (i) { if (i.parentNode) i.parentNode.removeChild(i); });
533
+ },
447
534
  };
448
535
  }
449
536
 
@@ -1 +1 @@
1
- .form {display:flex;flex-direction:column;gap:var(--sp-5);}.form__row {display:flex;flex-direction:column;gap:var(--sp-5);}.form__actions {display:flex;gap:var(--sp-3);align-items:center;flex-wrap:wrap;padding-top:var(--sp-2);border-top:1px solid var(--border-decor);}.form__summary {display:inline-flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2) var(--sp-3);max-width:100%;padding:var(--sp-3) var(--sp-4);background:var(--danger-bg);border-radius:var(--r-sm);font-size:var(--fs-sm);line-height:1.5;}.form__summary::before {content:"!";display:inline-grid;place-items:center;width:16px;height:16px;margin-inline-end:var(--sp-2);border-radius:50%;background:var(--danger);color:var(--text-on-accent);font-size:11px;font-weight:700;line-height:1;}.form__summary-title {margin:0;font-size:var(--fs-sm);font-weight:500;color:var(--danger);display:flex;align-items:center;gap:var(--sp-2);}.form__summary-link + .form__summary-link {margin-inline-start:var(--sp-1);}.form__summary-link {display:inline-block;color:var(--danger);font-size:var(--fs-sm);text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px;}@media (hover:hover) and (pointer:fine) {.form__summary-link:hover {color:var(--text-primary);}}.form__summary-link:focus-visible {outline:2px solid var(--danger);outline-offset:2px;border-radius:2px;}.field__error {display:none;}.field[data-dirty] .field__error {display:flex;}.form--has-summary .field__error:not(:empty) {display:flex;}.field__error:empty {display:none;}.field__error::before {content:"!";display:inline-grid;place-items:center;flex:none;width:14px;height:14px;margin-inline-end:var(--sp-1);border-radius:50%;background:var(--danger);color:var(--text-on-accent);font-size:10px;font-weight:700;line-height:1;}.form__notice {padding:var(--sp-4) var(--sp-5);background:var(--success-bg);border-radius:var(--r-sm);font-size:var(--fs-sm);color:var(--text-primary);}.field--checking .field__input::after {content:"";}.field__checking-hint {display:flex;align-items:center;gap:var(--sp-1);font-size:var(--fs-xs);color:var(--text-tertiary);}.field__checking-hint::before {content:"";width:12px;height:12px;border:2px solid var(--border-control);border-top-color:var(--accent);border-radius:50%;animation:form-spin 700ms linear infinite;}@keyframes form-spin {to {transform:rotate(360deg);}}@media (prefers-reduced-motion:reduce) {.field__checking-hint::before {animation-duration:1.2s !important;}}
1
+ .form {display:flex;flex-direction:column;gap:var(--sp-5);}.form__row {display:flex;flex-direction:column;gap:var(--sp-5);}.form__actions {display:flex;gap:var(--sp-3);align-items:center;flex-wrap:wrap;padding-top:var(--sp-2);border-top:1px solid var(--border-decor);}.form__summary {display:inline-flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2) var(--sp-3);max-width:100%;padding:var(--sp-3) var(--sp-4);background:var(--danger-bg);border-radius:var(--r-sm);font-size:var(--fs-sm);line-height:1.5;}.form__summary::before {content:"!";display:inline-grid;place-items:center;width:16px;height:16px;margin-inline-end:var(--sp-2);border-radius:50%;background:var(--danger);color:var(--text-on-accent);font-size:11px;font-weight:700;line-height:1;}.form__summary-title {margin:0;font-size:var(--fs-sm);font-weight:500;color:var(--danger);display:flex;align-items:center;gap:var(--sp-2);}.form__summary-link + .form__summary-link {margin-inline-start:var(--sp-1);}.form__summary-link {display:inline-block;color:var(--danger);font-size:var(--fs-sm);text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px;}@media (hover:hover) and (pointer:fine) {.form__summary-link:hover {color:var(--text-primary);}}.form__summary-link:focus-visible {outline:2px solid var(--danger);outline-offset:2px;border-radius:2px;}.field .field__error {display:none;}.field[data-dirty] .field__error {display:flex;}.form--has-summary .field__error:not(:empty) {display:flex;}.field__error:empty {display:none;}.field__error::before {content:"!";display:inline-grid;place-items:center;flex:none;width:14px;height:14px;margin-inline-end:var(--sp-1);border-radius:50%;background:var(--danger);color:var(--text-on-accent);font-size:10px;font-weight:700;line-height:1;}.form__notice {padding:var(--sp-4) var(--sp-5);background:var(--success-bg);border-radius:var(--r-sm);font-size:var(--fs-sm);color:var(--text-primary);}.field--checking .field__input::after {content:"";}.field__checking-hint {display:flex;align-items:center;gap:var(--sp-1);font-size:var(--fs-xs);color:var(--text-tertiary);}.field__checking-hint::before {content:"";width:12px;height:12px;border:2px solid var(--border-control);border-top-color:var(--accent);border-radius:50%;animation:form-spin 700ms linear infinite;}@keyframes form-spin {to {transform:rotate(360deg);}}@media (prefers-reduced-motion:reduce) {.field__checking-hint::before {animation-duration:1.2s !important;}}
@@ -1 +1 @@
1
- .toast-region {position:fixed;inset-inline-end:var(--sp-5);bottom:var(--sp-5);z-index:var(--z-toast);display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(380px, calc(100vw - var(--sp-5) * 2));pointer-events:none;}.toast {pointer-events:auto;display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--surface);border:1px solid var(--border-decor);border-radius:var(--r-sm);box-shadow:var(--shadow-2);font-size:var(--fs-sm);line-height:var(--lh-base);color:var(--text-primary);animation:toast-in var(--dur-base) var(--ease-out);}.toast--success {background:var(--success-bg);}.toast--error {background:var(--danger-bg);}.toast--warning {background:var(--warning-bg);}.toast__body {flex:1;min-width:0;}.toast__title {font-weight:500;margin:0 0 2px;}.toast__desc {margin:0;color:var(--text-secondary);font-size:var(--fs-xs);line-height:1.5;}.toast__close {flex:none;min-width:44px;min-height:44px;;margin:-4px -4px 0 0;display:grid;place-items:center;border:none;border-radius:var(--r-sm);background:transparent;color:var(--text-tertiary);cursor:pointer;font-size:16px;line-height:1;transition:background-color var(--dur-fast) var(--ease-out);}@media (hover:hover) and (pointer:fine) {.toast__close:hover {background:var(--surface-sunken);color:var(--text-primary);}}.toast__close:focus-visible {outline:2px solid var(--accent);outline-offset:1px;}.toast[data-state="leaving"] {animation:toast-out var(--dur-fast) var(--ease-in-out) forwards;}@keyframes toast-in {from {opacity:0;transform:translateX(var(--lift-lg));}to {opacity:1;transform:translateX(0);}}@keyframes toast-out {to {opacity:0;transform:translateX(var(--lift-lg));}}.toast__timer {position:absolute;inset-inline-start:0;bottom:0;height:2px;background:currentColor;opacity:0.25;border-radius:0 0 0 var(--r-sm);animation:toast-timer linear forwards;}@keyframes toast-timer {from {width:100%;}to {width:0%;}}.dialog-backdrop {position:fixed;inset:0;z-index:var(--z-modal);display:grid;place-items:center;padding:var(--sp-5);background:var(--scrim);animation:backdrop-in var(--dur-base) var(--ease-out);}.dialog {position:relative;width:100%;max-width:460px;max-height:calc(100vh - var(--sp-7));overflow-y:auto;background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-2);padding:var(--sp-6);animation:dialog-in var(--dur-base) var(--ease-out);}@keyframes dialog-in {from {opacity:0;transform:translateY(var(--lift-lg)) scale(0.98);}to {opacity:1;transform:translateY(0) scale(1);}}@keyframes backdrop-in {from {opacity:0;}to {opacity:1;}}.dialog__title {margin:0 0 var(--sp-2);font-size:var(--fs-lg);font-weight:500;line-height:var(--lh-tight);color:var(--text-primary);}.dialog__desc {margin:0 0 var(--sp-5);font-size:var(--fs-sm);color:var(--text-secondary);line-height:var(--lh-base);}.dialog__actions {display:flex;justify-content:flex-end;align-items:center;gap:var(--sp-3);flex-wrap:wrap;}body[data-scroll-locked] {overflow:hidden;}@media (max-width:480px) {.dialog-backdrop {place-items:end center;padding:0;}.dialog {width:100vw;max-width:100vw;box-sizing:border-box;border-radius:var(--r-lg) var(--r-lg) 0 0;padding-bottom:calc(var(--sp-6) + env(safe-area-inset-bottom, 0px));}.dialog__actions .btn {flex:1;}}@media (prefers-reduced-motion:reduce) {.toast, .toast[data-state="leaving"], .dialog, .dialog-backdrop {animation:none;}.toast__timer {animation:none;width:100%;}}
1
+ .toast-region {position:fixed;inset-inline-end:var(--sp-5);bottom:var(--sp-5);z-index:var(--z-toast);display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(380px, calc(100vw - var(--sp-5) * 2));pointer-events:none;}.toast {pointer-events:auto;display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--surface);border:1px solid var(--border-decor);border-radius:var(--r-sm);box-shadow:var(--shadow-2);font-size:var(--fs-sm);line-height:var(--lh-base);color:var(--text-primary);animation:toast-in var(--dur-base) var(--ease-out);}.toast--success {background:var(--success-bg);}.toast--error {background:var(--danger-bg);}.toast--warning {background:var(--warning-bg);}.toast__body {flex:1;min-width:0;}.toast__title {font-weight:500;margin:0 0 2px;}.toast__desc {margin:0;color:var(--text-secondary);font-size:var(--fs-xs);line-height:1.5;}.toast__close {flex:none;min-width:44px;min-height:44px;;margin:-4px -4px 0 0;display:grid;place-items:center;border:none;border-radius:var(--r-sm);background:transparent;color:var(--text-tertiary);cursor:pointer;font-size:16px;line-height:1;transition:background-color var(--dur-fast) var(--ease-out);}@media (hover:hover) and (pointer:fine) {.toast__close:hover {background:var(--surface-sunken);color:var(--text-primary);}}.toast__close:focus-visible {outline:2px solid var(--accent);outline-offset:1px;}.toast[data-state="leaving"] {animation:toast-out var(--dur-fast) var(--ease-in-out) forwards;}@keyframes toast-in {from {opacity:0;transform:translateX(var(--lift-lg));}to {opacity:1;transform:translateX(0);}}@keyframes toast-out {to {opacity:0;transform:translateX(var(--lift-lg));}}.toast__timer {position:absolute;inset-inline-start:0;bottom:0;height:2px;background:currentColor;opacity:0.25;border-radius:0 0 0 var(--r-sm);animation:toast-timer linear forwards;}@keyframes toast-timer {from {width:100%;}to {width:0%;}}.dialog-backdrop {position:fixed;inset:0;z-index:var(--z-modal);display:grid;place-items:center;padding:var(--sp-5);background:var(--scrim);animation:backdrop-in var(--dur-base) var(--ease-out);}.dialog {position:relative;width:100%;max-width:460px;max-height:calc(100vh - var(--sp-7));overflow-y:auto;background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-2);padding:var(--sp-6);animation:dialog-in var(--dur-base) var(--ease-out);}@keyframes dialog-in {from {opacity:0;transform:translateY(var(--lift-lg)) scale(0.98);}to {opacity:1;transform:translateY(0) scale(1);}}@keyframes backdrop-in {from {opacity:0;}to {opacity:1;}}.dialog__title {margin:0 0 var(--sp-2);font-size:var(--fs-lg);font-weight:500;line-height:var(--lh-tight);color:var(--text-primary);}.dialog__desc {margin:0 0 var(--sp-5);font-size:var(--fs-sm);color:var(--text-secondary);line-height:var(--lh-base);}.dialog__actions {display:flex;justify-content:flex-end;align-items:center;gap:var(--sp-3);flex-wrap:wrap;}body[data-scroll-locked] {overflow:hidden;}@media (max-width:480px) {.dialog-backdrop {place-items:end center;padding:0;}.dialog {width:100vw;max-width:100vw;box-sizing:border-box;border-radius:var(--r-lg) var(--r-lg) 0 0;padding-bottom:calc(var(--sp-6) + env(safe-area-inset-bottom, 0px));}.dialog__actions .btn {flex:1;}}@media (prefers-reduced-motion:reduce) {.toast, .toast[data-state="leaving"], .dialog, .dialog-backdrop {animation:none;}.toast__timer {animation:none;width:100%;}}@media print {.dialog-backdrop {position:static;inset:auto;display:block;padding:0;background:none;}.dialog {max-height:none;overflow:visible;}}
@@ -61,7 +61,8 @@ function inertAcquire(node) {
61
61
  for (var i = 0; i < inertRefs.length; i++) {
62
62
  if (inertRefs[i].node === node) { inertRefs[i].count++; return; }
63
63
  }
64
- inertRefs.push({ node: node, count: 1 });
64
+
65
+ inertRefs.push({ node: node, count: 1, prev: node.inert === true });
65
66
  node.inert = true;
66
67
  }
67
68
 
@@ -70,7 +71,7 @@ for (var i = 0; i < inertRefs.length; i++) {
70
71
  if (inertRefs[i].node !== node) continue;
71
72
  inertRefs[i].count--;
72
73
  if (inertRefs[i].count <= 0) {
73
- node.inert = false;
74
+ node.inert = inertRefs[i].prev === true;
74
75
  inertRefs.splice(i, 1);
75
76
  }
76
77
  return;
@@ -417,17 +418,43 @@ var ariaed = [];
417
418
  var nodes = Array.prototype.slice.call(
418
419
  document.body.querySelectorAll('body > *')
419
420
  );
420
- nodes.forEach(function (n) {
421
421
 
422
- if (n.classList.contains('dialog-backdrop')) return;
423
- if (useInert) {
424
- inerted.push(n);
425
- inertAcquire(n);
426
- } else {
427
- ariaed.push(n);
428
- ariaAcquire(n);
422
+ function isolate(n) {
423
+ if (!n || n === backdrop) return;
424
+ if (useInert) { inerted.push(n); inertAcquire(n); }
425
+ else { ariaed.push(n); ariaAcquire(n); }
426
+ }
427
+ nodes.forEach(isolate);
428
+
429
+ var mo = null;
430
+ if (typeof window.MutationObserver === 'function') {
431
+ mo = new window.MutationObserver(function (records) {
432
+
433
+ if (!document.documentElement.contains(backdrop)) {
434
+ if (mo) { mo.disconnect(); mo = null; }
435
+ if (closed) return;
436
+ closed = true;
437
+ inerted.forEach(inertRelease);
438
+ ariaed.forEach(ariaRelease);
439
+ inerted = [];
440
+ ariaed = [];
441
+ if (uninstallIsolation) { uninstallIsolation(); uninstallIsolation = null; }
442
+ unlockScroll();
443
+ return;
444
+ }
445
+ for (var r = 0; r < records.length; r++) {
446
+ var added = records[r].addedNodes;
447
+ for (var a = 0; a < added.length; a++) {
448
+ var n = added[a];
449
+ if (!n || n.nodeType !== 1) continue;
450
+ if (n.classList && n.classList.contains('dialog-backdrop')) continue;
451
+ if (n.inert === true || n.getAttribute('aria-hidden') === 'true') continue;
452
+ isolate(n);
453
+ }
429
454
  }
430
455
  });
456
+ mo.observe(document.body, { childList: true });
457
+ }
431
458
 
432
459
  function close() {
433
460
  if (closed) return;
@@ -445,13 +472,15 @@ for (var si = openStack.length - 1; si >= 0; si--) {
445
472
  if (openStack[si] === stackEntry) { openStack.splice(si, 1); break; }
446
473
  }
447
474
  if (uninstallIsolation) { uninstallIsolation(); uninstallIsolation = null; }
475
+ if (mo) { mo.disconnect(); mo = null; }
448
476
 
449
477
  inerted.forEach(inertRelease);
450
478
 
451
479
  ariaed.forEach(ariaRelease);
452
480
  unlockScroll();
453
481
 
454
- fr.restore();
482
+ if (focusIsMine) fr.restore();
483
+ else fr.clear();
455
484
 
456
485
  }
457
486
 
@@ -1 +1 @@
1
- .state {display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-8) var(--sp-5);text-align:center;min-height:200px;}.state__icon {flex:none;width:48px;height:48px;margin-bottom:var(--sp-2);display:grid;place-items:center;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--text-tertiary);}.state__title {margin:0;font-size:var(--fs-md);font-weight:500;line-height:var(--lh-tight);color:var(--text-primary);}.state__desc {margin:0;max-width:42ch;font-size:var(--fs-sm);color:var(--text-secondary);line-height:var(--lh-base);}.state__action {margin-top:var(--sp-3);display:flex;gap:var(--sp-3);flex-wrap:wrap;justify-content:center;}.state--empty .state__icon {background:var(--surface-sunken);color:var(--text-tertiary);}.state--loading {gap:var(--sp-3);}.spinner {width:24px;height:24px;border:2.5px solid var(--border-control);border-top-color:var(--accent);border-radius:50%;animation:spinner-rotate 700ms linear infinite;}@keyframes spinner-rotate {to {transform:rotate(360deg);}}.skeleton {--sk-base:var(--surface-sunken);--sk-hi:var(--border-decor);background:var(--sk-base);border-radius:var(--r-sm);position:relative;overflow:hidden;}.skeleton::after {content:"";position:absolute;inset:0;background:linear-gradient(90deg, transparent 0%, var(--sk-hi) 50%, transparent 100%);transform:translateX(-100%);animation:skeleton-sweep 1.4s ease-in-out infinite;}@keyframes skeleton-sweep {to {transform:translateX(100%);}}.skeleton--text {height:1em;margin-block:0.35em;border-radius:4px;}.skeleton--title {height:1.4em;width:60%;}.skeleton--avatar {width:40px;height:40px;border-radius:var(--r-pill);}.skeleton--block {height:120px;}.skeleton--text:last-child {width:70%;}.state--error .state__icon {background:var(--danger-bg);color:var(--danger);}.state--error .state__title {color:var(--danger);}.state__detail {margin-top:var(--sp-3);font-family:var(--mono);font-size:var(--fs-xs);color:var(--text-tertiary);background:var(--surface-sunken);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);max-width:100%;overflow-x:auto;}@media (prefers-reduced-motion:reduce) {.spinner {animation-duration:1.2s !important;}.skeleton::after {animation:none;transform:none;}}
1
+ .state {display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-8) var(--sp-5);text-align:center;min-height:200px;}.state__icon {flex:none;width:48px;height:48px;margin-bottom:var(--sp-2);display:grid;place-items:center;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--text-tertiary);}.state__title {margin:0;font-size:var(--fs-md);font-weight:500;line-height:var(--lh-tight);color:var(--text-primary);}.state__desc {margin:0;max-width:42ch;font-size:var(--fs-sm);color:var(--text-secondary);line-height:var(--lh-base);}.state__action {margin-top:var(--sp-3);display:flex;gap:var(--sp-3);flex-wrap:wrap;justify-content:center;}.state--empty .state__icon {background:var(--surface-sunken);color:var(--text-tertiary);}.state--loading {gap:var(--sp-3);}.spinner {width:24px;height:24px;border:2.5px solid var(--border-control);border-top-color:var(--accent);border-radius:50%;animation:spinner-rotate 700ms linear infinite;}@keyframes spinner-rotate {to {transform:rotate(360deg);}}.skeleton {--sk-base:var(--surface-sunken);--sk-hi:var(--border-decor);background:var(--sk-base);border-radius:var(--r-sm);position:relative;overflow:hidden;}.skeleton::after {content:"";position:absolute;inset:0;background:linear-gradient(90deg, transparent 0%, var(--sk-hi) 50%, transparent 100%);transform:translateX(-100%);}@media (prefers-reduced-motion:no-preference) {.skeleton::after {animation:skeleton-sweep 1.4s ease-in-out infinite;}}@media (prefers-reduced-motion:reduce) {.skeleton::after {animation:none;opacity:0;}}@keyframes skeleton-sweep {to {transform:translateX(100%);}}.skeleton--text {height:1em;margin-block:0.35em;border-radius:4px;}.skeleton--title {height:1.4em;width:60%;}.skeleton--avatar {width:40px;height:40px;border-radius:var(--r-pill);}.skeleton--block {height:120px;}.skeleton--text:last-child {width:70%;}.state--error .state__icon {background:var(--danger-bg);color:var(--danger);}.state--error .state__title {color:var(--danger);}.state__detail {margin-top:var(--sp-3);font-family:var(--mono);font-size:var(--fs-xs);color:var(--text-tertiary);background:var(--surface-sunken);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);max-width:100%;overflow-x:auto;}@media (prefers-reduced-motion:reduce) {.spinner {animation-duration:1.2s !important;}.skeleton::after {animation:none;transform:none;}}
@@ -1 +1 @@
1
- .rep {--rep-measure:var(--measure-prose);--rep-body-fs:var(--fs-base);--rep-title-fs:var(--fs-2xl);--rep-lead-fs:var(--fs-lg);--rep-body-lh:var(--lh-base);--rep-sec-num:'';font-family:var(--sans);color:var(--text-primary);font-size:var(--rep-body-fs);line-height:var(--rep-body-lh);max-width:100%;--measure-aside:14em;}.rep__kicker, .rep__meta, .rep__cap, .rep__source, .rep__note, .rep__risk {font-size:var(--fs-xs);color:var(--text-secondary);line-height:var(--lh-base);}.rep .rep__title {font-size:var(--rep-title-fs);line-height:var(--lh-tight);letter-spacing:-0.01em;max-width:var(--measure-title);margin:var(--sp-2) 0 0;font-weight:700;}.rep__kicker {margin:0;color:var(--text-tertiary);font-weight:600;letter-spacing:.06em;}.rep__standfirst, .rep__lede {font-size:var(--rep-lead-fs);line-height:var(--lh-loose);max-width:var(--measure-lede);color:var(--text-secondary);margin:var(--sp-3) 0 0;}.rep__meta {display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-3);margin:var(--sp-3) 0 0;padding:0;list-style:none;color:var(--text-tertiary);}.rep__grid {display:grid;grid-template-columns:minmax(0, 1fr);gap:var(--sp-4);margin-top:var(--sp-5);}@media (min-width:62rem) {.rep__grid {grid-template-columns:minmax(0, 1fr) minmax(0, var(--measure-aside));gap:var(--sp-6);align-items:start;}}.rep__body {max-width:none;}.rep__body p, .rep__body ul, .rep__body ol, .rep__body dl, .rep__body .rep__fig, .rep__body .table, .rep__body .kf, .rep__body .accordion, .rep__body .rep__note, .rep__body .rep__risk, .rep__body .rep__keyline {max-width:var(--rep-measure);}.rep__body .rep__fig--wide, .rep__body .rep__wide {max-width:none;}.rep__aside {color:var(--text-secondary);}.rep__sec {margin-top:var(--sp-7);}.rep__sec > :first-child {margin-top:0;}.rep h2 {font-size:var(--fs-xl);line-height:var(--lh-tight);margin:0 0 var(--sp-3);max-width:var(--measure-title);}.rep h3 {font-size:var(--fs-lg);line-height:var(--lh-tight);margin:var(--sp-5) 0 var(--sp-2);}.rep__body p {margin:0 0 var(--sp-3);}.rep__body p:last-child {margin-bottom:0;}.rep__fig {margin:var(--sp-5) 0;padding:0;}.rep__cap {margin:var(--sp-2) 0 0;}.rep__source {margin:var(--sp-2) 0 0;padding:var(--sp-2) 0 0;border-top:1px solid var(--border-decor);color:var(--text-tertiary);}.rep__source ol, .rep__source ul {margin:var(--sp-1) 0 0;padding-inline-start:1.4em;}.rep__source li {margin-bottom:var(--sp-1);}.rep__sources {margin-top:var(--sp-7);}.rep--technical {--rep-measure:var(--measure-prose);--rep-body-lh:var(--lh-loose);--rep-sec-num:counter(rep-sec, decimal) ' · ';counter-reset:rep-sec rep-fig rep-tab;}.rep--technical .rep__sec > h3::before {content:var(--rep-sec-num);counter-increment:rep-sec;color:var(--text-tertiary);font-variant-numeric:tabular-nums;}.rep--technical .rep__cap::before {content:'图 ' counter(rep-fig) ' · ';counter-increment:rep-fig;font-weight:600;color:var(--text-tertiary);font-variant-numeric:tabular-nums;}.rep--technical .rep__cap--table::before {content:'表 ' counter(rep-tab) ' · ';counter-increment:rep-tab;}.rep--magazine {--rep-measure:42em;--rep-lead-fs:var(--fs-xl);}.rep__pull {margin:var(--sp-5) 0;padding-inline-start:var(--sp-4);border-inline-start:3px solid var(--accent);font-size:var(--fs-xl);line-height:var(--lh-tight);color:var(--text-primary);max-width:var(--measure-pull);}.rep--finance {--rep-measure:30em;--rep-body-fs:var(--fs-sm);--rep-body-lh:var(--lh-base);--rep-title-fs:var(--fs-xl);}.rep__keyline {display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:var(--sp-3);margin:var(--sp-4) 0;padding:var(--sp-3);background:var(--surface-sunken);border-radius:var(--r-md);}.rep__keyline dt {font-size:var(--fs-xs);color:var(--text-tertiary);margin:0;}.rep__keyline dd {margin:var(--sp-1) 0 0;font-size:var(--fs-lg);font-weight:700;font-variant-numeric:tabular-nums;}.rep__risk {margin-top:var(--sp-5);padding:var(--sp-3);border:1px solid var(--border-decor);border-radius:var(--r-md);color:var(--text-secondary);}.rep__risk strong {color:var(--text-primary);}@media print {.rep__aside {display:none;}.rep__grid {display:block;}.rep__fig, .rep table {break-inside:avoid;}.rep__pull {border-inline-start-width:2px;}}
1
+ .rep {--rep-measure:var(--measure-prose);--rep-body-fs:var(--fs-base);--rep-title-fs:var(--fs-2xl);--rep-lead-fs:var(--fs-lg);--rep-body-lh:var(--lh-base);--rep-sec-num:'';font-family:var(--sans);color:var(--text-primary);font-size:var(--rep-body-fs);line-height:var(--rep-body-lh);max-width:100%;--measure-aside:14em;}.rep__kicker, .rep__meta, .rep__cap, .rep__source, .rep__note, .rep__risk {font-size:var(--fs-xs);color:var(--text-secondary);line-height:var(--lh-base);}.rep .rep__title {font-size:var(--rep-title-fs);line-height:var(--lh-tight);letter-spacing:-0.01em;max-width:var(--measure-title);margin:var(--sp-2) 0 0;font-weight:700;}.rep__kicker {margin:0;color:var(--text-tertiary);font-weight:600;letter-spacing:.06em;}.rep__standfirst, .rep__lede {font-size:var(--rep-lead-fs);line-height:var(--lh-loose);max-width:var(--measure-lede);color:var(--text-secondary);margin:var(--sp-3) 0 0;}.rep__meta {display:flex;flex-wrap:wrap;gap:var(--sp-1) var(--sp-3);margin:var(--sp-3) 0 0;padding:0;list-style:none;color:var(--text-tertiary);}.rep__grid {display:grid;grid-template-columns:minmax(0, 1fr);gap:var(--sp-4);margin-top:var(--sp-5);}@media (min-width:62rem) {.rep__grid {grid-template-columns:minmax(0, 1fr) minmax(0, var(--measure-aside));gap:var(--sp-6);align-items:start;}}.rep__body {max-width:none;}.rep__body p, .rep__body ul, .rep__body ol, .rep__body dl, .rep__body .rep__fig, .rep__body .table, .rep__body .kf, .rep__body .accordion, .rep__body .rep__note, .rep__body .rep__risk, .rep__body .rep__keyline {max-width:var(--rep-measure);}.rep__body .rep__fig--wide, .rep__body .rep__wide {max-width:none;}.rep__aside {color:var(--text-secondary);}.rep__sec {margin-top:var(--sp-7);}.rep__sec > :first-child {margin-top:0;}.rep h2 {font-size:var(--fs-xl);line-height:var(--lh-tight);margin:0 0 var(--sp-3);max-width:var(--measure-title);}.rep h3 {font-size:var(--fs-lg);line-height:var(--lh-tight);margin:var(--sp-5) 0 var(--sp-2);}.rep__body p {margin:0 0 var(--sp-3);}.rep__body p:last-child {margin-bottom:0;}.rep__fig {margin:var(--sp-5) 0;padding:0;}.rep__cap {margin:var(--sp-2) 0 0;}.rep__source {margin:var(--sp-2) 0 0;padding:var(--sp-2) 0 0;border-top:1px solid var(--border-decor);color:var(--text-tertiary);}.rep__source ol, .rep__source ul {margin:var(--sp-1) 0 0;padding-inline-start:1.4em;}.rep__source li {margin-bottom:var(--sp-1);}.rep__sources {margin-top:var(--sp-7);}.rep--technical {--rep-measure:var(--measure-prose);--rep-body-lh:var(--lh-loose);--rep-sec-num:counter(rep-sec, decimal) ' · ';counter-reset:rep-sec rep-fig rep-tab;}.rep--technical .rep__sec > h3::before {content:var(--rep-sec-num);counter-increment:rep-sec;color:var(--text-tertiary);font-variant-numeric:tabular-nums;}.rep--technical .rep__cap::before {content:'图 ' counter(rep-fig) ' · ';counter-increment:rep-fig;font-weight:600;color:var(--text-tertiary);font-variant-numeric:tabular-nums;}.rep--technical .rep__cap--table::before {content:'表 ' counter(rep-tab) ' · ';counter-increment:rep-tab;}.rep--magazine {--rep-measure:42em;--rep-lead-fs:var(--fs-xl);}.rep__pull {margin:var(--sp-5) 0;padding-inline-start:var(--sp-4);border-inline-start:3px solid var(--accent);font-size:var(--fs-xl);line-height:var(--lh-tight);color:var(--text-primary);max-width:var(--measure-pull);}.rep--finance {--rep-measure:30em;--rep-body-fs:var(--fs-sm);--rep-body-lh:var(--lh-base);--rep-title-fs:var(--fs-xl);}.rep__keyline {display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:var(--sp-3);margin:var(--sp-4) 0;padding:var(--sp-3);background:var(--surface-sunken);border-radius:var(--r-md);}.rep__keyline dt {font-size:var(--fs-xs);color:var(--text-tertiary);margin:0;}.rep__keyline dd {margin:var(--sp-1) 0 0;font-size:var(--fs-lg);font-weight:700;font-variant-numeric:tabular-nums;}.rep__risk {margin-top:var(--sp-5);padding:var(--sp-3);border:1px solid var(--border-decor);border-radius:var(--r-md);color:var(--text-secondary);}.rep__risk strong {color:var(--text-primary);}@media print {.rep__aside {display:none;}.rep__grid {display:block;}.rep__fig, .rep table {break-inside:avoid;}.rep__pull {border-inline-start-width:2px;}.rep p, .rep li, .rep blockquote {orphans:2;widows:2;}}
@@ -1 +1 @@
1
- :root {--paper:#f6f7f8;--surface:#ffffff;--surface-sunken:#f1f3f5;--surface-raised:#ffffff;--scrollbar-size:10px;--scrollbar-size-thin:6px;--scrollbar-thumb:#7A808A;--scrollbar-thumb-hov:#6E747E;--scrollbar-radius:5px;--text-primary:#15181c;--text-secondary:#4f555e;--text-tertiary:#606770;--text-on-accent:#ffffff;--text-on-solid:#ffffff;--skeleton-bg:#e9ecef;--skeleton-shimmer:rgba(255, 255, 255, 0.72);--skeleton-h:1em;--skeleton-size:40px;--skeleton-duration:1.4s;--ease-out:cubic-bezier(0.23, 1, 0.32, 1);--progress-h:6px;--progress-dur:240ms;--r-full:999px;--ring-size:64px;--ring-thickness:8px;--progress:0%;--progress-num:0;--z-popover:60;--popover-min-w:200px;--popover-max-w:320px;--popover-p:12px;--popover-gap:8px;--popover-dur:140ms;--border-control:#868b94;--border-decor:#e2e5e9;--border-decor-str:#c8cdd4;--danger:#c0392b;--danger-hover:#8f1e17;--scrim:rgba(21, 24, 28, 0.4);--success:#2f6b3a;--warning:#8a5a00;--info:#1d5f8a;--danger-bg:#fdeeec;--success-bg:#eaf2e6;--warning-bg:#fbf1dd;--info-bg:#e8f1f8;--dir-up:#c0392b;--dir-down:#2f6b3a;--accent:#1b4d8f;--switch-on:#1b4d8f;--accent-hover:#163a6d;--accent-soft:#e6eef7;--tooltip-bg:#15181c;--tooltip-fg:#f6f7f8;--tooltip-border:#15181c;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:clamp(1rem, 0.95rem + 0.3vw, 1.25rem);--sp-5:clamp(1.25rem, 1.15rem + 0.7vw, 1.75rem);--sp-6:clamp(1.5rem, 1.3rem + 1.2vw, 2.25rem);--sp-7:clamp(2rem, 1.7rem + 1.8vw, 3.5rem);--sp-8:clamp(2.5rem, 2.1rem + 2.4vw, 4.5rem);--bp-sm:30rem;--bp-md:48rem;--bp-lg:64rem;--bp-xl:80rem;--fs-xs:0.75rem;--fs-sm:0.875rem;--fs-base:clamp(1rem, 0.95rem + 0.3vw, 1.125rem);--fs-md:clamp(1.125rem, 1.05rem + 0.5vw, 1.3125rem);--fs-lg:clamp(1.3125rem, 1.2rem + 0.7vw, 1.5rem);--fs-xl:clamp(1.5rem, 1.3rem + 1.2vw, 1.875rem);--fs-2xl:clamp(1.75rem, 1.45rem + 1.8vw, 2.5rem);--lh-tight:1.25;--lh-base:1.7;--lh-loose:1.85;--measure-page:52rem;--tracking-title:-0.02em;--r-sm:6px;--r-xs:3px;--r-md:10px;--r-lg:14px;--r-pill:999px;--shadow-1:0 1px 2px rgba(31, 29, 25, 0.05), 0 1px 3px rgba(31, 29, 25, 0.06);--shadow-2:0 2px 4px rgba(31, 29, 25, 0.05), 0 6px 16px rgba(31, 29, 25, 0.08);--dur-fast:120ms;--dur-base:180ms;--dur-slow:280ms;--ease-out:cubic-bezier(0.23, 1, 0.32, 1);--ease-in-out:cubic-bezier(0.77, 0, 0.175, 1);--ease-drawer:cubic-bezier(0.32, 0.72, 0, 1);--lift-sm:1px;--lift-md:2px;--lift-lg:8px;--z-base:0;--z-sticky:10;--z-header:20;--z-raised:5;--z-overlay:30;--z-modal:40;--z-toast:50;--sz-touch:44px;--sz-touch-sm:32px;}@media (prefers-color-scheme:dark) {:root:not([data-theme="light"]) {--paper:#14171A;--surface:#1C2024;--surface-raised:#232830;--surface-sunken:#1A1D21;--scrollbar-thumb:#6E747E;--scrollbar-thumb-hov:#7D828A;--border-decor:#2A3038;--border-decor-str:#3A424C;--border-control:#8A9099;--text-primary:#E4E7EA;--text-secondary:#AEB6C0;--text-tertiary:#9BA3AD;--text-on-accent:#0D1114;--text-on-solid:#0D1114;--skeleton-bg:#2E343C;--skeleton-shimmer:rgba(255, 255, 255, 0.06);--danger:#E07A6E;--danger-hover:#F09A90;--danger-bg:#341D1A;--success:#6FAA7A;--success-bg:#16241A;--dir-up:#E07A6E;--dir-down:#6FAA7A;--warning:#C99A3F;--warning-bg:#242A31;--info:#5B9BC4;--info-bg:#13242F;--accent:#7AA9DE;--switch-on:#3E6EA8;--accent-hover:#8FB8E6;--accent-soft:#1C2C3D;--tooltip-bg:#232830;--tooltip-fg:#E4E7EA;--tooltip-border:#2A3038;--scrim:rgba(0, 0, 0, 0.62);}}
1
+ :root {--paper:#f6f7f8;--surface:#ffffff;--surface-sunken:#f1f3f5;--surface-raised:#ffffff;--scrollbar-size:10px;--scrollbar-size-thin:6px;--scrollbar-thumb:#7A808A;--scrollbar-thumb-hov:#6E747E;--scrollbar-radius:5px;--text-primary:#15181c;--text-secondary:#4f555e;--text-tertiary:#606770;--text-on-accent:#ffffff;--text-on-solid:#ffffff;--skeleton-bg:#e9ecef;--skeleton-shimmer:rgba(255, 255, 255, 0.72);--skeleton-h:1em;--skeleton-size:40px;--skeleton-duration:1.4s;--ease-out:cubic-bezier(0.23, 1, 0.32, 1);--progress-h:6px;--progress-dur:240ms;--r-full:999px;--ring-size:64px;--ring-thickness:8px;--progress:0%;--progress-num:0;--z-popover:60;--popover-min-w:200px;--popover-max-w:320px;--popover-p:12px;--popover-gap:8px;--popover-dur:140ms;--border-control:#868b94;--border-decor:#e2e5e9;--border-decor-str:#c8cdd4;--danger:#c0392b;--danger-hover:#8f1e17;--scrim:rgba(21, 24, 28, 0.4);--success:#2f6b3a;--warning:#8a5a00;--info:#1d5f8a;--danger-bg:#fdeeec;--success-bg:#eaf2e6;--warning-bg:#fbf1dd;--info-bg:#e8f1f8;--dir-up:#c0392b;--dir-down:#2f6b3a;--accent:#1b4d8f;--switch-on:#1b4d8f;--accent-hover:#163a6d;--accent-soft:#e6eef7;--tooltip-bg:#15181c;--tooltip-fg:#f6f7f8;--tooltip-border:#15181c;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:clamp(1rem, 0.95rem + 0.3vw, 1.25rem);--sp-5:clamp(1.25rem, 1.15rem + 0.7vw, 1.75rem);--sp-6:clamp(1.5rem, 1.3rem + 1.2vw, 2.25rem);--sp-7:clamp(2rem, 1.7rem + 1.8vw, 3.5rem);--sp-8:clamp(2.5rem, 2.1rem + 2.4vw, 4.5rem);--bp-sm:30rem;--bp-md:48rem;--bp-lg:64rem;--bp-xl:80rem;--fs-xs:0.75rem;--fs-sm:0.875rem;--fs-base:clamp(1rem, 0.95rem + 0.3vw, 1.125rem);--fs-md:clamp(1.125rem, 1.05rem + 0.5vw, 1.3125rem);--fs-lg:clamp(1.3125rem, 1.2rem + 0.7vw, 1.5rem);--fs-xl:clamp(1.5rem, 1.3rem + 1.2vw, 1.875rem);--fs-2xl:clamp(1.75rem, 1.45rem + 1.8vw, 2.5rem);--lh-tight:1.25;--lh-base:1.7;--lh-loose:1.85;--measure-page:52rem;--tracking-title:-0.02em;--r-sm:6px;--r-xs:3px;--r-md:10px;--r-lg:14px;--r-pill:999px;--shadow-1:0 1px 2px rgba(31, 29, 25, 0.05), 0 1px 3px rgba(31, 29, 25, 0.06);--shadow-2:0 2px 4px rgba(31, 29, 25, 0.05), 0 6px 16px rgba(31, 29, 25, 0.08);--dur-fast:120ms;--dur-base:180ms;--dur-slow:280ms;--ease-out:cubic-bezier(0.23, 1, 0.32, 1);--ease-in-out:cubic-bezier(0.77, 0, 0.175, 1);--ease-drawer:cubic-bezier(0.32, 0.72, 0, 1);--lift-sm:1px;--lift-md:2px;--lift-lg:8px;--z-base:0;--z-sticky:10;--z-header:20;--z-raised:5;--z-overlay:30;--z-modal:40;--z-toast:50;--sz-touch:44px;--sz-touch-sm:32px;}@media screen and (prefers-color-scheme:dark) {:root:not([data-theme="light"]) {--paper:#14171A;--surface:#1C2024;--surface-raised:#232830;--surface-sunken:#1A1D21;--scrollbar-thumb:#6E747E;--scrollbar-thumb-hov:#7D828A;--border-decor:#2A3038;--border-decor-str:#3A424C;--border-control:#8A9099;--text-primary:#E4E7EA;--text-secondary:#AEB6C0;--text-tertiary:#9BA3AD;--text-on-accent:#15181c;--text-on-solid:#15181c;--skeleton-bg:#2E343C;--skeleton-shimmer:rgba(255, 255, 255, 0.06);--danger:#E07A6E;--danger-hover:#F09A90;--danger-bg:#341D1A;--success:#6FAA7A;--success-bg:#16241A;--dir-up:#E07A6E;--dir-down:#6FAA7A;--warning:#C99A3F;--warning-bg:#242A31;--info:#5B9BC4;--info-bg:#13242F;--accent:#7AA9DE;--switch-on:#3E6EA8;--accent-hover:#8FB8E6;--accent-soft:#1C2C3D;--tooltip-bg:#232830;--tooltip-fg:#E4E7EA;--tooltip-border:#2A3038;--scrim:rgba(0, 0, 0, 0.62);}}
@@ -1 +1 @@
1
- .bar {position:relative;overflow:hidden;background:var(--surface, #fff);border:1px solid var(--border-decor);border-radius:var(--r-md, 8px);padding:var(--sp-3);}.bar__svg {display:block;width:100%;height:auto;overflow:hidden;}.bar__grid {stroke:var(--border-decor);stroke-width:1;stroke-dasharray:2 3;}.bar__ytick, .bar__xlabel {fill:var(--text-tertiary);font-size:10px;font-family:var(--mono);font-variant-numeric:tabular-nums;}.bar__s0 {--bar-c:var(--accent);}.bar__s1 {--bar-c:var(--text-tertiary);}.bar__s2 {--bar-c:var(--success);}.bar__s3 {--bar-c:var(--warning);}.bar__s4 {--bar-c:var(--info);}.bar__bar {fill:var(--bar-c, var(--accent));transition:fill 120ms var(--ease-out, ease);}.bar__bar[data-clipped="1"] {fill:var(--danger, #c0392b);stroke:var(--danger, #c0392b);stroke-width:1;stroke-dasharray:2 2;}.bar__legend {display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-4, 1rem);margin:var(--sp-2) 0 0;padding:0;list-style:none;font-size:var(--fs-xs, 12px);color:var(--text-secondary);}.bar__legend-item {display:inline-flex;align-items:center;gap:var(--sp-1);}.bar__legend-swatch {display:inline-block;width:10px;height:10px;border-radius:2px;background:var(--bar-c, var(--accent));flex:0 0 auto;}.bar__threshold {stroke:var(--text-tertiary);stroke-width:1;stroke-dasharray:4 3;}.bar__label {fill:var(--text-secondary);font-size:10px;font-family:var(--mono);font-variant-numeric:tabular-nums;paint-order:stroke fill;stroke:var(--surface, #fff);stroke-width:3px;stroke-linejoin:round;pointer-events:none;}.bar__label--max {fill:var(--text-primary);font-weight:700;}.bar__label--clip {fill:var(--danger, #c0392b);font-weight:700;}.bar__note {margin:var(--sp-2) 0 0;font-size:var(--fs-xs, 12px);line-height:1.5;color:var(--text-secondary);}@media (hover:hover) and (pointer:fine) {.bar__bar:hover {stroke:var(--text-primary);stroke-width:1.5;}}@media (prefers-color-scheme:dark) {.bar {background:var(--surface, #1a1c1e);border-color:var(--border-decor);}.bar__label {stroke:var(--surface, #1a1c1e);}}
1
+ .bar {position:relative;overflow:hidden;background:var(--surface, #fff);border:1px solid var(--border-decor);border-radius:var(--r-md, 8px);padding:var(--sp-3);}.bar__svg {display:block;width:100%;height:auto;overflow:hidden;}.bar__grid {stroke:var(--border-decor);stroke-width:1;stroke-dasharray:2 3;}.bar__ytick, .bar__xlabel {fill:var(--text-tertiary);font-size:10px;font-family:var(--mono);font-variant-numeric:tabular-nums;}.bar__s0 {--bar-c:var(--accent);}.bar__s1 {--bar-c:var(--text-tertiary);}.bar__s2 {--bar-c:var(--success);}.bar__s3 {--bar-c:var(--warning);}.bar__s4 {--bar-c:var(--info);}.bar__bar {fill:var(--bar-c, var(--accent));transition:fill 120ms var(--ease-out, ease);}.bar__bar[data-clipped="1"] {fill:var(--danger, #c0392b);stroke:var(--danger, #c0392b);stroke-width:1;stroke-dasharray:2 2;}.bar__legend {display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-4, 1rem);margin:var(--sp-2) 0 0;padding:0;list-style:none;font-size:var(--fs-xs, 12px);color:var(--text-secondary);}.bar__legend-item {display:inline-flex;align-items:center;gap:var(--sp-1);}.bar__legend-swatch {display:inline-block;width:10px;height:10px;border-radius:2px;background:var(--bar-c, var(--accent));flex:0 0 auto;}.bar__threshold {stroke:var(--text-tertiary);stroke-width:1;stroke-dasharray:4 3;}.bar__label {fill:var(--text-secondary);font-size:10px;font-family:var(--mono);font-variant-numeric:tabular-nums;paint-order:stroke fill;stroke:var(--surface, #fff);stroke-width:3px;stroke-linejoin:round;pointer-events:none;}.bar__label--max {fill:var(--text-primary);font-weight:700;}.bar__label--clip {fill:var(--danger, #c0392b);font-weight:700;}@media print {.bar__label {stroke:none;}}.bar__note {margin:var(--sp-2) 0 0;font-size:var(--fs-xs, 12px);line-height:1.5;color:var(--text-secondary);}@media (hover:hover) and (pointer:fine) {.bar__bar:hover {stroke:var(--text-primary);stroke-width:1.5;}}