@nooticr/mcp 1.26.33 → 1.26.35
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/README.md +24 -2
- package/dist/shared/amazon.js +480 -0
- package/dist/shared/collab.js +13 -1
- package/dist/shared/comment-review.js +50 -3
- package/dist/shared/jobs.js +40 -7
- package/dist/shared/loading-plans.js +52 -0
- package/dist/shared/output-schemas.js +109 -0
- package/dist/shared/tools-def.js +26 -2
- package/dist/shared/tools.js +42 -6
- package/dist/shared/ui-template.js +520 -2
- package/package.json +1 -1
|
@@ -18,7 +18,7 @@ export const NOOTICR_UI_TEMPLATE = `<!DOCTYPE html>
|
|
|
18
18
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
19
19
|
<title>Nooticr</title>
|
|
20
20
|
<style>
|
|
21
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{overflow:hidden auto}[hidden]{display:none!important}a{color:inherit;text-decoration:none}body{color:var(--fg);background:0 0;max-width:100vw;padding:10px;font-family:system-ui,-apple-system,Segoe UI,sans-serif;line-height:1.5;overflow-x:hidden}}@layer components{.load-bar{background:var(--tag);border-radius:3.40282e38px;height:3px;margin-bottom:14px;position:relative;overflow:hidden}.load-bar:after{content:"";background:var(--brand);border-radius:3.40282e38px;width:42%;animation:1.35s cubic-bezier(.45,0,.55,1) infinite sweep;position:absolute;top:0;bottom:0}@keyframes sweep{0%{left:-45%}50%{left:58%}to{left:-45%}}.load-head{align-items:center;gap:calc(var(--spacing) * 2);color:var(--muted);margin-bottom:11px;font-size:12.5px;font-weight:600;display:flex}.load-price{color:var(--brand);white-space:nowrap;margin-left:auto;font-weight:700}.mk{color:var(--fg);flex-shrink:0;display:block}.mk .iris{animation:3.6s cubic-bezier(.5,0,.5,1) infinite mkScan}.mk .lid{transform-box:fill-box;transform-origin:50%;animation:5.4s ease-in-out infinite mkBlink}@keyframes mkScan{0%{transform:translate(0)}18%{transform:translate(-15px,7px)}34%{transform:translate(11px,-5px)}52%{transform:translate(-8px,12px)}70%{transform:translate(14px,3px)}86%{transform:translate(-4px,-6px)}to{transform:translate(0)}}@keyframes mkBlink{0%,88%,to{transform:scaleY(1)}93%{transform:scaleY(.08)}}.load-known{gap:calc(var(--spacing) * 2);flex-wrap:wrap;margin-bottom:11px;display:flex}.load-fact{align-items:center;gap:calc(var(--spacing) * 2);border:1px solid var(--border);background:var(--card);color:var(--fg);border-radius:3.40282e38px;padding:4px 11px;font-size:12px;font-weight:600;display:inline-flex}.load-fact-mark{color:var(--brand);display:inline-flex}.load-fact-mark svg{fill:currentColor;width:13px;height:13px}.led .card-body{padding:4px 14px 12px}.led-row{align-items:flex-start;gap:calc(var(--spacing) * 3);border-bottom:1px solid var(--border);padding:10px 0;display:flex}.led-row:last-of-type{border-bottom:none}.led-body{flex:1;min-width:0}.led-label{color:var(--fg);font-size:12.5px;font-weight:600}.led-detail{color:var(--muted);margin-top:1px;font-size:11px}.led-cost{background:var(--tag);color:var(--fg);font-variant-numeric:tabular-nums;border-radius:3.40282e38px;flex:none;align-items:center;padding:2px 9px;font-size:11.5px;font-weight:700;display:inline-flex}.led-mark{width:16px;color:var(--brand);flex:none;justify-content:center;align-items:center;margin-top:1px;display:inline-flex}.led-mark svg{fill:currentColor;width:13px;height:13px}.led-dot{border:1px solid var(--border);border-radius:50%;flex:none;width:13px;height:13px;margin-top:2px}.led-foot{color:var(--muted);margin-top:10px;font-size:11.5px;line-height:1.5}.load-centre{text-align:center;flex-direction:column;align-items:center;padding:30px 0 22px;display:flex}.load-centre .load-what{color:var(--fg);margin-top:20px;font-size:14px;font-weight:700}.load-centre .load-sub{color:var(--muted);margin-top:5px;font-size:12.5px}.load-centre .load-bar{width:210px;margin:16px 0 0}.sk{border-radius:var(--radius-md);background:var(--tag);position:relative;overflow:hidden}.sk-media{aspect-ratio:9/16;width:100%;max-height:var(--stage-max,420px);border-radius:0}.sk-media.h{aspect-ratio:16/9}.sk-line{height:11px;margin-top:8px}.sk-line.w40{width:40%}.sk-line.w60{width:60%}.sk-line.w80{width:80%}.sk-pill{border-radius:999px;width:76px;height:22px;margin:0 5px 5px 0;display:inline-block}.sk-card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);flex-shrink:0;width:min(340px,86vw);min-width:min(340px,86vw);overflow:hidden}.sk-body{padding:13px 14px}.sk-row{align-items:center;gap:calc(var(--spacing) * 3);border-bottom:1px solid var(--border);padding:11px 0;display:flex}.sk-avatar{border-radius:10px;flex-shrink:0;width:44px;height:44px}.sk-strip{gap:calc(var(--spacing) * 3);padding:2px 0 8px;display:flex;overflow:hidden}@media (prefers-reduced-motion:reduce){.load-bar:after,.mk .iris,.mk .lid{animation:none}.load-bar:after{opacity:.5;width:100%;left:0}}.fade-in{animation:.4s ease-out fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.stagger>*{opacity:0;animation:.4s ease-out forwards fadeIn}.stagger>:first-child{animation-delay:50ms}.stagger>:nth-child(2){animation-delay:.1s}.stagger>:nth-child(3){animation-delay:.15s}.stagger>:nth-child(4){animation-delay:.2s}.stagger>:nth-child(5){animation-delay:.25s}.stagger>:nth-child(6){animation-delay:.3s}.stagger>:nth-child(7){animation-delay:.35s}.stagger>:nth-child(8){animation-delay:.4s}.gallery-wrap{max-width:100%;position:relative;overflow:hidden}.gallery{gap:calc(var(--spacing) * 3);scroll-snap-type:x mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:none;width:100%;max-width:100%;padding:2px 0 8px;display:flex;overflow-x:auto}.gallery::-webkit-scrollbar{display:none}.gallery-dots{justify-content:center;gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;margin-top:10px;display:flex}.gallery-dots .dot{background:var(--border);cursor:pointer;width:8px;height:8px;transition:var(--transition);border:none;border-radius:50%;padding:0}.gallery-dots .dot.active{background:var(--accent);border-radius:999px;width:20px}.gallery-nav{z-index:2;cursor:pointer;background:var(--card);border:1px solid var(--border);width:32px;height:32px;color:var(--fg);transition:var(--transition);opacity:0;border-radius:50%;justify-content:center;align-items:center;font-size:14px;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.gallery-wrap:hover .gallery-nav{opacity:1}.gallery-nav:hover{background:var(--accent);color:var(--card)}.gallery-nav.prev{left:2px}.gallery-nav.next{right:2px}.card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);width:min(380px,100%);min-width:min(380px,100%);max-width:100%;transition:var(--transition);cursor:default;scroll-snap-align:center;flex-shrink:0;display:block}.card.card-media{--ar-w:9;--ar-h:16;width:min(100%, calc(var(--stage-max,520px) * var(--ar-w) / var(--ar-h)));background:0 0;border-color:#0000;min-width:0;margin:0 auto}.card.card-media.h{--ar-w:16;--ar-h:9}.card.card-media.sq{--ar-w:1;--ar-h:1}.card-media .card-foot{background:0 0;justify-content:flex-end;padding:8px 4px 0;display:flex}.card-media .btn-sm{margin-top:0}.card:hover{border-color:var(--muted)}.card-media:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.card-wide{width:100%}.card img:not(.mp-slide){object-fit:cover;width:100%;height:260px;display:block}.card-wide img:not(.mp-slide){max-height:340px}.card video{object-fit:contain;background:#000;border:none;outline:none;width:100%;min-height:220px;max-height:520px;display:block}.card-wide video{max-height:520px}.card-body{padding:14px 16px}.badge{align-items:center;gap:var(--spacing);text-transform:capitalize;transition:var(--transition);border-radius:3.40282e38px;padding:3px 10px;font-size:11px;font-weight:700;display:inline-flex}.handle{color:var(--muted);margin-left:auto;font-size:12px}.tag{align-items:center;gap:var(--spacing);transition:var(--transition);cursor:default;border-radius:3.40282e38px;margin:2px;padding:4px 10px;font-size:12px;display:inline-flex}.tag.clickable{cursor:pointer;-webkit-user-select:none;user-select:none}.tag.clickable:hover{background:var(--tag)}.tag.copied{background:var(--green)!important;color:#fff!important}.title{margin:6px 0;font-size:14px;font-weight:600;line-height:1.35}.card-wide .title{font-size:16px;font-weight:700}.caption{color:var(--muted);margin:6px 0 0;font-size:13px;line-height:1.5}.stats{align-items:center;gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;margin-top:8px;display:flex}.stat-pill{align-items:center;gap:var(--spacing);color:var(--fg);background:var(--tag);transition:var(--transition);border-radius:3.40282e38px;padding:5px 12px;font-size:12px;display:inline-flex}.stat-pill:hover{background:var(--border)}.btn{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);color:#fff;background:var(--brand);transition:var(--transition);border:none;margin-top:12px;padding:8px 18px;font-size:13px;font-weight:600;text-decoration-line:none;display:inline-flex}.btn:hover{background:var(--brand-2)}.btn:active{opacity:.9}.btn-sm{margin-top:8px;padding:5px 12px;font-size:11px}.section{border-bottom:1px solid var(--border);margin-bottom:6px;overflow:hidden}.section-header{cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--transition);justify-content:space-between;align-items:center;padding:10px 2px;display:flex}.section-header:hover .section-label{color:var(--fg)}.section-label{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:700}.section-chevron{color:var(--muted);font-size:12px;transition:transform .2s}.section-header.open .section-chevron{transform:rotate(180deg)}.section-content{max-height:0;padding:0 2px;transition:max-height .28s,padding .28s;overflow:hidden}.section-content.open{max-height:2400px;padding:4px 2px 14px}.section-text{color:var(--fg);font-size:13px;line-height:1.6}.ai-actions{gap:calc(var(--spacing) * 2);flex-wrap:wrap;margin-top:14px;display:flex}.ai-btn{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2);border:1px solid var(--border);background:var(--card);color:var(--fg);font:inherit;transition:var(--transition);border-radius:3.40282e38px;padding:8px 13px;font-size:13px;font-weight:600;display:inline-flex}.ai-btn:hover:not(:disabled){border-color:var(--brand);background:var(--brand-soft)}.ai-btn:disabled{opacity:.55;cursor:not-allowed}.ai-btn .spark{color:var(--brand);flex-shrink:0;display:inline-flex}.ai-btn .price{white-space:nowrap;color:var(--brand);background:var(--brand-soft);border-radius:3.40282e38px;align-items:center;padding:2px 7px;font-size:11px;font-weight:700;display:inline-flex}.ai-btn.busy .spark{animation:1.1s linear infinite spin}.ai-note{color:var(--muted);margin-top:8px;font-size:11.5px}.an-title{align-items:center;gap:calc(var(--spacing) * 2);margin-bottom:14px;font-size:16px;font-weight:700;display:flex}.verdict{gap:calc(var(--spacing) * 2.5);grid-template-columns:repeat(1,minmax(0,1fr));margin-bottom:12px;display:grid}@media (min-width:420px){.verdict{grid-template-columns:1fr 1fr}}.meter{border-radius:var(--radius-md);background:var(--tag);padding:9px 11px}.meter-top{justify-content:space-between;align-items:baseline;gap:calc(var(--spacing) * 2);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700;display:flex}.meter-top b{letter-spacing:0;font-size:14px}.meter-track{background:var(--border);border-radius:3.40282e38px;height:5px;margin-top:6px;overflow:hidden}.meter-track>i{border-radius:3.40282e38px;height:100%;display:block}.chiprow{gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;display:flex}.mhead{z-index:3;background:var(--bg);border-bottom:1px solid var(--border);padding:2px 0 10px;position:sticky;top:0}.mhead-top{justify-content:space-between;align-items:flex-end;gap:calc(var(--spacing) * 2.5);flex-wrap:wrap;display:flex}.mention-term{color:var(--muted);margin-bottom:2px;font-size:13px}.mention-term b{color:var(--fg)}.mention-total{color:var(--fg);letter-spacing:-.01em;font-size:20px;font-weight:650}.mention-down{color:var(--muted);margin-top:8px;font-size:12px}.mention-window{color:var(--muted);border:1px solid var(--border);border-radius:3.40282e38px;margin-left:6px;padding:1px 8px;font-size:11px;display:inline-block}.mention-summary{color:var(--muted);max-width:60ch;margin-top:6px;font-size:13px;line-height:1.45}.msort{background:var(--tag);border-radius:3.40282e38px;flex:none;align-items:center;gap:2px;padding:3px;display:inline-flex}.msort-btn{color:var(--muted);cursor:pointer;transition:var(--transition);white-space:nowrap;background:0 0;border:0;border-radius:999px;padding:5px 14px;font-size:11.5px;font-weight:600}.msort-btn:hover{color:var(--fg)}.msort-btn.on{color:var(--card);background:var(--accent)}.mchips{gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;margin-top:10px;display:flex}.mchip{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2);color:var(--muted);border:1px solid var(--border);transition:var(--transition);white-space:nowrap;background:0 0;border-radius:3.40282e38px;padding:5px 12px;font-size:12px;font-weight:600;display:inline-flex}.mchip:hover{color:var(--fg);border-color:var(--muted)}.mchip b{color:var(--fg);background:var(--tag);font-variant-numeric:tabular-nums;border-radius:3.40282e38px;padding:1px 7px;font-weight:700}.mchip.on{color:var(--card);background:var(--accent);border-color:#0000}.mchip.on b{color:inherit;background:0 0;padding:1px 0}.mchip.on .mchip-mark{color:inherit}.mchip.quiet{opacity:.5;cursor:default}.mchip.quiet:hover{color:var(--muted);border-color:var(--border)}.mchip-mark{color:var(--brand);display:inline-flex}.mchip-mark svg{fill:currentColor;width:13px;height:13px}.mgroups{gap:calc(var(--spacing) * 2.5);flex-direction:column;margin-top:12px;display:flex}.mgroup{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);padding:12px 14px 6px}.mgroup-head{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;margin-bottom:6px;display:flex}.mgroup-plat{align-items:center;gap:calc(var(--spacing) * 1.5);color:var(--brand);font-size:11px;font-weight:600;display:inline-flex}.mgroup-plat svg{fill:currentColor;width:12px;height:12px}.mgroup-about{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border:1px solid var(--border);border-radius:3.40282e38px;padding:1px 7px;font-size:10.5px}.mgroup-reach{color:var(--muted);margin-left:auto;font-size:11px}.mgroup-title{color:var(--fg);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.mgroup-rest{color:var(--muted);cursor:pointer;transition:var(--transition);background:0 0;border:0;align-self:flex-start;margin-top:2px;padding:2px 0;font-size:11.5px;font-weight:600}.mgroup-rest:hover{color:var(--fg)}.mgroup-actions{align-items:center;gap:calc(var(--spacing) * 3);margin-top:5px;display:flex}.mgroup-link{color:var(--muted);font-size:11.5px;text-decoration:none}.mgroup-link:hover{color:var(--fg);text-decoration:underline}.mgroup-all{color:var(--muted);cursor:pointer;transition:var(--transition);background:0 0;border:0;padding:0;font-size:11.5px;font-weight:600}.mgroup-all:hover{color:var(--fg)}.mgroup-none{color:var(--muted);margin-top:8px;font-size:12px}.mgroup-stage{--stage-max:300px;border-radius:var(--radius-xl) var(--radius-xl) 0 0;width:calc(100% + 28px);margin:-12px -14px 10px;overflow:hidden}.mgroup-stage .mp{border:0;border-radius:0;width:100%}.mgroup-media{background:var(--muted);border-radius:var(--radius-xl) var(--radius-xl) 0 0;cursor:default;border:0;width:calc(100% + 28px);height:132px;margin:-12px -14px 10px;padding:0;display:block;position:relative;overflow:hidden}.mgroup-media.is-playable{cursor:pointer}.mgroup-media-img{object-fit:cover;width:100%;height:100%;display:block}.mgroup-media-blank{opacity:.35;justify-content:center;align-items:center;width:100%;height:100%;display:flex}.mgroup-media-play{color:#fff;background:#00000094;border-radius:999px;justify-content:center;align-items:center;width:40px;height:40px;transition:transform .16s cubic-bezier(.16,1,.3,1);display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.mgroup-media.is-playable:hover .mgroup-media-play{transform:translate(-50%,-50%)scale(1.08)}.mgroup-stage{border-radius:var(--radius-xl) var(--radius-xl) 0 0;--stage-max:300px;width:calc(100% + 28px);margin:-12px -14px 10px;overflow:hidden}.mentions{flex-direction:column;margin-top:8px;display:flex}.mention{cursor:pointer;align-items:flex-start;gap:calc(var(--spacing) * 3);transition:var(--transition);padding:11px 2px;display:flex}.mention+.mention{border-top:1px solid var(--border)}.mention:hover{background:var(--card-hover)}.mention.picked{background:var(--tag)}.mention-pick{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex:none;margin-top:11px}.mention-av{background:var(--tag);border:1px solid var(--border);border-radius:3.40282e38px;flex:none;width:36px;height:36px;position:relative;overflow:visible}.mention-av-init{color:var(--muted);border-radius:3.40282e38px;justify-content:center;align-items:center;font-size:14px;font-weight:700;display:flex;position:absolute;inset:0}.mention-av-img{object-fit:cover;border-radius:3.40282e38px;width:100%;height:100%;position:absolute;inset:0}.mention-av-badge{background:var(--card);width:16px;height:16px;color:var(--brand);border:1px solid var(--border);border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex;position:absolute;bottom:-3px;right:-3px}.mention-av-badge svg{fill:currentColor;width:9.5px;height:9.5px}.mention-body{gap:calc(var(--spacing) * .5);flex-direction:column;flex:1;min-width:0;display:flex}.mention-head{align-items:baseline;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.mention-who{color:var(--fg);font-size:13px;font-weight:650}.mention-when{color:var(--muted);font-size:11.5px}.mention-when:before{content:"·";color:var(--border);margin-right:7px}.mention-hits{color:var(--fg);background:var(--tag);border:1px solid var(--border);border-radius:3.40282e38px;margin-left:auto;padding:1px 7px;font-size:10.5px;font-weight:700}.mention-text{color:var(--fg);word-break:break-word;margin-top:4px;font-size:13.5px;line-height:1.5}.mention-text mark{color:inherit;background:#f43f5e26;border-radius:4px;padding:1px 3px;font-weight:600}.mention-note{border-left:2px solid var(--brand,#f43f5e);background:var(--tag);color:var(--fg);white-space:pre-wrap;word-break:break-word;border-radius:0 6px 6px 0;margin-top:6px;padding:6px 9px;font-size:12.5px;line-height:1.5;display:block}.mention-meta{align-items:center;gap:calc(var(--spacing) * 3.5);margin-top:6px;display:flex}.mention-stat{align-items:center;gap:var(--spacing);color:var(--muted);font-size:11px;display:inline-flex}.mention-stat svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;width:12px;height:12px}.chip{text-transform:capitalize;letter-spacing:.01em;border:1px solid var(--border);color:var(--muted);border-radius:3.40282e38px;padding:1px 7px;font-size:10px;font-weight:600}.chip-positive{color:#15803d;background:#15803d14;border-color:#15803d55}.chip-negative{color:#b91c1c;background:#b91c1c14;border-color:#b91c1c55}.chip-mixed{color:#a16207;background:#a1620714;border-color:#a1620755}.chip-neutral{color:var(--muted)}.chip-cat{background:var(--tag)}.mention-more{cursor:pointer;border-radius:var(--radius-xl);width:100%;color:var(--fg);background:var(--tag);border:1px solid var(--border);transition:var(--transition);margin-top:12px;padding:10px;font-size:13px;font-weight:600;display:block}.mention-more:hover:not(:disabled){border-color:var(--muted)}.mention-more:disabled{opacity:.6;cursor:default}.sm-thumb-badged{flex:none;position:relative;overflow:visible}.sm-thumb-img{object-fit:cover;border-radius:var(--radius-lg);width:100%;height:100%;display:block}.sm-thumb{border-radius:var(--radius-lg);object-fit:cover;background:var(--tag);border:1px solid var(--border);flex:none;width:56px;height:56px}.tag.copyable{cursor:pointer;border:1px solid var(--border);font:inherit;align-items:center;gap:5px;font-size:12px;display:inline-flex}.tag.copyable:hover{border-color:var(--accent)}.tag.warn{background:var(--red)}@supports (color:color-mix(in lab, red, red)){.tag.warn{background:color-mix(in srgb, var(--red) 12%, transparent)}}.tag.warn{color:var(--red);border:1px solid var(--red)}@supports (color:color-mix(in lab, red, red)){.tag.warn{border:1px solid color-mix(in srgb, var(--red) 35%, transparent)}}.lede-box{background:var(--tag);border-radius:var(--radius-sm);margin-bottom:12px;padding:11px 13px;font-size:13.5px;line-height:1.6}.steps-list{gap:calc(var(--spacing) * 2);flex-direction:column;display:flex}.step-row{align-items:flex-start;gap:calc(var(--spacing) * 2.5);grid-template-columns:78px 1fr;display:grid}.step-k{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);padding-top:2px;font-size:10.5px;font-weight:700}.step-v{font-size:13px;line-height:1.5}.an-list{margin:0;padding-left:18px;font-size:13px;line-height:1.55}.an-list li{margin:4px 0}.clamp6{-webkit-line-clamp:6;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hook-bar-track{align-items:center;gap:calc(var(--spacing) * 2.5);margin-top:6px;display:flex}.hook-bar{background:var(--tag);border-radius:3.40282e38px;flex:1;height:10px;overflow:hidden}.hook-bar-fill{border-radius:3.40282e38px;height:100%;transition:width .8s cubic-bezier(.4,0,.2,1)}.hook-score{text-align:right;min-width:40px;font-size:15px;font-weight:800}.quote-box{border-radius:var(--radius-md);background:var(--tag);border-left:3px solid var(--blue);margin:6px 0;padding:10px 14px;font-size:13px;font-weight:600;line-height:1.45;position:relative}.quote-at{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--muted);margin-bottom:4px;font-size:11px;font-weight:700;display:block}.quote-box .copy-btn{cursor:pointer;border-radius:var(--radius-md);background:var(--card);border:1px solid var(--border);color:var(--muted);transition:var(--transition);opacity:0;padding:3px 8px;font-size:10px;position:absolute;top:8px;right:8px}.quote-box:hover .copy-btn{opacity:1}.copy-btn:hover{background:var(--accent);color:var(--card)}.theme-chip{align-items:center;gap:calc(var(--spacing) * 1.5);background:var(--tag);border:1px solid var(--border);color:var(--fg);border-radius:3.40282e38px;margin:0 4px 5px 0;padding:4px 10px;font-size:12px;display:inline-flex}.theme-chip b{color:var(--brand,var(--blue));font-variant-numeric:tabular-nums}.sec-label{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:7px;font-size:11px;font-weight:700}.cbadge{white-space:nowrap;border-radius:4px;padding:1px 5px;font-size:10px;font-weight:700}.cbadge.pin{color:#b45309;background:#fef3c7}.cbadge.liked{color:#be185d;background:#fce7f3}.cmeta{align-items:center;gap:calc(var(--spacing) * 2);color:var(--muted);flex-wrap:wrap;margin-top:5px;font-size:11px;display:flex}.ctext{color:var(--fg);font-size:13px;line-height:1.45}.ctext.clamp{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.cmore{color:var(--blue);cursor:pointer;background:0 0;border:none;padding:3px 0 0;font-family:inherit;font-size:11.5px;font-weight:600}.comment-row{justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing) * 2.5);border-radius:var(--radius-md);border-bottom:1px solid var(--border);transition:var(--transition);padding:10px 0;display:flex}.comment-row:last-child{border-bottom:none}.comment-row:hover{background:var(--tag)}.creator-card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);width:min(240px,80vw);min-width:min(240px,80vw);transition:var(--transition);scroll-snap-align:start;flex-shrink:0;padding:16px;display:block}.creator-card:hover{border-color:var(--muted)}.avatar{object-fit:cover;border:2px solid var(--border);border-radius:3.40282e38px;width:52px;height:52px}.avatar-placeholder{border-radius:3.40282e38px;justify-content:center;align-items:center;width:52px;height:52px;font-size:22px;display:flex}.verified{color:#fff;border-radius:3.40282e38px;justify-content:center;align-items:center;width:18px;height:18px;margin-left:4px;font-size:10px;display:inline-flex}.sound-card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);width:min(300px,88vw);min-width:min(300px,88vw);transition:var(--transition);scroll-snap-align:start;flex-shrink:0;padding:14px;display:block}.sound-card:hover{border-color:var(--muted)}.sound-cover{border-radius:var(--radius-md);object-fit:cover;width:68px;height:68px}.mp{--ar-w:9;--ar-h:16;width:min(100%, calc(var(--stage-max,520px) * var(--ar-w) / var(--ar-h)));background:#000;border:2px solid #0000;border-radius:18px;margin-inline:auto;position:relative;overflow:hidden}.mp.playing{border-color:var(--brand)}.card-media>.mp{width:100%}.mp.h{--ar-w:16;--ar-h:9}.mp.sq{--ar-w:1;--ar-h:1}.mp-stage{width:100%;aspect-ratio:var(--ar-w) / var(--ar-h);max-height:var(--stage-max,520px);background:#000;position:relative;overflow:hidden}.mp .mp-stage>video{object-fit:contain;background:#000;width:100%;height:100%;max-height:none;display:block}.mp .mp-slide{object-fit:contain;opacity:0;background:#000;width:100%;height:100%;max-height:none;transition:opacity .45s;position:absolute;inset:0;transform:none}.mp-slide.active{opacity:1}.mp-ov{pointer-events:none;z-index:2;position:absolute;inset:0}.mp-ov:after{content:"";pointer-events:none;background:linear-gradient(#0000,#00000047 38%,#000000b8);height:46%;position:absolute;bottom:0;left:0;right:0}.mp-ov:before{content:"";pointer-events:none;background:linear-gradient(#00000073,#0000);height:16%;position:absolute;top:0;left:0;right:0}.mp-badge,.mp-chip,.mp-rail,.mp-meta,.mp-tap,.mp-nav{z-index:1}.mp-ov>*{pointer-events:auto}.mp-badge{text-transform:capitalize;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;background:#0000008c;border-radius:3.40282e38px;align-items:center;gap:5px;padding:4px 9px;font-size:11px;font-weight:700;display:inline-flex;position:absolute;top:10px;left:10px}.mp-pick{z-index:3;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#0000;width:26px;height:26px;transition:var(--transition);background:#0000006b;border:2px solid #ffffffd9;border-radius:3.40282e38px;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:9px;right:9px}.mp-pick:hover{background:#000000a8;transform:scale(1.08)}.mp-open{z-index:3;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;width:26px;height:26px;transition:var(--transition);background:#0000006b;border:2px solid #ffffffd9;border-radius:3.40282e38px;justify-content:center;align-items:center;padding:0;text-decoration-line:none;display:flex;position:absolute;top:9px;right:9px}.mp-open:hover{background:#000000a8;transform:scale(1.08)}.mp-open.with-pick{right:43px}.mp-pick[aria-pressed=true]{background:var(--brand,#ff4d23);color:#fff;border-color:#fff}.mp.picked{outline:2px solid var(--brand,#ff4d23);outline-offset:-2px}.mp-pick~.mp-chip,.mp[data-mp=slides] .mp-chip{top:42px}.pickbar{z-index:20;align-items:center;gap:calc(var(--spacing) * 2.5);background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow-lg);border-radius:3.40282e38px;margin:12px 0 0;padding:10px 12px;animation:.2s ease-out fadeIn;display:flex;position:sticky;bottom:0}.pickbar .n{white-space:nowrap;font-size:13px;font-weight:700}.pickbar .sp{flex:1}.pickbar button{cursor:pointer;white-space:nowrap;border:1px solid var(--border);background:var(--card);color:var(--fg);font:inherit;transition:var(--transition);border-radius:3.40282e38px;padding:6px 13px;font-size:12.5px;font-weight:600}.pickbar button.primary{background:var(--brand,#ff4d23);color:#fff;border-color:#0000}.pickbar button:hover{filter:brightness(1.08)}.pickbar button:disabled{opacity:.5;cursor:not-allowed}.pickbar .hint{color:var(--muted);font-size:11.5px}.mp-chip{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;font-variant-numeric:tabular-nums;background:#0000008c;border-radius:3.40282e38px;padding:3px 9px;font-size:11px;font-weight:700;position:absolute;top:10px;right:10px}.mp-rail{align-items:center;gap:calc(var(--spacing) * 3.5);flex-direction:column;display:flex;position:absolute;bottom:76px;right:8px}.mp-act{cursor:default;background:0 0;border:none;flex-direction:column;align-items:center;gap:3px;padding:0;display:flex}.mp-act .ic{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;width:38px;height:38px;transition:var(--transition);background:#0006;border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex}.mp-act:hover .ic{background:#0000009e;transform:scale(1.06)}.mp-act .n{color:#fff;text-shadow:0 1px 3px #000c;font-variant-numeric:tabular-nums;font-size:11px;font-weight:700}.mp-meta{color:#fff;text-shadow:0 1px 3px #000000d9;position:absolute;bottom:60px;left:12px;right:64px}.mp-handle{margin-bottom:3px;font-size:13px;font-weight:800}.mp-cap{-webkit-line-clamp:2;opacity:.95;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.mp-song{white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:5px;margin-top:6px;font-size:11px;font-weight:600;display:flex;overflow:hidden}.mp-song .note{flex:none;display:inline-flex}.mp.playing .mp-song .note{animation:3s linear infinite spin}.mp-song-t{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes spin{to{transform:rotate(360deg)}}.mp-tap{cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.mp-tap span{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:#fff;width:64px;height:64px;transition:var(--transition);opacity:1;background:#00000073;border-radius:3.40282e38px;justify-content:center;align-items:center;font-size:26px;display:flex}.mp.playing .mp-tap span{opacity:0}.mp.playing:hover .mp-tap span{opacity:.65}.mp-nav{cursor:pointer;color:#fff;opacity:0;width:34px;height:34px;transition:var(--transition);background:#0000008c;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;font-size:18px;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.mp:hover .mp-nav,.mp:focus-within .mp-nav{opacity:1}.mp-nav.prev{left:8px}.mp-nav.next{right:8px}.mp-nav:hover{background:#000c}.mp-ctl{z-index:3;background:linear-gradient(#0000,#000000d9);align-items:center;gap:9px;padding:9px 11px;display:flex;position:absolute;bottom:0;left:0;right:0}.mp-btn{cursor:pointer;color:#111;width:30px;height:30px;transition:var(--transition);background:#fffffff2;border:none;border-radius:3.40282e38px;flex:none;justify-content:center;align-items:center;font-size:12px;display:flex}.mp-btn:hover{transform:scale(1.09)}.mp-time{color:#fff;font-variant-numeric:tabular-nums;text-shadow:0 1px 2px #000c;flex-shrink:0;font-size:10px;font-weight:700}.mp-seek{cursor:pointer;flex:1;align-items:center;min-width:0;height:14px;display:flex;position:relative}.mp-segs{gap:calc(var(--spacing) * .5);border-radius:3.40282e38px;width:100%;height:3px;transition:height .15s;display:flex;overflow:hidden}.mp-seek:hover .mp-segs{height:5px}.mp-seg{background:#ffffff52;border-radius:3.40282e38px;flex:1;height:100%;overflow:hidden}.mp-seg>i{background:#fff;border-radius:3.40282e38px;width:0;height:100%;display:block}.mp-seg.done>i{width:100%}.mp-icon{color:#fff;cursor:pointer;opacity:.9;background:0 0;border:none;flex-shrink:0;padding:0;font-size:14px;line-height:1}.mp-icon:hover{opacity:1}.mp-spin{pointer-events:none;z-index:2;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.mp-spin>i{border:3px solid #ffffff40;border-top-color:#fff;border-radius:3.40282e38px;width:34px;height:34px;animation:.8s linear infinite spin}.mp-err{pointer-events:none;z-index:4;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);text-align:center;color:#fff;background:#000000d1;flex-direction:column;padding:16px;font-size:12px;font-weight:600;display:flex;position:absolute;inset:0}.mp:focus-visible{outline-offset:-2px;outline:2px solid #fff}.mp-btn:focus-visible,.mp-icon:focus-visible,.mp-nav:focus-visible,.mp-tap:focus-visible,.au-play:focus-visible,.gallery-nav:focus-visible,.dot:focus-visible{outline-offset:2px;outline:2px solid #fff}@media (prefers-reduced-motion:reduce){.mp-song .note{animation:none}.mp-slide{transition:none}.mp-spin>i{animation-duration:2s}*{scroll-behavior:auto!important}}.au{align-items:center;gap:calc(var(--spacing) * 2.5);margin-top:10px;display:flex}.au-play{cursor:pointer;color:#fff;background:var(--brand);width:34px;height:34px;transition:var(--transition);border:none;border-radius:3.40282e38px;flex:none;justify-content:center;align-items:center;display:flex}.au-body{flex:1;min-width:0}.au-seek{cursor:pointer;background:var(--fg);border-radius:3.40282e38px;width:100%;height:5px;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.au-seek{background:color-mix(in srgb, var(--fg) 22%, transparent)}}.au-seek>i{background:var(--accent);border-radius:3.40282e38px;width:0;height:100%;display:block}.au-time{color:var(--muted);font-variant-numeric:tabular-nums;justify-content:space-between;margin-top:3px;font-size:10px;display:flex}.au-missing{align-items:center;gap:calc(var(--spacing) * 1.5);color:var(--muted);margin-top:8px;font-size:11px;display:flex}.own-title{color:var(--fg);font-size:16px;font-weight:700}.own-sub{color:var(--muted);margin:3px 0 12px;font-size:12.5px}.own-head{align-items:center;gap:calc(var(--spacing) * 2);color:var(--fg);font-size:16px;font-weight:700;display:flex}.own-tick{color:var(--green);display:inline-flex}.own-connect{text-align:center;flex-direction:column;align-items:center;padding:30px 20px 22px;display:flex}.own-connect .btn{background:var(--accent);color:var(--bg)}.mono{font-family:var(--font-mono)}.conn-row{align-items:flex-start;gap:calc(var(--spacing) * 3);border-bottom:1px solid var(--border);padding:12px 0;display:flex}.conn-row:last-child{border-bottom:none}.conn-body{flex:1;min-width:0}.conn-who{color:var(--fg);font-size:13px;font-weight:650}.conn-sub{color:var(--muted);margin-top:1px;font-size:11.5px}.conn-note{color:var(--muted);margin-top:5px;font-size:11px}.conn-status,.conn-connect{align-self:flex-start;margin-top:2px}.conn-av{background:var(--tag);border:1px solid var(--border);border-radius:3.40282e38px;flex-shrink:0;width:32px;height:32px;position:relative;overflow:visible}.conn-av-empty{background:0 0;border-style:dashed}.conn-av-mark{color:var(--muted);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.credits-card{border-radius:var(--radius-2xl);border:1px solid var(--border);background:var(--card);max-width:380px;margin:8px 0;padding:24px}.pack{cursor:pointer;border-radius:var(--radius-xl);text-align:center;border:1px solid var(--border);transition:var(--transition);padding:16px}.pack:hover{border-color:var(--muted)}.pack-featured{border-radius:var(--radius-xl);text-align:center;border:2px solid var(--accent);padding:16px}.tier-badge{color:#1e40af;background:#dbeafe;border-radius:3.40282e38px;align-items:center;padding:4px 12px;font-size:12px;font-weight:700;display:inline-flex}.free-tag{align-items:center;gap:var(--spacing);color:#065f46;transition:var(--transition);background:#d1fae5;border-radius:3.40282e38px;margin:2px;padding:4px 10px;font-size:11px;font-weight:600;display:inline-flex}.json-block{border-radius:var(--radius-md);background:var(--tag);border:1px solid var(--border);white-space:pre-wrap;word-break:break-all;max-height:320px;margin-top:10px;padding:14px;font-family:SF Mono,Monaco,monospace;font-size:12px;overflow-y:auto}.empty-state{text-align:center;color:var(--muted);padding:48px 24px}.empty-state .icon{margin-bottom:12px;font-size:48px}.empty-state .text{font-size:14px}}@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.bottom-3{bottom:calc(var(--spacing) * 3)}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-full{height:100%}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.shrink{flex-shrink:1}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-line{border-color:var(--border)}.bg-black{background-color:var(--color-black)}.bg-soft{background-color:var(--tag)}.bg-surface{background-color:var(--card)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-3{padding:calc(var(--spacing) * 3)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-10{padding-block:calc(var(--spacing) * 10)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-wrap{text-wrap:wrap}.text-ink{color:var(--fg)}.text-muted{color:var(--muted)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-all{-webkit-user-select:all;user-select:all}}:root{color-scheme:light dark;--bg:#fafbfc;--fg:#111827;--muted:#5f6773;--border:#e5e7eb;--card:#fff;--card-hover:#f3f4f6;--tag:#f3f4f6;--accent:#14151a;--brand:#ff4d23;--brand-2:#ff8a3d;--brand-soft:#ff4d2321;--radius:10px;--radius-sm:6px;--transition:all .25s cubic-bezier(.4, 0, .2, 1);--shadow-md:0 4px 12px #00000014;--shadow-lg:0 8px 24px #0000001f;--green:#047857;--amber:#b45309;--red:#dc2626;--blue:#2563eb}@media (prefers-color-scheme:dark){:root{--bg:#0f172a;--fg:#f1f5f9;--muted:#a8b8cc;--border:#334155;--green:#34d399;--amber:#fbbf24;--red:#f87171;--blue:#60a5fa;--card:#1e293b;--card-hover:#273548;--tag:#1e293b;--accent:#e2e8f0;--brand:#ff5c33;--brand-2:#ff9351;--brand-soft:#ff5c3329;--shadow-md:0 4px 12px #0000004d;--shadow-lg:0 8px 24px #0006}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
|
|
21
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{overflow:hidden auto}[hidden]{display:none!important}a{color:inherit;text-decoration:none}body{color:var(--fg);background:0 0;max-width:100vw;padding:10px;font-family:system-ui,-apple-system,Segoe UI,sans-serif;line-height:1.5;overflow-x:hidden}}@layer components{.load-bar{background:var(--tag);border-radius:3.40282e38px;height:3px;margin-bottom:14px;position:relative;overflow:hidden}.load-bar:after{content:"";background:var(--brand);border-radius:3.40282e38px;width:42%;animation:1.35s cubic-bezier(.45,0,.55,1) infinite sweep;position:absolute;top:0;bottom:0}@keyframes sweep{0%{left:-45%}50%{left:58%}to{left:-45%}}.load-head{align-items:center;gap:calc(var(--spacing) * 2);color:var(--muted);margin-bottom:11px;font-size:12.5px;font-weight:600;display:flex}.load-price{color:var(--brand);white-space:nowrap;margin-left:auto;font-weight:700}.mk{color:var(--fg);flex-shrink:0;display:block}.mk .iris{animation:3.6s cubic-bezier(.5,0,.5,1) infinite mkScan}.mk .lid{transform-box:fill-box;transform-origin:50%;animation:5.4s ease-in-out infinite mkBlink}@keyframes mkScan{0%{transform:translate(0)}18%{transform:translate(-15px,7px)}34%{transform:translate(11px,-5px)}52%{transform:translate(-8px,12px)}70%{transform:translate(14px,3px)}86%{transform:translate(-4px,-6px)}to{transform:translate(0)}}@keyframes mkBlink{0%,88%,to{transform:scaleY(1)}93%{transform:scaleY(.08)}}.load-known{gap:calc(var(--spacing) * 2);flex-wrap:wrap;margin-bottom:11px;display:flex}.load-fact{align-items:center;gap:calc(var(--spacing) * 2);border:1px solid var(--border);background:var(--card);color:var(--fg);border-radius:3.40282e38px;padding:4px 11px;font-size:12px;font-weight:600;display:inline-flex}.load-fact-mark{color:var(--brand);display:inline-flex}.load-fact-mark svg{fill:currentColor;width:13px;height:13px}.led .card-body{padding:4px 14px 12px}.led-row{align-items:flex-start;gap:calc(var(--spacing) * 3);border-bottom:1px solid var(--border);padding:10px 0;display:flex}.led-row:last-of-type{border-bottom:none}.led-body{flex:1;min-width:0}.led-label{color:var(--fg);font-size:12.5px;font-weight:600}.led-detail{color:var(--muted);margin-top:1px;font-size:11px}.led-cost{background:var(--tag);color:var(--fg);font-variant-numeric:tabular-nums;border-radius:3.40282e38px;flex:none;align-items:center;padding:2px 9px;font-size:11.5px;font-weight:700;display:inline-flex}.led-mark{width:16px;color:var(--brand);flex:none;justify-content:center;align-items:center;margin-top:1px;display:inline-flex}.led-mark svg{fill:currentColor;width:13px;height:13px}.led-dot{border:1px solid var(--border);border-radius:50%;flex:none;width:13px;height:13px;margin-top:2px}.led-foot{color:var(--muted);margin-top:10px;font-size:11.5px;line-height:1.5}.load-centre{text-align:center;flex-direction:column;align-items:center;padding:30px 0 22px;display:flex}.load-centre .load-what{color:var(--fg);margin-top:20px;font-size:14px;font-weight:700}.load-centre .load-sub{color:var(--muted);margin-top:5px;font-size:12.5px}.load-centre .load-bar{width:210px;margin:16px 0 0}.sk{border-radius:var(--radius-md);background:var(--tag);position:relative;overflow:hidden}.sk-media{aspect-ratio:9/16;width:100%;max-height:var(--stage-max,420px);border-radius:0}.sk-media.h{aspect-ratio:16/9}.sk-line{height:11px;margin-top:8px}.sk-line.w40{width:40%}.sk-line.w60{width:60%}.sk-line.w80{width:80%}.sk-pill{border-radius:999px;width:76px;height:22px;margin:0 5px 5px 0;display:inline-block}.sk-card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);flex-shrink:0;width:min(340px,86vw);min-width:min(340px,86vw);overflow:hidden}.sk-body{padding:13px 14px}.sk-row{align-items:center;gap:calc(var(--spacing) * 3);border-bottom:1px solid var(--border);padding:11px 0;display:flex}.sk-avatar{border-radius:10px;flex-shrink:0;width:44px;height:44px}.sk-strip{gap:calc(var(--spacing) * 3);padding:2px 0 8px;display:flex;overflow:hidden}@media (prefers-reduced-motion:reduce){.load-bar:after,.mk .iris,.mk .lid{animation:none}.load-bar:after{opacity:.5;width:100%;left:0}}.fade-in{animation:.4s ease-out fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.stagger>*{opacity:0;animation:.4s ease-out forwards fadeIn}.stagger>:first-child{animation-delay:50ms}.stagger>:nth-child(2){animation-delay:.1s}.stagger>:nth-child(3){animation-delay:.15s}.stagger>:nth-child(4){animation-delay:.2s}.stagger>:nth-child(5){animation-delay:.25s}.stagger>:nth-child(6){animation-delay:.3s}.stagger>:nth-child(7){animation-delay:.35s}.stagger>:nth-child(8){animation-delay:.4s}.gallery-wrap{max-width:100%;position:relative;overflow:hidden}.gallery{gap:calc(var(--spacing) * 3);scroll-snap-type:x mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:none;width:100%;max-width:100%;padding:2px 0 8px;display:flex;overflow-x:auto}.gallery::-webkit-scrollbar{display:none}.gallery-dots{justify-content:center;gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;margin-top:10px;display:flex}.gallery-dots .dot{background:var(--border);cursor:pointer;width:8px;height:8px;transition:var(--transition);border:none;border-radius:50%;padding:0}.gallery-dots .dot.active{background:var(--accent);border-radius:999px;width:20px}.gallery-nav{z-index:2;cursor:pointer;background:var(--card);border:1px solid var(--border);width:32px;height:32px;color:var(--fg);transition:var(--transition);opacity:0;border-radius:50%;justify-content:center;align-items:center;font-size:14px;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.gallery-wrap:hover .gallery-nav{opacity:1}.gallery-nav:hover{background:var(--accent);color:var(--card)}.gallery-nav.prev{left:2px}.gallery-nav.next{right:2px}.card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);width:min(380px,100%);min-width:min(380px,100%);max-width:100%;transition:var(--transition);cursor:default;scroll-snap-align:center;flex-shrink:0;display:block}.card.card-media{--ar-w:9;--ar-h:16;width:min(100%, calc(var(--stage-max,520px) * var(--ar-w) / var(--ar-h)));background:0 0;border-color:#0000;min-width:0;margin:0 auto}.card.card-media.h{--ar-w:16;--ar-h:9}.card.card-media.sq{--ar-w:1;--ar-h:1}.card-media .card-foot{background:0 0;justify-content:flex-end;padding:8px 4px 0;display:flex}.card-media .btn-sm{margin-top:0}.card:hover{border-color:var(--muted)}.card-media:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.card-wide{width:100%}.card img:not(.mp-slide){object-fit:cover;width:100%;height:260px;display:block}.card-wide img:not(.mp-slide){max-height:340px}.card video{object-fit:contain;background:#000;border:none;outline:none;width:100%;min-height:220px;max-height:520px;display:block}.card-wide video{max-height:520px}.card-body{padding:14px 16px}.badge{align-items:center;gap:var(--spacing);text-transform:capitalize;transition:var(--transition);border-radius:3.40282e38px;padding:3px 10px;font-size:11px;font-weight:700;display:inline-flex}.handle{color:var(--muted);margin-left:auto;font-size:12px}.tag{align-items:center;gap:var(--spacing);transition:var(--transition);cursor:default;border-radius:3.40282e38px;margin:2px;padding:4px 10px;font-size:12px;display:inline-flex}.tag.clickable{cursor:pointer;-webkit-user-select:none;user-select:none}.tag.clickable:hover{background:var(--tag)}.tag.copied{background:var(--green)!important;color:#fff!important}.title{margin:6px 0;font-size:14px;font-weight:600;line-height:1.35}.card-wide .title{font-size:16px;font-weight:700}.caption{color:var(--muted);margin:6px 0 0;font-size:13px;line-height:1.5}.stats{align-items:center;gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;margin-top:8px;display:flex}.stat-pill{align-items:center;gap:var(--spacing);color:var(--fg);background:var(--tag);transition:var(--transition);border-radius:3.40282e38px;padding:5px 12px;font-size:12px;display:inline-flex}.stat-pill:hover{background:var(--border)}.btn{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 1.5);border-radius:var(--radius-lg);color:#fff;background:var(--brand);transition:var(--transition);border:none;margin-top:12px;padding:8px 18px;font-size:13px;font-weight:600;text-decoration-line:none;display:inline-flex}.btn:hover{background:var(--brand-2)}.btn:active{opacity:.9}.btn-sm{margin-top:8px;padding:5px 12px;font-size:11px}.section{border-bottom:1px solid var(--border);margin-bottom:6px;overflow:hidden}.section-header{cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--transition);justify-content:space-between;align-items:center;padding:10px 2px;display:flex}.section-header:hover .section-label{color:var(--fg)}.section-label{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:700}.section-chevron{color:var(--muted);font-size:12px;transition:transform .2s}.section-header.open .section-chevron{transform:rotate(180deg)}.section-content{max-height:0;padding:0 2px;transition:max-height .28s,padding .28s;overflow:hidden}.section-content.open{max-height:2400px;padding:4px 2px 14px}.section-text{color:var(--fg);font-size:13px;line-height:1.6}.ai-actions{gap:calc(var(--spacing) * 2);flex-wrap:wrap;margin-top:14px;display:flex}.ai-btn{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2);border:1px solid var(--border);background:var(--card);color:var(--fg);font:inherit;transition:var(--transition);border-radius:3.40282e38px;padding:8px 13px;font-size:13px;font-weight:600;display:inline-flex}.ai-btn:hover:not(:disabled){border-color:var(--brand);background:var(--brand-soft)}.ai-btn:disabled{opacity:.55;cursor:not-allowed}.ai-btn .spark{color:var(--brand);flex-shrink:0;display:inline-flex}.ai-btn .price{white-space:nowrap;color:var(--brand);background:var(--brand-soft);border-radius:3.40282e38px;align-items:center;padding:2px 7px;font-size:11px;font-weight:700;display:inline-flex}.ai-btn.busy .spark{animation:1.1s linear infinite spin}.ai-note{color:var(--muted);margin-top:8px;font-size:11.5px}.an-title{align-items:center;gap:calc(var(--spacing) * 2);margin-bottom:14px;font-size:16px;font-weight:700;display:flex}.verdict{gap:calc(var(--spacing) * 2.5);grid-template-columns:repeat(1,minmax(0,1fr));margin-bottom:12px;display:grid}@media (min-width:420px){.verdict{grid-template-columns:1fr 1fr}}.meter{border-radius:var(--radius-md);background:var(--tag);padding:9px 11px}.meter-top{justify-content:space-between;align-items:baseline;gap:calc(var(--spacing) * 2);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700;display:flex}.meter-top b{letter-spacing:0;font-size:14px}.meter-track{background:var(--border);border-radius:3.40282e38px;height:5px;margin-top:6px;overflow:hidden}.meter-track>i{border-radius:3.40282e38px;height:100%;display:block}.chiprow{gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;display:flex}.mhead{z-index:3;background:var(--bg);border-bottom:1px solid var(--border);padding:2px 0 10px;position:sticky;top:0}.mhead-top{justify-content:space-between;align-items:flex-end;gap:calc(var(--spacing) * 2.5);flex-wrap:wrap;display:flex}.mention-term{color:var(--muted);margin-bottom:2px;font-size:13px}.mention-term b{color:var(--fg)}.mention-total{color:var(--fg);letter-spacing:-.01em;font-size:20px;font-weight:650}.mention-down{color:var(--muted);margin-top:8px;font-size:12px}.mention-window{color:var(--muted);border:1px solid var(--border);border-radius:3.40282e38px;margin-left:6px;padding:1px 8px;font-size:11px;display:inline-block}.mention-summary{color:var(--muted);max-width:60ch;margin-top:6px;font-size:13px;line-height:1.45}.msort{background:var(--tag);border-radius:3.40282e38px;flex:none;align-items:center;gap:2px;padding:3px;display:inline-flex}.msort-btn{color:var(--muted);cursor:pointer;transition:var(--transition);white-space:nowrap;background:0 0;border:0;border-radius:999px;padding:5px 14px;font-size:11.5px;font-weight:600}.msort-btn:hover{color:var(--fg)}.msort-btn.on{color:var(--card);background:var(--accent)}.mchips{gap:calc(var(--spacing) * 1.5);flex-wrap:wrap;margin-top:10px;display:flex}.mchip{cursor:pointer;align-items:center;gap:calc(var(--spacing) * 2);color:var(--muted);border:1px solid var(--border);transition:var(--transition);white-space:nowrap;background:0 0;border-radius:3.40282e38px;padding:5px 12px;font-size:12px;font-weight:600;display:inline-flex}.mchip:hover{color:var(--fg);border-color:var(--muted)}.mchip b{color:var(--fg);background:var(--tag);font-variant-numeric:tabular-nums;border-radius:3.40282e38px;padding:1px 7px;font-weight:700}.mchip.on{color:var(--card);background:var(--accent);border-color:#0000}.mchip.on b{color:inherit;background:0 0;padding:1px 0}.mchip.on .mchip-mark{color:inherit}.mchip.quiet{opacity:.5;cursor:default}.mchip.quiet:hover{color:var(--muted);border-color:var(--border)}.mchip-mark{color:var(--brand);display:inline-flex}.mchip-mark svg{fill:currentColor;width:13px;height:13px}.mgroups{gap:calc(var(--spacing) * 2.5);flex-direction:column;margin-top:12px;display:flex}.mgroup{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);padding:12px 14px 6px}.mgroup-head{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;margin-bottom:6px;display:flex}.mgroup-plat{align-items:center;gap:calc(var(--spacing) * 1.5);color:var(--brand);font-size:11px;font-weight:600;display:inline-flex}.mgroup-plat svg{fill:currentColor;width:12px;height:12px}.mgroup-about{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border:1px solid var(--border);border-radius:3.40282e38px;padding:1px 7px;font-size:10.5px}.mgroup-reach{color:var(--muted);margin-left:auto;font-size:11px}.mgroup-title{color:var(--fg);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.mgroup-rest{color:var(--muted);cursor:pointer;transition:var(--transition);background:0 0;border:0;align-self:flex-start;margin-top:2px;padding:2px 0;font-size:11.5px;font-weight:600}.mgroup-rest:hover{color:var(--fg)}.mgroup-actions{align-items:center;gap:calc(var(--spacing) * 3);margin-top:5px;display:flex}.mgroup-link{color:var(--muted);font-size:11.5px;text-decoration:none}.mgroup-link:hover{color:var(--fg);text-decoration:underline}.mgroup-all{color:var(--muted);cursor:pointer;transition:var(--transition);background:0 0;border:0;padding:0;font-size:11.5px;font-weight:600}.mgroup-all:hover{color:var(--fg)}.mgroup-none{color:var(--muted);margin-top:8px;font-size:12px}.mgroup-stage{--stage-max:300px;border-radius:var(--radius-xl) var(--radius-xl) 0 0;width:calc(100% + 28px);margin:-12px -14px 10px;overflow:hidden}.mgroup-stage .mp{border:0;border-radius:0;width:100%}.mgroup-media{background:var(--muted);border-radius:var(--radius-xl) var(--radius-xl) 0 0;cursor:default;border:0;width:calc(100% + 28px);height:132px;margin:-12px -14px 10px;padding:0;display:block;position:relative;overflow:hidden}.mgroup-media.is-playable{cursor:pointer}.mgroup-media-img{object-fit:cover;width:100%;height:100%;display:block}.mgroup-media-blank{opacity:.35;justify-content:center;align-items:center;width:100%;height:100%;display:flex}.mgroup-media-play{color:#fff;background:#00000094;border-radius:999px;justify-content:center;align-items:center;width:40px;height:40px;transition:transform .16s cubic-bezier(.16,1,.3,1);display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.mgroup-media.is-playable:hover .mgroup-media-play{transform:translate(-50%,-50%)scale(1.08)}.mgroup-stage{border-radius:var(--radius-xl) var(--radius-xl) 0 0;--stage-max:300px;width:calc(100% + 28px);margin:-12px -14px 10px;overflow:hidden}.mentions{flex-direction:column;margin-top:8px;display:flex}.mention{cursor:pointer;align-items:flex-start;gap:calc(var(--spacing) * 3);transition:var(--transition);padding:11px 2px;display:flex}.mention+.mention{border-top:1px solid var(--border)}.mention:hover{background:var(--card-hover)}.mention.picked{background:var(--tag)}.mention-pick{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex:none;margin-top:11px}.mention-av{background:var(--tag);border:1px solid var(--border);border-radius:3.40282e38px;flex:none;width:36px;height:36px;position:relative;overflow:visible}.mention-av-init{color:var(--muted);border-radius:3.40282e38px;justify-content:center;align-items:center;font-size:14px;font-weight:700;display:flex;position:absolute;inset:0}.mention-av-img{object-fit:cover;border-radius:3.40282e38px;width:100%;height:100%;position:absolute;inset:0}.mention-av-badge{background:var(--card);width:16px;height:16px;color:var(--brand);border:1px solid var(--border);border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex;position:absolute;bottom:-3px;right:-3px}.mention-av-badge svg{fill:currentColor;width:9.5px;height:9.5px}.mention-body{gap:calc(var(--spacing) * .5);flex-direction:column;flex:1;min-width:0;display:flex}.mention-head{align-items:baseline;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.mention-who{color:var(--fg);font-size:13px;font-weight:650}.mention-when{color:var(--muted);font-size:11.5px}.mention-when:before{content:"·";color:var(--border);margin-right:7px}.mention-hits{color:var(--fg);background:var(--tag);border:1px solid var(--border);border-radius:3.40282e38px;margin-left:auto;padding:1px 7px;font-size:10.5px;font-weight:700}.mention-text{color:var(--fg);word-break:break-word;margin-top:4px;font-size:13.5px;line-height:1.5}.mention-text mark{color:inherit;background:#f43f5e26;border-radius:4px;padding:1px 3px;font-weight:600}.mention-note{border-left:2px solid var(--brand,#f43f5e);background:var(--tag);color:var(--fg);white-space:pre-wrap;word-break:break-word;border-radius:0 6px 6px 0;margin-top:6px;padding:6px 9px;font-size:12.5px;line-height:1.5;display:block}.mention-meta{align-items:center;gap:calc(var(--spacing) * 3.5);margin-top:6px;display:flex}.mention-stat{align-items:center;gap:var(--spacing);color:var(--muted);font-size:11px;display:inline-flex}.mention-stat svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;width:12px;height:12px}.chip{text-transform:capitalize;letter-spacing:.01em;border:1px solid var(--border);color:var(--muted);border-radius:3.40282e38px;padding:1px 7px;font-size:10px;font-weight:600}.chip-positive{color:#15803d;background:#15803d14;border-color:#15803d55}.chip-negative{color:#b91c1c;background:#b91c1c14;border-color:#b91c1c55}.chip-mixed{color:#a16207;background:#a1620714;border-color:#a1620755}.chip-neutral{color:var(--muted)}.chip-cat{background:var(--tag)}.mention-more{cursor:pointer;border-radius:var(--radius-xl);width:100%;color:var(--fg);background:var(--tag);border:1px solid var(--border);transition:var(--transition);margin-top:12px;padding:10px;font-size:13px;font-weight:600;display:block}.mention-more:hover:not(:disabled){border-color:var(--muted)}.mention-more:disabled{opacity:.6;cursor:default}.sm-thumb-badged{flex:none;position:relative;overflow:visible}.sm-thumb-img{object-fit:cover;border-radius:var(--radius-lg);width:100%;height:100%;display:block}.sm-thumb{border-radius:var(--radius-lg);object-fit:cover;background:var(--tag);border:1px solid var(--border);flex:none;width:56px;height:56px}.tag.copyable{cursor:pointer;border:1px solid var(--border);font:inherit;align-items:center;gap:5px;font-size:12px;display:inline-flex}.tag.copyable:hover{border-color:var(--accent)}.tag.warn{background:var(--red)}@supports (color:color-mix(in lab, red, red)){.tag.warn{background:color-mix(in srgb, var(--red) 12%, transparent)}}.tag.warn{color:var(--red);border:1px solid var(--red)}@supports (color:color-mix(in lab, red, red)){.tag.warn{border:1px solid color-mix(in srgb, var(--red) 35%, transparent)}}.lede-box{background:var(--tag);border-radius:var(--radius-sm);margin-bottom:12px;padding:11px 13px;font-size:13.5px;line-height:1.6}.steps-list{gap:calc(var(--spacing) * 2);flex-direction:column;display:flex}.step-row{align-items:flex-start;gap:calc(var(--spacing) * 2.5);grid-template-columns:78px 1fr;display:grid}.step-k{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);padding-top:2px;font-size:10.5px;font-weight:700}.step-v{font-size:13px;line-height:1.5}.an-list{margin:0;padding-left:18px;font-size:13px;line-height:1.55}.an-list li{margin:4px 0}.clamp6{-webkit-line-clamp:6;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hook-bar-track{align-items:center;gap:calc(var(--spacing) * 2.5);margin-top:6px;display:flex}.hook-bar{background:var(--tag);border-radius:3.40282e38px;flex:1;height:10px;overflow:hidden}.hook-bar-fill{border-radius:3.40282e38px;height:100%;transition:width .8s cubic-bezier(.4,0,.2,1)}.hook-score{text-align:right;min-width:40px;font-size:15px;font-weight:800}.quote-box{border-radius:var(--radius-md);background:var(--tag);border-left:3px solid var(--blue);margin:6px 0;padding:10px 14px;font-size:13px;font-weight:600;line-height:1.45;position:relative}.quote-at{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--muted);margin-bottom:4px;font-size:11px;font-weight:700;display:block}.quote-box .copy-btn{cursor:pointer;border-radius:var(--radius-md);background:var(--card);border:1px solid var(--border);color:var(--muted);transition:var(--transition);opacity:0;padding:3px 8px;font-size:10px;position:absolute;top:8px;right:8px}.quote-box:hover .copy-btn{opacity:1}.copy-btn:hover{background:var(--accent);color:var(--card)}.theme-chip{align-items:center;gap:calc(var(--spacing) * 1.5);background:var(--tag);border:1px solid var(--border);color:var(--fg);border-radius:3.40282e38px;margin:0 4px 5px 0;padding:4px 10px;font-size:12px;display:inline-flex}.theme-chip b{color:var(--brand,var(--blue));font-variant-numeric:tabular-nums}.sec-label{letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:7px;font-size:11px;font-weight:700}.cbadge{white-space:nowrap;border-radius:4px;padding:1px 5px;font-size:10px;font-weight:700}.cbadge.pin{color:#b45309;background:#fef3c7}.cbadge.liked{color:#be185d;background:#fce7f3}.cmeta{align-items:center;gap:calc(var(--spacing) * 2);color:var(--muted);flex-wrap:wrap;margin-top:5px;font-size:11px;display:flex}.ctext{color:var(--fg);font-size:13px;line-height:1.45}.ctext.clamp{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.cmore{color:var(--blue);cursor:pointer;background:0 0;border:none;padding:3px 0 0;font-family:inherit;font-size:11.5px;font-weight:600}.comment-row{justify-content:space-between;align-items:flex-start;gap:calc(var(--spacing) * 2.5);border-radius:var(--radius-md);border-bottom:1px solid var(--border);transition:var(--transition);padding:10px 0;display:flex}.comment-row:last-child{border-bottom:none}.comment-row:hover{background:var(--tag)}.creator-card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);width:min(240px,80vw);min-width:min(240px,80vw);transition:var(--transition);scroll-snap-align:start;flex-shrink:0;padding:16px;display:block}.creator-card:hover{border-color:var(--muted)}.avatar{object-fit:cover;border:2px solid var(--border);border-radius:3.40282e38px;width:52px;height:52px}.avatar-placeholder{border-radius:3.40282e38px;justify-content:center;align-items:center;width:52px;height:52px;font-size:22px;display:flex}.verified{color:#fff;border-radius:3.40282e38px;justify-content:center;align-items:center;width:18px;height:18px;margin-left:4px;font-size:10px;display:inline-flex}.sound-card{border-radius:var(--radius-xl);border:1px solid var(--border);background:var(--card);width:min(300px,88vw);min-width:min(300px,88vw);transition:var(--transition);scroll-snap-align:start;flex-shrink:0;padding:14px;display:block}.sound-card:hover{border-color:var(--muted)}.sound-cover{border-radius:var(--radius-md);object-fit:cover;width:68px;height:68px}.mp{--ar-w:9;--ar-h:16;width:min(100%, calc(var(--stage-max,520px) * var(--ar-w) / var(--ar-h)));background:#000;border:2px solid #0000;border-radius:18px;margin-inline:auto;position:relative;overflow:hidden}.mp.playing{border-color:var(--brand)}.card-media>.mp{width:100%}.mp.h{--ar-w:16;--ar-h:9}.mp.sq{--ar-w:1;--ar-h:1}.mp-stage{width:100%;aspect-ratio:var(--ar-w) / var(--ar-h);max-height:var(--stage-max,520px);background:#000;position:relative;overflow:hidden}.mp .mp-stage>video{object-fit:contain;background:#000;width:100%;height:100%;max-height:none;display:block}.mp .mp-slide{object-fit:contain;opacity:0;background:#000;width:100%;height:100%;max-height:none;transition:opacity .45s;position:absolute;inset:0;transform:none}.mp-slide.active{opacity:1}.mp-ov{pointer-events:none;z-index:2;position:absolute;inset:0}.mp-ov:after{content:"";pointer-events:none;background:linear-gradient(#0000,#00000047 38%,#000000b8);height:46%;position:absolute;bottom:0;left:0;right:0}.mp-ov:before{content:"";pointer-events:none;background:linear-gradient(#00000073,#0000);height:16%;position:absolute;top:0;left:0;right:0}.mp-badge,.mp-chip,.mp-rail,.mp-meta,.mp-tap,.mp-nav{z-index:1}.mp-ov>*{pointer-events:auto}.mp-badge{text-transform:capitalize;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;background:#0000008c;border-radius:3.40282e38px;align-items:center;gap:5px;padding:4px 9px;font-size:11px;font-weight:700;display:inline-flex;position:absolute;top:10px;left:10px}.mp-pick{z-index:3;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#0000;width:26px;height:26px;transition:var(--transition);background:#0000006b;border:2px solid #ffffffd9;border-radius:3.40282e38px;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:9px;right:9px}.mp-pick:hover{background:#000000a8;transform:scale(1.08)}.mp-open{z-index:3;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;width:26px;height:26px;transition:var(--transition);background:#0000006b;border:2px solid #ffffffd9;border-radius:3.40282e38px;justify-content:center;align-items:center;padding:0;text-decoration-line:none;display:flex;position:absolute;top:9px;right:9px}.mp-open:hover{background:#000000a8;transform:scale(1.08)}.mp-open.with-pick{right:43px}.mp-pick[aria-pressed=true]{background:var(--brand,#ff4d23);color:#fff;border-color:#fff}.mp.picked{outline:2px solid var(--brand,#ff4d23);outline-offset:-2px}.mp-pick~.mp-chip,.mp[data-mp=slides] .mp-chip{top:42px}.pickbar{z-index:20;align-items:center;gap:calc(var(--spacing) * 2.5);background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow-lg);border-radius:3.40282e38px;margin:12px 0 0;padding:10px 12px;animation:.2s ease-out fadeIn;display:flex;position:sticky;bottom:0}.pickbar .n{white-space:nowrap;font-size:13px;font-weight:700}.pickbar .sp{flex:1}.pickbar button{cursor:pointer;white-space:nowrap;border:1px solid var(--border);background:var(--card);color:var(--fg);font:inherit;transition:var(--transition);border-radius:3.40282e38px;padding:6px 13px;font-size:12.5px;font-weight:600}.pickbar button.primary{background:var(--brand,#ff4d23);color:#fff;border-color:#0000}.pickbar button:hover{filter:brightness(1.08)}.pickbar button:disabled{opacity:.5;cursor:not-allowed}.pickbar .hint{color:var(--muted);font-size:11.5px}.mp-chip{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;font-variant-numeric:tabular-nums;background:#0000008c;border-radius:3.40282e38px;padding:3px 9px;font-size:11px;font-weight:700;position:absolute;top:10px;right:10px}.mp-rail{align-items:center;gap:calc(var(--spacing) * 3.5);flex-direction:column;display:flex;position:absolute;bottom:76px;right:8px}.mp-act{cursor:default;background:0 0;border:none;flex-direction:column;align-items:center;gap:3px;padding:0;display:flex}.mp-act .ic{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;width:38px;height:38px;transition:var(--transition);background:#0006;border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex}.mp-act:hover .ic{background:#0000009e;transform:scale(1.06)}.mp-act .n{color:#fff;text-shadow:0 1px 3px #000c;font-variant-numeric:tabular-nums;font-size:11px;font-weight:700}.mp-meta{color:#fff;text-shadow:0 1px 3px #000000d9;position:absolute;bottom:60px;left:12px;right:64px}.mp-handle{margin-bottom:3px;font-size:13px;font-weight:800}.mp-cap{-webkit-line-clamp:2;opacity:.95;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.mp-song{white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:5px;margin-top:6px;font-size:11px;font-weight:600;display:flex;overflow:hidden}.mp-song .note{flex:none;display:inline-flex}.mp.playing .mp-song .note{animation:3s linear infinite spin}.mp-song-t{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes spin{to{transform:rotate(360deg)}}.mp-tap{cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.mp-tap span{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:#fff;width:64px;height:64px;transition:var(--transition);opacity:1;background:#00000073;border-radius:3.40282e38px;justify-content:center;align-items:center;font-size:26px;display:flex}.mp.playing .mp-tap span{opacity:0}.mp.playing:hover .mp-tap span{opacity:.65}.mp-nav{cursor:pointer;color:#fff;opacity:0;width:34px;height:34px;transition:var(--transition);background:#0000008c;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;font-size:18px;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.mp:hover .mp-nav,.mp:focus-within .mp-nav{opacity:1}.mp-nav.prev{left:8px}.mp-nav.next{right:8px}.mp-nav:hover{background:#000c}.mp-ctl{z-index:3;background:linear-gradient(#0000,#000000d9);align-items:center;gap:9px;padding:9px 11px;display:flex;position:absolute;bottom:0;left:0;right:0}.mp-btn{cursor:pointer;color:#111;width:30px;height:30px;transition:var(--transition);background:#fffffff2;border:none;border-radius:3.40282e38px;flex:none;justify-content:center;align-items:center;font-size:12px;display:flex}.mp-btn:hover{transform:scale(1.09)}.mp-time{color:#fff;font-variant-numeric:tabular-nums;text-shadow:0 1px 2px #000c;flex-shrink:0;font-size:10px;font-weight:700}.mp-seek{cursor:pointer;flex:1;align-items:center;min-width:0;height:14px;display:flex;position:relative}.mp-segs{gap:calc(var(--spacing) * .5);border-radius:3.40282e38px;width:100%;height:3px;transition:height .15s;display:flex;overflow:hidden}.mp-seek:hover .mp-segs{height:5px}.mp-seg{background:#ffffff52;border-radius:3.40282e38px;flex:1;height:100%;overflow:hidden}.mp-seg>i{background:#fff;border-radius:3.40282e38px;width:0;height:100%;display:block}.mp-seg.done>i{width:100%}.mp-icon{color:#fff;cursor:pointer;opacity:.9;background:0 0;border:none;flex-shrink:0;padding:0;font-size:14px;line-height:1}.mp-icon:hover{opacity:1}.mp-spin{pointer-events:none;z-index:2;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.mp-spin>i{border:3px solid #ffffff40;border-top-color:#fff;border-radius:3.40282e38px;width:34px;height:34px;animation:.8s linear infinite spin}.mp-err{pointer-events:none;z-index:4;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);text-align:center;color:#fff;background:#000000d1;flex-direction:column;padding:16px;font-size:12px;font-weight:600;display:flex;position:absolute;inset:0}.mp:focus-visible{outline-offset:-2px;outline:2px solid #fff}.mp-btn:focus-visible,.mp-icon:focus-visible,.mp-nav:focus-visible,.mp-tap:focus-visible,.au-play:focus-visible,.gallery-nav:focus-visible,.dot:focus-visible{outline-offset:2px;outline:2px solid #fff}@media (prefers-reduced-motion:reduce){.mp-song .note{animation:none}.mp-slide{transition:none}.mp-spin>i{animation-duration:2s}*{scroll-behavior:auto!important}}.au{align-items:center;gap:calc(var(--spacing) * 2.5);margin-top:10px;display:flex}.au-play{cursor:pointer;color:#fff;background:var(--brand);width:34px;height:34px;transition:var(--transition);border:none;border-radius:3.40282e38px;flex:none;justify-content:center;align-items:center;display:flex}.au-body{flex:1;min-width:0}.au-seek{cursor:pointer;background:var(--fg);border-radius:3.40282e38px;width:100%;height:5px;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.au-seek{background:color-mix(in srgb, var(--fg) 22%, transparent)}}.au-seek>i{background:var(--accent);border-radius:3.40282e38px;width:0;height:100%;display:block}.au-time{color:var(--muted);font-variant-numeric:tabular-nums;justify-content:space-between;margin-top:3px;font-size:10px;display:flex}.au-missing{align-items:center;gap:calc(var(--spacing) * 1.5);color:var(--muted);margin-top:8px;font-size:11px;display:flex}.own-title{color:var(--fg);font-size:16px;font-weight:700}.own-sub{color:var(--muted);margin:3px 0 12px;font-size:12.5px}.own-head{align-items:center;gap:calc(var(--spacing) * 2);color:var(--fg);font-size:16px;font-weight:700;display:flex}.own-tick{color:var(--green);display:inline-flex}.own-connect{text-align:center;flex-direction:column;align-items:center;padding:30px 20px 22px;display:flex}.own-connect .btn{background:var(--accent);color:var(--bg)}.mono{font-family:var(--font-mono)}.conn-row{align-items:flex-start;gap:calc(var(--spacing) * 3);border-bottom:1px solid var(--border);padding:12px 0;display:flex}.conn-row:last-child{border-bottom:none}.conn-body{flex:1;min-width:0}.conn-who{color:var(--fg);font-size:13px;font-weight:650}.conn-sub{color:var(--muted);margin-top:1px;font-size:11.5px}.conn-note{color:var(--muted);margin-top:5px;font-size:11px}.conn-status,.conn-connect{align-self:flex-start;margin-top:2px}.conn-av{background:var(--tag);border:1px solid var(--border);border-radius:3.40282e38px;flex-shrink:0;width:32px;height:32px;position:relative;overflow:visible}.conn-av-empty{background:0 0;border-style:dashed}.conn-av-mark{color:var(--muted);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.credits-card{border-radius:var(--radius-2xl);border:1px solid var(--border);background:var(--card);max-width:380px;margin:8px 0;padding:24px}.pack{cursor:pointer;border-radius:var(--radius-xl);text-align:center;border:1px solid var(--border);transition:var(--transition);padding:16px}.pack:hover{border-color:var(--muted)}.pack-featured{border-radius:var(--radius-xl);text-align:center;border:2px solid var(--accent);padding:16px}.tier-badge{color:#1e40af;background:#dbeafe;border-radius:3.40282e38px;align-items:center;padding:4px 12px;font-size:12px;font-weight:700;display:inline-flex}.free-tag{align-items:center;gap:var(--spacing);color:#065f46;transition:var(--transition);background:#d1fae5;border-radius:3.40282e38px;margin:2px;padding:4px 10px;font-size:11px;font-weight:600;display:inline-flex}.json-block{border-radius:var(--radius-md);background:var(--tag);border:1px solid var(--border);white-space:pre-wrap;word-break:break-all;max-height:320px;margin-top:10px;padding:14px;font-family:SF Mono,Monaco,monospace;font-size:12px;overflow-y:auto}.empty-state{text-align:center;color:var(--muted);padding:48px 24px}.empty-state .icon{margin-bottom:12px;font-size:48px}.empty-state .text{font-size:14px}.amz-head{align-items:center;gap:calc(var(--spacing) * 3);padding:2px 2px 12px;display:flex}.amz-mark{border-radius:var(--radius-sm);background:#232f3e;flex:none;justify-content:center;align-items:center;width:34px;height:34px;display:inline-flex}.mkt-generic{color:#fff;font-weight:700}.amz-head-text{flex:1;min-width:0}.amz-head-title{text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:700;overflow:hidden}.amz-head-sub{color:var(--muted);margin-top:1px;font-size:12px}.amz-running{flex:none}.amz-strip{gap:calc(var(--spacing) * 2);flex-wrap:wrap;margin-bottom:12px;display:flex}.amz-stat{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card);flex:130px;padding:8px 12px}.amz-stat-k{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:10px;font-weight:700}.amz-stat-v{margin-top:2px;font-size:16px;font-weight:700}.amz-stat-d{color:var(--muted);margin-top:1px;font-size:11px}.amz-grid{gap:calc(var(--spacing) * 2);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.amz-tile{gap:calc(var(--spacing) * 3);text-align:left;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);cursor:pointer;transition:var(--transition);width:100%;padding:10px;display:flex}.amz-tile:hover{background:var(--card-hover)}.amz-tile-open{border-color:#f90}.amz-tile-body{flex-direction:column;gap:2px;min-width:0;display:flex}.amz-brand{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-size:11px;font-weight:700}.amz-title{-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:12px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}.amz-title-lg{-webkit-line-clamp:4;font-size:14px}.amz-line{flex-wrap:wrap;align-items:center;gap:6px;margin-top:2px;display:flex}.amz-stars{color:#f90;letter-spacing:.5px;font-size:12px}.amz-rating{font-size:12px;font-weight:700}.amz-count{color:var(--muted);font-size:11px}.amz-price{font-size:14px;font-weight:700}.amz-list{color:var(--muted);font-size:11px;text-decoration:line-through}.amz-neg{color:var(--red);border:1px solid var(--border);border-radius:999px;padding:0 6px;font-size:11px;font-weight:700}.amz-sub{color:var(--muted);font-size:11px}.amz-thumb{border-radius:var(--radius-sm);border:1px solid var(--border);background:#fff;flex:none;justify-content:center;align-items:center;width:64px;height:64px;display:inline-flex;overflow:hidden}.amz-thumb img{object-fit:contain;width:100%;height:100%}.amz-thumb-empty{background:var(--tag);color:var(--muted);font-size:18px;font-weight:700}.amz-detail{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);border-top:3px solid #f90;margin-top:12px;padding:14px}.amz-detail-head{gap:calc(var(--spacing) * 3);margin-bottom:12px;display:flex}.amz-detail-facts{flex:1;min-width:0}.amz-open{margin-top:8px}.amz-block{margin-top:14px}.amz-blocknote{color:var(--muted);margin:-4px 0 8px;font-size:11.5px}.amz-feats{color:var(--muted);margin:0;padding-left:18px;font-size:12.5px}.amz-feats li{margin:3px 0}.amz-summary{border-left:3px solid #f90;margin-top:12px;padding-left:10px}.amz-note{color:var(--muted);background:var(--tag);border-radius:var(--radius-sm);margin-top:10px;padding:8px 10px;font-size:11.5px}.amz-hist{margin-top:10px}.amz-hrow{align-items:center;gap:calc(var(--spacing) * 2);margin:3px 0;display:flex}.amz-hstar{color:var(--muted);flex:none;width:26px;font-size:11px}.amz-htrack{background:var(--tag);border-radius:999px;flex:1;height:8px;overflow:hidden}.amz-hfill{border-radius:999px;height:100%;display:block}.amz-hpct{color:var(--muted);text-align:right;flex:none;width:34px;font-size:11px}.amz-bar-good{background:var(--green)}.amz-bar-mid{background:var(--amber)}.amz-bar-bad{background:var(--red)}.amz-rev{border:1px solid var(--border);border-left:3px solid var(--border);border-radius:var(--radius-sm);background:var(--card);margin:6px 0;padding:9px 11px}.amz-rev-good{border-left-color:var(--green)}.amz-rev-mid{border-left-color:var(--amber)}.amz-rev-bad{border-left-color:var(--red)}.amz-rev-focus{background:var(--card-hover);border-color:#f90}.amz-rev-head{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.amz-rev-title{font-size:12.5px;font-weight:700}.amz-rev-body{margin-top:4px;font-size:12.5px;line-height:1.5}.amz-rev-meta{color:var(--muted);margin-top:5px;font-size:11px}.amz-verified{color:var(--green);font-weight:600}.amz-arow{align-items:center;gap:calc(var(--spacing) * 3);margin:7px 0;display:flex}.amz-aname{flex:40%;min-width:0;font-size:12.5px;font-weight:600}.amz-abrands{color:var(--muted);font-size:11px;font-weight:400;display:block}.amz-atrack{background:var(--tag);border-radius:999px;flex:40%;height:8px;overflow:hidden}.amz-afill{border-radius:999px;height:100%;display:block}.amz-amentions{color:var(--muted);text-align:right;flex:none;width:48px;font-size:11.5px}.amz-find{border:1px solid var(--border);border-left:3px solid var(--border);border-radius:var(--radius-sm);background:var(--card);margin:7px 0;padding:10px 12px}.amz-find-driver{border-left-color:var(--green)}.amz-find-barrier{border-left-color:var(--red)}.amz-find-gap{border-left-color:var(--blue)}.amz-find-head{align-items:center;gap:calc(var(--spacing) * 2);flex-wrap:wrap;display:flex}.amz-find-label{font-size:13px;font-weight:700}.amz-find-detail{color:var(--muted);margin-top:4px;font-size:12.5px;line-height:1.5}.amz-evrow{gap:var(--spacing);flex-wrap:wrap;margin-top:7px;display:flex}.amz-ev{border:1px solid var(--border);background:var(--tag);color:var(--muted);cursor:pointer;border-radius:999px;padding:2px 8px;font-family:SF Mono,Monaco,monospace;font-size:10.5px}.amz-ev:hover{color:var(--fg);border-color:#f90}.amz-ev-quote{cursor:default;font-family:inherit}.amz-strength{gap:calc(var(--spacing) * 2);margin:6px 0;font-size:12.5px;display:flex}.amz-strength-brand{flex:none;min-width:110px;font-weight:700}.amz-strength-detail{color:var(--muted)}.amz-angle{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card);margin:7px 0;padding:10px 12px}.amz-angle-claim{font-size:13px;font-weight:700}.amz-angle-row{color:var(--muted);margin-top:3px;font-size:12px}.amz-angle-risk{color:var(--amber)}.replies-strip{border-top:1px solid var(--border);margin-top:10px;padding-top:9px}.replies-head{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:6px;font-size:10.5px;font-weight:700}.replies-none{color:var(--muted);font-size:11.5px;font-style:italic}.reply-row{border-left:2px solid var(--border);margin-bottom:7px;padding-left:8px}.reply-meta{align-items:center;gap:var(--spacing);flex-wrap:wrap;margin-bottom:2px;display:flex}.reply-who{font-size:11px;font-weight:700}.reply-stat{color:var(--muted);font-size:10.5px}.reply-text{color:var(--fg);font-size:12.5px;line-height:1.45}}@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.bottom-3{bottom:calc(var(--spacing) * 3)}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-full{height:100%}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.shrink{flex-shrink:1}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-line{border-color:var(--border)}.bg-black{background-color:var(--color-black)}.bg-soft{background-color:var(--tag)}.bg-surface{background-color:var(--card)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-3{padding:calc(var(--spacing) * 3)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-10{padding-block:calc(var(--spacing) * 10)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-wrap{text-wrap:wrap}.text-ink{color:var(--fg)}.text-muted{color:var(--muted)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-all{-webkit-user-select:all;user-select:all}}:root{color-scheme:light dark;--bg:#fafbfc;--fg:#111827;--muted:#5f6773;--border:#e5e7eb;--card:#fff;--card-hover:#f3f4f6;--tag:#f3f4f6;--accent:#14151a;--brand:#ff4d23;--brand-2:#ff8a3d;--brand-soft:#ff4d2321;--radius:10px;--radius-sm:6px;--transition:all .25s cubic-bezier(.4, 0, .2, 1);--shadow-md:0 4px 12px #00000014;--shadow-lg:0 8px 24px #0000001f;--green:#047857;--amber:#b45309;--red:#dc2626;--blue:#2563eb}@media (prefers-color-scheme:dark){:root{--bg:#0f172a;--fg:#f1f5f9;--muted:#a8b8cc;--border:#334155;--green:#34d399;--amber:#fbbf24;--red:#f87171;--blue:#60a5fa;--card:#1e293b;--card-hover:#273548;--tag:#1e293b;--accent:#e2e8f0;--brand:#ff5c33;--brand-2:#ff9351;--brand-soft:#ff5c3329;--shadow-md:0 4px 12px #0000004d;--shadow-lg:0 8px 24px #0006}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
|
|
22
22
|
</style>
|
|
23
23
|
</head>
|
|
24
24
|
<body>
|
|
@@ -2888,8 +2888,14 @@ export const NOOTICR_UI_TEMPLATE = `<!DOCTYPE html>
|
|
|
2888
2888
|
mediaHtml=mediaPlayerHtml(p,images,video,platform,pickable);
|
|
2889
2889
|
// The player already carries the handle, caption and stats as overlay
|
|
2890
2890
|
// chrome, so the card body underneath is just the outbound link.
|
|
2891
|
+
// repliesStrip here as well as on the plain card below, and this is the
|
|
2892
|
+
// path that matters: a prospect post from a real search carries a
|
|
2893
|
+
// videoUrl far more often than not, so a strip added only to the card
|
|
2894
|
+
// body underneath would render in a test with a synthetic payload and
|
|
2895
|
+
// never once in production. Caught exactly that way.
|
|
2891
2896
|
return '<div class="'+cls+' card-media '+lastPlayerAr+'">'+mediaHtml
|
|
2892
2897
|
+standingBadge(p)
|
|
2898
|
+
+(repliesStrip(p)?'<div class="card-body">'+repliesStrip(p)+"</div>":"")
|
|
2893
2899
|
+"</div>"
|
|
2894
2900
|
// Only on the single-post view — a gallery of these would be noise.
|
|
2895
2901
|
+(wide&&!hideActions?postAiActions(p):"");
|
|
@@ -2910,7 +2916,49 @@ export const NOOTICR_UI_TEMPLATE = `<!DOCTYPE html>
|
|
|
2910
2916
|
+ctTag+handleHtml+"</div>"
|
|
2911
2917
|
+'<div class="title">'+esc(title.length>160?title.slice(0,160)+"…":title)+"</div>"
|
|
2912
2918
|
+'<div class="stats">'+statsHtml+"</div>"
|
|
2913
|
-
+linkHtml+"</div>"+standingBadge(p)+"</div>";
|
|
2919
|
+
+linkHtml+repliesStrip(p)+"</div>"+standingBadge(p)+"</div>";
|
|
2920
|
+
}
|
|
2921
|
+
|
|
2922
|
+
/**
|
|
2923
|
+
* The replies under a prospect post, when something opened them.
|
|
2924
|
+
*
|
|
2925
|
+
* find_people_with_problem buys these — up to 10 credits at 2 per post — and
|
|
2926
|
+
* its own guidance calls them the better find: a person saying "same here,
|
|
2927
|
+
* this is exactly my problem" under someone else's thread is a better find
|
|
2928
|
+
* than the thread itself. They reached the text digest and never reached
|
|
2929
|
+
* this view, so a host drawing the widget showed the reader post cards and
|
|
2930
|
+
* silently dropped the half that cost the most (#78).
|
|
2931
|
+
*
|
|
2932
|
+
* commentsRead === 0 is drawn, and says the thread would not OPEN rather
|
|
2933
|
+
* than that nobody replied. Those are opposite conclusions about a prospect,
|
|
2934
|
+
* and the digest already words it this way — the two channels have to agree.
|
|
2935
|
+
*
|
|
2936
|
+
* labelChips() rides along, so once a host classifies these (#79) the label
|
|
2937
|
+
* lands here with no further change.
|
|
2938
|
+
*/
|
|
2939
|
+
function repliesStrip(p){
|
|
2940
|
+
var sample=p.commentSample;
|
|
2941
|
+
var read=p.commentsRead;
|
|
2942
|
+
var hasSample=sample&&sample.length;
|
|
2943
|
+
if(!hasSample&&read!==0)return "";
|
|
2944
|
+
var out='<div class="replies-strip">';
|
|
2945
|
+
if(!hasSample){
|
|
2946
|
+
return out+'<div class="replies-none">This thread would not open — not that nobody replied.</div></div>';
|
|
2947
|
+
}
|
|
2948
|
+
out+='<div class="replies-head">'+esc(String(sample.length))
|
|
2949
|
+
+(sample.length===1?" reply":" replies")+" under this post</div>";
|
|
2950
|
+
out+=sample.slice(0,4).map(function(m){
|
|
2951
|
+
var who=String(m.username||m.author||"");
|
|
2952
|
+
var likes=m.likes?fmtNum(m.likes)+" likes":"";
|
|
2953
|
+
return '<div class="reply-row">'
|
|
2954
|
+
+'<div class="reply-meta">'+(who?'<span class="reply-who">@'+esc(who)+"</span>":"")
|
|
2955
|
+
+(likes?'<span class="reply-stat">'+esc(likes)+"</span>":"")+labelChips(m)+"</div>"
|
|
2956
|
+
+'<div class="reply-text">'+esc(String(m.text||m.comment||""))+"</div></div>";
|
|
2957
|
+
}).join("");
|
|
2958
|
+
if(sample.length>4){
|
|
2959
|
+
out+='<div class="replies-none">'+esc(String(sample.length-4))+" more under this post.</div>";
|
|
2960
|
+
}
|
|
2961
|
+
return out+"</div>";
|
|
2914
2962
|
}
|
|
2915
2963
|
|
|
2916
2964
|
// ─── Creator Card ───
|
|
@@ -3525,6 +3573,470 @@ export const NOOTICR_UI_TEMPLATE = `<!DOCTYPE html>
|
|
|
3525
3573
|
if(an)ownActionButton(an,"analyze_product",{},"Starting…");
|
|
3526
3574
|
});
|
|
3527
3575
|
|
|
3576
|
+
// ─── Marketplace (Amazon) ───
|
|
3577
|
+
//
|
|
3578
|
+
// Two payloads land here and they are halves of one screen: a scan (the
|
|
3579
|
+
// listings and their reviews, fetched) and an insights view (the read a
|
|
3580
|
+
// model wrote from them, which carries the same listings back). They share
|
|
3581
|
+
// one renderer on purpose — the whole value of the read is being able to
|
|
3582
|
+
// click the claim and land on the review it came from, and that is only
|
|
3583
|
+
// possible while both are on screen at once.
|
|
3584
|
+
//
|
|
3585
|
+
// The marketplace mark is drawn per marketplace rather than hard-coded into
|
|
3586
|
+
// the header, because Amazon is the first of these and not the last: a row
|
|
3587
|
+
// of listings from somewhere else needs to be distinguishable at a glance,
|
|
3588
|
+
// and the logo is what a reader actually uses to tell them apart.
|
|
3589
|
+
var amazonState=null;
|
|
3590
|
+
|
|
3591
|
+
/**
|
|
3592
|
+
* Amazon's own mark, as a path rather than an image.
|
|
3593
|
+
*
|
|
3594
|
+
* An <img> cannot be used: the view is a single self-contained file served
|
|
3595
|
+
* into a sandboxed iframe with no remote fetches allowed, so every asset is
|
|
3596
|
+
* inline or it does not render. Path data from Font Awesome Free (brands,
|
|
3597
|
+
* CC BY 4.0); the logo itself is a trademark of Amazon.com, Inc. and is
|
|
3598
|
+
* drawn here to label whose listings these are, which is what it is for.
|
|
3599
|
+
*/
|
|
3600
|
+
function amazonMark(size){
|
|
3601
|
+
var d="M257.7 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56s-32.3-25.3-32.3-52.8l0-147.1C341.5 89 317 32 229.2 32 141.2 32 94.5 87 94.5 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8l0 40.6zM393.7 413c-7.7 10-70 67-174.5 67S34.7 408.5 10.2 379c-6.8-7.7 1-11.3 5.5-8.3 73.3 44.5 187.8 117.8 372.5 30.3 7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z";
|
|
3602
|
+
var w=Math.round(size*448/512);
|
|
3603
|
+
return '<svg viewBox="0 0 448 512" width="'+w+'" height="'+size+'" aria-label="Amazon" role="img">'
|
|
3604
|
+
+'<path fill="#FF9900" d="'+d+'"></path></svg>';
|
|
3605
|
+
}
|
|
3606
|
+
|
|
3607
|
+
/** The mark for whichever marketplace a payload came from. */
|
|
3608
|
+
function marketplaceMark(name,size){
|
|
3609
|
+
if(String(name||"").toLowerCase()==="amazon")return amazonMark(size);
|
|
3610
|
+
return '<span class="mkt-generic" style="font-size:'+Math.round(size*0.7)+'px">'
|
|
3611
|
+
+esc(String(name||"market").slice(0,2).toUpperCase())+"</span>";
|
|
3612
|
+
}
|
|
3613
|
+
|
|
3614
|
+
/** "www.amazon.co.uk" reads as a hostname; "amazon.co.uk" reads as a market. */
|
|
3615
|
+
function marketDomain(domain){
|
|
3616
|
+
var d=String(domain||"www.amazon.com");
|
|
3617
|
+
return d.indexOf("www.")===0?d.slice(4):d;
|
|
3618
|
+
}
|
|
3619
|
+
|
|
3620
|
+
function starGlyphs(rating){
|
|
3621
|
+
var r=Number(rating)||0;
|
|
3622
|
+
var out="";
|
|
3623
|
+
for(var i=1;i<=5;i++)out+=(r>=i-0.25?"★":"☆");
|
|
3624
|
+
return '<span class="amz-stars">'+out+"</span>";
|
|
3625
|
+
}
|
|
3626
|
+
|
|
3627
|
+
function money(p){
|
|
3628
|
+
var t=String(p.price||"");
|
|
3629
|
+
if(t)return t;
|
|
3630
|
+
var v=Number(p.priceValue);
|
|
3631
|
+
return v?("$"+v.toFixed(2)):"";
|
|
3632
|
+
}
|
|
3633
|
+
|
|
3634
|
+
/** A percent string ("73%") as a number, or null. */
|
|
3635
|
+
function pctNum(v){
|
|
3636
|
+
var s=String(v==null?"":v).trim();
|
|
3637
|
+
if(s.slice(-1)==="%")s=s.slice(0,-1);
|
|
3638
|
+
var n=Number(s);
|
|
3639
|
+
return isFinite(n)?n:null;
|
|
3640
|
+
}
|
|
3641
|
+
|
|
3642
|
+
/**
|
|
3643
|
+
* The star histogram, five bars.
|
|
3644
|
+
*
|
|
3645
|
+
* Worth drawing rather than summarising to one average: a 4.5 with 7% at one
|
|
3646
|
+
* star and a 4.5 with 1% are different products, and the average is the one
|
|
3647
|
+
* number that hides which you are looking at.
|
|
3648
|
+
*/
|
|
3649
|
+
function histogramBars(h){
|
|
3650
|
+
if(!h||typeof h!=="object")return "";
|
|
3651
|
+
var rows="";
|
|
3652
|
+
for(var star=5;star>=1;star--){
|
|
3653
|
+
var pct=pctNum(h[String(star)]);
|
|
3654
|
+
if(pct==null)continue;
|
|
3655
|
+
var tone=star>=4?"amz-bar-good":(star===3?"amz-bar-mid":"amz-bar-bad");
|
|
3656
|
+
rows+='<div class="amz-hrow"><span class="amz-hstar">'+star+"★</span>"
|
|
3657
|
+
+'<span class="amz-htrack"><span class="amz-hfill '+tone+'" style="width:'+Math.max(1,pct)+'%"></span></span>'
|
|
3658
|
+
+'<span class="amz-hpct">'+pct+"%</span></div>";
|
|
3659
|
+
}
|
|
3660
|
+
return rows?'<div class="amz-hist">'+rows+"</div>":"";
|
|
3661
|
+
}
|
|
3662
|
+
|
|
3663
|
+
function aspectTone(s){
|
|
3664
|
+
var v=String(s||"").toLowerCase();
|
|
3665
|
+
return v==="positive"?"chip-positive":(v==="negative"?"chip-negative":"chip-mixed");
|
|
3666
|
+
}
|
|
3667
|
+
|
|
3668
|
+
function aspectChips(list,limit){
|
|
3669
|
+
var rows=(list||[]).slice(0,limit||8).map(function(a){
|
|
3670
|
+
var n=Number(a.mentions)||0;
|
|
3671
|
+
return '<span class="chip '+aspectTone(a.sentiment)+'">'+esc(a.name||"")
|
|
3672
|
+
+(n?' <b>'+fmtNum(n)+"</b>":"")+"</span>";
|
|
3673
|
+
}).join("");
|
|
3674
|
+
return rows?'<div class="chiprow">'+rows+"</div>":"";
|
|
3675
|
+
}
|
|
3676
|
+
|
|
3677
|
+
function productOf(asin){
|
|
3678
|
+
var hit=null;
|
|
3679
|
+
(amazonState&&amazonState.products||[]).forEach(function(p){
|
|
3680
|
+
if(String(p.asin||"")===String(asin))hit=p;
|
|
3681
|
+
});
|
|
3682
|
+
return hit;
|
|
3683
|
+
}
|
|
3684
|
+
|
|
3685
|
+
/** The picture, or an honest stand-in — never an empty grey rectangle. */
|
|
3686
|
+
function productThumb(p){
|
|
3687
|
+
var img=String(p.image||"");
|
|
3688
|
+
if(img)return '<span class="amz-thumb"><img src="'+esc(img)+'" alt="" loading="lazy"></span>';
|
|
3689
|
+
var word=String(p.brand||p.title||"?").trim();
|
|
3690
|
+
return '<span class="amz-thumb amz-thumb-empty"><span>'+esc(word.slice(0,2).toUpperCase())+"</span></span>";
|
|
3691
|
+
}
|
|
3692
|
+
|
|
3693
|
+
function reviewCountLabel(p){
|
|
3694
|
+
var got=(p.reviews||[]).length;
|
|
3695
|
+
if(p.reviewsGated&&!got)return "reviews behind sign-in";
|
|
3696
|
+
return got+" review"+(got===1?"":"s")+" read";
|
|
3697
|
+
}
|
|
3698
|
+
|
|
3699
|
+
/** One listing, as a card in the grid. */
|
|
3700
|
+
function amazonTile(p){
|
|
3701
|
+
var open=amazonState.open===String(p.asin||"");
|
|
3702
|
+
var neg=null;
|
|
3703
|
+
(((amazonState.rollup||{}).perProduct)||[]).forEach(function(r){
|
|
3704
|
+
if(String(r.asin||"")===String(p.asin||""))neg=r.negativeStarShare;
|
|
3705
|
+
});
|
|
3706
|
+
return '<button type="button" class="amz-tile'+(open?" amz-tile-open":"")+'" data-amz-open="'+esc(p.asin||"")+'">'
|
|
3707
|
+
+productThumb(p)
|
|
3708
|
+
+'<span class="amz-tile-body">'
|
|
3709
|
+
+'<span class="amz-brand">'+esc(p.brand||"")+"</span>"
|
|
3710
|
+
+'<span class="amz-title">'+esc(String(p.title||"").slice(0,110))+"</span>"
|
|
3711
|
+
+'<span class="amz-line">'+starGlyphs(p.rating)
|
|
3712
|
+
+'<span class="amz-rating">'+(p.rating==null?"—":p.rating)+"</span>"
|
|
3713
|
+
+'<span class="amz-count">'+(p.ratingCount?fmtNum(p.ratingCount)+" ratings":"")+"</span></span>"
|
|
3714
|
+
+'<span class="amz-line"><span class="amz-price">'+esc(money(p))+"</span>"
|
|
3715
|
+
+(neg!=null?'<span class="amz-neg" title="share of all ratings at 1-2 stars">'+neg+"% at 1-2★</span>":"")
|
|
3716
|
+
+"</span>"
|
|
3717
|
+
+'<span class="amz-sub">'+esc(reviewCountLabel(p))+"</span>"
|
|
3718
|
+
+"</span></button>";
|
|
3719
|
+
}
|
|
3720
|
+
|
|
3721
|
+
/** One review, as a row a claim can point at. */
|
|
3722
|
+
function amazonReviewRow(r,focused){
|
|
3723
|
+
var rating=Number(r.rating)||0;
|
|
3724
|
+
var tone=rating>=4?"amz-rev-good":(rating===3?"amz-rev-mid":"amz-rev-bad");
|
|
3725
|
+
return '<div class="amz-rev '+tone+(focused?" amz-rev-focus":"")+'" data-amz-review="'+esc(r.id||"")+'">'
|
|
3726
|
+
+'<div class="amz-rev-head">'+starGlyphs(rating)
|
|
3727
|
+
+'<span class="amz-rev-title">'+esc(r.title||"")+"</span></div>"
|
|
3728
|
+
+'<div class="amz-rev-body">'+esc(r.body||"")+"</div>"
|
|
3729
|
+
+'<div class="amz-rev-meta">'+esc(r.author||"someone")
|
|
3730
|
+
+(r.brand?" · "+esc(r.brand):"")
|
|
3731
|
+
+(r.date?" · "+esc(r.date):"")
|
|
3732
|
+
+(r.verified?' · <span class="amz-verified">verified purchase</span>':"")
|
|
3733
|
+
+(r.helpful?" · "+esc(String(r.helpful)):"")
|
|
3734
|
+
+"</div></div>";
|
|
3735
|
+
}
|
|
3736
|
+
|
|
3737
|
+
/** The opened listing: everything Amazon publishes about it, and its reviews. */
|
|
3738
|
+
function amazonDetail(p){
|
|
3739
|
+
var feats=(p.features||[]).slice(0,4).map(function(f){
|
|
3740
|
+
return "<li>"+esc(String(f).slice(0,220))+"</li>";
|
|
3741
|
+
}).join("");
|
|
3742
|
+
var revs=(p.reviews||[]).map(function(r){return amazonReviewRow(r,false);}).join("");
|
|
3743
|
+
var gated=p.reviewsGated
|
|
3744
|
+
?'<div class="amz-note">Amazon served this session the sign-in gate instead of the review '
|
|
3745
|
+
+"bodies. The rating, the histogram and the aspect counts below are still its own and still "
|
|
3746
|
+
+"public — only the individual reviews are withheld.</div>"
|
|
3747
|
+
:"";
|
|
3748
|
+
return '<div class="amz-detail fade-in">'
|
|
3749
|
+
+'<div class="amz-detail-head">'
|
|
3750
|
+
+productThumb(p)
|
|
3751
|
+
+'<div class="amz-detail-facts">'
|
|
3752
|
+
+'<div class="amz-title amz-title-lg">'+esc(p.title||"")+"</div>"
|
|
3753
|
+
+'<div class="amz-line">'+starGlyphs(p.rating)
|
|
3754
|
+
+'<span class="amz-rating">'+(p.rating==null?"—":p.rating)+"</span>"
|
|
3755
|
+
+'<span class="amz-count">'+(p.ratingCount?fmtNum(p.ratingCount)+" ratings":"")+"</span>"
|
|
3756
|
+
+'<span class="amz-price">'+esc(money(p))+"</span>"
|
|
3757
|
+
+(p.listPrice?'<span class="amz-list">was '+esc(String(p.listPrice))+"</span>":"")
|
|
3758
|
+
+"</div>"
|
|
3759
|
+
+(p.availability?'<div class="amz-sub">'+esc(String(p.availability))+"</div>":"")
|
|
3760
|
+
+(p.url?'<button type="button" class="ai-btn amz-open" data-amz-link="'+esc(p.url)+'">Open on '
|
|
3761
|
+
+esc(marketDomain(amazonState.domain))+"</button>":"")
|
|
3762
|
+
+"</div></div>"
|
|
3763
|
+
+histogramBars(p.ratingHistogram)
|
|
3764
|
+
+(p.reviewSummary?'<div class="amz-summary"><div class="sec-label">Amazon: customers say</div>'
|
|
3765
|
+
+'<div class="section-text">'+esc(String(p.reviewSummary))+"</div></div>":"")
|
|
3766
|
+
+(p.aspects&&p.aspects.length?'<div class="amz-block"><div class="sec-label">What reviews are about</div>'
|
|
3767
|
+
+aspectChips(p.aspects,10)+"</div>":"")
|
|
3768
|
+
+(feats?'<div class="amz-block"><div class="sec-label">From the listing</div><ul class="amz-feats">'+feats+"</ul></div>":"")
|
|
3769
|
+
+gated
|
|
3770
|
+
+(revs?'<div class="amz-block"><div class="sec-label">Reviews collected ('+(p.reviews||[]).length+")</div>"+revs+"</div>":"")
|
|
3771
|
+
+"</div>";
|
|
3772
|
+
}
|
|
3773
|
+
|
|
3774
|
+
/** Every review in the scan, worst first, filtered by the star chips. */
|
|
3775
|
+
function amazonAllReviews(){
|
|
3776
|
+
var all=[];
|
|
3777
|
+
(amazonState.products||[]).forEach(function(p){
|
|
3778
|
+
(p.reviews||[]).forEach(function(r){all.push(r);});
|
|
3779
|
+
});
|
|
3780
|
+
all.sort(function(a,b){return (Number(a.rating)||5)-(Number(b.rating)||5);});
|
|
3781
|
+
var focus=amazonState.focus;
|
|
3782
|
+
if(focus){
|
|
3783
|
+
var hit=null;
|
|
3784
|
+
all.forEach(function(r){if(String(r.id||"")===focus)hit=r;});
|
|
3785
|
+
if(hit){
|
|
3786
|
+
all=[hit].concat(all.filter(function(r){return r!==hit;}));
|
|
3787
|
+
}
|
|
3788
|
+
}
|
|
3789
|
+
var star=amazonState.star;
|
|
3790
|
+
var shown=star?all.filter(function(r){return Math.round(Number(r.rating)||0)===star;}):all;
|
|
3791
|
+
var chips=[["",all.length+" all"]].concat([5,4,3,2,1].map(function(s){
|
|
3792
|
+
var n=all.filter(function(r){return Math.round(Number(r.rating)||0)===s;}).length;
|
|
3793
|
+
return [String(s),s+"★ "+n];
|
|
3794
|
+
})).map(function(pair){
|
|
3795
|
+
var on=String(star||"")===pair[0];
|
|
3796
|
+
return '<button type="button" class="msort-btn'+(on?" is-on":"")+'" data-amz-star="'+pair[0]+'">'
|
|
3797
|
+
+esc(pair[1])+"</button>";
|
|
3798
|
+
}).join("");
|
|
3799
|
+
var rows=shown.slice(0,120).map(function(r){
|
|
3800
|
+
return amazonReviewRow(r,focus&&String(r.id||"")===focus);
|
|
3801
|
+
}).join("");
|
|
3802
|
+
return '<div class="msort">'+chips+"</div>"
|
|
3803
|
+
+(focus?'<div class="amz-note">Showing the review a claim pointed at first. '
|
|
3804
|
+
+'<button type="button" class="ai-btn amz-clear" data-amz-clear="1">Clear</button></div>':"")
|
|
3805
|
+
+(rows||'<div class="empty-state"><div class="icon">📝</div><div class="text">No reviews at that rating</div></div>');
|
|
3806
|
+
}
|
|
3807
|
+
|
|
3808
|
+
/** The category arithmetic, which is the half a reader should not do by hand. */
|
|
3809
|
+
function amazonAspects(){
|
|
3810
|
+
var roll=amazonState.rollup||{};
|
|
3811
|
+
var rows=(roll.aspects||[]).slice(0,14).map(function(a){
|
|
3812
|
+
var brands=Number(a.brands)||0;
|
|
3813
|
+
var neg=Number(a.negativeBrands)||0;
|
|
3814
|
+
var pos=Number(a.positiveBrands)||0;
|
|
3815
|
+
var tone=neg>pos?"amz-bar-bad":(pos>=brands?"amz-bar-good":"amz-bar-mid");
|
|
3816
|
+
var top=Number((roll.aspects||[])[0]&&(roll.aspects||[])[0].mentions)||1;
|
|
3817
|
+
var w=Math.max(3,Math.round((Number(a.mentions)||0)/top*100));
|
|
3818
|
+
return '<div class="amz-arow">'
|
|
3819
|
+
+'<div class="amz-aname">'+esc(a.name||"")
|
|
3820
|
+
+'<span class="amz-abrands">'+brands+" brand"+(brands===1?"":"s")
|
|
3821
|
+
+(neg?" · "+neg+" negative":"")+(pos?" · "+pos+" positive":"")+"</span></div>"
|
|
3822
|
+
+'<div class="amz-atrack"><span class="amz-afill '+tone+'" style="width:'+w+'%"></span></div>'
|
|
3823
|
+
+'<div class="amz-amentions">'+fmtNum(Number(a.mentions)||0)+"</div>"
|
|
3824
|
+
+"</div>";
|
|
3825
|
+
}).join("");
|
|
3826
|
+
return rows
|
|
3827
|
+
?'<div class="amz-block"><div class="sec-label">What the category argues about — every brand, summed</div>'
|
|
3828
|
+
+rows
|
|
3829
|
+
+'<div class="ai-note">Amazon computes these per listing; the counts are summed across the set and the '
|
|
3830
|
+
+"brand column says how many of them carry each aspect. One that is negative across several brands is "
|
|
3831
|
+
+"where a category is not being served.</div></div>"
|
|
3832
|
+
:'<div class="empty-state"><div class="icon">📊</div><div class="text">No aspect breakdown in this scan</div></div>';
|
|
3833
|
+
}
|
|
3834
|
+
|
|
3835
|
+
/** Price, rating and star-mass, stated once for the whole set. */
|
|
3836
|
+
function amazonRollupStrip(){
|
|
3837
|
+
var r=amazonState.rollup||{};
|
|
3838
|
+
var price=r.price||{};
|
|
3839
|
+
var rating=r.rating||{};
|
|
3840
|
+
var cells=[];
|
|
3841
|
+
if(price.min!=null&&price.max!=null){
|
|
3842
|
+
cells.push(["Price", "$"+Number(price.min).toFixed(2)+" – $"+Number(price.max).toFixed(2),
|
|
3843
|
+
price.median!=null?("median $"+Number(price.median).toFixed(2)):""]);
|
|
3844
|
+
}
|
|
3845
|
+
if(rating.mean!=null){
|
|
3846
|
+
cells.push(["Rating", String(rating.mean),
|
|
3847
|
+
(rating.min!=null&&rating.max!=null)?(rating.min+" – "+rating.max+" across the set"):""]);
|
|
3848
|
+
}
|
|
3849
|
+
if(r.negativeStarShareMean!=null){
|
|
3850
|
+
cells.push(["At 1-2★", r.negativeStarShareMean+"%", "of all ratings, on average"]);
|
|
3851
|
+
}
|
|
3852
|
+
if(r.ratingsRepresented){
|
|
3853
|
+
cells.push(["Ratings behind it", fmtNum(Number(r.ratingsRepresented)),
|
|
3854
|
+
(r.reviewsCollected||0)+" review bodies read"]);
|
|
3855
|
+
}
|
|
3856
|
+
if(!cells.length)return "";
|
|
3857
|
+
return '<div class="amz-strip">'+cells.map(function(c){
|
|
3858
|
+
return '<div class="amz-stat"><div class="amz-stat-k">'+esc(c[0])+"</div>"
|
|
3859
|
+
+'<div class="amz-stat-v">'+esc(c[1])+"</div>"
|
|
3860
|
+
+(c[2]?'<div class="amz-stat-d">'+esc(c[2])+"</div>":"")+"</div>";
|
|
3861
|
+
}).join("")+"</div>";
|
|
3862
|
+
}
|
|
3863
|
+
|
|
3864
|
+
/** One finding the model wrote, with the reviews it rests on. */
|
|
3865
|
+
function amazonFinding(f,kind){
|
|
3866
|
+
var ev=(f.evidence||[]).slice(0,6).map(function(id){
|
|
3867
|
+
var known=/* an id we can actually jump to */ false;
|
|
3868
|
+
(amazonState.products||[]).forEach(function(p){
|
|
3869
|
+
(p.reviews||[]).forEach(function(r){if(String(r.id||"")===String(id))known=true;});
|
|
3870
|
+
});
|
|
3871
|
+
return known
|
|
3872
|
+
?'<button type="button" class="amz-ev" data-amz-ev="'+esc(String(id))+'">'+esc(String(id))+"</button>"
|
|
3873
|
+
:'<span class="amz-ev amz-ev-quote">'+esc(String(id).slice(0,120))+"</span>";
|
|
3874
|
+
}).join("");
|
|
3875
|
+
var strength=String(f.strength||"");
|
|
3876
|
+
return '<div class="amz-find amz-find-'+kind+'">'
|
|
3877
|
+
+'<div class="amz-find-head"><span class="amz-find-label">'+esc(f.label||"")+"</span>"
|
|
3878
|
+
+(strength?'<span class="chip '+(strength==="strong"?"chip-positive":(strength==="thin"?"chip-negative":"chip-mixed"))
|
|
3879
|
+
+'">'+esc(strength)+" evidence</span>":"")
|
|
3880
|
+
+"</div>"
|
|
3881
|
+
+(f.detail?'<div class="amz-find-detail">'+esc(f.detail)+"</div>":"")
|
|
3882
|
+
+(ev?'<div class="amz-evrow">'+ev+"</div>":"")
|
|
3883
|
+
+"</div>";
|
|
3884
|
+
}
|
|
3885
|
+
|
|
3886
|
+
function amazonInsightsPane(){
|
|
3887
|
+
var ins=amazonState.insights;
|
|
3888
|
+
if(!ins)return "";
|
|
3889
|
+
var block=function(title,note,rows){
|
|
3890
|
+
return rows?'<div class="amz-block"><div class="sec-label">'+esc(title)+"</div>"
|
|
3891
|
+
+(note?'<div class="amz-blocknote">'+esc(note)+"</div>":"")+rows+"</div>":"";
|
|
3892
|
+
};
|
|
3893
|
+
var drivers=(ins.drivers||[]).map(function(f){return amazonFinding(f,"driver");}).join("");
|
|
3894
|
+
var barriers=(ins.barriers||[]).map(function(f){return amazonFinding(f,"barrier");}).join("");
|
|
3895
|
+
var gaps=(ins.gaps||[]).map(function(f){return amazonFinding(f,"gap");}).join("");
|
|
3896
|
+
var strengths=(ins.strengths||[]).map(function(s){
|
|
3897
|
+
return '<div class="amz-strength"><span class="amz-strength-brand">'+esc(s.brand||"")+"</span>"
|
|
3898
|
+
+'<span class="amz-strength-detail">'+esc(s.detail||"")+"</span></div>";
|
|
3899
|
+
}).join("");
|
|
3900
|
+
var angles=(ins.positioning||[]).map(function(a){
|
|
3901
|
+
return '<div class="amz-angle"><div class="amz-angle-claim">'+esc(a.angle||"")+"</div>"
|
|
3902
|
+
+(a.who?'<div class="amz-angle-row"><b>For</b> '+esc(a.who)+"</div>":"")
|
|
3903
|
+
+(a.why?'<div class="amz-angle-row"><b>Because</b> '+esc(a.why)+"</div>":"")
|
|
3904
|
+
+(a.risk?'<div class="amz-angle-row amz-angle-risk"><b>Only if</b> '+esc(a.risk)+"</div>":"")
|
|
3905
|
+
+"</div>";
|
|
3906
|
+
}).join("");
|
|
3907
|
+
return '<div class="fade-in">'
|
|
3908
|
+
+(ins.summary?'<div class="lede-box">'+esc(ins.summary)+"</div>":"")
|
|
3909
|
+
+block("Purchase drivers","What makes someone buy. Click an id to read the review it rests on.",drivers)
|
|
3910
|
+
+block("Purchase barriers","What stops them, or brings it back.",barriers)
|
|
3911
|
+
+block("What the incumbents do well","",strengths)
|
|
3912
|
+
+block("Gaps in the category","Asked for repeatedly, served by nobody in this set.",gaps)
|
|
3913
|
+
+block("Positioning angles","",angles)
|
|
3914
|
+
+'<div class="ai-note">This read is your model’s, from the reviews on this screen — not a nooticr '
|
|
3915
|
+
+"rating of anyone’s product. Every claim above can be checked against the text it came from.</div>"
|
|
3916
|
+
+"</div>";
|
|
3917
|
+
}
|
|
3918
|
+
|
|
3919
|
+
function amazonTabs(){
|
|
3920
|
+
var tabs=[["listings","Listings"],["reviews","Reviews"],["aspects","Category"]];
|
|
3921
|
+
if(amazonState.insights)tabs.unshift(["insights","The read"]);
|
|
3922
|
+
return '<div class="msort">'+tabs.map(function(t){
|
|
3923
|
+
return '<button type="button" class="msort-btn'+(amazonState.tab===t[0]?" is-on":"")+'" data-amz-tab="'
|
|
3924
|
+
+t[0]+'">'+esc(t[1])+"</button>";
|
|
3925
|
+
}).join("")+"</div>";
|
|
3926
|
+
}
|
|
3927
|
+
|
|
3928
|
+
function amazonHeader(){
|
|
3929
|
+
var s=amazonState;
|
|
3930
|
+
var n=(s.products||[]).length;
|
|
3931
|
+
var reviews=0;
|
|
3932
|
+
(s.products||[]).forEach(function(p){reviews+=(p.reviews||[]).length;});
|
|
3933
|
+
var running=s.complete===false;
|
|
3934
|
+
var prog=s.progress||{};
|
|
3935
|
+
var sub=n+" listing"+(n===1?"":"s")+" · "+reviews+" review"+(reviews===1?"":"s")+" read";
|
|
3936
|
+
return '<div class="amz-head">'
|
|
3937
|
+
+'<span class="amz-mark">'+marketplaceMark(s.marketplace,22)+"</span>"
|
|
3938
|
+
+'<div class="amz-head-text">'
|
|
3939
|
+
+'<div class="amz-head-title">'+esc(s.title||"Category scan")+"</div>"
|
|
3940
|
+
+'<div class="amz-head-sub">'+esc(marketDomain(s.domain))+" · "+esc(sub)+"</div>"
|
|
3941
|
+
+"</div>"
|
|
3942
|
+
+(running
|
|
3943
|
+
?'<span class="chip chip-mixed amz-running">collecting '+(Number(prog.done)||0)+"/"
|
|
3944
|
+
+(Number(prog.total)||0)+"</span>"
|
|
3945
|
+
:"")
|
|
3946
|
+
+"</div>";
|
|
3947
|
+
}
|
|
3948
|
+
|
|
3949
|
+
function renderAmazon(){
|
|
3950
|
+
var app=document.getElementById("app");
|
|
3951
|
+
if(!app||!amazonState)return;
|
|
3952
|
+
var body;
|
|
3953
|
+
if(amazonState.tab==="insights")body=amazonInsightsPane();
|
|
3954
|
+
else if(amazonState.tab==="reviews")body=amazonAllReviews();
|
|
3955
|
+
else if(amazonState.tab==="aspects")body=amazonAspects();
|
|
3956
|
+
else{
|
|
3957
|
+
var open=amazonState.open?productOf(amazonState.open):null;
|
|
3958
|
+
var tiles=(amazonState.products||[]).map(amazonTile).join("");
|
|
3959
|
+
body=amazonRollupStrip()
|
|
3960
|
+
+(tiles?'<div class="amz-grid">'+tiles+"</div>"
|
|
3961
|
+
:'<div class="empty-state"><div class="icon">📦</div><div class="text">No listings collected</div></div>')
|
|
3962
|
+
+(open?amazonDetail(open):"");
|
|
3963
|
+
}
|
|
3964
|
+
var errs=(amazonState.errors||[]).length;
|
|
3965
|
+
app.innerHTML='<div class="amz fade-in">'+amazonHeader()+amazonTabs()+body
|
|
3966
|
+
+(errs?'<div class="ai-note">'+errs+" listing"+(errs===1?"":"s")
|
|
3967
|
+
+" could not be collected on this run; a retired ASIN and a block look identical from outside, "
|
|
3968
|
+
+"so the rest of the scan continued.</div>":"")
|
|
3969
|
+
+"</div>";
|
|
3970
|
+
setTimeout(reportSize,50);
|
|
3971
|
+
}
|
|
3972
|
+
|
|
3973
|
+
document.addEventListener("click",function(e){
|
|
3974
|
+
if(!amazonState||!e.target.closest)return;
|
|
3975
|
+
var tab=e.target.closest("[data-amz-tab]");
|
|
3976
|
+
if(tab){amazonState.tab=tab.getAttribute("data-amz-tab")||"listings";renderAmazon();return;}
|
|
3977
|
+
var tile=e.target.closest("[data-amz-open]");
|
|
3978
|
+
if(tile){
|
|
3979
|
+
var asin=tile.getAttribute("data-amz-open")||"";
|
|
3980
|
+
amazonState.open=amazonState.open===asin?"":asin;
|
|
3981
|
+
renderAmazon();
|
|
3982
|
+
return;
|
|
3983
|
+
}
|
|
3984
|
+
var star=e.target.closest("[data-amz-star]");
|
|
3985
|
+
if(star){
|
|
3986
|
+
var v=star.getAttribute("data-amz-star")||"";
|
|
3987
|
+
amazonState.star=v?Number(v):0;
|
|
3988
|
+
renderAmazon();
|
|
3989
|
+
return;
|
|
3990
|
+
}
|
|
3991
|
+
// The claim-to-evidence jump: the reason the read and the reviews share
|
|
3992
|
+
// one screen at all. A driver nobody can check is an assertion.
|
|
3993
|
+
var ev=e.target.closest("[data-amz-ev]");
|
|
3994
|
+
if(ev){
|
|
3995
|
+
amazonState.focus=ev.getAttribute("data-amz-ev")||"";
|
|
3996
|
+
amazonState.star=0;
|
|
3997
|
+
amazonState.tab="reviews";
|
|
3998
|
+
renderAmazon();
|
|
3999
|
+
return;
|
|
4000
|
+
}
|
|
4001
|
+
var clear=e.target.closest("[data-amz-clear]");
|
|
4002
|
+
if(clear){amazonState.focus="";renderAmazon();return;}
|
|
4003
|
+
var link=e.target.closest("[data-amz-link]");
|
|
4004
|
+
if(link){openHostLink(link.getAttribute("data-amz-link")||"");return;}
|
|
4005
|
+
});
|
|
4006
|
+
|
|
4007
|
+
/**
|
|
4008
|
+
* Take a marketplace payload, from either tool, and draw it.
|
|
4009
|
+
*
|
|
4010
|
+
* An insights payload carries the listings back with it, so the same state
|
|
4011
|
+
* serves both; when it does not (a model that passed only its conclusions),
|
|
4012
|
+
* the listings from the scan that is already on screen are kept rather than
|
|
4013
|
+
* blanked, because the evidence links would otherwise point at nothing.
|
|
4014
|
+
*/
|
|
4015
|
+
function renderMarketplace(d){
|
|
4016
|
+
var insights=d.view==="insights"?d:null;
|
|
4017
|
+
var products=Array.isArray(d.products)?d.products:[];
|
|
4018
|
+
var carried=(!products.length&&insights&&amazonState)?(amazonState.products||[]):products;
|
|
4019
|
+
var rollup=(d.rollup&&Object.keys(d.rollup).length)
|
|
4020
|
+
?d.rollup
|
|
4021
|
+
:((insights&&amazonState)?(amazonState.rollup||{}):{});
|
|
4022
|
+
amazonState={
|
|
4023
|
+
marketplace:String(d.marketplace||"amazon"),
|
|
4024
|
+
domain:String(d.domain||(amazonState&&amazonState.domain)||"www.amazon.com"),
|
|
4025
|
+
title:insights?String(d.category||"Category read"):String(d.query||"Category scan"),
|
|
4026
|
+
products:carried,
|
|
4027
|
+
rollup:rollup,
|
|
4028
|
+
errors:Array.isArray(d.errors)?d.errors:[],
|
|
4029
|
+
progress:d.progress||{},
|
|
4030
|
+
complete:d.complete,
|
|
4031
|
+
insights:insights,
|
|
4032
|
+
tab:insights?"insights":"listings",
|
|
4033
|
+
open:"",
|
|
4034
|
+
star:0,
|
|
4035
|
+
focus:"",
|
|
4036
|
+
};
|
|
4037
|
+
renderAmazon();
|
|
4038
|
+
}
|
|
4039
|
+
|
|
3528
4040
|
function renderView(result){
|
|
3529
4041
|
var app=document.getElementById("app");if(!app)return;
|
|
3530
4042
|
var d=extractResult(result);
|
|
@@ -3532,6 +4044,12 @@ export const NOOTICR_UI_TEMPLATE = `<!DOCTYPE html>
|
|
|
3532
4044
|
// Raw HTML-only result — inject it directly.
|
|
3533
4045
|
if(d._html){app.innerHTML=d._html;setTimeout(reportSize,50);return;}
|
|
3534
4046
|
|
|
4047
|
+
// Marketplace. Checked before everything below because the shape is
|
|
4048
|
+
// distinctive — it names its marketplace — and because an insights payload
|
|
4049
|
+
// carries a products array of listings, not posts, which the gallery below
|
|
4050
|
+
// would happily draw as blank cards.
|
|
4051
|
+
if(String(d.marketplace||"").toLowerCase()==="amazon"){renderMarketplace(d);return;}
|
|
4052
|
+
|
|
3535
4053
|
// Own account. Checked before the feeds below because all three shapes are
|
|
3536
4054
|
// distinctive and none of them carries posts, threads or an analysis.
|
|
3537
4055
|
if(Array.isArray(d.connections)||Array.isArray(d.connectable)&&d.connectedCount!==undefined){
|