dsh-claude-style 0.2.7 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.en.md +1 -1
- package/README.md +2 -1
- package/docs/STYLE.md +31 -0
- package/lib/client.js +998 -33
- package/lib/index.js +8 -0
- package/lib/model-descriptions.json +86 -0
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* - src/overrides/permissions.js
|
|
18
18
|
* - src/overrides/model-picker.js
|
|
19
19
|
* - src/overrides/account-footer.js
|
|
20
|
+
* - src/overrides/ban-screen.js
|
|
20
21
|
* - src/overrides/scheduler.js
|
|
21
22
|
* - src/settings.js
|
|
22
23
|
* - src/entry.js
|
|
@@ -31,6 +32,7 @@
|
|
|
31
32
|
* - src/styles/sidebar.css
|
|
32
33
|
* - src/styles/components/permissions.css
|
|
33
34
|
* - src/styles/components/account-footer.css
|
|
35
|
+
* - src/styles/components/ban-screen.css
|
|
34
36
|
* - src/styles/components/model-picker.css
|
|
35
37
|
* - src/styles/components/footer-takeover.css
|
|
36
38
|
* - src/styles/components/third-party.css
|
|
@@ -205,6 +207,17 @@ window.__ModuleLoader__.load({
|
|
|
205
207
|
|
|
206
208
|
/** Present while the skin takes over the sidebar footer (settings area + account row). */
|
|
207
209
|
var FOOTER_ATTR = 'data-dsh-claude-footer-takeover'
|
|
210
|
+
/**
|
|
211
|
+
* The language the account-hold easter egg (src/overrides/ban-screen.js) is
|
|
212
|
+
* written in. It is its own preference rather than "follow the shell",
|
|
213
|
+
* because the page reproduces a real Claude screen: the point is to read it
|
|
214
|
+
* in the language Claude actually used, whatever the shell is set to. The
|
|
215
|
+
* default is English for that reason.
|
|
216
|
+
*/
|
|
217
|
+
var BAN_LOCALE_EN = 'en'
|
|
218
|
+
var BAN_LOCALE_ZH = 'zh'
|
|
219
|
+
var BAN_LOCALES = [BAN_LOCALE_EN, BAN_LOCALE_ZH]
|
|
220
|
+
var DEFAULT_BAN_LOCALE = BAN_LOCALE_EN
|
|
208
221
|
/** Present while the composer restyle applies to the page currently shown. */
|
|
209
222
|
var COMPOSER_ATTR = 'data-dsh-claude-composer-active'
|
|
210
223
|
/**
|
|
@@ -417,9 +430,6 @@ window.__ModuleLoader__.load({
|
|
|
417
430
|
" border-color: #e8e6dc;",
|
|
418
431
|
"}",
|
|
419
432
|
"",
|
|
420
|
-
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) table th {",
|
|
421
|
-
" background: #f0eee6;",
|
|
422
|
-
"}",
|
|
423
433
|
"",
|
|
424
434
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) * {",
|
|
425
435
|
" scrollbar-color: rgba(208, 205, 193, 0.9) transparent;",
|
|
@@ -532,19 +542,42 @@ window.__ModuleLoader__.load({
|
|
|
532
542
|
" font-size: var(--dsh-content-font-size, 14px);",
|
|
533
543
|
"}",
|
|
534
544
|
"",
|
|
535
|
-
"body[data-dsh-claude-style] [class*=\"
|
|
536
|
-
"
|
|
545
|
+
"body[data-dsh-claude-style] [class*=\"tableScroll\"] thead th,",
|
|
546
|
+
"body[data-dsh-claude-style] [class*=\"tableScroll\"] thead td {",
|
|
547
|
+
" background: #f0f0ef !important;",
|
|
537
548
|
"}",
|
|
538
549
|
"",
|
|
539
|
-
"body[data-dsh-claude-style][data-ds-dark-theme] [class*=\"
|
|
540
|
-
"
|
|
550
|
+
"body[data-dsh-claude-style][data-ds-dark-theme] [class*=\"tableScroll\"] thead th,",
|
|
551
|
+
"body[data-dsh-claude-style][data-ds-dark-theme] [class*=\"tableScroll\"] thead td {",
|
|
552
|
+
" background: #242320 !important;",
|
|
541
553
|
"}",
|
|
542
554
|
"",
|
|
543
555
|
"/* Table frame: same 0.5px line the host uses for row separators, rounded",
|
|
544
556
|
" like the code block. The scroll container already clips its content. */",
|
|
545
|
-
"body[data-dsh-claude-style] [class*=\"
|
|
557
|
+
"body[data-dsh-claude-style] [class*=\"tableScroll\"] {",
|
|
546
558
|
" border: 0.5px solid var(--dsw-alias-border-l2);",
|
|
547
559
|
" border-radius: 12px;",
|
|
560
|
+
" padding-left: 0 !important;",
|
|
561
|
+
" padding-right: 0 !important;",
|
|
562
|
+
" background-clip: padding-box;",
|
|
563
|
+
"}",
|
|
564
|
+
"",
|
|
565
|
+
"body[data-dsh-claude-style] [class*=\"tableScroll\"] table {",
|
|
566
|
+
" margin-left: 0 !important;",
|
|
567
|
+
" margin-right: 0 !important;",
|
|
568
|
+
" padding-left: 0 !important;",
|
|
569
|
+
" padding-right: 0 !important;",
|
|
570
|
+
" border-spacing: 0 !important;",
|
|
571
|
+
" border-collapse: collapse !important;",
|
|
572
|
+
"}",
|
|
573
|
+
"",
|
|
574
|
+
"/* Every first/last cell, whatever element the renderer used (th or td). */",
|
|
575
|
+
"body[data-dsh-claude-style] [class*=\"tableScroll\"] tr > :first-child {",
|
|
576
|
+
" padding-left: 16px !important;",
|
|
577
|
+
"}",
|
|
578
|
+
"",
|
|
579
|
+
"body[data-dsh-claude-style] [class*=\"tableScroll\"] tr > :last-child {",
|
|
580
|
+
" padding-right: 16px !important;",
|
|
548
581
|
"}",
|
|
549
582
|
"",
|
|
550
583
|
"/* Heading rhythm. The host gives every heading a 32px top margin, which stacks",
|
|
@@ -578,7 +611,9 @@ window.__ModuleLoader__.load({
|
|
|
578
611
|
"",
|
|
579
612
|
"/* ---------- editorial markdown ---------- */",
|
|
580
613
|
"/* Claude's quote keeps the prose face but stands upright on a neutral bar and",
|
|
581
|
-
" wash; the warm accent stays reserved for controls.
|
|
614
|
+
" wash; the warm accent stays reserved for controls. Links, inline-code chips",
|
|
615
|
+
" and file mentions keep their own material inside a quote — the quote is a",
|
|
616
|
+
" container, not a link, so it never borrows the link colour. */",
|
|
582
617
|
"body[data-dsh-claude-style] blockquote {",
|
|
583
618
|
" font-family: var(--dsw-font-prose);",
|
|
584
619
|
" font-style: normal;",
|
|
@@ -624,7 +659,12 @@ window.__ModuleLoader__.load({
|
|
|
624
659
|
"}",
|
|
625
660
|
"",
|
|
626
661
|
"/* Claude's inline-code chip: warm red on the same neutral gray the components",
|
|
627
|
-
" hover with — both resolve per theme from the palette blocks.
|
|
662
|
+
" hover with — both resolve per theme from the palette blocks. The chip hugs",
|
|
663
|
+
" its glyphs: the host makes it an inline-flex box that inherits the prose line",
|
|
664
|
+
" box (23px for a 15px code size), which left ~5px of empty wash above and",
|
|
665
|
+
" below the text. line-height 1.2 collapses that box onto the glyphs (27px →",
|
|
666
|
+
" 22px) and leaves the 1px padding as the visible inset; lower values start",
|
|
667
|
+
" clipping descenders. */",
|
|
628
668
|
"body[data-dsh-claude-style] code:not(pre code) {",
|
|
629
669
|
" font-family: var(--dsw-font-code);",
|
|
630
670
|
" background: var(--dsh-claude-inline-code-bg);",
|
|
@@ -633,6 +673,7 @@ window.__ModuleLoader__.load({
|
|
|
633
673
|
" border-radius: 4px;",
|
|
634
674
|
" padding: 1px;",
|
|
635
675
|
" font-size: calc(1em - 1px) !important;",
|
|
676
|
+
" line-height: 1.2;",
|
|
636
677
|
"}",
|
|
637
678
|
"",
|
|
638
679
|
"/* Claude's links: blue, underlined at rest, and without the host's",
|
|
@@ -641,6 +682,33 @@ window.__ModuleLoader__.load({
|
|
|
641
682
|
" display: none;",
|
|
642
683
|
"}",
|
|
643
684
|
"",
|
|
685
|
+
"/* Inline file mentions (and URL-promoted inline code) are links, not code: the",
|
|
686
|
+
" host resolves a file path inside an inline code span to a button and paints",
|
|
687
|
+
" it with its own link alias. This rule has to name them because the generic",
|
|
688
|
+
" inline-code chip above is more specific than the host's own class, so without",
|
|
689
|
+
" it a path like `CHANGELOG.md` kept the chip's warm red while real links were",
|
|
690
|
+
" blue. The class is hashed (`_fileMention_kcgor_304`), hence the longest",
|
|
691
|
+
" stable fragment. The chip itself is untouched — the same wash and hairline as",
|
|
692
|
+
" any other inline code — only the text takes the link colour and the link's",
|
|
693
|
+
" own underline: solid in the link tone at rest, solid and fully opaque on",
|
|
694
|
+
" hover, at the same thickness and offset, exactly how the skin treats an",
|
|
695
|
+
" anchor. The hover rule therefore touches the colour only: the",
|
|
696
|
+
" `text-decoration` shorthand would reset `text-decoration-thickness` to",
|
|
697
|
+
" `auto` and thin the underline mid-hover. */",
|
|
698
|
+
"body[data-dsh-claude-style] :is(code:not(pre code) > [class*=\"_fileMention\"], code:not(pre code) > a) {",
|
|
699
|
+
" color: var(--dsh-claude-link);",
|
|
700
|
+
" font-weight: 500;",
|
|
701
|
+
" text-decoration: underline;",
|
|
702
|
+
" text-decoration-color: var(--dsh-claude-link-underline);",
|
|
703
|
+
" text-decoration-thickness: 1.5px;",
|
|
704
|
+
" text-underline-offset: 2px;",
|
|
705
|
+
"}",
|
|
706
|
+
"",
|
|
707
|
+
"body[data-dsh-claude-style] :is(code:not(pre code) > [class*=\"_fileMention\"], code:not(pre code) > a):hover,",
|
|
708
|
+
"body[data-dsh-claude-style] :is(code:not(pre code) > [class*=\"_fileMention\"], code:not(pre code) > a):focus-visible {",
|
|
709
|
+
" text-decoration-color: var(--dsh-claude-link);",
|
|
710
|
+
"}",
|
|
711
|
+
"",
|
|
644
712
|
"body[data-dsh-claude-style] [class*=\"markdown\"] :is(a, a:focus) {",
|
|
645
713
|
" color: var(--dsh-claude-link);",
|
|
646
714
|
" text-decoration: underline;",
|
|
@@ -659,23 +727,6 @@ window.__ModuleLoader__.load({
|
|
|
659
727
|
" margin: 1.6em 0;",
|
|
660
728
|
"}",
|
|
661
729
|
"",
|
|
662
|
-
"body[data-dsh-claude-style] table {",
|
|
663
|
-
" border-collapse: collapse;",
|
|
664
|
-
" font-size: 0.92em;",
|
|
665
|
-
" width: 100%;",
|
|
666
|
-
"}",
|
|
667
|
-
"",
|
|
668
|
-
"body[data-dsh-claude-style] table th {",
|
|
669
|
-
" background: rgba(250, 249, 245, 0.06);",
|
|
670
|
-
" font-weight: 600;",
|
|
671
|
-
" text-align: left;",
|
|
672
|
-
"}",
|
|
673
|
-
"",
|
|
674
|
-
"body[data-dsh-claude-style] table td, body[data-dsh-claude-style] table th {",
|
|
675
|
-
" border: none;",
|
|
676
|
-
" border-bottom: 1px solid rgba(20, 20, 19, 0.12);",
|
|
677
|
-
" padding: 0.6em 0.85em !important;",
|
|
678
|
-
"}",
|
|
679
730
|
"",
|
|
680
731
|
"/* tabs: subtle editorial weighting */",
|
|
681
732
|
"body[data-dsh-claude-style] [role=\"tab\"] {",
|
|
@@ -2439,6 +2490,489 @@ window.__ModuleLoader__.load({
|
|
|
2439
2490
|
" background: transparent;",
|
|
2440
2491
|
"}",
|
|
2441
2492
|
"",
|
|
2493
|
+
"/* The account row is the ban-screen easter egg's trigger",
|
|
2494
|
+
" (src/overrides/ban-screen.js). The header is only the wrapper — the clickable",
|
|
2495
|
+
" strip is the inner row, so the hover plate covers the name and not the divider",
|
|
2496
|
+
" that follows it. */",
|
|
2497
|
+
"body[data-dsh-claude-style] .dsh-claude-account-popover-row {",
|
|
2498
|
+
" padding: 6px 8px !important;",
|
|
2499
|
+
" border-radius: 8px !important;",
|
|
2500
|
+
" cursor: pointer !important;",
|
|
2501
|
+
" transition: background-color 0.12s ease !important;",
|
|
2502
|
+
"}",
|
|
2503
|
+
"body[data-dsh-claude-style] .dsh-claude-account-popover-row:hover,",
|
|
2504
|
+
"body[data-dsh-claude-style] .dsh-claude-account-popover-row:focus-visible {",
|
|
2505
|
+
" background: var(--dsh-claude-hover-bg, rgba(0, 0, 0, 0.08)) !important;",
|
|
2506
|
+
" outline: none !important;",
|
|
2507
|
+
"}",
|
|
2508
|
+
"",
|
|
2509
|
+
"/* The rule under the account name belongs to the POPOVER, not to the row: it",
|
|
2510
|
+
" spans the panel's full width (the negative inline margins cancel the popover's",
|
|
2511
|
+
" 6px padding) and sits outside the hover plate above. */",
|
|
2512
|
+
"body[data-dsh-claude-style] .dsh-claude-account-popover-header .dsh-claude-account-popover-divider {",
|
|
2513
|
+
" margin: 0 -6px !important;",
|
|
2514
|
+
"}",
|
|
2515
|
+
"",
|
|
2516
|
+
"/* ---------- Claude Code layout: account-ban easter egg ---------- */",
|
|
2517
|
+
"/* A reproduction of Claude's own \"Your account is on hold\" page, shown when the",
|
|
2518
|
+
" account row at the top of the sidebar's account popover is clicked. It is an",
|
|
2519
|
+
" easter egg, not a real state (src/overrides/ban-screen.js), and it is a",
|
|
2520
|
+
" full-window overlay rather than a page: `position: fixed` at the top of the",
|
|
2521
|
+
" stacking order, so it covers the titlebar, sidebar and composer whatever the",
|
|
2522
|
+
" host paints underneath, and can never be clipped by the sidebar column the",
|
|
2523
|
+
" account popover itself has to dodge.",
|
|
2524
|
+
"",
|
|
2525
|
+
" Palette: the page is Claude's ivory canvas, so the light rules carry the",
|
|
2526
|
+
" measurements and the dark theme re-maps the same slots onto the skin's warm",
|
|
2527
|
+
" black. Every colour is a custom property, which is what lets one set of rules",
|
|
2528
|
+
" serve both canvases. */",
|
|
2529
|
+
"body[data-dsh-claude-style] .dsh-claude-ban {",
|
|
2530
|
+
" --dsh-ban-canvas: #faf9f5;",
|
|
2531
|
+
" --dsh-ban-text: #141413;",
|
|
2532
|
+
" --dsh-ban-muted: #6e6a60;",
|
|
2533
|
+
" --dsh-ban-card: #ffffff;",
|
|
2534
|
+
" --dsh-ban-hairline: #e4e2d8;",
|
|
2535
|
+
" --dsh-ban-hover: rgba(20, 20, 19, 0.05);",
|
|
2536
|
+
" --dsh-ban-primary-fill: #141413;",
|
|
2537
|
+
" --dsh-ban-primary-text: #faf9f5;",
|
|
2538
|
+
" --dsh-ban-primary-hover: #2e2c29;",
|
|
2539
|
+
" --dsh-ban-danger: #a8412b;",
|
|
2540
|
+
" --dsh-ban-danger-hover: #8f3623;",
|
|
2541
|
+
" --dsh-ban-toast-bg: #f6e3c0;",
|
|
2542
|
+
" --dsh-ban-toast-border: #e6cfa1;",
|
|
2543
|
+
" --dsh-ban-toast-text: #7a4f12;",
|
|
2544
|
+
" --dsh-ban-toast-icon: #9a5a15;",
|
|
2545
|
+
" --dsh-ban-toast-hover: rgba(20, 20, 19, 0.09);",
|
|
2546
|
+
" /* The two brand marks are alpha masks over these slots, so the starburst",
|
|
2547
|
+
" keeps the clay accent while the wordmark stays in the page's ink. */",
|
|
2548
|
+
" --dsh-ban-mark: #d97757;",
|
|
2549
|
+
" --dsh-ban-word: #141413;",
|
|
2550
|
+
" position: fixed !important;",
|
|
2551
|
+
" inset: 0 !important;",
|
|
2552
|
+
" z-index: 2147483000 !important;",
|
|
2553
|
+
" margin: 0 !important;",
|
|
2554
|
+
" padding: 0 !important;",
|
|
2555
|
+
" background: var(--dsh-ban-canvas) !important;",
|
|
2556
|
+
" color: var(--dsh-ban-text);",
|
|
2557
|
+
" font-family: var(--dsw-font-family);",
|
|
2558
|
+
" font-size: 15px;",
|
|
2559
|
+
" line-height: 1.6;",
|
|
2560
|
+
" -webkit-font-smoothing: antialiased;",
|
|
2561
|
+
" box-sizing: border-box;",
|
|
2562
|
+
"}",
|
|
2563
|
+
"",
|
|
2564
|
+
"body[data-dsh-claude-style][data-ds-dark-theme] .dsh-claude-ban {",
|
|
2565
|
+
" --dsh-ban-canvas: #141413;",
|
|
2566
|
+
" --dsh-ban-text: #faf9f5;",
|
|
2567
|
+
" --dsh-ban-muted: #b0aea5;",
|
|
2568
|
+
" --dsh-ban-card: #1c1b1a;",
|
|
2569
|
+
" --dsh-ban-hairline: #2e2c29;",
|
|
2570
|
+
" --dsh-ban-hover: rgba(255, 255, 255, 0.07);",
|
|
2571
|
+
" --dsh-ban-primary-fill: #faf9f5;",
|
|
2572
|
+
" --dsh-ban-primary-text: #141413;",
|
|
2573
|
+
" --dsh-ban-primary-hover: #e8e6dc;",
|
|
2574
|
+
" --dsh-ban-danger: #e08a6d;",
|
|
2575
|
+
" --dsh-ban-danger-hover: #eb9f84;",
|
|
2576
|
+
" --dsh-ban-toast-bg: #3a2a22;",
|
|
2577
|
+
" --dsh-ban-toast-border: #55402f;",
|
|
2578
|
+
" --dsh-ban-toast-text: #f0d8b8;",
|
|
2579
|
+
" --dsh-ban-toast-icon: #e0a86a;",
|
|
2580
|
+
" --dsh-ban-toast-hover: rgba(255, 255, 255, 0.08);",
|
|
2581
|
+
" --dsh-ban-word: #faf9f5;",
|
|
2582
|
+
"}",
|
|
2583
|
+
"",
|
|
2584
|
+
"body[data-dsh-claude-style] .dsh-claude-ban *,",
|
|
2585
|
+
"body[data-dsh-claude-style] .dsh-claude-ban *::before,",
|
|
2586
|
+
"body[data-dsh-claude-style] .dsh-claude-ban *::after {",
|
|
2587
|
+
" box-sizing: border-box;",
|
|
2588
|
+
"}",
|
|
2589
|
+
"",
|
|
2590
|
+
"body[data-dsh-claude-style] .dsh-claude-ban svg {",
|
|
2591
|
+
" display: block;",
|
|
2592
|
+
" width: 100%;",
|
|
2593
|
+
" height: 100%;",
|
|
2594
|
+
"}",
|
|
2595
|
+
"",
|
|
2596
|
+
"/* ---------- top bar: brand lockup, sign out, window controls ---------- */",
|
|
2597
|
+
"/* The bar sits 30px down from the window edge: it reproduces the shipped app's",
|
|
2598
|
+
" own titlebar row, which the real Claude page keeps clear of. */",
|
|
2599
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-bar {",
|
|
2600
|
+
" display: flex;",
|
|
2601
|
+
" align-items: center;",
|
|
2602
|
+
" justify-content: space-between;",
|
|
2603
|
+
" gap: 16px;",
|
|
2604
|
+
" padding: 40px 8px 10px 44px;",
|
|
2605
|
+
"}",
|
|
2606
|
+
"",
|
|
2607
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-brand {",
|
|
2608
|
+
" display: flex;",
|
|
2609
|
+
" align-items: center;",
|
|
2610
|
+
" gap: 8px;",
|
|
2611
|
+
" color: var(--dsh-ban-word);",
|
|
2612
|
+
"}",
|
|
2613
|
+
"",
|
|
2614
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-mark {",
|
|
2615
|
+
" flex: none;",
|
|
2616
|
+
" width: 21px;",
|
|
2617
|
+
" height: 21px;",
|
|
2618
|
+
" background-color: var(--dsh-ban-mark);",
|
|
2619
|
+
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20148.09%20148.18'%3E%3Cg%20transform%3D'translate(-75.96%2C-223.53)'%3E%3Cpath%20d%3D'm%20105.01%2C322.07%2029.14%2C-16.35%200.49%2C-1.42%20-0.49%2C-0.79%20h%20-1.42%20l%20-4.87%2C-0.3%20-16.65%2C-0.45%20-14.44%2C-0.6%20-13.99%2C-0.75%20-3.52%2C-0.75%20-3.3%2C-4.35%200.34%2C-2.17%202.96%2C-1.99%204.24%2C0.37%209.37%2C0.64%2014.06%2C0.97%2010.2%2C0.6%2015.11%2C1.57%20h%202.4%20l%200.34%2C-0.97%20-0.82%2C-0.6%20-0.64%2C-0.6%20-14.55%2C-9.86%20-15.75%2C-10.42%20-8.25%2C-6%20-4.46%2C-3.04%20-2.25%2C-2.85%20-0.97%2C-6.22%204.05%2C-4.46%205.44%2C0.37%201.39%2C0.37%205.51%2C4.24%2011.77%2C9.11%2015.37%2C11.32%202.25%2C1.87%200.9%2C-0.64%200.11%2C-0.45%20-1.01%2C-1.69%20-8.36%2C-15.11%20-8.92%2C-15.37%20-3.97%2C-6.37%20-1.05%2C-3.82%20c%20-0.37%2C-1.57%20-0.64%2C-2.89%20-0.64%2C-4.5%20l%204.61%2C-6.26%202.55%2C-0.82%206.15%2C0.82%202.59%2C2.25%203.82%2C8.74%206.19%2C13.76%209.6%2C18.71%202.81%2C5.55%201.5%2C5.14%200.56%2C1.57%20h%200.97%20v%20-0.9%20l%200.79%2C-10.54%201.46%2C-12.94%201.42%2C-16.65%200.49%2C-4.69%202.32%2C-5.62%204.61%2C-3.04%203.6%2C1.72%202.96%2C4.24%20-0.41%2C2.74%20-1.76%2C11.44%20-3.45%2C17.92%20-2.25%2C12%20h%201.31%20l%201.5%2C-1.5%206.07%2C-8.06%2010.2%2C-12.75%204.5%2C-5.06%205.25%2C-5.59%203.37%2C-2.66%20h%206.37%20l%204.69%2C6.97%20-2.1%2C7.2%20-6.56%2C8.32%20-5.44%2C7.05%20-7.8%2C10.5%20-4.87%2C8.4%200.45%2C0.67%201.16%2C-0.11%2017.62%2C-3.75%209.52%2C-1.72%2011.36%2C-1.95%205.14%2C2.4%200.56%2C2.44%20-2.02%2C4.99%20-12.15%2C3%20-14.25%2C2.85%20-21.22%2C5.02%20-0.26%2C0.19%200.3%2C0.37%209.56%2C0.9%204.09%2C0.22%20h%2010.01%20l%2018.64%2C1.39%204.87%2C3.22%202.92%2C3.94%20-0.49%2C3%20-7.5%2C3.82%20-10.12%2C-2.4%20-23.62%2C-5.62%20-8.1%2C-2.02%20h%20-1.12%20v%200.67%20l%206.75%2C6.6%2012.37%2C11.17%2015.49%2C14.4%200.79%2C3.56%20-1.99%2C2.81%20-2.1%2C-0.3%20-13.61%2C-10.24%20-5.25%2C-4.61%20-11.89%2C-10.01%20h%20-0.79%20v%201.05%20l%202.74%2C4.01%2014.47%2C21.75%200.75%2C6.67%20-1.05%2C2.17%20-3.75%2C1.31%20-4.12%2C-0.75%20-8.47%2C-11.89%20-8.74%2C-13.39%20-7.05%2C-12%20-0.86%2C0.49%20-4.16%2C44.81%20-1.95%2C2.29%20-4.5%2C1.72%20-3.75%2C-2.85%20-1.99%2C-4.61%201.99%2C-9.11%202.4%2C-11.89%201.95%2C-9.45%201.76%2C-11.74%201.05%2C-3.9%20-0.07%2C-0.26%20-0.86%2C0.11%20-8.85%2C12.15%20-13.46%2C18.19%20-10.65%2C11.4%20-2.55%2C1.01%20-4.42%2C-2.29%200.41%2C-4.09%202.47%2C-3.64%2014.74%2C-18.75%208.89%2C-11.62%205.74%2C-6.71%20-0.04%2C-0.97%20h%20-0.34%20l%20-39.15%2C25.42%20-6.97%2C0.9%20-3%2C-2.81%200.37%2C-4.61%201.42%2C-1.5%2011.77%2C-8.1%20-0.04%2C0.04%20z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2620
|
+
" mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20148.09%20148.18'%3E%3Cg%20transform%3D'translate(-75.96%2C-223.53)'%3E%3Cpath%20d%3D'm%20105.01%2C322.07%2029.14%2C-16.35%200.49%2C-1.42%20-0.49%2C-0.79%20h%20-1.42%20l%20-4.87%2C-0.3%20-16.65%2C-0.45%20-14.44%2C-0.6%20-13.99%2C-0.75%20-3.52%2C-0.75%20-3.3%2C-4.35%200.34%2C-2.17%202.96%2C-1.99%204.24%2C0.37%209.37%2C0.64%2014.06%2C0.97%2010.2%2C0.6%2015.11%2C1.57%20h%202.4%20l%200.34%2C-0.97%20-0.82%2C-0.6%20-0.64%2C-0.6%20-14.55%2C-9.86%20-15.75%2C-10.42%20-8.25%2C-6%20-4.46%2C-3.04%20-2.25%2C-2.85%20-0.97%2C-6.22%204.05%2C-4.46%205.44%2C0.37%201.39%2C0.37%205.51%2C4.24%2011.77%2C9.11%2015.37%2C11.32%202.25%2C1.87%200.9%2C-0.64%200.11%2C-0.45%20-1.01%2C-1.69%20-8.36%2C-15.11%20-8.92%2C-15.37%20-3.97%2C-6.37%20-1.05%2C-3.82%20c%20-0.37%2C-1.57%20-0.64%2C-2.89%20-0.64%2C-4.5%20l%204.61%2C-6.26%202.55%2C-0.82%206.15%2C0.82%202.59%2C2.25%203.82%2C8.74%206.19%2C13.76%209.6%2C18.71%202.81%2C5.55%201.5%2C5.14%200.56%2C1.57%20h%200.97%20v%20-0.9%20l%200.79%2C-10.54%201.46%2C-12.94%201.42%2C-16.65%200.49%2C-4.69%202.32%2C-5.62%204.61%2C-3.04%203.6%2C1.72%202.96%2C4.24%20-0.41%2C2.74%20-1.76%2C11.44%20-3.45%2C17.92%20-2.25%2C12%20h%201.31%20l%201.5%2C-1.5%206.07%2C-8.06%2010.2%2C-12.75%204.5%2C-5.06%205.25%2C-5.59%203.37%2C-2.66%20h%206.37%20l%204.69%2C6.97%20-2.1%2C7.2%20-6.56%2C8.32%20-5.44%2C7.05%20-7.8%2C10.5%20-4.87%2C8.4%200.45%2C0.67%201.16%2C-0.11%2017.62%2C-3.75%209.52%2C-1.72%2011.36%2C-1.95%205.14%2C2.4%200.56%2C2.44%20-2.02%2C4.99%20-12.15%2C3%20-14.25%2C2.85%20-21.22%2C5.02%20-0.26%2C0.19%200.3%2C0.37%209.56%2C0.9%204.09%2C0.22%20h%2010.01%20l%2018.64%2C1.39%204.87%2C3.22%202.92%2C3.94%20-0.49%2C3%20-7.5%2C3.82%20-10.12%2C-2.4%20-23.62%2C-5.62%20-8.1%2C-2.02%20h%20-1.12%20v%200.67%20l%206.75%2C6.6%2012.37%2C11.17%2015.49%2C14.4%200.79%2C3.56%20-1.99%2C2.81%20-2.1%2C-0.3%20-13.61%2C-10.24%20-5.25%2C-4.61%20-11.89%2C-10.01%20h%20-0.79%20v%201.05%20l%202.74%2C4.01%2014.47%2C21.75%200.75%2C6.67%20-1.05%2C2.17%20-3.75%2C1.31%20-4.12%2C-0.75%20-8.47%2C-11.89%20-8.74%2C-13.39%20-7.05%2C-12%20-0.86%2C0.49%20-4.16%2C44.81%20-1.95%2C2.29%20-4.5%2C1.72%20-3.75%2C-2.85%20-1.99%2C-4.61%201.99%2C-9.11%202.4%2C-11.89%201.95%2C-9.45%201.76%2C-11.74%201.05%2C-3.9%20-0.07%2C-0.26%20-0.86%2C0.11%20-8.85%2C12.15%20-13.46%2C18.19%20-10.65%2C11.4%20-2.55%2C1.01%20-4.42%2C-2.29%200.41%2C-4.09%202.47%2C-3.64%2014.74%2C-18.75%208.89%2C-11.62%205.74%2C-6.71%20-0.04%2C-0.97%20h%20-0.34%20l%20-39.15%2C25.42%20-6.97%2C0.9%20-3%2C-2.81%200.37%2C-4.61%201.42%2C-1.5%2011.77%2C-8.1%20-0.04%2C0.04%20z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2621
|
+
"}",
|
|
2622
|
+
"",
|
|
2623
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-word {",
|
|
2624
|
+
" flex: none;",
|
|
2625
|
+
" width: 89px;",
|
|
2626
|
+
" height: 21px;",
|
|
2627
|
+
" background-color: var(--dsh-ban-word);",
|
|
2628
|
+
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'177.76%2014.09%20512.22%20121.54'%3E%3Cg%20transform%3D'translate(-75.96%2C-223.53)'%3E%3Cpath%20d%3D'm%20317.73%2C349.33%20c%20-18.82%2C0%20-31.69%2C-10.5%20-37.76%2C-26.66%20-3.17%2C-8.42%20-4.74%2C-17.36%20-4.61%2C-26.36%200%2C-27.11%2012.15%2C-45.94%2039%2C-45.94%2018.04%2C0%2029.17%2C7.87%2035.51%2C26.66%20h%207.72%20l%20-1.05%2C-25.91%20c%20-10.8%2C-6.97%20-24.3%2C-10.5%20-40.72%2C-10.5%20-23.14%2C0%20-42.82%2C10.35%20-53.77%2C29.02%20-5.66%2C9.86%20-8.53%2C21.07%20-8.32%2C32.44%200%2C20.74%209.79%2C39.11%2028.16%2C49.31%2010.06%2C5.37%2021.34%2C8.04%2032.74%2C7.72%2017.92%2C0%2032.14%2C-3.41%2044.74%2C-9.37%20l%203.26%2C-28.57%20h%20-7.87%20c%20-4.72%2C13.05%20-10.35%2C20.89%20-19.69%2C25.05%20-4.57%2C2.06%20-10.35%2C3.11%20-17.32%2C3.11%20z%20m%2081.18%2C-98.96%200.75%2C-12.75%20h%20-5.32%20l%20-23.7%2C7.12%20v%203.86%20l%2010.5%2C4.87%20v%2089.17%20c%200%2C6.07%20-3.11%2C7.42%20-11.25%2C8.44%20v%206.52%20h%2040.31%20v%20-6.52%20c%20-8.17%2C-1.01%20-11.25%2C-2.36%20-11.25%2C-8.44%20V%20250.4%20l%20-0.04%2C-0.04%20z%20m%20160.31%2C108.75%20h%203.11%20l%2027.26%2C-5.17%20v%20-6.67%20l%20-3.82%2C-0.3%20c%20-6.37%2C-0.6%20-8.02%2C-1.91%20-8.02%2C-7.12%20v%20-47.55%20l%200.75%2C-15.26%20h%20-4.31%20l%20-25.76%2C3.71%20v%206.52%20l%202.51%2C0.45%20c%206.97%2C1.01%209.04%2C2.96%209.04%2C7.84%20v%2042.37%20c%20-6.67%2C5.17%20-13.05%2C8.44%20-20.62%2C8.44%20-8.4%2C0%20-13.61%2C-4.27%20-13.61%2C-14.25%20v%20-39.79%20l%200.75%2C-15.26%20h%20-4.42%20l%20-25.8%2C3.71%20v%206.52%20l%202.66%2C0.45%20c%206.97%2C1.01%209.04%2C2.96%209.04%2C7.84%20v%2039.11%20c%200%2C16.57%209.37%2C24.45%2024.3%2C24.45%2011.4%2C0%2020.74%2C-6.07%2027.75%2C-14.51%20l%20-0.75%2C14.51%20-0.04%2C-0.04%20z%20M%20484.3%2C306.36%20c%200%2C-21.19%20-11.25%2C-29.32%20-31.57%2C-29.32%20-17.92%2C0%20-30.94%2C7.42%20-30.94%2C19.72%200%2C3.67%201.31%2C6.49%203.97%2C8.44%20l%2013.65%2C-1.8%20c%20-0.6%2C-4.12%20-0.9%2C-6.64%20-0.9%2C-7.69%200%2C-6.97%203.71%2C-10.5%2011.25%2C-10.5%2011.14%2C0%2016.76%2C7.84%2016.76%2C20.44%20v%204.12%20l%20-28.12%2C8.44%20c%20-9.37%2C2.55%20-14.7%2C4.76%20-18.26%2C9.94%20-1.89%2C3.17%20-2.8%2C6.82%20-2.62%2C10.5%200%2C12%208.25%2C20.47%2022.35%2C20.47%2010.2%2C0%2019.24%2C-4.61%2027.11%2C-13.35%202.81%2C8.74%207.12%2C13.35%2014.81%2C13.35%206.22%2C0%2011.85%2C-2.51%2016.87%2C-7.42%20l%20-1.5%2C-5.17%20c%20-2.17%2C0.6%20-4.27%2C0.9%20-6.49%2C0.9%20-4.31%2C0%20-6.37%2C-3.41%20-6.37%2C-10.09%20v%20-30.97%20z%20m%20-36%2C40.76%20c%20-7.69%2C0%20-12.45%2C-4.46%20-12.45%2C-12.3%200%2C-5.32%202.51%2C-8.44%207.87%2C-10.24%20l%2022.8%2C-7.24%20v%2021.9%20c%20-7.27%2C5.51%20-11.55%2C7.87%20-18.22%2C7.87%20z%20m%20237.36%2C6.82%20v%20-6.67%20l%20-3.86%2C-0.3%20c%20-6.37%2C-0.6%20-7.99%2C-1.91%20-7.99%2C-7.12%20v%20-89.47%20l%200.75%2C-12.75%20h%20-5.36%20l%20-23.7%2C7.12%20v%203.86%20l%2010.5%2C4.87%20v%2029.32%20c%20-5.91%2C-4.05%20-12.98%2C-6.08%20-20.14%2C-5.77%20-23.55%2C0%20-41.92%2C17.92%20-41.92%2C44.74%200%2C22.09%2013.2%2C37.35%2034.95%2C37.35%2011.25%2C0%2021.04%2C-5.47%2027.11%2C-13.95%20l%20-0.75%2C13.95%20h%203.15%20l%2027.26%2C-5.17%20v%200%20z%20m%20-49.35%2C-68.02%20c%2011.25%2C0%2019.69%2C6.52%2019.69%2C18.52%20v%2033.75%20c%20-5.18%2C5.16%20-12.23%2C8%20-19.54%2C7.87%20-16.12%2C0%20-24.3%2C-12.75%20-24.3%2C-29.77%200%2C-19.12%209.34%2C-30.37%2024.15%2C-30.37%20z%20M%20743.3%2C302.8%20c%20-2.1%2C-9.9%20-8.17%2C-15.52%20-16.61%2C-15.52%20-12.6%2C0%20-21.34%2C9.49%20-21.34%2C23.1%200%2C20.14%2010.65%2C33.19%2027.86%2C33.19%2011.48%2C-0.12%2022.04%2C-6.33%2027.71%2C-16.31%20l%205.02%2C1.35%20c%20-2.25%2C17.47%20-18.07%2C30.52%20-37.5%2C30.52%20-22.8%2C0%20-38.51%2C-16.87%20-38.51%2C-40.87%200%2C-24%2017.06%2C-41.21%2039.86%2C-41.21%2017.02%2C0%2029.02%2C10.24%2032.89%2C28.01%20l%20-59.4%2C18.22%20v%20-8.02%20l%2040.01%2C-12.41%20v%20-0.04%20z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2629
|
+
" mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'177.76%2014.09%20512.22%20121.54'%3E%3Cg%20transform%3D'translate(-75.96%2C-223.53)'%3E%3Cpath%20d%3D'm%20317.73%2C349.33%20c%20-18.82%2C0%20-31.69%2C-10.5%20-37.76%2C-26.66%20-3.17%2C-8.42%20-4.74%2C-17.36%20-4.61%2C-26.36%200%2C-27.11%2012.15%2C-45.94%2039%2C-45.94%2018.04%2C0%2029.17%2C7.87%2035.51%2C26.66%20h%207.72%20l%20-1.05%2C-25.91%20c%20-10.8%2C-6.97%20-24.3%2C-10.5%20-40.72%2C-10.5%20-23.14%2C0%20-42.82%2C10.35%20-53.77%2C29.02%20-5.66%2C9.86%20-8.53%2C21.07%20-8.32%2C32.44%200%2C20.74%209.79%2C39.11%2028.16%2C49.31%2010.06%2C5.37%2021.34%2C8.04%2032.74%2C7.72%2017.92%2C0%2032.14%2C-3.41%2044.74%2C-9.37%20l%203.26%2C-28.57%20h%20-7.87%20c%20-4.72%2C13.05%20-10.35%2C20.89%20-19.69%2C25.05%20-4.57%2C2.06%20-10.35%2C3.11%20-17.32%2C3.11%20z%20m%2081.18%2C-98.96%200.75%2C-12.75%20h%20-5.32%20l%20-23.7%2C7.12%20v%203.86%20l%2010.5%2C4.87%20v%2089.17%20c%200%2C6.07%20-3.11%2C7.42%20-11.25%2C8.44%20v%206.52%20h%2040.31%20v%20-6.52%20c%20-8.17%2C-1.01%20-11.25%2C-2.36%20-11.25%2C-8.44%20V%20250.4%20l%20-0.04%2C-0.04%20z%20m%20160.31%2C108.75%20h%203.11%20l%2027.26%2C-5.17%20v%20-6.67%20l%20-3.82%2C-0.3%20c%20-6.37%2C-0.6%20-8.02%2C-1.91%20-8.02%2C-7.12%20v%20-47.55%20l%200.75%2C-15.26%20h%20-4.31%20l%20-25.76%2C3.71%20v%206.52%20l%202.51%2C0.45%20c%206.97%2C1.01%209.04%2C2.96%209.04%2C7.84%20v%2042.37%20c%20-6.67%2C5.17%20-13.05%2C8.44%20-20.62%2C8.44%20-8.4%2C0%20-13.61%2C-4.27%20-13.61%2C-14.25%20v%20-39.79%20l%200.75%2C-15.26%20h%20-4.42%20l%20-25.8%2C3.71%20v%206.52%20l%202.66%2C0.45%20c%206.97%2C1.01%209.04%2C2.96%209.04%2C7.84%20v%2039.11%20c%200%2C16.57%209.37%2C24.45%2024.3%2C24.45%2011.4%2C0%2020.74%2C-6.07%2027.75%2C-14.51%20l%20-0.75%2C14.51%20-0.04%2C-0.04%20z%20M%20484.3%2C306.36%20c%200%2C-21.19%20-11.25%2C-29.32%20-31.57%2C-29.32%20-17.92%2C0%20-30.94%2C7.42%20-30.94%2C19.72%200%2C3.67%201.31%2C6.49%203.97%2C8.44%20l%2013.65%2C-1.8%20c%20-0.6%2C-4.12%20-0.9%2C-6.64%20-0.9%2C-7.69%200%2C-6.97%203.71%2C-10.5%2011.25%2C-10.5%2011.14%2C0%2016.76%2C7.84%2016.76%2C20.44%20v%204.12%20l%20-28.12%2C8.44%20c%20-9.37%2C2.55%20-14.7%2C4.76%20-18.26%2C9.94%20-1.89%2C3.17%20-2.8%2C6.82%20-2.62%2C10.5%200%2C12%208.25%2C20.47%2022.35%2C20.47%2010.2%2C0%2019.24%2C-4.61%2027.11%2C-13.35%202.81%2C8.74%207.12%2C13.35%2014.81%2C13.35%206.22%2C0%2011.85%2C-2.51%2016.87%2C-7.42%20l%20-1.5%2C-5.17%20c%20-2.17%2C0.6%20-4.27%2C0.9%20-6.49%2C0.9%20-4.31%2C0%20-6.37%2C-3.41%20-6.37%2C-10.09%20v%20-30.97%20z%20m%20-36%2C40.76%20c%20-7.69%2C0%20-12.45%2C-4.46%20-12.45%2C-12.3%200%2C-5.32%202.51%2C-8.44%207.87%2C-10.24%20l%2022.8%2C-7.24%20v%2021.9%20c%20-7.27%2C5.51%20-11.55%2C7.87%20-18.22%2C7.87%20z%20m%20237.36%2C6.82%20v%20-6.67%20l%20-3.86%2C-0.3%20c%20-6.37%2C-0.6%20-7.99%2C-1.91%20-7.99%2C-7.12%20v%20-89.47%20l%200.75%2C-12.75%20h%20-5.36%20l%20-23.7%2C7.12%20v%203.86%20l%2010.5%2C4.87%20v%2029.32%20c%20-5.91%2C-4.05%20-12.98%2C-6.08%20-20.14%2C-5.77%20-23.55%2C0%20-41.92%2C17.92%20-41.92%2C44.74%200%2C22.09%2013.2%2C37.35%2034.95%2C37.35%2011.25%2C0%2021.04%2C-5.47%2027.11%2C-13.95%20l%20-0.75%2C13.95%20h%203.15%20l%2027.26%2C-5.17%20v%200%20z%20m%20-49.35%2C-68.02%20c%2011.25%2C0%2019.69%2C6.52%2019.69%2C18.52%20v%2033.75%20c%20-5.18%2C5.16%20-12.23%2C8%20-19.54%2C7.87%20-16.12%2C0%20-24.3%2C-12.75%20-24.3%2C-29.77%200%2C-19.12%209.34%2C-30.37%2024.15%2C-30.37%20z%20M%20743.3%2C302.8%20c%20-2.1%2C-9.9%20-8.17%2C-15.52%20-16.61%2C-15.52%20-12.6%2C0%20-21.34%2C9.49%20-21.34%2C23.1%200%2C20.14%2010.65%2C33.19%2027.86%2C33.19%2011.48%2C-0.12%2022.04%2C-6.33%2027.71%2C-16.31%20l%205.02%2C1.35%20c%20-2.25%2C17.47%20-18.07%2C30.52%20-37.5%2C30.52%20-22.8%2C0%20-38.51%2C-16.87%20-38.51%2C-40.87%200%2C-24%2017.06%2C-41.21%2039.86%2C-41.21%2017.02%2C0%2029.02%2C10.24%2032.89%2C28.01%20l%20-59.4%2C18.22%20v%20-8.02%20l%2040.01%2C-12.41%20v%20-0.04%20z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2630
|
+
"}",
|
|
2631
|
+
"",
|
|
2632
|
+
"/* The brand preference applies here too: Anthropic swaps both marks, and \"off\"",
|
|
2633
|
+
" keeps the Claude lockup with the starburst dropped (a bare text wordmark is",
|
|
2634
|
+
" exactly what this page is). */",
|
|
2635
|
+
"body[data-dsh-claude-style][data-dsh-claude-brand=\"anthropic\"] .dsh-claude-ban-mark {",
|
|
2636
|
+
" width: 30px;",
|
|
2637
|
+
" background-color: var(--dsh-ban-word);",
|
|
2638
|
+
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2046%2032'%3E%3Cpath%20d%3D'M32.73%200H25.7846L38.4499%2032H45.3953L32.73%200Z'%2F%3E%3Cpath%20d%3D'M12.6653%200L0%2032H7.08167L9.67193%2025.28H22.9219L25.5122%2032H32.5939L19.9286%200H12.6653ZM11.9626%2019.3371L16.2969%208.09143L20.6313%2019.3371H11.9626Z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2639
|
+
" mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2046%2032'%3E%3Cpath%20d%3D'M32.73%200H25.7846L38.4499%2032H45.3953L32.73%200Z'%2F%3E%3Cpath%20d%3D'M12.6653%200L0%2032H7.08167L9.67193%2025.28H22.9219L25.5122%2032H32.5939L19.9286%200H12.6653ZM11.9626%2019.3371L16.2969%208.09143L20.6313%2019.3371H11.9626Z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2640
|
+
"}",
|
|
2641
|
+
"",
|
|
2642
|
+
"body[data-dsh-claude-style][data-dsh-claude-brand=\"anthropic\"] .dsh-claude-ban-word {",
|
|
2643
|
+
" width: 188px;",
|
|
2644
|
+
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20143%2016'%3E%3Cpath%20transform%3D'translate(18.299999237060547%2C0.27000001072883606)'%20d%3D'%20M10.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%203.756195545196533%2C0%203.756195545196533%2C0%20C3.756195545196533%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%20C3.2038140296936035%2C15.470022201538086%203.2038140296936035%2C4.6410064697265625%203.2038140296936035%2C4.6410064697265625%20C3.2038140296936035%2C4.6410064697265625%2010.163809776306152%2C15.470022201538086%2010.163809776306152%2C15.470022201538086%20C10.163809776306152%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.716191291809082%2C0%2010.716191291809082%2C0%20C10.716191291809082%2C0%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777z'%2F%3E%3Cpath%20transform%3D'translate(34.869998931884766%2C0.27000001072883606)'%20d%3D'%20M0%2C2.983504056930542%20C0%2C2.983504056930542%205.19273567199707%2C2.983504056930542%205.19273567199707%2C2.983504056930542%20C5.19273567199707%2C2.983504056930542%205.19273567199707%2C15.470022201538086%205.19273567199707%2C15.470022201538086%20C5.19273567199707%2C15.470022201538086%208.507256507873535%2C15.470022201538086%208.507256507873535%2C15.470022201538086%20C8.507256507873535%2C15.470022201538086%208.507256507873535%2C2.983504056930542%208.507256507873535%2C2.983504056930542%20C8.507256507873535%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%20C13.700006484985352%2C2.983504056930542%2013.700006484985352%2C0%2013.700006484985352%2C0%20C13.700006484985352%2C0%200%2C0%200%2C0%20C0%2C0%200%2C2.983504056930542%200%2C2.983504056930542%20C0%2C2.983504056930542%200%2C2.983504056930542%200%2C2.983504056930542z'%2F%3E%3Cpath%20transform%3D'translate(51.22999954223633%2C0.27000001072883606)'%20d%3D'%20M10.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%20C3.3142902851104736%2C6.165900230407715%203.3142902851104736%2C0%203.3142902851104736%2C0%20C3.3142902851104736%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%20C3.3142902851104736%2C15.470022201538086%203.3142902851104736%2C9.149404525756836%203.3142902851104736%2C9.149404525756836%20C3.3142902851104736%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%20C10.605714797973633%2C9.149404525756836%2010.605714797973633%2C15.470022201538086%2010.605714797973633%2C15.470022201538086%20C10.605714797973633%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.605714797973633%2C0%2010.605714797973633%2C0%20C10.605714797973633%2C0%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715z'%2F%3E%3Cpath%20transform%3D'translate(69.23999786376953%2C0.27000001072883606)'%20d%3D'%20M3.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%207.403865814208984%2C2.983504056930542%207.403865814208984%2C2.983504056930542%20C9.03934097290039%2C2.983504056930542%209.901290893554688%2C3.5801939964294434%209.901290893554688%2C4.707304000854492%20C9.901290893554688%2C5.834399700164795%209.03934097290039%2C6.431103706359863%207.403865814208984%2C6.431103706359863%20C7.403865814208984%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%20C3.3151700496673584%2C6.431103706359863%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542z%20M13.216461181640625%2C4.707304000854492%20C13.216461181640625%2C1.7900969982147217%2011.072648048400879%2C0%207.558576583862305%2C0%20C7.558576583862305%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%20C3.3151700496673584%2C15.470022201538086%203.3151700496673584%2C9.414593696594238%203.3151700496673584%2C9.414593696594238%20C3.3151700496673584%2C9.414593696594238%207.005825519561768%2C9.414593696594238%207.005825519561768%2C9.414593696594238%20C7.005825519561768%2C9.414593696594238%2010.321218490600586%2C15.470022201538086%2010.321218490600586%2C15.470022201538086%20C10.321218490600586%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%20C13.990056991577148%2C15.470022201538086%2010.319005966186523%2C8.953378677368164%2010.319005966186523%2C8.953378677368164%20C12.161579132080078%2C8.245061874389648%2013.216461181640625%2C6.753532409667969%2013.216461181640625%2C4.707304000854492%20C13.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492z'%2F%3E%3Cpath%20transform%3D'translate(84.98999786376953%2C0)'%20d%3D'%20M7.622087478637695%2C12.906073570251465%20C5.015110492706299%2C12.906073570251465%203.4244225025177%2C11.049725532531738%203.4244225025177%2C8.022093772888184%20C3.4244225025177%2C4.95027494430542%205.015110492706299%2C3.0939269065856934%207.622087478637695%2C3.0939269065856934%20C10.206976890563965%2C3.0939269065856934%2011.775577545166016%2C4.95027494430542%2011.775577545166016%2C8.022093772888184%20C11.775577545166016%2C11.049725532531738%2010.206976890563965%2C12.906073570251465%207.622087478637695%2C12.906073570251465%20C7.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465z%20M7.622087478637695%2C0%20C3.1593029499053955%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1593029499053955%2C16%207.622087478637695%2C16%20C12.062784194946289%2C16%2015.200028419494629%2C12.685078620910645%2015.200028419494629%2C8.022093772888184%20C15.200028419494629%2C3.3149218559265137%2012.062784194946289%2C0%207.622087478637695%2C0%20C7.622087478637695%2C0%207.622087478637695%2C0%207.622087478637695%2C0z'%2F%3E%3Cpath%20transform%3D'translate(103.29000091552734%2C0.27000001072883606)'%20d%3D'%20M7.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%20C3.3160574436187744%2C6.873104095458984%203.3160574436187744%2C2.983504056930542%203.3160574436187744%2C2.983504056930542%20C3.3160574436187744%2C2.983504056930542%207.405848026275635%2C2.983504056930542%207.405848026275635%2C2.983504056930542%20C9.04176139831543%2C2.983504056930542%209.90394115447998%2C3.646505117416382%209.90394115447998%2C4.928304195404053%20C9.90394115447998%2C6.2101030349731445%209.04176139831543%2C6.873104095458984%207.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984z%20M7.5605998039245605%2C0%20C7.5605998039245605%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%20C3.3160574436187744%2C15.470022201538086%203.3160574436187744%2C9.85659408569336%203.3160574436187744%2C9.85659408569336%20C3.3160574436187744%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%20C11.07561206817627%2C9.85659408569336%2013.219999313354492%2C8.000200271606445%2013.219999313354492%2C4.928304195404053%20C13.219999313354492%2C1.8563942909240723%2011.07561206817627%2C0%207.5605998039245605%2C0%20C7.5605998039245605%2C0%207.5605998039245605%2C0%207.5605998039245605%2C0z'%2F%3E%3Cpath%20transform%3D'translate(128.0399932861328%2C0)'%20d%3D'%20M10.914844512939453%2C10.5414400100708%20C10.340370178222656%2C12.044201850891113%209.191434860229492%2C12.906073570251465%207.622706890106201%2C12.906073570251465%20C5.0155181884765625%2C12.906073570251465%203.4246866703033447%2C11.049725532531738%203.4246866703033447%2C8.022093772888184%20C3.4246866703033447%2C4.95027494430542%205.0155181884765625%2C3.0939269065856934%207.622706890106201%2C3.0939269065856934%20C9.191434860229492%2C3.0939269065856934%2010.340370178222656%2C3.9557981491088867%2010.914844512939453%2C5.458559989929199%20C10.914844512939453%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%20C13.566211700439453%2C2.1436522006988525%2010.981111526489258%2C0%207.622706890106201%2C0%20C3.1595458984375%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1595458984375%2C16%207.622706890106201%2C16%20C11.003214836120605%2C16%2013.588300704956055%2C13.834254264831543%2014.449976921081543%2C10.5414400100708%20C14.449976921081543%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%20C10.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708z'%2F%3E%3Cpath%20transform%3D'translate(117.83000183105469%2C0.27000001072883606)'%20d%3D'%20M0%2C0%20C0%2C0%206.1677093505859375%2C15.470022201538086%206.1677093505859375%2C15.470022201538086%20C6.1677093505859375%2C15.470022201538086%209.550004005432129%2C15.470022201538086%209.550004005432129%2C15.470022201538086%20C9.550004005432129%2C15.470022201538086%203.382294178009033%2C0%203.382294178009033%2C0%20C3.382294178009033%2C0%200%2C0%200%2C0%20C0%2C0%200%2C0%200%2C0z'%2F%3E%3Cpath%20transform%3D'translate(0%2C0.27000001072883606)'%20d%3D'%20M5.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%207.93500280380249%2C3.911694288253784%207.93500280380249%2C3.911694288253784%20C7.93500280380249%2C3.911694288253784%2010.045400619506836%2C9.348296165466309%2010.045400619506836%2C9.348296165466309%20C10.045400619506836%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309z%20M6.166755199432373%2C0%20C6.166755199432373%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%20C3.4480772018432617%2C15.470022201538086%204.709278583526611%2C12.22130012512207%204.709278583526611%2C12.22130012512207%20C4.709278583526611%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%20C11.16093635559082%2C12.22130012512207%2012.421928405761719%2C15.470022201538086%2012.421928405761719%2C15.470022201538086%20C12.421928405761719%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%20C15.87000560760498%2C15.470022201538086%209.703250885009766%2C0%209.703250885009766%2C0%20C9.703250885009766%2C0%206.166755199432373%2C0%206.166755199432373%2C0%20C6.166755199432373%2C0%206.166755199432373%2C0%206.166755199432373%2C0z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2645
|
+
" mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20143%2016'%3E%3Cpath%20transform%3D'translate(18.299999237060547%2C0.27000001072883606)'%20d%3D'%20M10.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%203.756195545196533%2C0%203.756195545196533%2C0%20C3.756195545196533%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%20C3.2038140296936035%2C15.470022201538086%203.2038140296936035%2C4.6410064697265625%203.2038140296936035%2C4.6410064697265625%20C3.2038140296936035%2C4.6410064697265625%2010.163809776306152%2C15.470022201538086%2010.163809776306152%2C15.470022201538086%20C10.163809776306152%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.716191291809082%2C0%2010.716191291809082%2C0%20C10.716191291809082%2C0%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777z'%2F%3E%3Cpath%20transform%3D'translate(34.869998931884766%2C0.27000001072883606)'%20d%3D'%20M0%2C2.983504056930542%20C0%2C2.983504056930542%205.19273567199707%2C2.983504056930542%205.19273567199707%2C2.983504056930542%20C5.19273567199707%2C2.983504056930542%205.19273567199707%2C15.470022201538086%205.19273567199707%2C15.470022201538086%20C5.19273567199707%2C15.470022201538086%208.507256507873535%2C15.470022201538086%208.507256507873535%2C15.470022201538086%20C8.507256507873535%2C15.470022201538086%208.507256507873535%2C2.983504056930542%208.507256507873535%2C2.983504056930542%20C8.507256507873535%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%20C13.700006484985352%2C2.983504056930542%2013.700006484985352%2C0%2013.700006484985352%2C0%20C13.700006484985352%2C0%200%2C0%200%2C0%20C0%2C0%200%2C2.983504056930542%200%2C2.983504056930542%20C0%2C2.983504056930542%200%2C2.983504056930542%200%2C2.983504056930542z'%2F%3E%3Cpath%20transform%3D'translate(51.22999954223633%2C0.27000001072883606)'%20d%3D'%20M10.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%20C3.3142902851104736%2C6.165900230407715%203.3142902851104736%2C0%203.3142902851104736%2C0%20C3.3142902851104736%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%20C3.3142902851104736%2C15.470022201538086%203.3142902851104736%2C9.149404525756836%203.3142902851104736%2C9.149404525756836%20C3.3142902851104736%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%20C10.605714797973633%2C9.149404525756836%2010.605714797973633%2C15.470022201538086%2010.605714797973633%2C15.470022201538086%20C10.605714797973633%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.605714797973633%2C0%2010.605714797973633%2C0%20C10.605714797973633%2C0%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715z'%2F%3E%3Cpath%20transform%3D'translate(69.23999786376953%2C0.27000001072883606)'%20d%3D'%20M3.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%207.403865814208984%2C2.983504056930542%207.403865814208984%2C2.983504056930542%20C9.03934097290039%2C2.983504056930542%209.901290893554688%2C3.5801939964294434%209.901290893554688%2C4.707304000854492%20C9.901290893554688%2C5.834399700164795%209.03934097290039%2C6.431103706359863%207.403865814208984%2C6.431103706359863%20C7.403865814208984%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%20C3.3151700496673584%2C6.431103706359863%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542z%20M13.216461181640625%2C4.707304000854492%20C13.216461181640625%2C1.7900969982147217%2011.072648048400879%2C0%207.558576583862305%2C0%20C7.558576583862305%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%20C3.3151700496673584%2C15.470022201538086%203.3151700496673584%2C9.414593696594238%203.3151700496673584%2C9.414593696594238%20C3.3151700496673584%2C9.414593696594238%207.005825519561768%2C9.414593696594238%207.005825519561768%2C9.414593696594238%20C7.005825519561768%2C9.414593696594238%2010.321218490600586%2C15.470022201538086%2010.321218490600586%2C15.470022201538086%20C10.321218490600586%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%20C13.990056991577148%2C15.470022201538086%2010.319005966186523%2C8.953378677368164%2010.319005966186523%2C8.953378677368164%20C12.161579132080078%2C8.245061874389648%2013.216461181640625%2C6.753532409667969%2013.216461181640625%2C4.707304000854492%20C13.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492z'%2F%3E%3Cpath%20transform%3D'translate(84.98999786376953%2C0)'%20d%3D'%20M7.622087478637695%2C12.906073570251465%20C5.015110492706299%2C12.906073570251465%203.4244225025177%2C11.049725532531738%203.4244225025177%2C8.022093772888184%20C3.4244225025177%2C4.95027494430542%205.015110492706299%2C3.0939269065856934%207.622087478637695%2C3.0939269065856934%20C10.206976890563965%2C3.0939269065856934%2011.775577545166016%2C4.95027494430542%2011.775577545166016%2C8.022093772888184%20C11.775577545166016%2C11.049725532531738%2010.206976890563965%2C12.906073570251465%207.622087478637695%2C12.906073570251465%20C7.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465z%20M7.622087478637695%2C0%20C3.1593029499053955%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1593029499053955%2C16%207.622087478637695%2C16%20C12.062784194946289%2C16%2015.200028419494629%2C12.685078620910645%2015.200028419494629%2C8.022093772888184%20C15.200028419494629%2C3.3149218559265137%2012.062784194946289%2C0%207.622087478637695%2C0%20C7.622087478637695%2C0%207.622087478637695%2C0%207.622087478637695%2C0z'%2F%3E%3Cpath%20transform%3D'translate(103.29000091552734%2C0.27000001072883606)'%20d%3D'%20M7.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%20C3.3160574436187744%2C6.873104095458984%203.3160574436187744%2C2.983504056930542%203.3160574436187744%2C2.983504056930542%20C3.3160574436187744%2C2.983504056930542%207.405848026275635%2C2.983504056930542%207.405848026275635%2C2.983504056930542%20C9.04176139831543%2C2.983504056930542%209.90394115447998%2C3.646505117416382%209.90394115447998%2C4.928304195404053%20C9.90394115447998%2C6.2101030349731445%209.04176139831543%2C6.873104095458984%207.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984z%20M7.5605998039245605%2C0%20C7.5605998039245605%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%20C3.3160574436187744%2C15.470022201538086%203.3160574436187744%2C9.85659408569336%203.3160574436187744%2C9.85659408569336%20C3.3160574436187744%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%20C11.07561206817627%2C9.85659408569336%2013.219999313354492%2C8.000200271606445%2013.219999313354492%2C4.928304195404053%20C13.219999313354492%2C1.8563942909240723%2011.07561206817627%2C0%207.5605998039245605%2C0%20C7.5605998039245605%2C0%207.5605998039245605%2C0%207.5605998039245605%2C0z'%2F%3E%3Cpath%20transform%3D'translate(128.0399932861328%2C0)'%20d%3D'%20M10.914844512939453%2C10.5414400100708%20C10.340370178222656%2C12.044201850891113%209.191434860229492%2C12.906073570251465%207.622706890106201%2C12.906073570251465%20C5.0155181884765625%2C12.906073570251465%203.4246866703033447%2C11.049725532531738%203.4246866703033447%2C8.022093772888184%20C3.4246866703033447%2C4.95027494430542%205.0155181884765625%2C3.0939269065856934%207.622706890106201%2C3.0939269065856934%20C9.191434860229492%2C3.0939269065856934%2010.340370178222656%2C3.9557981491088867%2010.914844512939453%2C5.458559989929199%20C10.914844512939453%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%20C13.566211700439453%2C2.1436522006988525%2010.981111526489258%2C0%207.622706890106201%2C0%20C3.1595458984375%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1595458984375%2C16%207.622706890106201%2C16%20C11.003214836120605%2C16%2013.588300704956055%2C13.834254264831543%2014.449976921081543%2C10.5414400100708%20C14.449976921081543%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%20C10.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708z'%2F%3E%3Cpath%20transform%3D'translate(117.83000183105469%2C0.27000001072883606)'%20d%3D'%20M0%2C0%20C0%2C0%206.1677093505859375%2C15.470022201538086%206.1677093505859375%2C15.470022201538086%20C6.1677093505859375%2C15.470022201538086%209.550004005432129%2C15.470022201538086%209.550004005432129%2C15.470022201538086%20C9.550004005432129%2C15.470022201538086%203.382294178009033%2C0%203.382294178009033%2C0%20C3.382294178009033%2C0%200%2C0%200%2C0%20C0%2C0%200%2C0%200%2C0z'%2F%3E%3Cpath%20transform%3D'translate(0%2C0.27000001072883606)'%20d%3D'%20M5.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%207.93500280380249%2C3.911694288253784%207.93500280380249%2C3.911694288253784%20C7.93500280380249%2C3.911694288253784%2010.045400619506836%2C9.348296165466309%2010.045400619506836%2C9.348296165466309%20C10.045400619506836%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309z%20M6.166755199432373%2C0%20C6.166755199432373%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%20C3.4480772018432617%2C15.470022201538086%204.709278583526611%2C12.22130012512207%204.709278583526611%2C12.22130012512207%20C4.709278583526611%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%20C11.16093635559082%2C12.22130012512207%2012.421928405761719%2C15.470022201538086%2012.421928405761719%2C15.470022201538086%20C12.421928405761719%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%20C15.87000560760498%2C15.470022201538086%209.703250885009766%2C0%209.703250885009766%2C0%20C9.703250885009766%2C0%206.166755199432373%2C0%206.166755199432373%2C0%20C6.166755199432373%2C0%206.166755199432373%2C0%206.166755199432373%2C0z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
2646
|
+
"}",
|
|
2647
|
+
"",
|
|
2648
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-bar-actions {",
|
|
2649
|
+
" display: flex;",
|
|
2650
|
+
" align-items: center;",
|
|
2651
|
+
" gap: 8px;",
|
|
2652
|
+
"}",
|
|
2653
|
+
"",
|
|
2654
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-signout {",
|
|
2655
|
+
" appearance: none;",
|
|
2656
|
+
" margin: 0;",
|
|
2657
|
+
" border: 1px solid var(--dsh-ban-hairline);",
|
|
2658
|
+
" border-radius: 8px;",
|
|
2659
|
+
" background: var(--dsh-ban-card);",
|
|
2660
|
+
" color: var(--dsh-ban-text);",
|
|
2661
|
+
" padding: 6px 14px;",
|
|
2662
|
+
" font: inherit;",
|
|
2663
|
+
" font-size: 13px;",
|
|
2664
|
+
" line-height: 18px;",
|
|
2665
|
+
" cursor: pointer;",
|
|
2666
|
+
" box-shadow: 0 1px 2px rgba(20, 20, 19, 0.05);",
|
|
2667
|
+
" transition: background-color 0.12s ease;",
|
|
2668
|
+
"}",
|
|
2669
|
+
"",
|
|
2670
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-signout:hover {",
|
|
2671
|
+
" background: var(--dsh-ban-hover);",
|
|
2672
|
+
"}",
|
|
2673
|
+
"",
|
|
2674
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-window {",
|
|
2675
|
+
" display: flex;",
|
|
2676
|
+
" align-items: center;",
|
|
2677
|
+
"}",
|
|
2678
|
+
"",
|
|
2679
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-win {",
|
|
2680
|
+
" appearance: none;",
|
|
2681
|
+
" margin: 0;",
|
|
2682
|
+
" border: 0;",
|
|
2683
|
+
" background: transparent;",
|
|
2684
|
+
" color: var(--dsh-ban-muted);",
|
|
2685
|
+
" width: 34px;",
|
|
2686
|
+
" height: 28px;",
|
|
2687
|
+
" padding: 6px;",
|
|
2688
|
+
" cursor: pointer;",
|
|
2689
|
+
" border-radius: 4px;",
|
|
2690
|
+
" transition: background-color 0.12s ease;",
|
|
2691
|
+
"}",
|
|
2692
|
+
"",
|
|
2693
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-win:hover {",
|
|
2694
|
+
" background: var(--dsh-ban-hover);",
|
|
2695
|
+
" color: var(--dsh-ban-text);",
|
|
2696
|
+
"}",
|
|
2697
|
+
"",
|
|
2698
|
+
"/* ---------- account_banned toast ---------- */",
|
|
2699
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-toast {",
|
|
2700
|
+
" position: absolute;",
|
|
2701
|
+
" top: 94px;",
|
|
2702
|
+
" right: 40px;",
|
|
2703
|
+
" display: flex;",
|
|
2704
|
+
" align-items: center;",
|
|
2705
|
+
" gap: 10px;",
|
|
2706
|
+
" max-width: 340px;",
|
|
2707
|
+
" padding: 10px 12px;",
|
|
2708
|
+
" border: 1px solid var(--dsh-ban-toast-border);",
|
|
2709
|
+
" border-radius: 12px;",
|
|
2710
|
+
" background: var(--dsh-ban-toast-bg);",
|
|
2711
|
+
" color: var(--dsh-ban-toast-text);",
|
|
2712
|
+
" font-size: 13px;",
|
|
2713
|
+
" line-height: 18px;",
|
|
2714
|
+
" cursor: pointer;",
|
|
2715
|
+
" box-shadow: 0 4px 16px rgba(20, 20, 19, 0.08);",
|
|
2716
|
+
" animation: dsh-claude-ban-toast-in 0.22s ease both;",
|
|
2717
|
+
"}",
|
|
2718
|
+
"",
|
|
2719
|
+
"@keyframes dsh-claude-ban-toast-in {",
|
|
2720
|
+
" from { opacity: 0; transform: translateY(-6px); }",
|
|
2721
|
+
" to { opacity: 1; transform: none; }",
|
|
2722
|
+
"}",
|
|
2723
|
+
"",
|
|
2724
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-toast-icon {",
|
|
2725
|
+
" flex: none;",
|
|
2726
|
+
" width: 16px;",
|
|
2727
|
+
" height: 16px;",
|
|
2728
|
+
" color: var(--dsh-ban-toast-icon);",
|
|
2729
|
+
"}",
|
|
2730
|
+
"",
|
|
2731
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-toast-text {",
|
|
2732
|
+
" flex: 1;",
|
|
2733
|
+
" min-width: 0;",
|
|
2734
|
+
" overflow: hidden;",
|
|
2735
|
+
" text-overflow: ellipsis;",
|
|
2736
|
+
" white-space: nowrap;",
|
|
2737
|
+
"}",
|
|
2738
|
+
"",
|
|
2739
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-toast-close {",
|
|
2740
|
+
" flex: none;",
|
|
2741
|
+
" width: 14px;",
|
|
2742
|
+
" height: 14px;",
|
|
2743
|
+
" opacity: 0.7;",
|
|
2744
|
+
"}",
|
|
2745
|
+
"",
|
|
2746
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-toast:hover {",
|
|
2747
|
+
" border-color: var(--dsh-ban-toast-icon);",
|
|
2748
|
+
"}",
|
|
2749
|
+
"",
|
|
2750
|
+
"/* ---------- content column ---------- */",
|
|
2751
|
+
"/* The page is one centred column: the card stack is the page's measure, so it",
|
|
2752
|
+
" is centred in the window rather than pinned to a left inset, and capped so it",
|
|
2753
|
+
" never stretches into a measure no one wants to read. */",
|
|
2754
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-scroll {",
|
|
2755
|
+
" position: absolute;",
|
|
2756
|
+
" inset: 86px 0 0 0;",
|
|
2757
|
+
" overflow-y: auto;",
|
|
2758
|
+
" overflow-x: hidden;",
|
|
2759
|
+
"}",
|
|
2760
|
+
"",
|
|
2761
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-column {",
|
|
2762
|
+
" width: 63%;",
|
|
2763
|
+
" max-width: 1150px;",
|
|
2764
|
+
" margin: 0 auto;",
|
|
2765
|
+
" padding: 70px 40px 96px;",
|
|
2766
|
+
"}",
|
|
2767
|
+
"",
|
|
2768
|
+
"/* The icon box is the lock's size lever: the traced ink is 20 of the SVG's 24",
|
|
2769
|
+
" units, so 75px here paints a ~61px lock — the reference page's lock, which",
|
|
2770
|
+
" reads about a third larger than the 58px box did next to the same title. */",
|
|
2771
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-lock {",
|
|
2772
|
+
" display: block;",
|
|
2773
|
+
" width: 75px;",
|
|
2774
|
+
" height: 75px;",
|
|
2775
|
+
" color: var(--dsh-ban-text);",
|
|
2776
|
+
"}",
|
|
2777
|
+
"",
|
|
2778
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-title {",
|
|
2779
|
+
" margin: 26px 0 0;",
|
|
2780
|
+
" font-family: var(--dsw-font-serif);",
|
|
2781
|
+
" font-size: 31px;",
|
|
2782
|
+
" font-weight: 500;",
|
|
2783
|
+
" line-height: 1.2;",
|
|
2784
|
+
" letter-spacing: -0.015em;",
|
|
2785
|
+
" color: var(--dsh-ban-text);",
|
|
2786
|
+
"}",
|
|
2787
|
+
"",
|
|
2788
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-lead {",
|
|
2789
|
+
" margin: 22px 0 0;",
|
|
2790
|
+
" font-size: 15px;",
|
|
2791
|
+
" line-height: 1.6;",
|
|
2792
|
+
" color: var(--dsh-ban-text);",
|
|
2793
|
+
"}",
|
|
2794
|
+
"",
|
|
2795
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-lead strong {",
|
|
2796
|
+
" font-weight: 700;",
|
|
2797
|
+
"}",
|
|
2798
|
+
"",
|
|
2799
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-next {",
|
|
2800
|
+
" margin: 32px 0 0;",
|
|
2801
|
+
" font-size: 15px;",
|
|
2802
|
+
" line-height: 1.6;",
|
|
2803
|
+
" color: var(--dsh-ban-text);",
|
|
2804
|
+
"}",
|
|
2805
|
+
"",
|
|
2806
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-subtitle {",
|
|
2807
|
+
" margin: 44px 0 0;",
|
|
2808
|
+
" font-family: var(--dsw-font-family);",
|
|
2809
|
+
" font-size: 17px;",
|
|
2810
|
+
" font-weight: 600;",
|
|
2811
|
+
" line-height: 1.4;",
|
|
2812
|
+
" letter-spacing: 0;",
|
|
2813
|
+
" color: var(--dsh-ban-text);",
|
|
2814
|
+
"}",
|
|
2815
|
+
"",
|
|
2816
|
+
"/* ---------- cards: the numbered steps and the two account actions ---------- */",
|
|
2817
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-card {",
|
|
2818
|
+
" margin-top: 18px;",
|
|
2819
|
+
" border: 1px solid var(--dsh-ban-hairline);",
|
|
2820
|
+
" border-radius: 12px;",
|
|
2821
|
+
" background: var(--dsh-ban-card);",
|
|
2822
|
+
" overflow: hidden;",
|
|
2823
|
+
"}",
|
|
2824
|
+
"",
|
|
2825
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-step {",
|
|
2826
|
+
" display: flex;",
|
|
2827
|
+
" align-items: flex-start;",
|
|
2828
|
+
" gap: 14px;",
|
|
2829
|
+
" padding: 16px 24px;",
|
|
2830
|
+
"}",
|
|
2831
|
+
"",
|
|
2832
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-step-num {",
|
|
2833
|
+
" flex: none;",
|
|
2834
|
+
" width: 24px;",
|
|
2835
|
+
" height: 24px;",
|
|
2836
|
+
" margin-top: 1px;",
|
|
2837
|
+
" border-radius: 50%;",
|
|
2838
|
+
" background: var(--dsh-ban-hover);",
|
|
2839
|
+
" color: var(--dsh-ban-text);",
|
|
2840
|
+
" font-size: 12px;",
|
|
2841
|
+
" line-height: 24px;",
|
|
2842
|
+
" text-align: center;",
|
|
2843
|
+
"}",
|
|
2844
|
+
"",
|
|
2845
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-step-body {",
|
|
2846
|
+
" display: block;",
|
|
2847
|
+
" min-width: 0;",
|
|
2848
|
+
"}",
|
|
2849
|
+
"",
|
|
2850
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-step-title {",
|
|
2851
|
+
" display: block;",
|
|
2852
|
+
" font-size: 15px;",
|
|
2853
|
+
" font-weight: 500;",
|
|
2854
|
+
" line-height: 1.5;",
|
|
2855
|
+
" color: var(--dsh-ban-text);",
|
|
2856
|
+
"}",
|
|
2857
|
+
"",
|
|
2858
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-step-desc {",
|
|
2859
|
+
" display: block;",
|
|
2860
|
+
" margin-top: 2px;",
|
|
2861
|
+
" font-size: 13.5px;",
|
|
2862
|
+
" line-height: 1.5;",
|
|
2863
|
+
" color: var(--dsh-ban-muted);",
|
|
2864
|
+
"}",
|
|
2865
|
+
"",
|
|
2866
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-primary {",
|
|
2867
|
+
" appearance: none;",
|
|
2868
|
+
" display: inline-block;",
|
|
2869
|
+
" margin: 26px 0 0;",
|
|
2870
|
+
" border: 0;",
|
|
2871
|
+
" border-radius: 8px;",
|
|
2872
|
+
" background: var(--dsh-ban-primary-fill);",
|
|
2873
|
+
" color: var(--dsh-ban-primary-text);",
|
|
2874
|
+
" padding: 9px 18px;",
|
|
2875
|
+
" font: inherit;",
|
|
2876
|
+
" font-size: 14px;",
|
|
2877
|
+
" font-weight: 500;",
|
|
2878
|
+
" line-height: 20px;",
|
|
2879
|
+
" cursor: pointer;",
|
|
2880
|
+
" transition: background-color 0.12s ease;",
|
|
2881
|
+
"}",
|
|
2882
|
+
"",
|
|
2883
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-primary:hover {",
|
|
2884
|
+
" background: var(--dsh-ban-primary-hover);",
|
|
2885
|
+
"}",
|
|
2886
|
+
"",
|
|
2887
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-actions {",
|
|
2888
|
+
" margin-top: 18px;",
|
|
2889
|
+
"}",
|
|
2890
|
+
"",
|
|
2891
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action {",
|
|
2892
|
+
" appearance: none;",
|
|
2893
|
+
" display: flex;",
|
|
2894
|
+
" align-items: flex-start;",
|
|
2895
|
+
" gap: 16px;",
|
|
2896
|
+
" width: 100%;",
|
|
2897
|
+
" margin: 0;",
|
|
2898
|
+
" border: 0;",
|
|
2899
|
+
" background: transparent;",
|
|
2900
|
+
" color: inherit;",
|
|
2901
|
+
" padding: 18px 24px;",
|
|
2902
|
+
" font: inherit;",
|
|
2903
|
+
" text-align: left;",
|
|
2904
|
+
" cursor: pointer;",
|
|
2905
|
+
" transition: background-color 0.12s ease;",
|
|
2906
|
+
"}",
|
|
2907
|
+
"",
|
|
2908
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action + .dsh-claude-ban-action {",
|
|
2909
|
+
" border-top: 1px solid var(--dsh-ban-hairline);",
|
|
2910
|
+
"}",
|
|
2911
|
+
"",
|
|
2912
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action:hover {",
|
|
2913
|
+
" background: var(--dsh-ban-hover);",
|
|
2914
|
+
"}",
|
|
2915
|
+
"",
|
|
2916
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action-icon {",
|
|
2917
|
+
" flex: none;",
|
|
2918
|
+
" width: 18px;",
|
|
2919
|
+
" height: 18px;",
|
|
2920
|
+
" margin-top: 2px;",
|
|
2921
|
+
" color: var(--dsh-ban-muted);",
|
|
2922
|
+
"}",
|
|
2923
|
+
"",
|
|
2924
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action-text {",
|
|
2925
|
+
" display: block;",
|
|
2926
|
+
" flex: 1;",
|
|
2927
|
+
" min-width: 0;",
|
|
2928
|
+
"}",
|
|
2929
|
+
"",
|
|
2930
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action-title {",
|
|
2931
|
+
" display: block;",
|
|
2932
|
+
" font-size: 15px;",
|
|
2933
|
+
" font-weight: 500;",
|
|
2934
|
+
" line-height: 1.5;",
|
|
2935
|
+
" color: var(--dsh-ban-text);",
|
|
2936
|
+
"}",
|
|
2937
|
+
"",
|
|
2938
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action-title-danger {",
|
|
2939
|
+
" color: var(--dsh-ban-danger);",
|
|
2940
|
+
"}",
|
|
2941
|
+
"",
|
|
2942
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action:hover .dsh-claude-ban-action-title-danger {",
|
|
2943
|
+
" color: var(--dsh-ban-danger-hover);",
|
|
2944
|
+
"}",
|
|
2945
|
+
"",
|
|
2946
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action-desc {",
|
|
2947
|
+
" display: block;",
|
|
2948
|
+
" margin-top: 3px;",
|
|
2949
|
+
" font-size: 13.5px;",
|
|
2950
|
+
" line-height: 1.5;",
|
|
2951
|
+
" color: var(--dsh-ban-muted);",
|
|
2952
|
+
"}",
|
|
2953
|
+
"",
|
|
2954
|
+
"body[data-dsh-claude-style] .dsh-claude-ban-action-chevron {",
|
|
2955
|
+
" flex: none;",
|
|
2956
|
+
" width: 18px;",
|
|
2957
|
+
" height: 18px;",
|
|
2958
|
+
" margin-top: 3px;",
|
|
2959
|
+
" color: var(--dsh-ban-muted);",
|
|
2960
|
+
"}",
|
|
2961
|
+
"",
|
|
2962
|
+
"/* Narrow windows: drop the fixed left inset so the column keeps its measure",
|
|
2963
|
+
" instead of being squeezed against the right edge. */",
|
|
2964
|
+
"@media (max-width: 1000px) {",
|
|
2965
|
+
" body[data-dsh-claude-style] .dsh-claude-ban-column {",
|
|
2966
|
+
" width: auto;",
|
|
2967
|
+
" padding: 72px 32px 80px;",
|
|
2968
|
+
" }",
|
|
2969
|
+
"",
|
|
2970
|
+
" body[data-dsh-claude-style] .dsh-claude-ban-toast {",
|
|
2971
|
+
" right: 24px;",
|
|
2972
|
+
" max-width: calc(100% - 48px);",
|
|
2973
|
+
" }",
|
|
2974
|
+
"}",
|
|
2975
|
+
"",
|
|
2442
2976
|
"/* ---------- Claude Code layout: model picker ---------- */",
|
|
2443
2977
|
"/* Replaces the host's two-pane model menu: level 1 carries the current",
|
|
2444
2978
|
" provider's models, a divider, the effort row and a More models row; both",
|
|
@@ -2665,9 +3199,11 @@ window.__ModuleLoader__.load({
|
|
|
2665
3199
|
" color: var(--dsw-alias-label-caption, #a6a094) !important;",
|
|
2666
3200
|
"}",
|
|
2667
3201
|
"",
|
|
2668
|
-
"/* Popover Header
|
|
3202
|
+
"/* Popover Header. Vertical padding only: the clickable account row carries its",
|
|
3203
|
+
" own inline padding (components/account-footer.css), and the divider below is a",
|
|
3204
|
+
" full-bleed rule that must not be inset by this box. */",
|
|
2669
3205
|
"body[data-dsh-claude-style] .dsh-claude-account-popover-header {",
|
|
2670
|
-
" padding: 6px
|
|
3206
|
+
" padding: 6px 0 !important;",
|
|
2671
3207
|
" display: flex !important;",
|
|
2672
3208
|
" flex-direction: column !important;",
|
|
2673
3209
|
" gap: 2px !important;",
|
|
@@ -2682,7 +3218,7 @@ window.__ModuleLoader__.load({
|
|
|
2682
3218
|
"body[data-dsh-claude-style] .dsh-claude-account-popover-divider {",
|
|
2683
3219
|
" height: 1px !important;",
|
|
2684
3220
|
" background: var(--dsw-alias-border-l1, #e8e6dc) !important;",
|
|
2685
|
-
" margin: 2px 0
|
|
3221
|
+
" margin: 2px 0 !important;",
|
|
2686
3222
|
" flex: none !important;",
|
|
2687
3223
|
"}",
|
|
2688
3224
|
"",
|
|
@@ -4415,6 +4951,7 @@ window.__ModuleLoader__.load({
|
|
|
4415
4951
|
autoPopover: true,
|
|
4416
4952
|
composerScope: 'all',
|
|
4417
4953
|
username: '',
|
|
4954
|
+
banLocale: DEFAULT_BAN_LOCALE,
|
|
4418
4955
|
}
|
|
4419
4956
|
var prefsRevision
|
|
4420
4957
|
var prefsAvailable = false
|
|
@@ -4517,6 +5054,9 @@ window.__ModuleLoader__.load({
|
|
|
4517
5054
|
autoPopover: section.autoPopover !== false,
|
|
4518
5055
|
composerScope: COMPOSER_SCOPES.indexOf(section.composerScope) === -1 ? 'all' : section.composerScope,
|
|
4519
5056
|
username: (typeof section.username === 'string' ? section.username.trim().slice(0, USERNAME_MAX) : '') || fallbackUsername,
|
|
5057
|
+
// `banLocale` is read by the browser half only; a host half that predates
|
|
5058
|
+
// the field simply reports nothing, so an unknown value falls back here.
|
|
5059
|
+
banLocale: BAN_LOCALES.indexOf(section.banLocale) === -1 ? DEFAULT_BAN_LOCALE : section.banLocale,
|
|
4520
5060
|
}
|
|
4521
5061
|
}
|
|
4522
5062
|
|
|
@@ -4639,6 +5179,11 @@ window.__ModuleLoader__.load({
|
|
|
4639
5179
|
var index = {
|
|
4640
5180
|
ui: doc.ui && typeof doc.ui === 'object' ? doc.ui : {},
|
|
4641
5181
|
settings: doc.settings && typeof doc.settings === 'object' ? doc.settings : {},
|
|
5182
|
+
// The account-hold easter egg's page copy rides the same document
|
|
5183
|
+
// (src/overrides/ban-screen.js). Every block the document carries has to
|
|
5184
|
+
// be listed here: this index IS what lookups read, so an unlisted block
|
|
5185
|
+
// would silently fall back to the bundle's English constants.
|
|
5186
|
+
ban: doc.ban && typeof doc.ban === 'object' ? doc.ban : {},
|
|
4642
5187
|
exact: exact,
|
|
4643
5188
|
aliases: doc.aliases && typeof doc.aliases === 'object' ? doc.aliases : {},
|
|
4644
5189
|
fallback: typeof doc.fallback === 'string' && doc.fallback ? doc.fallback : MODEL_COPY_FALLBACK_LOCALE,
|
|
@@ -4741,6 +5286,26 @@ window.__ModuleLoader__.load({
|
|
|
4741
5286
|
return text || fallback
|
|
4742
5287
|
}
|
|
4743
5288
|
|
|
5289
|
+
/**
|
|
5290
|
+
* One account-hold easter-egg string, in the language the `banLocale`
|
|
5291
|
+
* preference names — NOT the shell's language. The page reproduces a real
|
|
5292
|
+
* Claude screen, so it is read in the language Claude wrote it in whatever
|
|
5293
|
+
* the rest of the UI is set to; `localized` is bypassed on purpose rather
|
|
5294
|
+
* than fed a fake locale, so a missing translation still falls through the
|
|
5295
|
+
* document's own fallback locale.
|
|
5296
|
+
*/
|
|
5297
|
+
function banCopy(key, fallback, params) {
|
|
5298
|
+
var pair = modelCopy === null || !modelCopy.ban ? null : modelCopy.ban[key]
|
|
5299
|
+
var want = readPrefs().banLocale
|
|
5300
|
+
var text = pair && typeof pair === 'object' && typeof pair[want] === 'string' ? pair[want] : ''
|
|
5301
|
+
if (!text) text = localized(pair)
|
|
5302
|
+
if (!text) text = fallback
|
|
5303
|
+
if (!params) return text
|
|
5304
|
+
return text.replace(/\{(\w+)\}/g, function (match, name) {
|
|
5305
|
+
return Object.prototype.hasOwnProperty.call(params, name) ? String(params[name]) : match
|
|
5306
|
+
})
|
|
5307
|
+
}
|
|
5308
|
+
|
|
4744
5309
|
// ============================================================================
|
|
4745
5310
|
// 弹层共享辅助 (Shared Popover Helpers)
|
|
4746
5311
|
// ============================================================================
|
|
@@ -6445,6 +7010,12 @@ window.__ModuleLoader__.load({
|
|
|
6445
7010
|
var accountPopover = null
|
|
6446
7011
|
var popoverBody = null
|
|
6447
7012
|
var popoverHoverIntent = createHoverIntent(openPopover, closePopover, 150)
|
|
7013
|
+
// Whether the popover is up because it was CLICKED (rather than hovered).
|
|
7014
|
+
// Clicking the account row opens the ban-screen easter egg and leaves the
|
|
7015
|
+
// pointer inside the popover, so without this the row's own mouseleave
|
|
7016
|
+
// would tear the popover down behind the overlay; a click-opened popover
|
|
7017
|
+
// instead stays until the pointer leaves the whole footer.
|
|
7018
|
+
var popoverOpenedByClick = false
|
|
6448
7019
|
|
|
6449
7020
|
function openPopover() {
|
|
6450
7021
|
if (!accountPopover || !accountBtn) return
|
|
@@ -6467,6 +7038,7 @@ window.__ModuleLoader__.load({
|
|
|
6467
7038
|
function closePopover() {
|
|
6468
7039
|
if (!accountPopover || !accountBtn) return
|
|
6469
7040
|
cancelClosePopover()
|
|
7041
|
+
popoverOpenedByClick = false
|
|
6470
7042
|
accountPopover.setAttribute('data-open', 'false')
|
|
6471
7043
|
accountBtn.setAttribute('data-open', 'false')
|
|
6472
7044
|
accountBtn.setAttribute('aria-expanded', 'false')
|
|
@@ -6478,6 +7050,10 @@ window.__ModuleLoader__.load({
|
|
|
6478
7050
|
if (isOpen) {
|
|
6479
7051
|
closePopover()
|
|
6480
7052
|
} else {
|
|
7053
|
+
// The pointer stays on the trigger after a click, and the popover
|
|
7054
|
+
// hangs below it, so the trigger's mouseleave must not close what the
|
|
7055
|
+
// click just opened — otherwise the panel is unreachable with a mouse.
|
|
7056
|
+
popoverOpenedByClick = true
|
|
6481
7057
|
openPopover()
|
|
6482
7058
|
}
|
|
6483
7059
|
}
|
|
@@ -7041,7 +7617,7 @@ window.__ModuleLoader__.load({
|
|
|
7041
7617
|
if (readPrefs().autoPopover) openPopover()
|
|
7042
7618
|
})
|
|
7043
7619
|
accountBtn.addEventListener('mouseleave', function () {
|
|
7044
|
-
if (readPrefs().autoPopover) scheduleClosePopover()
|
|
7620
|
+
if (readPrefs().autoPopover && !popoverOpenedByClick) scheduleClosePopover()
|
|
7045
7621
|
})
|
|
7046
7622
|
accountBtn.addEventListener('click', function (e) {
|
|
7047
7623
|
e.stopPropagation()
|
|
@@ -7067,8 +7643,21 @@ window.__ModuleLoader__.load({
|
|
|
7067
7643
|
scheduleClosePopover()
|
|
7068
7644
|
})
|
|
7069
7645
|
|
|
7646
|
+
// The account row is the ban-screen easter egg's trigger
|
|
7647
|
+
// (src/overrides/ban-screen.js). The marker attribute stays on the
|
|
7648
|
+
// header (it is the row's stable hook, and the row keeps its
|
|
7649
|
+
// semantics), but the header is only a WRAPPER: the clickable strip is
|
|
7650
|
+
// the inner `.…-row`, and the divider is its SIBLING so the hover
|
|
7651
|
+
// plate covers the name alone instead of swallowing the rule.
|
|
7070
7652
|
var header = document.createElement('div')
|
|
7071
7653
|
header.className = 'dsh-claude-account-popover-header'
|
|
7654
|
+
header.setAttribute('data-dsh-claude-ban-row', '')
|
|
7655
|
+
|
|
7656
|
+
var rowEl = document.createElement('div')
|
|
7657
|
+
rowEl.className = 'dsh-claude-account-popover-row'
|
|
7658
|
+
rowEl.setAttribute('role', 'button')
|
|
7659
|
+
rowEl.setAttribute('tabindex', '0')
|
|
7660
|
+
rowEl.setAttribute('aria-haspopup', 'dialog')
|
|
7072
7661
|
|
|
7073
7662
|
var nameEl = document.createElement('div')
|
|
7074
7663
|
nameEl.className = 'dsh-claude-account-popover-name'
|
|
@@ -7077,7 +7666,8 @@ window.__ModuleLoader__.load({
|
|
|
7077
7666
|
var divider = document.createElement('div')
|
|
7078
7667
|
divider.className = 'dsh-claude-account-popover-divider'
|
|
7079
7668
|
|
|
7080
|
-
|
|
7669
|
+
rowEl.appendChild(nameEl)
|
|
7670
|
+
header.appendChild(rowEl)
|
|
7081
7671
|
header.appendChild(divider)
|
|
7082
7672
|
accountPopover.appendChild(header)
|
|
7083
7673
|
|
|
@@ -7091,6 +7681,37 @@ window.__ModuleLoader__.load({
|
|
|
7091
7681
|
if (nameEl2 && nameEl2.textContent !== username) nameEl2.textContent = username
|
|
7092
7682
|
}
|
|
7093
7683
|
|
|
7684
|
+
// The account row is the ban-screen easter egg's trigger (ban-screen.js).
|
|
7685
|
+
// Bound OUTSIDE the build/refresh branch above so the pass that creates
|
|
7686
|
+
// the popover already wires the row — inside the `else` the very first
|
|
7687
|
+
// render would leave it dead until the next sync. `__dshBanBound` keeps
|
|
7688
|
+
// a later pass from binding it twice, which would open the overlay twice
|
|
7689
|
+
// per click.
|
|
7690
|
+
var banRow = accountPopover.querySelector('[data-dsh-claude-ban-row]')
|
|
7691
|
+
if (banRow && !banRow.__dshBanBound) {
|
|
7692
|
+
banRow.__dshBanBound = true
|
|
7693
|
+
banRow.addEventListener('click', function (e) {
|
|
7694
|
+
// The row's gesture is the easter egg, not a popover selection.
|
|
7695
|
+
e.preventDefault()
|
|
7696
|
+
e.stopPropagation()
|
|
7697
|
+
// Leave the popover up: the overlay is a full-window surface, so
|
|
7698
|
+
// what is behind it does not matter, and the footer is left as the
|
|
7699
|
+
// user had it once the screen is dismissed. The pointer is still
|
|
7700
|
+
// parked on the trigger, so the mouseleave close stays suspended
|
|
7701
|
+
// (popoverOpenedByClick) and the panel does not blink out from under
|
|
7702
|
+
// the overlay.
|
|
7703
|
+
popoverOpenedByClick = true
|
|
7704
|
+
if (ui.ban) ui.ban.open()
|
|
7705
|
+
})
|
|
7706
|
+
banRow.addEventListener('keydown', function (e) {
|
|
7707
|
+
if (e.key !== 'Enter' && e.key !== ' ') return
|
|
7708
|
+
e.preventDefault()
|
|
7709
|
+
e.stopPropagation()
|
|
7710
|
+
popoverOpenedByClick = true
|
|
7711
|
+
if (ui.ban) ui.ban.open()
|
|
7712
|
+
})
|
|
7713
|
+
}
|
|
7714
|
+
|
|
7094
7715
|
syncPopoverItems(footArea)
|
|
7095
7716
|
}
|
|
7096
7717
|
|
|
@@ -7125,6 +7746,332 @@ window.__ModuleLoader__.load({
|
|
|
7125
7746
|
}
|
|
7126
7747
|
}
|
|
7127
7748
|
|
|
7749
|
+
// ============================================================================
|
|
7750
|
+
// 4.5: 账户封禁彩蛋 (Account-ban Easter Egg)
|
|
7751
|
+
// ============================================================================
|
|
7752
|
+
/**
|
|
7753
|
+
* The "Your account is on hold" screen, reproduced from Claude's own
|
|
7754
|
+
* account-hold page. It is an EASTER EGG, not a real state: nothing here
|
|
7755
|
+
* touches the host, the session, or the preference store — the overlay is
|
|
7756
|
+
* one node appended to `<body>` and removed again on the way out.
|
|
7757
|
+
*
|
|
7758
|
+
* Entry is the account row at the top of the sidebar footer's account
|
|
7759
|
+
* popover (src/overrides/account-footer.js binds that row to
|
|
7760
|
+
* `ui.ban.open()`). Exit follows the way in — every control the page
|
|
7761
|
+
* paints ("Sign out", "Request a review", the two "What you can do" rows,
|
|
7762
|
+
* the toast's dismiss button, the window controls) closes it, and Esc
|
|
7763
|
+
* closes it (scheduler.js's global key handler). Nothing inside the overlay
|
|
7764
|
+
* performs the action its label names.
|
|
7765
|
+
*
|
|
7766
|
+
* Losing focus does NOT close it, on purpose. The page is something to
|
|
7767
|
+
* READ: the reader has to switch windows to look something up, and an
|
|
7768
|
+
* overlay that vanishes the moment they do is worse than one that waits.
|
|
7769
|
+
* Leaving is always an explicit act — a control on the page or Esc — so the
|
|
7770
|
+
* blur listener this used to carry is gone.
|
|
7771
|
+
*
|
|
7772
|
+
* Layout note: the overlay is `position: fixed` at the top of the stacking
|
|
7773
|
+
* order rather than a real page, so it covers the whole window (sidebar,
|
|
7774
|
+
* titlebar, composer) whatever the host renders underneath — and it can
|
|
7775
|
+
* never be clipped by the sidebar column, which the account popover itself
|
|
7776
|
+
* has to work around.
|
|
7777
|
+
*/
|
|
7778
|
+
function installBanScreen(ctx, ui) {
|
|
7779
|
+
var banRoot = null
|
|
7780
|
+
|
|
7781
|
+
/**
|
|
7782
|
+
* Close the easter egg. Safe to call at any time (teardown, a second
|
|
7783
|
+
* click, a missing overlay): everything is null-checked and the handle
|
|
7784
|
+
* is idempotent, so the caller never has to know the current state.
|
|
7785
|
+
*/
|
|
7786
|
+
function closeBanScreen() {
|
|
7787
|
+
if (banRoot !== null && banRoot.parentElement !== null) {
|
|
7788
|
+
banRoot.parentElement.removeChild(banRoot)
|
|
7789
|
+
}
|
|
7790
|
+
banRoot = null
|
|
7791
|
+
}
|
|
7792
|
+
|
|
7793
|
+
/** Whether `node` is one of the overlay's own dismiss controls. */
|
|
7794
|
+
function isBanDismissTarget(node) {
|
|
7795
|
+
var el = node
|
|
7796
|
+
while (el && el !== banRoot) {
|
|
7797
|
+
if (el.nodeType === 1 && el.hasAttribute('data-dsh-ban-dismiss')) return true
|
|
7798
|
+
el = el.parentElement
|
|
7799
|
+
}
|
|
7800
|
+
return false
|
|
7801
|
+
}
|
|
7802
|
+
|
|
7803
|
+
/**
|
|
7804
|
+
* One inline SVG. The page's own icons: none of them ship as assets.
|
|
7805
|
+
*
|
|
7806
|
+
* `strokeWidth` is a PARAMETER, not an extra attribute: appending a second
|
|
7807
|
+
* `stroke-width` to the same `<svg>` produces a duplicate attribute, and
|
|
7808
|
+
* the HTML parser drops every attribute after the first — the override
|
|
7809
|
+
* silently does nothing and the icon keeps the set's own 1.6 (which is how
|
|
7810
|
+
* the lock shipped at nearly 4px instead of the traced weight).
|
|
7811
|
+
*/
|
|
7812
|
+
function banSvg(body, strokeWidth) {
|
|
7813
|
+
return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="' +
|
|
7814
|
+
(strokeWidth === undefined ? 1.6 : strokeWidth) + '" ' +
|
|
7815
|
+
'stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">' + body + '</svg>'
|
|
7816
|
+
}
|
|
7817
|
+
|
|
7818
|
+
/**
|
|
7819
|
+
* The lock is a HAND-DRAWN TRACE, not a `rect` + `circle` assembly: every
|
|
7820
|
+
* edge is a cubic whose anchors and handles carry the sketch's own wobble.
|
|
7821
|
+
* Nothing here is a filter or a jitter — the hand-drawn character lives in
|
|
7822
|
+
* the anchor points themselves, so it survives any scale, and the geometry
|
|
7823
|
+
* stays reviewable: each `C` below is one anchor with its two handles.
|
|
7824
|
+
*
|
|
7825
|
+
* What the anchors encode, read off the reference sketch: the body's top
|
|
7826
|
+
* edge slants down to the right while the bottom edge sags; the left side
|
|
7827
|
+
* drifts outward on the way down and the right side bows out around the
|
|
7828
|
+
* keyhole before coming back; a short diagonal cuts each corner so no two
|
|
7829
|
+
* strokes meet at a perfect right angle; the shackle's two arches are not
|
|
7830
|
+
* concentric and its legs stop on the body's top edge instead of crossing
|
|
7831
|
+
* it; the keyhole's head is flatter than a circle, its waist sits
|
|
7832
|
+
* off-centre, and its base flares wider than the head.
|
|
7833
|
+
*
|
|
7834
|
+
* The numbers are the reference's ink centrelines (measured off an 89x92
|
|
7835
|
+
* px drawing) mapped onto this icon set's 24-unit grid: the ink box
|
|
7836
|
+
* (58.5x76.3 px) becomes 15.3x20 units, centred. `stroke-width` is 0.5
|
|
7837
|
+
* units — the ban screen paints this in a 75px box, so the ink lands at
|
|
7838
|
+
* ~61px and the line at ~1.6px, which is the weight the reference itself
|
|
7839
|
+
* is drawn at (a 2px line on a 77px lock).
|
|
7840
|
+
*/
|
|
7841
|
+
/** The overlay's icon set, in one place so the markup below stays readable. */
|
|
7842
|
+
var BAN_ICONS = {
|
|
7843
|
+
lock: banSvg(
|
|
7844
|
+
// body: top edge, right side (with its outward bow), bottom edge, left side
|
|
7845
|
+
'<path d="M4.412 9.025 C9.287 8.894 14.136 9.077 19.379 9.182' +
|
|
7846
|
+
' C19.379 11.541 19.379 13.638 19.405 14.949' +
|
|
7847
|
+
' C19.667 15.735 19.641 16.784 19.457 17.57' +
|
|
7848
|
+
' C19.379 18.619 19.379 20.191 19.379 21.659' +
|
|
7849
|
+
' C14.923 21.764 9.156 21.764 4.674 21.659' +
|
|
7850
|
+
' C4.7 19.405 4.7 16.26 4.674 14.163' +
|
|
7851
|
+
' C4.621 13.114 4.516 12.066 4.438 11.279' +
|
|
7852
|
+
' C4.385 10.231 4.385 9.444 4.412 9.025 Z"></path>' +
|
|
7853
|
+
// shackle: outer arch, then the inner one, both ending on the top edge
|
|
7854
|
+
'<path d="M8.081 8.972 C7.95 7.872 7.95 6.561 8.081 5.25' +
|
|
7855
|
+
' C8.212 3.94 8.789 2.734 9.837 2.341' +
|
|
7856
|
+
' C10.676 2.105 12.721 2.131 13.507 2.315' +
|
|
7857
|
+
' C14.503 2.603 15.29 3.258 15.394 4.071' +
|
|
7858
|
+
' C15.499 5.25 15.499 6.561 15.526 9.156' +
|
|
7859
|
+
' M9.89 9.025 C9.785 7.609 9.785 6.299 9.89 5.25' +
|
|
7860
|
+
' C9.995 4.359 10.519 3.861 11.567 3.861' +
|
|
7861
|
+
' C12.537 3.809 13.324 4.097 13.664 4.988' +
|
|
7862
|
+
' C13.796 5.644 13.796 7.085 13.796 9.13"></path>' +
|
|
7863
|
+
// keyhole: head, right wall into the waist, base, left wall back up
|
|
7864
|
+
'<path d="M10.021 14.634 C9.864 14.32 9.811 14.11 9.811 13.9' +
|
|
7865
|
+
' C9.759 13.245 9.916 12.485 10.729 12.092' +
|
|
7866
|
+
' C11.253 11.882 12.197 11.882 12.695 12.092' +
|
|
7867
|
+
' C13.271 12.301 13.691 12.983 13.664 13.9' +
|
|
7868
|
+
' C13.664 14.11 13.612 14.32 13.35 14.634' +
|
|
7869
|
+
' C13.166 14.844 12.773 15.001 12.695 15.316' +
|
|
7870
|
+
' C12.668 15.84 13.455 17.046 13.927 18.383' +
|
|
7871
|
+
' C12.433 18.592 10.86 18.566 9.68 18.435' +
|
|
7872
|
+
' C10.152 17.151 10.702 16.417 10.598 15.683' +
|
|
7873
|
+
' C10.519 15.263 10.257 14.949 10.021 14.634 Z"></path>',
|
|
7874
|
+
0.5
|
|
7875
|
+
),
|
|
7876
|
+
warning: banSvg(
|
|
7877
|
+
'<path d="M10.3 3.9 2.6 17.2a2 2 0 0 0 1.7 3h15.4a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z"></path>' +
|
|
7878
|
+
'<path d="M12 9v4.2"></path>' +
|
|
7879
|
+
'<path d="M12 16.8h.01"></path>'
|
|
7880
|
+
),
|
|
7881
|
+
close: banSvg('<path d="M6.4 6.4 17.6 17.6"></path><path d="M17.6 6.4 6.4 17.6"></path>'),
|
|
7882
|
+
download: banSvg('<path d="M12 3.5v11"></path><path d="m7.5 10 4.5 4.5 4.5-4.5"></path><path d="M4.5 19.5h15"></path>'),
|
|
7883
|
+
trash: banSvg(
|
|
7884
|
+
'<path d="M4.5 6.8h15"></path>' +
|
|
7885
|
+
'<path d="M9.5 6.8V5.2a1.2 1.2 0 0 1 1.2-1.2h2.6a1.2 1.2 0 0 1 1.2 1.2v1.6"></path>' +
|
|
7886
|
+
'<path d="M6.8 6.8 7.7 19a1.5 1.5 0 0 0 1.5 1.4h5.6a1.5 1.5 0 0 0 1.5-1.4l.9-12.2"></path>' +
|
|
7887
|
+
'<path d="M10.3 10.4v6.2"></path><path d="M13.7 10.4v6.2"></path>'
|
|
7888
|
+
),
|
|
7889
|
+
chevron: banSvg('<path d="m9.5 5.5 7 6.5-7 6.5"></path>'),
|
|
7890
|
+
minimize: banSvg('<path d="M4 12h16"></path>'),
|
|
7891
|
+
maximize: banSvg('<rect x="4.5" y="4.5" width="15" height="15" rx="2"></rect>'),
|
|
7892
|
+
restore: banSvg(
|
|
7893
|
+
'<rect x="4.5" y="8.5" width="11" height="11" rx="2"></rect>' +
|
|
7894
|
+
'<path d="M8.5 8.5V6a1.5 1.5 0 0 1 1.5-1.5h8A1.5 1.5 0 0 1 19.5 6v8a1.5 1.5 0 0 1-1.5 1.5h-2.5"></path>'
|
|
7895
|
+
),
|
|
7896
|
+
}
|
|
7897
|
+
|
|
7898
|
+
/**
|
|
7899
|
+
* The hold timestamp. The date part is Claude's own format ("Jul 4, 2026")
|
|
7900
|
+
* and is built by hand rather than through `toLocaleString`, because the
|
|
7901
|
+
* page is a fixed bilingual document and the stamp must not re-translate
|
|
7902
|
+
* itself into a third format when the browser's locale is neither of the
|
|
7903
|
+
* two. The time part follows the chosen language's own convention — the
|
|
7904
|
+
* AM/PM clock in English, the 24-hour clock in Chinese.
|
|
7905
|
+
*/
|
|
7906
|
+
var BAN_MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
|
7907
|
+
function formatBanStamp(date) {
|
|
7908
|
+
var datePart = BAN_MONTHS[date.getMonth()] + ' ' + date.getDate() + ', ' + date.getFullYear()
|
|
7909
|
+
var timePart
|
|
7910
|
+
if (readPrefs().banLocale === BAN_LOCALE_ZH) {
|
|
7911
|
+
var hh = date.getHours()
|
|
7912
|
+
var mm = date.getMinutes()
|
|
7913
|
+
timePart = (hh < 10 ? '0' + hh : String(hh)) + ':' + (mm < 10 ? '0' + mm : String(mm))
|
|
7914
|
+
} else {
|
|
7915
|
+
var hours = date.getHours()
|
|
7916
|
+
var hour12 = hours % 12
|
|
7917
|
+
if (hour12 === 0) hour12 = 12
|
|
7918
|
+
var minutes = date.getMinutes()
|
|
7919
|
+
timePart = hour12 + ':' + (minutes < 10 ? '0' + minutes : String(minutes)) + ' ' + (hours < 12 ? 'AM' : 'PM')
|
|
7920
|
+
}
|
|
7921
|
+
return datePart + ', ' + timePart
|
|
7922
|
+
}
|
|
7923
|
+
|
|
7924
|
+
/** When the open overlay is dated, so a refresh never re-dates the page. */
|
|
7925
|
+
var banOpenedAt = null
|
|
7926
|
+
|
|
7927
|
+
/**
|
|
7928
|
+
* Show the screen.
|
|
7929
|
+
*
|
|
7930
|
+
* @param bannedAt - when the "hold" is dated; defaults to now. Exposed so
|
|
7931
|
+
* a caller (or a probe) can pin the timestamp instead of reading it off
|
|
7932
|
+
* the clock.
|
|
7933
|
+
*/
|
|
7934
|
+
function openBanScreen(bannedAt) {
|
|
7935
|
+
closeBanScreen()
|
|
7936
|
+
if (typeof document === 'undefined' || document.body === null) return
|
|
7937
|
+
|
|
7938
|
+
var root = document.createElement('div')
|
|
7939
|
+
root.className = 'dsh-claude-ban'
|
|
7940
|
+
root.setAttribute('role', 'dialog')
|
|
7941
|
+
root.setAttribute('aria-modal', 'true')
|
|
7942
|
+
root.setAttribute('data-dsh-ban', '')
|
|
7943
|
+
|
|
7944
|
+
banOpenedAt = bannedAt instanceof Date ? bannedAt : new Date()
|
|
7945
|
+
var stamp = formatBanStamp(banOpenedAt)
|
|
7946
|
+
var username = getUsername(ctx)
|
|
7947
|
+
|
|
7948
|
+
// The wordmark follows the brand preference like the sidebar does; the
|
|
7949
|
+
// "off" choice only drops the starburst, since a bare "Claude" text
|
|
7950
|
+
// wordmark is what the page is.
|
|
7951
|
+
var brand = readPrefs().brand
|
|
7952
|
+
var showMark = brand !== BRAND_OFF
|
|
7953
|
+
var useAnthropic = brand === BRAND_ANTHROPIC
|
|
7954
|
+
|
|
7955
|
+
root.innerHTML =
|
|
7956
|
+
'<div class="dsh-claude-ban-bar">' +
|
|
7957
|
+
'<div class="dsh-claude-ban-brand">' +
|
|
7958
|
+
(showMark ? '<span class="dsh-claude-ban-mark"></span>' : '') +
|
|
7959
|
+
'<span class="dsh-claude-ban-word"></span>' +
|
|
7960
|
+
'</div>' +
|
|
7961
|
+
'<div class="dsh-claude-ban-bar-actions">' +
|
|
7962
|
+
'<button type="button" class="dsh-claude-ban-signout" data-dsh-ban-dismiss>' +
|
|
7963
|
+
banCopy('signOut', 'Sign out') +
|
|
7964
|
+
'</button>' +
|
|
7965
|
+
'<div class="dsh-claude-ban-window" aria-hidden="true">' +
|
|
7966
|
+
'<button type="button" class="dsh-claude-ban-win" tabindex="-1" data-dsh-ban-dismiss>' + BAN_ICONS.minimize + '</button>' +
|
|
7967
|
+
'<button type="button" class="dsh-claude-ban-win" tabindex="-1" data-dsh-ban-dismiss>' + BAN_ICONS.restore + '</button>' +
|
|
7968
|
+
'<button type="button" class="dsh-claude-ban-win" tabindex="-1" data-dsh-ban-dismiss>' + BAN_ICONS.close + '</button>' +
|
|
7969
|
+
'</div>' +
|
|
7970
|
+
'</div>' +
|
|
7971
|
+
'</div>' +
|
|
7972
|
+
'<div class="dsh-claude-ban-toast" data-dsh-ban-dismiss role="status">' +
|
|
7973
|
+
'<span class="dsh-claude-ban-toast-icon">' + BAN_ICONS.warning + '</span>' +
|
|
7974
|
+
'<span class="dsh-claude-ban-toast-text">' + username + ': account_banned</span>' +
|
|
7975
|
+
'<span class="dsh-claude-ban-toast-close">' + BAN_ICONS.close + '</span>' +
|
|
7976
|
+
'</div>' +
|
|
7977
|
+
'<div class="dsh-claude-ban-scroll">' +
|
|
7978
|
+
'<div class="dsh-claude-ban-column">' +
|
|
7979
|
+
'<span class="dsh-claude-ban-lock">' + BAN_ICONS.lock + '</span>' +
|
|
7980
|
+
'<h1 class="dsh-claude-ban-title">' + banCopy('title', 'Your account is on hold') + '</h1>' +
|
|
7981
|
+
'<p class="dsh-claude-ban-lead">' +
|
|
7982
|
+
banCopy('lead', 'We put your account on hold on <strong>{time}</strong> because of unusual activity. Your chats and data are safe.', { time: stamp }) +
|
|
7983
|
+
'</p>' +
|
|
7984
|
+
'<p class="dsh-claude-ban-lead">' + banCopy('leadError', 'If you think this hold is an error, you can request an account review.') + '</p>' +
|
|
7985
|
+
'<p class="dsh-claude-ban-next">' + banCopy('nextLabel', 'What happens next:') + '</p>' +
|
|
7986
|
+
'<div class="dsh-claude-ban-card">' +
|
|
7987
|
+
'<div class="dsh-claude-ban-step">' +
|
|
7988
|
+
'<span class="dsh-claude-ban-step-num">1</span>' +
|
|
7989
|
+
'<span class="dsh-claude-ban-step-body">' +
|
|
7990
|
+
'<span class="dsh-claude-ban-step-title">' + banCopy('step1Title', 'Request a review') + '</span>' +
|
|
7991
|
+
'<span class="dsh-claude-ban-step-desc">' + banCopy('step1Desc', 'Tell us more about what happened.') + '</span>' +
|
|
7992
|
+
'</span>' +
|
|
7993
|
+
'</div>' +
|
|
7994
|
+
'<div class="dsh-claude-ban-step">' +
|
|
7995
|
+
'<span class="dsh-claude-ban-step-num">2</span>' +
|
|
7996
|
+
'<span class="dsh-claude-ban-step-body">' +
|
|
7997
|
+
'<span class="dsh-claude-ban-step-title">' + banCopy('step2Title', 'We\u2019ll review your account') + '</span>' +
|
|
7998
|
+
'<span class="dsh-claude-ban-step-desc">' + banCopy('step2Desc', 'A team member will review your request and account activity together.') + '</span>' +
|
|
7999
|
+
'</span>' +
|
|
8000
|
+
'</div>' +
|
|
8001
|
+
'<div class="dsh-claude-ban-step">' +
|
|
8002
|
+
'<span class="dsh-claude-ban-step-num">3</span>' +
|
|
8003
|
+
'<span class="dsh-claude-ban-step-body">' +
|
|
8004
|
+
'<span class="dsh-claude-ban-step-title">' + banCopy('step3Title', 'We\u2019ll email you the outcome') + '</span>' +
|
|
8005
|
+
'<span class="dsh-claude-ban-step-desc">' + banCopy('step3Desc', 'Reviews take about 10 days.') + '</span>' +
|
|
8006
|
+
'</span>' +
|
|
8007
|
+
'</div>' +
|
|
8008
|
+
'</div>' +
|
|
8009
|
+
'<button type="button" class="dsh-claude-ban-primary" data-dsh-ban-dismiss>' +
|
|
8010
|
+
banCopy('review', 'Request a review') +
|
|
8011
|
+
'</button>' +
|
|
8012
|
+
'<h2 class="dsh-claude-ban-subtitle">' + banCopy('whatYouCanDo', 'What you can do') + '</h2>' +
|
|
8013
|
+
'<div class="dsh-claude-ban-card dsh-claude-ban-actions">' +
|
|
8014
|
+
'<button type="button" class="dsh-claude-ban-action" data-dsh-ban-dismiss>' +
|
|
8015
|
+
'<span class="dsh-claude-ban-action-icon">' + BAN_ICONS.download + '</span>' +
|
|
8016
|
+
'<span class="dsh-claude-ban-action-text">' +
|
|
8017
|
+
'<span class="dsh-claude-ban-action-title">' + banCopy('exportTitle', 'Export your data') + '</span>' +
|
|
8018
|
+
'<span class="dsh-claude-ban-action-desc">' + banCopy('exportDesc', 'We\u2019ll package up your conversations, projects, and settings for download. This might take some time to complete.') + '</span>' +
|
|
8019
|
+
'</span>' +
|
|
8020
|
+
'<span class="dsh-claude-ban-action-chevron">' + BAN_ICONS.chevron + '</span>' +
|
|
8021
|
+
'</button>' +
|
|
8022
|
+
'<button type="button" class="dsh-claude-ban-action" data-dsh-ban-dismiss>' +
|
|
8023
|
+
'<span class="dsh-claude-ban-action-icon">' + BAN_ICONS.trash + '</span>' +
|
|
8024
|
+
'<span class="dsh-claude-ban-action-text">' +
|
|
8025
|
+
'<span class="dsh-claude-ban-action-title dsh-claude-ban-action-title-danger">' + banCopy('deleteTitle', 'Delete your account') + '</span>' +
|
|
8026
|
+
'<span class="dsh-claude-ban-action-desc">' + banCopy('deleteDesc', 'You can permanently delete your account and data. This can\u2019t be undone.') + '</span>' +
|
|
8027
|
+
'</span>' +
|
|
8028
|
+
'<span class="dsh-claude-ban-action-chevron">' + BAN_ICONS.chevron + '</span>' +
|
|
8029
|
+
'</button>' +
|
|
8030
|
+
'</div>' +
|
|
8031
|
+
'</div>' +
|
|
8032
|
+
'</div>'
|
|
8033
|
+
|
|
8034
|
+
// One listener for every way out that is a click: the markup marks each
|
|
8035
|
+
// control with `data-dsh-ban-dismiss`, and a click that lands on the
|
|
8036
|
+
// page's empty canvas stays put (so the page can still be read). The
|
|
8037
|
+
// keyboard way out is Esc, handled with the other overlays in
|
|
8038
|
+
// scheduler.js — deliberately not a window `blur`, which would close
|
|
8039
|
+
// the page the moment the reader switched windows to look something up.
|
|
8040
|
+
root.addEventListener('click', function (e) {
|
|
8041
|
+
if (isBanDismissTarget(e.target)) closeBanScreen()
|
|
8042
|
+
})
|
|
8043
|
+
|
|
8044
|
+
banRoot = root
|
|
8045
|
+
document.body.appendChild(root)
|
|
8046
|
+
}
|
|
8047
|
+
|
|
8048
|
+
// The account row reaches this through the shared `ui` handle registry —
|
|
8049
|
+
// the same discipline the scheduler and the other features use — so the
|
|
8050
|
+
// handle must be REGISTERED here, not merely returned. (The account row is
|
|
8051
|
+
// wired in account-footer.js before this runs, but it only reads
|
|
8052
|
+
// `ui.ban` at click time, so the order is safe either way.)
|
|
8053
|
+
ui.ban = {
|
|
8054
|
+
open: openBanScreen,
|
|
8055
|
+
close: closeBanScreen,
|
|
8056
|
+
isOpen: function () {
|
|
8057
|
+
return banRoot !== null
|
|
8058
|
+
},
|
|
8059
|
+
/**
|
|
8060
|
+
* Rebuild an OPEN overlay in place — the page is assembled once, so a
|
|
8061
|
+
* change of the language preference (or of the brand mark) would
|
|
8062
|
+
* otherwise only land the next time it is opened. A no-op while closed,
|
|
8063
|
+
* and the hold timestamp is kept so a re-render never re-dates the page
|
|
8064
|
+
* under the reader.
|
|
8065
|
+
*/
|
|
8066
|
+
refresh: function () {
|
|
8067
|
+
if (banRoot === null) return
|
|
8068
|
+
openBanScreen(banOpenedAt === null ? new Date() : banOpenedAt)
|
|
8069
|
+
},
|
|
8070
|
+
}
|
|
8071
|
+
|
|
8072
|
+
return closeBanScreen
|
|
8073
|
+
}
|
|
8074
|
+
|
|
7128
8075
|
// ============================================================================
|
|
7129
8076
|
// 响应式调度与生命周期清理 (Scheduler & Teardown)
|
|
7130
8077
|
// ============================================================================
|
|
@@ -7146,6 +8093,10 @@ window.__ModuleLoader__.load({
|
|
|
7146
8093
|
if (ui.footer) ui.footer.close()
|
|
7147
8094
|
if (ui.permissions) ui.permissions.closeMenu()
|
|
7148
8095
|
if (ui.model) ui.model.close()
|
|
8096
|
+
// The account-hold overlay is the one layer that does NOT close on a
|
|
8097
|
+
// window blur (it is meant to be read, and reading it may mean
|
|
8098
|
+
// switching windows), so Esc is its keyboard way out.
|
|
8099
|
+
if (ui.ban) ui.ban.close()
|
|
7149
8100
|
}
|
|
7150
8101
|
if ((e.ctrlKey || e.metaKey) && e.key === ',') {
|
|
7151
8102
|
e.preventDefault()
|
|
@@ -7231,6 +8182,9 @@ window.__ModuleLoader__.load({
|
|
|
7231
8182
|
var prefsUnsubscribe = null
|
|
7232
8183
|
prefsUnsubscribe = subscribePrefs(function () {
|
|
7233
8184
|
if (ui.model) ui.model.invalidateCopy()
|
|
8185
|
+
// The account-hold page is assembled once per open, so a language change
|
|
8186
|
+
// has to rebuild an open one (a no-op while it is closed).
|
|
8187
|
+
if (ui.ban) ui.ban.refresh()
|
|
7234
8188
|
schedule()
|
|
7235
8189
|
})
|
|
7236
8190
|
loadPrefs()
|
|
@@ -7339,7 +8293,7 @@ window.__ModuleLoader__.load({
|
|
|
7339
8293
|
document.removeEventListener('compositionend', onComposerInput, true)
|
|
7340
8294
|
// Safety-net DOM sweep. Feature teardowns run after this and tolerate
|
|
7341
8295
|
// nodes already being detached.
|
|
7342
|
-
var leftoverItems = document.querySelectorAll('.dsh-claude-popover-item, .dsh-claude-popover-embed, .dsh-claude-account-popover, .dsh-claude-account-btn, .dsh-claude-perm-container, .dsh-claude-perm-popover, .dsh-claude-segments[data-composer-segments], .dsh-claude-model-btn, .dsh-claude-model-popover, [data-dsh-synthetic-placeholder]')
|
|
8296
|
+
var leftoverItems = document.querySelectorAll('.dsh-claude-popover-item, .dsh-claude-popover-embed, .dsh-claude-account-popover, .dsh-claude-account-btn, .dsh-claude-perm-container, .dsh-claude-perm-popover, .dsh-claude-segments[data-composer-segments], .dsh-claude-model-btn, .dsh-claude-model-popover, .dsh-claude-ban, [data-dsh-synthetic-placeholder]')
|
|
7343
8297
|
for (var li = 0; li < leftoverItems.length; li++) {
|
|
7344
8298
|
if (leftoverItems[li].parentElement) {
|
|
7345
8299
|
leftoverItems[li].parentElement.removeChild(leftoverItems[li])
|
|
@@ -7507,6 +8461,10 @@ window.__ModuleLoader__.load({
|
|
|
7507
8461
|
{ value: 'conversation', label: settingsCopy('scopeConversation', 'Conversation only') },
|
|
7508
8462
|
{ value: 'all', label: settingsCopy('scopeAll', 'All') },
|
|
7509
8463
|
]
|
|
8464
|
+
var banLocaleOptions = [
|
|
8465
|
+
{ value: BAN_LOCALE_ZH, label: settingsCopy('banLocaleZh', '中文') },
|
|
8466
|
+
{ value: BAN_LOCALE_EN, label: settingsCopy('banLocaleEn', 'English') },
|
|
8467
|
+
]
|
|
7510
8468
|
|
|
7511
8469
|
var rows = [
|
|
7512
8470
|
row(
|
|
@@ -7562,6 +8520,12 @@ window.__ModuleLoader__.load({
|
|
|
7562
8520
|
settingsCopy('composerDesc', 'Which input area the skin restyles: the new-conversation page, the conversation, or both.'),
|
|
7563
8521
|
segment(scopeOptions, prefs.composerScope, function (value) { write({ composerScope: value }) }),
|
|
7564
8522
|
),
|
|
8523
|
+
row(
|
|
8524
|
+
'banLocale',
|
|
8525
|
+
settingsCopy('banLocaleTitle', 'Account-hold easter egg language'),
|
|
8526
|
+
settingsCopy('banLocaleDesc', 'The language the account-hold page (click the account row in the sidebar footer popover) is written in. It is its own choice, so the page reads the way Claude wrote it whatever the interface language is.'),
|
|
8527
|
+
segment(banLocaleOptions, prefs.banLocale, function (value) { write({ banLocale: value }) }),
|
|
8528
|
+
),
|
|
7565
8529
|
]
|
|
7566
8530
|
|
|
7567
8531
|
if (error !== null) {
|
|
@@ -7657,6 +8621,7 @@ window.__ModuleLoader__.load({
|
|
|
7657
8621
|
teardowns.push(installPermissions(ctx, ui))
|
|
7658
8622
|
teardowns.push(installModelPicker(ctx, ui))
|
|
7659
8623
|
teardowns.push(installAccountFooter(ctx, ui))
|
|
8624
|
+
teardowns.push(installBanScreen(ctx, ui)) // 账户横条的封号彩蛋(账户弹层把点击交给 ui.ban)
|
|
7660
8625
|
teardowns.push(installScheduler(ctx, ui)) // 最后装,回调中惰性读 ui 句柄
|
|
7661
8626
|
var stopSettings = installSettingsSection(ctx)
|
|
7662
8627
|
|