// ==UserScript== // @name X Plus // @name:ru X Plus // @name:zh-CN X Plus // @name:es X Plus // @name:pt-BR X Plus // @name:de X Plus // @name:fr X Plus // @name:ja X Plus // @namespace https://github.com/NemoKing1210/x-plus // @version 0.9.0 // @author NemoKing1210 // @description Translation, video download and many improvements for X (x.com) // @description:ru Перевод, скачивание видео и множество улучшений для X (x.com) // @description:zh-CN 为 X (x.com) 提供翻译、视频下载和众多增强功能 // @description:es Traducción, descarga de vídeos y muchas mejoras para X (x.com) // @description:pt-BR Tradução, download de vídeos e muitas melhorias para o X (x.com) // @description:de Übersetzung, Video-Download und viele Verbesserungen für X (x.com) // @description:fr Traduction, téléchargement de vidéos et nombreuses améliorations pour X (x.com) // @description:ja X (x.com) に翻訳・動画ダウンロードなど多数の改善を追加 // @license MIT // @icon https://abs.twimg.com/favicons/twitter.3.ico // @homepage https://github.com/NemoKing1210/x-plus // @homepageURL https://github.com/NemoKing1210/x-plus // @source https://github.com/NemoKing1210/x-plus.git // @supportURL https://github.com/NemoKing1210/x-plus/issues // @match https://x.com/* // @match https://www.x.com/* // @match https://twitter.com/* // @match https://www.twitter.com/* // @tag x // @tag twitter // @tag translate // @tag video // @tag download // @connect x.com // @connect twitter.com // @connect cdn.syndication.twimg.com // @connect video.twimg.com // @connect pbs.twimg.com // @connect translate.googleapis.com // @connect api-free.deepl.com // @connect api.deepl.com // @connect api.cognitive.microsofttranslator.com // @connect api.openai.com // @connect translate.api.cloud.yandex.net // @connect libretranslate.com // @connect * // @grant GM_addStyle // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_xmlhttpRequest // @run-at document-idle // @noframes // ==/UserScript== (e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const t=document.createElement("style");t.textContent=e,document.head.append(t)})(' html[data-xp-theme=light]{--xp-accent: #1d9bf0;--xp-accent-hover: #1a8cd8;--xp-danger: #f4212e;--xp-danger-bg: rgba(244, 33, 46, .1);--xp-danger-border: rgba(244, 33, 46, .4);--xp-success: #00ba7c;--xp-warn: #ffd400;--xp-fg: #0f1419;--xp-fg-muted: #536471;--xp-surface: #ffffff;--xp-elevated: #f7f9f9;--xp-border: #eff3f4;--xp-hover: rgba(15, 20, 25, .1);--xp-inset: rgba(15, 20, 25, .03);--xp-shadow: 0 0 15px rgba(101, 119, 134, .2), 0 0 3px 1px rgba(101, 119, 134, .15);--xp-backdrop: rgba(0, 0, 0, .6);--xp-scroll-thumb: rgba(15, 20, 25, .22);--xp-scroll-thumb-hover: rgba(15, 20, 25, .42);--xp-input-bg: #ffffff;--xp-input-border: #cfd9de;--xp-option-bg: #ffffff;--xp-toggle-off: #cfd9de;--xp-chrome-fg: #0f1419;--xp-nav-hover: rgba(15, 20, 25, .1);--xp-link: #1d9bf0}html[data-xp-theme=dim]{--xp-accent: #1d9bf0;--xp-accent-hover: #1a8cd8;--xp-danger: #f4212e;--xp-danger-bg: rgba(244, 33, 46, .12);--xp-danger-border: rgba(244, 33, 46, .45);--xp-success: #00ba7c;--xp-warn: #ffd400;--xp-fg: #f7f9f9;--xp-fg-muted: #8b98a5;--xp-surface: #15202b;--xp-elevated: #1e2732;--xp-border: #38444d;--xp-hover: rgba(247, 249, 249, .1);--xp-inset: rgba(255, 255, 255, .03);--xp-shadow: 0 0 15px rgba(0, 0, 0, .4), 0 0 3px 1px rgba(0, 0, 0, .25);--xp-backdrop: rgba(0, 0, 0, .72);--xp-scroll-thumb: rgba(247, 249, 249, .2);--xp-scroll-thumb-hover: rgba(247, 249, 249, .38);--xp-input-bg: #15202b;--xp-input-border: #38444d;--xp-option-bg: #1e2732;--xp-toggle-off: #38444d;--xp-chrome-fg: #f7f9f9;--xp-nav-hover: rgba(247, 249, 249, .1);--xp-link: #1d9bf0}html[data-xp-theme=dark],html:not([data-xp-theme]){--xp-accent: #1d9bf0;--xp-accent-hover: #1a8cd8;--xp-danger: #f4212e;--xp-danger-bg: rgba(244, 33, 46, .12);--xp-danger-border: rgba(244, 33, 46, .45);--xp-success: #00ba7c;--xp-warn: #ffd400;--xp-fg: #e7e9ea;--xp-fg-muted: #71767b;--xp-surface: #000000;--xp-elevated: #16181c;--xp-border: #2f3336;--xp-hover: rgba(231, 233, 234, .1);--xp-inset: rgba(255, 255, 255, .03);--xp-shadow: 0 0 15px rgba(255, 255, 255, .08), 0 0 3px 1px rgba(255, 255, 255, .05);--xp-backdrop: rgba(0, 0, 0, .78);--xp-scroll-thumb: rgba(231, 233, 234, .2);--xp-scroll-thumb-hover: rgba(231, 233, 234, .38);--xp-input-bg: #000000;--xp-input-border: #333639;--xp-option-bg: #16181c;--xp-toggle-off: #333639;--xp-chrome-fg: #e7e9ea;--xp-nav-hover: rgba(231, 233, 234, .1);--xp-link: #1d9bf0}:root{--xp-ease-out: cubic-bezier(.22, 1, .36, 1);--xp-ease-spring: cubic-bezier(.34, 1.56, .64, 1)}:root{--xp-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}.xp-settings-backdrop,.xp-settings-backdrop *:not(.xp-textarea):not(svg *),.xp-confirm-overlay,.xp-confirm-overlay *,.xp-popup,.xp-popup *,.xp-toast-host,.xp-toast-host *{font-family:var(--xp-font)}.xp-icon{display:block;flex:0 0 auto;width:1.25em;height:1.25em}html.xp-scroll-lock,html.xp-scroll-lock body.xp-scroll-lock{overflow:hidden!important;overscroll-behavior:none}body.xp-scroll-lock{position:fixed;left:0;right:0;width:100%}.xp-toast-host{position:fixed;z-index:2147483200;display:flex;gap:12px;width:min(356px,calc(100vw - 32px));pointer-events:none}.xp-toast-host--top-right{top:16px;right:16px;flex-direction:column-reverse;align-items:flex-end}.xp-toast-host--top-left{top:16px;left:16px;flex-direction:column-reverse;align-items:flex-start}.xp-toast-host--bottom-right{bottom:16px;right:16px;flex-direction:column;align-items:flex-end}.xp-toast-host--bottom-left{bottom:16px;left:16px;flex-direction:column;align-items:flex-start}.xp-toast{pointer-events:auto;position:relative;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;width:100%;padding:12px 8px 12px 12px;border-radius:16px;border:1px solid var(--xp-border);background:var(--xp-surface);color:var(--xp-fg);box-shadow:var(--xp-shadow);font:inherit;letter-spacing:normal;opacity:0;transform:translate(12px);transition:opacity .18s ease,transform .18s ease;overflow:hidden}.xp-toast-host--top-left .xp-toast,.xp-toast-host--bottom-left .xp-toast{transform:translate(-12px)}.xp-toast.is-visible{opacity:1;transform:translate(0)}.xp-toast.is-leaving{opacity:0;transform:translate(12px)}.xp-toast__icon{display:grid;place-items:center;flex:0 0 auto;width:36px;height:36px;border-radius:999px;background:#1d9bf01f;color:var(--xp-accent)}.xp-toast__icon .xp-icon{width:18px;height:18px}.xp-toast--success .xp-toast__icon{background:#00ba7c1f;color:var(--xp-success)}.xp-toast--warning .xp-toast__icon{background:#ffd40024;color:#ca8a04}html[data-xp-theme=dim] .xp-toast--warning .xp-toast__icon,html[data-xp-theme=dark] .xp-toast--warning .xp-toast__icon,html:not([data-xp-theme]) .xp-toast--warning .xp-toast__icon{color:var(--xp-warn)}.xp-toast--error .xp-toast__icon{background:var(--xp-danger-bg);color:var(--xp-danger)}.xp-toast__body{display:flex;flex-direction:column;gap:2px;min-width:0;padding:2px 0}.xp-toast__title{font-weight:700;font-size:15px;line-height:20px;color:var(--xp-fg)}.xp-toast__text{font-size:13px;font-weight:400;line-height:16px;color:var(--xp-fg-muted);overflow-wrap:anywhere}.xp-toast__title[hidden],.xp-toast__text[hidden],.xp-toast__bar[hidden]{display:none}.xp-toast__close{appearance:none;display:grid;place-items:center;flex:0 0 auto;align-self:start;width:34px;height:34px;margin:0;padding:0;border:0;border-radius:999px;background:transparent;color:var(--xp-fg);cursor:pointer;transition:background .15s ease}.xp-toast__close:hover{background:var(--xp-hover)}.xp-toast__close:focus-visible{outline:2px solid var(--xp-accent);outline-offset:2px}.xp-toast__close .xp-icon{width:18px;height:18px}.xp-toast__bar{position:absolute;left:0;bottom:0;height:3px;width:100%;transform-origin:left center;background:var(--xp-accent);opacity:.85;animation:xp-toast-bar linear forwards;transition:width .2s ease}.xp-toast--success .xp-toast__bar{background:var(--xp-success)}.xp-toast--warning .xp-toast__bar{background:var(--xp-warn)}.xp-toast--error .xp-toast__bar{background:var(--xp-danger)}@keyframes xp-toast-bar{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.xp-popup{position:fixed;z-index:2147483150;min-width:220px;max-width:min(340px,calc(100vw - 16px));max-height:min(60vh,420px);overflow:auto;padding:4px 0;border-radius:12px;border:1px solid var(--xp-border);background:var(--xp-surface);color:var(--xp-fg);box-shadow:var(--xp-shadow);font-size:15px}.xp-popup__title{padding:8px 16px 6px;font-size:13px;font-weight:700;color:var(--xp-fg-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.xp-popup__sep{height:1px;margin:4px 0;background:var(--xp-border)}.xp-popup__item{appearance:none;display:flex;align-items:center;gap:12px;width:100%;margin:0;padding:10px 16px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.xp-popup__item:hover:not(:disabled),.xp-popup__item:focus-visible{background:var(--xp-hover);outline:none}.xp-popup__item:disabled{opacity:.5;cursor:default}.xp-popup__icon{display:grid;place-items:center;color:var(--xp-fg-muted)}.xp-popup__icon .xp-icon{width:18px;height:18px}.xp-popup__label{flex:1 1 auto;min-width:0;font-weight:700}.xp-popup__hint{flex:0 0 auto;font-size:13px;color:var(--xp-fg-muted);font-variant-numeric:tabular-nums}@media(max-width:720px){.xp-toast-host{width:min(356px,calc(100vw - 24px))}.xp-toast-host--top-right,.xp-toast-host--top-left{top:12px}.xp-toast-host--bottom-right,.xp-toast-host--bottom-left{bottom:12px}}.xp-menu-item,.xp-menu-item__label,.xp-menu-item__icon{color:var(--xp-chrome-fg)!important}.xp-menu-item svg,.xp-menu-item svg [fill]:not([fill=none]){color:var(--xp-chrome-fg)!important;fill:var(--xp-chrome-fg)!important}.xp-menu-item:hover{background-color:var(--xp-hover)}.xp-toolbar{display:block;width:100%;flex:0 0 auto;align-self:stretch;margin-top:.25rem;box-sizing:border-box}.xp-toolbar--quiet{display:none}.xp-btn[hidden]{display:none!important}.xp-btn{appearance:none;display:inline-flex;align-items:center;gap:.3rem;margin:0;padding:.15rem 0;border:0;border-radius:4px;background:transparent;color:var(--xp-accent);font:inherit;font-size:13px;font-weight:400;line-height:16px;cursor:pointer;transition:color .15s ease}.xp-btn:hover:not(:disabled){color:var(--xp-accent-hover);text-decoration:underline;text-underline-offset:2px}.xp-btn:focus-visible{outline:2px solid var(--xp-accent);outline-offset:2px}.xp-btn:disabled{opacity:.7;cursor:wait}.xp-btn.is-loading{pointer-events:none;text-decoration:none}.xp-btn__spinner{display:inline-block;width:.85em;height:.85em;border:1.5px solid currentColor;border-right-color:transparent;border-radius:50%;flex:0 0 auto;animation:xp-spin .65s linear infinite}.xp-btn__icon{display:block;flex:0 0 auto;width:1em;height:1em;opacity:.72;color:inherit}.xp-btn:hover:not(:disabled) .xp-btn__icon{opacity:1}.xp-btn__label{min-width:0}.xp-btn--retry{margin-top:.35rem}.xp-header-action{display:flex;flex-direction:row;align-items:center;justify-content:center;flex:0 0 auto}.xp-header-action--quote{margin-left:auto;align-self:center}.xp-btn--header{position:relative;z-index:0;color:var(--xp-fg-muted);font-size:15px;font-weight:400;line-height:1;width:20px;height:20px;min-width:20px;min-height:20px;padding:0;justify-content:center;border-radius:999px;background:transparent;text-decoration:none!important;overflow:visible}.xp-btn--header:before{content:"";position:absolute;top:50%;left:50%;width:34px;height:34px;transform:translate(-50%,-50%);border-radius:999px;background-color:transparent;transition:background-color .15s ease;z-index:-1}.xp-btn--header .xp-btn__icon{width:1.25em;height:1.25em;opacity:1}.xp-btn--header .xp-btn__label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.xp-btn--header:hover:not(:disabled){color:var(--xp-accent);background-color:transparent;text-decoration:none}.xp-btn--header:hover:not(:disabled):before{background-color:#1d9bf01a}.xp-btn--header:focus-visible{outline:none}.xp-btn--header:focus-visible:before{outline:2px solid var(--xp-accent);outline-offset:0}.xp-btn--header.is-loading,.xp-btn--header:disabled{color:var(--xp-fg-muted)}@keyframes xp-spin{to{transform:rotate(360deg)}}.xp-text--hover-peek{cursor:help;position:relative}.xp-text--blur-ready{position:relative;filter:blur(0);opacity:1;transition:filter .55s cubic-bezier(.33,1,.68,1),opacity .55s cubic-bezier(.33,1,.68,1)}.xp-text--translating{filter:blur(2.25px);opacity:.72;user-select:none;pointer-events:none}.xp-text--peeking{position:relative;outline:1px solid var(--xp-border);outline-offset:2px;display:block!important;-webkit-line-clamp:unset!important;line-clamp:unset!important;max-height:none!important;overflow:visible!important;-webkit-box-orient:initial!important}.xp-peek-badge{position:fixed;z-index:2147483000;display:inline-flex;align-items:center;gap:.2rem;margin:0;padding:.1rem .45rem;border-radius:999px;border:1px solid var(--xp-border);background:var(--xp-elevated);color:var(--xp-fg-muted);font-size:11px;font-weight:700;letter-spacing:.02em;line-height:1.2;white-space:nowrap;pointer-events:none;box-shadow:var(--xp-shadow)}.xp-split{display:flex;flex-direction:column;gap:.55rem}.xp-split__pane{min-width:0}.xp-split__pane--translated{padding-top:.45rem;border-top:1px solid var(--xp-border)}.xp-split__label{font-size:13px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--xp-fg-muted);margin-bottom:.15rem}.xp-split__body{white-space:pre-wrap;word-break:break-word;line-height:1.45;color:var(--xp-fg)}.xp-result{display:grid;grid-template-rows:0fr;width:100%;box-sizing:border-box;margin-top:0;opacity:0;transform:translateY(-2px);transition:grid-template-rows .28s cubic-bezier(.22,1,.36,1),opacity .22s ease,transform .22s ease,margin-top .22s ease}.xp-result.is-open{grid-template-rows:1fr;margin-top:.5rem;opacity:1;transform:translateY(0)}.xp-result.is-closing{grid-template-rows:0fr;margin-top:0;opacity:0;transform:translateY(-2px)}.xp-result__clip{overflow:hidden;min-height:0}.xp-result__inner{padding:.65rem .75rem;border-radius:12px;border:1px solid var(--xp-border);background:var(--xp-elevated);color:var(--xp-fg)}.xp-result__label{font-size:13px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--xp-fg-muted);margin-bottom:.2rem}.xp-result__meta{font-size:13px;color:var(--xp-fg-muted);margin-bottom:.3rem}.xp-result__text{white-space:pre-wrap;word-break:break-word;line-height:1.45;color:var(--xp-fg);font-size:inherit}.xp-result__text a,.xp-text--translated a{color:var(--xp-link);text-decoration:none}.xp-result__text a:hover,.xp-text--translated a:hover{text-decoration:underline;text-underline-offset:2px}.xp-result__error{color:var(--xp-danger);font-size:13px;line-height:1.4}.xp-article-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .75rem;margin:0 0 16px;font-size:15px}.xp-article-bar__btn{font-size:15px;line-height:20px;font-weight:700}.xp-article-bar__status{font-size:13px;color:var(--xp-fg-muted)}.xp-article-bar__status.is-error{color:var(--xp-danger)}.xp-article-bar__status[hidden]{display:none}.xp-article-tr{margin:6px 0 16px;padding:2px 0 2px 12px;border-left:3px solid var(--xp-accent);color:inherit;white-space:pre-wrap;word-break:break-word}.xp-article-tr a{color:var(--xp-link);text-decoration:none}.xp-article-tr a:hover{text-decoration:underline;text-underline-offset:2px}.xp-article-peek{outline:1px solid var(--xp-border);outline-offset:4px}.xp-article-bar[hidden]{display:none}.xp-action{display:flex;flex:0 0 auto;align-items:center;justify-content:center}.xp-action__btn{appearance:none;position:relative;display:grid;place-items:center;width:34px;height:34px;margin:0;padding:0;border:0;border-radius:999px;background:transparent;color:var(--xp-fg-muted);font-size:15px;cursor:pointer;transition:color .15s ease,background-color .15s ease}.xp-action__btn:hover{color:var(--xp-accent);background-color:#1d9bf01a}.xp-action__btn:focus-visible{outline:2px solid var(--xp-accent);outline-offset:0}.xp-action__btn .xp-icon{width:1.25em;height:1.25em}.xp-action__spinner{display:none;position:absolute;inset:0;margin:auto;width:16px;height:16px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:xp-spin .65s linear infinite}.xp-action__btn.is-loading>.xp-icon,.xp-media-btn.is-loading>.xp-icon{opacity:0}.xp-action__btn.is-loading>.xp-action__spinner,.xp-media-btn.is-loading>.xp-action__spinner{display:block}.xp-action__btn.is-loading,.xp-media-btn.is-loading{pointer-events:none}.xp-media-host{position:relative}.xp-media-btn{appearance:none;position:absolute;top:8px;right:8px;z-index:5;display:grid;place-items:center;width:32px;height:32px;margin:0;padding:0;border:0;border-radius:999px;background:#0f1419bf;color:#fff;font-size:15px;cursor:pointer;opacity:0;transition:opacity .15s ease,background-color .15s ease}.xp-media-btn .xp-icon{width:18px;height:18px}:hover>.xp-media-btn,.xp-media-btn:focus-visible,.xp-media-btn.is-loading{opacity:1}.xp-media-btn:hover{background:#1d9bf0e6}@media(hover:none){.xp-media-btn{opacity:1}}.xp-zoom{position:fixed;left:50%;bottom:88px;z-index:2147483000;display:flex;align-items:center;gap:2px;padding:4px;border-radius:999px;background:#000000b3;color:#fff;font:600 13px/1 system-ui,-apple-system,Segoe UI,sans-serif;backdrop-filter:blur(8px);transform:translate(-50%,8px);opacity:0;pointer-events:none;transition:opacity .15s ease,transform .15s ease}.xp-zoom.is-visible{opacity:1;transform:translate(-50%);pointer-events:auto}.xp-zoom__btn{appearance:none;min-width:32px;height:32px;margin:0;padding:0 8px;border:0;border-radius:999px;background:transparent;color:inherit;font:inherit;font-size:16px;cursor:pointer}.xp-zoom__btn:hover{background:#ffffff2e}.xp-zoom__btn:focus-visible{outline:2px solid var(--xp-accent, #1d9bf0)}.xp-zoom__level{min-width:56px;font-size:13px;font-variant-numeric:tabular-nums}[data-xp-grid]{background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px)!important;background-size:12px 12px!important;background-position:center!important}.xp-gallery{position:fixed;inset:0;z-index:2147483050;display:flex;flex-direction:column;background:#000000f0;color:#fff;font-family:var(--xp-font, system-ui, sans-serif);opacity:0;transition:opacity .18s ease;outline:none;user-select:none;-webkit-user-select:none}.xp-gallery.is-open{opacity:1}.xp-gallery__stage{position:absolute;inset:0;display:grid;place-items:center;overflow:hidden;touch-action:none;cursor:zoom-out}.xp-gallery__img{position:absolute;left:0;top:var(--xp-gallery-top, 56px);width:100%;height:calc(100% - var(--xp-gallery-top, 56px) - var(--xp-gallery-bottom, 72px));object-fit:contain;cursor:inherit;transform-origin:center;will-change:transform;-webkit-user-drag:none}.xp-gallery.has-strip{--xp-gallery-bottom: 148px}.xp-gallery__stage.is-over-photo{cursor:grab}.xp-gallery__stage.is-grabbing{cursor:grabbing}.xp-gallery__img.is-swap{animation:xp-gallery-swap .22s var(--xp-ease-out, ease-out)}@keyframes xp-gallery-swap{0%{opacity:.25}to{opacity:1}}.xp-gallery.is-error .xp-gallery__img{opacity:.35}.xp-gallery__spinner{position:absolute;right:24px;top:68px;width:18px;height:18px;border:2px solid rgba(255,255,255,.85);border-right-color:transparent;border-radius:50%;opacity:0;pointer-events:none;transition:opacity .15s ease .25s;animation:xp-spin .65s linear infinite}.xp-gallery.is-loading .xp-gallery__spinner{opacity:1}.xp-gallery__bar{position:absolute;top:0;left:0;right:0;z-index:2;display:flex;align-items:center;gap:8px;padding:10px 12px;background:linear-gradient(rgba(0,0,0,.55),transparent);pointer-events:none}.xp-gallery__bar>*{pointer-events:auto}.xp-gallery__counter{font:600 14px/1 var(--xp-font, system-ui, sans-serif);font-variant-numeric:tabular-nums;text-shadow:0 1px 3px rgba(0,0,0,.6)}.xp-gallery__actions{display:flex;gap:4px;margin-left:auto}.xp-gallery__btn,.xp-gallery__nav{appearance:none;position:relative;display:grid;place-items:center;width:40px;height:40px;margin:0;padding:0;border:0;border-radius:999px;background:#0f14198c;color:#fff;text-decoration:none;cursor:pointer;backdrop-filter:blur(8px);transition:background-color .15s ease,opacity .15s ease}.xp-gallery__btn:hover,.xp-gallery__nav:hover:not(:disabled){background:#ffffff38}.xp-gallery__btn:focus-visible,.xp-gallery__nav:focus-visible,.xp-gallery__zbtn:focus-visible,.xp-gallery__thumb:focus-visible{outline:2px solid var(--xp-accent, #1d9bf0);outline-offset:2px}.xp-gallery__btn .xp-icon,.xp-gallery__nav .xp-icon{width:22px;height:22px}.xp-gallery__btnspin{display:none;position:absolute;inset:0;margin:auto;width:18px;height:18px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:xp-spin .65s linear infinite}.xp-gallery__btn.is-loading>.xp-icon{opacity:0}.xp-gallery__btn.is-loading>.xp-gallery__btnspin{display:block}.xp-gallery__btn.is-loading{pointer-events:none}.xp-gallery__nav{position:absolute;top:50%;z-index:2;width:48px;height:48px;margin-top:-24px}.xp-gallery__nav--prev{left:16px}.xp-gallery__nav--next{right:16px}.xp-gallery__nav:disabled{opacity:0;pointer-events:none}.xp-gallery__nav[hidden],.xp-gallery__strip[hidden]{display:none}.xp-gallery__bottom{position:absolute;left:0;right:0;bottom:0;z-index:2;display:flex;flex-direction:column;align-items:center;gap:10px;padding:24px 12px 14px;background:linear-gradient(transparent,#0000008c);pointer-events:none}.xp-gallery__bottom>*{pointer-events:auto}.xp-gallery__zoom{display:flex;align-items:center;gap:2px;padding:4px;border-radius:999px;background:#0f141999;backdrop-filter:blur(8px)}.xp-gallery__zbtn{appearance:none;min-width:34px;height:32px;margin:0;padding:0 8px;border:0;border-radius:999px;background:transparent;color:inherit;font:600 16px/1 var(--xp-font, system-ui, sans-serif);cursor:pointer}.xp-gallery__zbtn:hover{background:#ffffff2e}.xp-gallery__level{min-width:58px;font-size:13px;font-variant-numeric:tabular-nums}.xp-gallery__strip{display:flex;gap:8px;max-width:min(100%,720px);padding:4px;overflow-x:auto;scrollbar-width:none}.xp-gallery__strip::-webkit-scrollbar{display:none}.xp-gallery__thumb{appearance:none;flex:0 0 auto;width:64px;height:64px;margin:0;padding:0;border:2px solid transparent;border-radius:10px;background:#111;overflow:hidden;cursor:pointer;opacity:.6;transition:opacity .15s ease,border-color .15s ease,transform .15s ease}.xp-gallery__thumb img{display:block;width:100%;height:100%;object-fit:cover}.xp-gallery__thumb:hover{opacity:.9}.xp-gallery__thumb.is-active{border-color:#fff;opacity:1;transform:scale(1.04)}@media(max-width:600px){.xp-gallery__nav{display:none}.xp-gallery__thumb{width:52px;height:52px}}@media(prefers-reduced-motion:reduce){.xp-gallery,.xp-gallery__img.is-swap{animation:none;transition:none}}html[data-xp-shorts-on] [data-xp-shorts] article[data-testid=tweet]{position:relative;transform-origin:center center;transition:transform var(--xp-shorts-time, .5s) cubic-bezier(.4,0,.2,1),filter var(--xp-shorts-time, .5s) cubic-bezier(.4,0,.2,1),opacity var(--xp-shorts-time, .5s) cubic-bezier(.4,0,.2,1)}html[data-xp-shorts-on] [data-xp-shorts=active] article[data-testid=tweet],html[data-xp-shorts-on] [data-xp-shorts=prev] article[data-testid=tweet],html[data-xp-shorts-on] [data-xp-shorts=next] article[data-testid=tweet]{will-change:transform,filter,opacity}html[data-xp-shorts-on] [data-xp-shorts=far] article[data-testid=tweet]{transition:opacity var(--xp-shorts-time, .5s) cubic-bezier(.4,0,.2,1)}html[data-xp-shorts-on] [data-xp-shorts=active] article[data-testid=tweet]{z-index:1;transform-origin:50% var(--xp-shorts-oy, 50%);transform:scale(var(--xp-shorts-scale, 1.05))}html[data-xp-shorts-on] [data-xp-shorts=prev] article[data-testid=tweet],html[data-xp-shorts-on] [data-xp-shorts=next] article[data-testid=tweet],html[data-xp-shorts-on] [data-xp-shorts=far] article[data-testid=tweet]{filter:blur(var(--xp-shorts-blur, 3px))}html[data-xp-shorts-on] [data-xp-shorts=prev] article[data-testid=tweet]{opacity:var(--xp-shorts-prev-opacity, .55)}html[data-xp-shorts-on] [data-xp-shorts=next] article[data-testid=tweet]{opacity:var(--xp-shorts-next-opacity, .55)}html[data-xp-shorts-on] [data-xp-shorts=far] article[data-testid=tweet]{opacity:var(--xp-shorts-far-opacity, .55)}.xp-shorts-nav{position:fixed;top:50%;z-index:2147481000;display:flex;flex-direction:column;gap:12px;transform:translateY(-50%)}.xp-shorts-nav[hidden]{display:none}.xp-shorts-nav__btn{appearance:none;display:grid;place-items:center;width:44px;height:44px;margin:0;padding:0;border:1px solid var(--xp-border);border-radius:50%;background:var(--xp-elevated);color:var(--xp-fg);box-shadow:var(--xp-shadow);cursor:pointer;transition:background-color .15s ease,opacity .2s ease,transform .15s ease}.xp-shorts-nav__btn .xp-icon{width:26px;height:26px}.xp-shorts-nav__btn:hover:not(:disabled){background:var(--xp-hover)}.xp-shorts-nav__btn:active:not(:disabled){transform:scale(.92)}.xp-shorts-nav__btn:focus-visible{outline:2px solid var(--xp-accent);outline-offset:2px}.xp-shorts-nav__btn.is-pressed{animation:xp-shorts-press .34s var(--xp-ease-out)}.xp-shorts-nav__btn.is-pressed .xp-icon{animation:xp-shorts-nudge .34s var(--xp-ease-out)}@keyframes xp-shorts-press{0%{transform:scale(1);box-shadow:var(--xp-shadow),0 0 #1d9bf080}30%{transform:scale(.86);background:var(--xp-hover);box-shadow:var(--xp-shadow),0 0 0 3px #1d9bf080}to{transform:scale(1);box-shadow:var(--xp-shadow),0 0 0 12px #1d9bf000}}@keyframes xp-shorts-nudge{30%{transform:translateY(var(--xp-nudge, 0))}}.xp-shorts-nav__btn--auto{align-self:center;width:36px;height:36px;margin-top:2px}.xp-shorts-nav__btn--auto .xp-icon{width:20px;height:20px}.xp-shorts-nav__btn--auto.is-on{border-color:var(--xp-accent);color:var(--xp-accent)}.xp-shorts-nav__btn--next{position:relative}.xp-shorts-ring{position:absolute;top:-7px;left:-7px;width:56px;height:56px;overflow:visible;opacity:0;pointer-events:none;transform:rotate(-90deg);transition:opacity .25s ease}.xp-shorts-ring.is-on{opacity:1}.xp-shorts-ring circle{fill:none;stroke-width:3}.xp-shorts-ring__track{stroke:var(--xp-border)}.xp-shorts-ring__arc{stroke:var(--xp-accent);stroke-linecap:round;stroke-dasharray:157.08;stroke-dashoffset:157.08;filter:drop-shadow(0 0 3px rgba(29,155,240,.65));transition:opacity .2s ease,filter .2s ease}.xp-shorts-ring.is-paused .xp-shorts-ring__arc{opacity:.45;filter:none}.xp-shorts-bar{position:fixed;z-index:2147481000;height:3px;overflow:hidden;border-radius:0 0 3px 3px;background:#7f7f7f40;opacity:0;pointer-events:none;transition:opacity .2s ease}.xp-shorts-bar.is-on{opacity:1}.xp-shorts-bar__fill{width:100%;height:100%;background:linear-gradient(90deg,var(--xp-accent),#7856ff);box-shadow:0 0 6px #1d9bf0b3;transform:scaleX(var(--xp-auto-progress, 0));transform-origin:left center}.xp-shorts-bar.is-paused .xp-shorts-bar__fill{opacity:.45;box-shadow:none}.xp-shorts-chip{appearance:none;position:fixed;z-index:2147481000;display:inline-flex;align-items:center;gap:6px;height:26px;margin:0;padding:0 8px 0 6px;border:1px solid var(--xp-border);border-radius:999px;background:var(--xp-elevated);color:var(--xp-fg);box-shadow:var(--xp-shadow);font:600 12px/1 system-ui,-apple-system,Segoe UI,sans-serif;cursor:pointer;opacity:0;pointer-events:none;transform:translate(-100%);transition:opacity .2s ease,background-color .15s ease}.xp-shorts-chip.is-on{opacity:1;pointer-events:auto}.xp-shorts-chip:hover{background:var(--xp-hover)}.xp-shorts-chip .xp-icon{width:16px;height:16px}.xp-shorts-chip__key{padding:2px 6px;border-radius:5px;background:var(--xp-hover);color:var(--xp-fg-muted);font:inherit}.xp-shorts-nav__btn--auto.is-paused{border-color:var(--xp-fg-muted)}.xp-shorts-nav__btn:disabled{opacity:.35;cursor:default}.xp-dock-switch{appearance:none;order:1;display:inline-flex;align-items:center;gap:8px;margin:0;padding:5px 8px 5px 10px;border:0;border-radius:999px;background:#00000073;color:#fff;font:500 12px/1.2 system-ui,-apple-system,Segoe UI,sans-serif;opacity:.4;cursor:pointer;backdrop-filter:blur(6px);transition:opacity .2s ease}.xp-dock-switch[hidden]{display:none}.xp-dock-switch:hover,.xp-dock-switch:focus-visible,.xp-dock-switch.is-on{opacity:.95}.xp-dock-switch:focus-visible{outline:2px solid var(--xp-accent);outline-offset:2px}.xp-dock-switch__track{position:relative;flex:0 0 auto;width:28px;height:16px;border-radius:999px;background:#ffffff4d;transition:background .15s ease}.xp-dock-switch__track:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform .15s ease}.xp-dock-switch.is-on .xp-dock-switch__track{background:var(--xp-accent)}.xp-dock-switch.is-on .xp-dock-switch__track:after{transform:translate(12px)}@media(prefers-reduced-motion:reduce){.xp-shorts-nav__btn.is-pressed,.xp-shorts-nav__btn.is-pressed .xp-icon{animation:none}html[data-xp-shorts-on] [data-xp-shorts] article[data-testid=tweet]{transition-duration:.01s}}.xp-settings-backdrop{position:fixed;inset:0;z-index:2147483100;display:grid;place-items:center;padding:16px;background:var(--xp-backdrop);overscroll-behavior:none;touch-action:none}.xp-settings{display:flex;flex-direction:column;width:min(920px,100%);height:min(90vh,760px);overflow:hidden;touch-action:auto;overscroll-behavior:contain;border-radius:16px;border:1px solid var(--xp-border);background:var(--xp-surface);color:var(--xp-fg);box-shadow:var(--xp-shadow);font:inherit}.xp-settings-backdrop{transition:background-color .18s ease}.xp-settings-backdrop.is-peeking{background:transparent}.xp-peek-note{position:fixed;left:50%;bottom:24px;transform:translate(-50%);max-width:calc(100vw - 32px);padding:8px 14px;border-radius:999px;border:1px solid var(--xp-border);background:var(--xp-surface);color:var(--xp-fg);box-shadow:var(--xp-shadow);font-size:14px;pointer-events:none}.xp-settings__header{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;gap:.5rem;min-height:53px;padding:0 8px;border-bottom:1px solid var(--xp-border)}.xp-settings__heading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;text-align:center}.xp-settings__heading h2{margin:0;font-size:20px;font-weight:700;line-height:24px;letter-spacing:0}.xp-settings__ver{margin:.1rem 0 0;font-size:13px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--xp-fg-muted)}.xp-settings__x{appearance:none;display:grid;place-items:center;width:34px;height:34px;margin:0;border:0;border-radius:999px;background:transparent;color:var(--xp-fg);cursor:pointer;transition:background .15s ease}.xp-settings__x:hover{background:var(--xp-hover)}.xp-settings__x svg{width:20px;height:20px;display:block}.xp-settings__header-spacer{width:34px;height:34px}.xp-settings__tabs{position:relative;display:flex;flex:0 0 auto;gap:0;padding:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scroll-behavior:smooth;border-bottom:1px solid var(--xp-border);background:transparent;scrollbar-width:thin}.xp-settings__tab-ink{position:absolute;left:0;bottom:0;height:4px;width:0;border-radius:999px;background:var(--xp-accent);pointer-events:none;transition:transform .2s ease,width .2s ease}.xp-settings__tab{flex:1 0 auto;appearance:none;position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;margin:0;min-height:53px;padding:12px 16px;border:0;background:transparent;color:var(--xp-fg-muted);cursor:pointer;font:inherit;font-size:15px;font-weight:700;letter-spacing:0;white-space:nowrap;line-height:20px;border-radius:0;transition:background-color .15s ease,color .15s ease}.xp-settings__tab-label{flex:0 0 auto}.xp-settings__badge{display:inline-flex;align-items:center;max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;padding:.1rem .4rem;border-radius:999px;border:1px solid var(--xp-border);background:var(--xp-inset);color:var(--xp-fg-muted);font-size:11px;font-weight:500;letter-spacing:0;font-variant-numeric:tabular-nums;line-height:1.2}.xp-settings__tab.is-active .xp-settings__badge,.xp-settings__badge--cache[data-level=ok],.xp-settings__badge--cache[data-level=warn],.xp-settings__badge--cache[data-level=high],.xp-settings__badge--cache[data-level=off]{border-color:var(--xp-border);background:var(--xp-inset);color:var(--xp-fg-muted)}.xp-settings__tab:hover{color:var(--xp-fg);background:var(--xp-hover)}.xp-settings__tab.is-active{color:var(--xp-fg);background:transparent}.xp-settings__tab:focus-visible{outline:2px solid var(--xp-accent);outline-offset:-2px}.xp-settings__form{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.xp-settings__body{flex:1 1 auto;min-height:0;overflow:auto;padding:0}.xp-settings__panel{display:flex;flex-direction:column;gap:0;animation:xp-settings-panel-in .18s ease}.xp-settings__panel[hidden]{display:none}@keyframes xp-settings-panel-in{0%{opacity:0}to{opacity:1}}.xp-section{display:flex;flex-direction:column;gap:0;padding:0;border-radius:0;border:0;border-bottom:1px solid var(--xp-border);background:transparent}.xp-section:last-child{border-bottom:0}.xp-section__head{display:flex;flex-direction:column;gap:.15rem;padding:12px 16px 4px}.xp-section__title{margin:0;font-size:13px;font-weight:700;letter-spacing:0;text-transform:none;color:var(--xp-fg-muted)}.xp-section__desc{margin:0;font-size:13px;line-height:16px;color:var(--xp-fg-muted)}.xp-section__body{display:flex;flex-direction:column;gap:0;padding:4px 16px 16px}.xp-section__actions{display:flex;align-items:flex-end}.xp-grid{display:grid;gap:12px}.xp-field{display:flex;flex-direction:column;gap:.35rem;font-size:15px;min-width:0;padding:8px 0}.xp-field__label{font-size:13px;font-weight:700;color:var(--xp-fg)}.xp-field__hint{font-size:13px;line-height:16px;color:var(--xp-fg-muted)}.xp-field select,.xp-field input[type=number],.xp-field input[type=text],.xp-field input[type=password],.xp-field input[type=url],.xp-allowlist-add input,.xp-allowlist-add select{appearance:none;width:100%;box-sizing:border-box;border-radius:4px;border:1px solid var(--xp-input-border);background:var(--xp-input-bg);color:var(--xp-fg);font:inherit;font-size:15px;line-height:20px;padding:8px 12px;outline:none;transition:border-color .15s ease,box-shadow .15s ease}.xp-field input::placeholder,.xp-allowlist-add input::placeholder{color:var(--xp-fg-muted)}.xp-field select:hover,.xp-field input:hover,.xp-allowlist-add input:hover,.xp-allowlist-add select:hover{border-color:var(--xp-fg-muted)}.xp-field select:focus,.xp-field input:focus,.xp-allowlist-add input:focus,.xp-allowlist-add select:focus{border-color:var(--xp-accent);box-shadow:0 0 0 1px var(--xp-accent)}.xp-slider__head{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem}.xp-slider__value{font-size:13px;font-variant-numeric:tabular-nums;color:var(--xp-fg-muted)}.xp-slider input[type=range]{width:100%;margin:6px 0;accent-color:var(--xp-accent);cursor:pointer}.xp-slider__presets{display:flex;flex-wrap:wrap;gap:6px}.xp-slider__presets .xp-btn-ui.is-active{border-color:var(--xp-accent);color:var(--xp-accent)}.xp-replace-options[hidden],.xp-auto-options[hidden],.xp-allowlist-panel[hidden]{display:none!important}.xp-auto-options,.xp-replace-options{display:flex;flex-direction:column;gap:0;min-width:0}.xp-auto-options{padding:4px 0 0;border-radius:0;border:0;border-top:1px solid var(--xp-border);background:transparent;margin-top:4px}.xp-list-editor{display:flex;flex-direction:column;gap:8px;min-width:0;padding:12px 0 4px;border-radius:0;border:0;border-top:1px solid var(--xp-border);background:transparent}.xp-list-editor__title{font-size:15px;font-weight:700;color:var(--xp-fg)}.xp-list-editor__hint{margin:.1rem 0 0;font-size:13px;line-height:16px;color:var(--xp-fg-muted)}.xp-list-editor__host{min-height:1.5rem}.xp-allowlist-panel{display:flex;flex-direction:column;gap:.55rem}.xp-allowlist-add{display:flex;gap:8px;align-items:stretch}.xp-allowlist-add input,.xp-allowlist-add select{flex:1 1 auto;min-width:0}.xp-allowlist{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.xp-allowlist__item{display:inline-flex;align-items:center;gap:.25rem;max-width:100%;padding:4px 4px 4px 10px;border-radius:999px;border:1px solid var(--xp-border);background:var(--xp-inset)}.xp-allowlist__handle{font-size:13px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--xp-fg)}.xp-allowlist__remove{appearance:none;flex:0 0 auto;width:22px;height:22px;border:0;border-radius:999px;background:transparent;color:var(--xp-fg-muted);cursor:pointer;font:inherit;font-size:15px;line-height:1}.xp-allowlist__remove:hover{background:var(--xp-danger-bg);color:var(--xp-danger)}.xp-empty{margin:0;font-size:13px;color:var(--xp-fg-muted)}.xp-field select option{background-color:var(--xp-option-bg);color:var(--xp-fg)}.xp-check{position:relative;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;font-size:15px;cursor:pointer;padding:12px 0}.xp-check__text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}.xp-check input{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}.xp-check__track{position:relative;flex:0 0 auto;width:40px;height:24px;margin-top:0;border-radius:999px;background:var(--xp-toggle-off);transition:background .15s ease}.xp-check__track:after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 0 2px #0003;transition:transform .15s ease}.xp-check input:checked+.xp-check__track{background:var(--xp-accent)}.xp-check input:checked+.xp-check__track:after{transform:translate(16px)}.xp-check input:focus-visible+.xp-check__track{outline:2px solid var(--xp-accent);outline-offset:2px}.xp-check__title{display:block;font-weight:700;color:var(--xp-fg)}.xp-check__hint{display:block;margin-top:.15rem;font-size:13px;line-height:16px;font-weight:400;color:var(--xp-fg-muted)}.xp-hint{margin:0;padding:4px 0 8px;font-size:13px;line-height:16px;color:var(--xp-fg-muted)}.xp-subheading{padding:14px 0 2px}.xp-subheading:first-child{padding-top:4px}.xp-subheading__title{margin:0;font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--xp-accent)}.xp-settings__actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid var(--xp-border);background:var(--xp-surface)}.xp-settings__primary,.xp-settings__ghost{appearance:none;border-radius:9999px;font:inherit;font-size:15px;font-weight:700;line-height:20px;padding:8px 16px;cursor:pointer;transition:background .15s ease,border-color .15s ease,opacity .15s ease}.xp-settings__primary{border:0;background:var(--xp-accent);color:#fff;min-height:36px}.xp-settings__primary:hover{background:var(--xp-accent-hover)}.xp-settings__ghost{border:1px solid var(--xp-border);background:transparent;color:var(--xp-fg);align-self:flex-start}.xp-settings__ghost--compact{flex:0 0 auto;padding:8px 16px;align-self:stretch}.xp-settings__ghost:hover{background:var(--xp-hover)}.xp-settings__ghost--danger{border-color:var(--xp-danger-border);color:var(--xp-danger)}.xp-settings__ghost--danger:hover{background:var(--xp-danger-bg);border-color:var(--xp-danger-border)}.xp-about{display:flex;flex-direction:column;gap:12px;padding:16px;border-radius:0;border:0;background:transparent}.xp-about__foot{margin:0;font-size:13px;color:var(--xp-fg-muted)}@media(max-width:720px){.xp-settings-backdrop{padding:0;align-items:end}.xp-settings{width:100%;max-height:92vh;border-radius:16px 16px 0 0;border-left:0;border-right:0;border-bottom:0}}.xp-provider-panels{display:flex;flex-direction:column;gap:0}.xp-provider-fields{display:flex;flex-direction:column;gap:0;padding:4px 0 0;border-radius:0;border:0;border-top:1px solid var(--xp-border);background:transparent}.xp-meter{display:flex;flex-direction:column;gap:8px;padding:12px 0;border-radius:0;border:0;background:transparent}.xp-meter__top{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem}.xp-meter__title{font-size:13px;font-weight:700;letter-spacing:0;text-transform:none;color:var(--xp-fg-muted)}.xp-meter__pct{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--xp-accent);line-height:1}.xp-meter[data-level=warn] .xp-meter__pct{color:var(--xp-warn)}.xp-meter[data-level=high] .xp-meter__pct{color:var(--xp-danger)}.xp-meter[data-level=off] .xp-meter__pct{color:var(--xp-fg-muted)}.xp-meter__used{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--xp-fg)}.xp-meter__bar{position:relative;height:4px;border-radius:999px;overflow:hidden;background:var(--xp-border);border:0}.xp-meter__fill{display:block;height:100%;border-radius:inherit;background:var(--xp-accent);transition:width .28s cubic-bezier(.22,1,.36,1)}.xp-meter[data-level=warn] .xp-meter__fill{background:var(--xp-warn)}.xp-meter[data-level=high] .xp-meter__fill{background:var(--xp-danger)}.xp-meter[data-level=off] .xp-meter__fill{background:var(--xp-fg-muted)}.xp-meter__meta{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .35rem;font-size:13px;color:var(--xp-fg-muted);font-variant-numeric:tabular-nums}.xp-meter__dot{opacity:.5}.xp-meter__hint{margin:.1rem 0 0;font-size:13px;line-height:16px;color:var(--xp-fg-muted)}.xp-about__desc{margin:0;font-size:15px;line-height:20px;color:var(--xp-fg)}.xp-about__repo{display:inline-flex;align-items:center;align-self:flex-start;gap:.35rem;color:var(--xp-link);font-size:15px;font-weight:400;text-decoration:none}.xp-about__repo:hover{text-decoration:underline}.xp-about__author{display:flex;align-items:center;gap:12px;margin-top:4px;padding:12px 0;border-radius:0;border:0;border-top:1px solid var(--xp-border);border-bottom:1px solid var(--xp-border);background:transparent}.xp-about__avatar{flex:0 0 auto;width:48px;height:48px;border-radius:50%;object-fit:cover;background:var(--xp-elevated)}.xp-about__meta{display:flex;flex-direction:column;gap:.1rem;min-width:0}.xp-about__name{color:var(--xp-fg);font-weight:700;font-size:15px;text-decoration:none}.xp-about__name:hover{color:var(--xp-link);text-decoration:underline}.xp-about__handle{font-size:15px;color:var(--xp-fg-muted)}.xp-about__email{color:var(--xp-link);font-size:13px;text-decoration:none;word-break:break-all}.xp-about__email:hover{text-decoration:underline}.xp-tab{display:flex;flex-direction:column}.xp-row{display:flex;flex-direction:column;min-width:0}.xp-row[hidden],.xp-section[hidden],.xp-provider-fields[hidden],.xp-settings__badge[hidden]{display:none!important}.xp-row--actions{flex-direction:row;flex-wrap:wrap;gap:8px;padding:8px 0}.xp-group{gap:0}.xp-provider-fields{display:flex;flex-direction:column}.xp-settings__spacer{flex:1 1 auto}.xp-settings__actions{position:relative}.xp-btn-ui{appearance:none;border-radius:9999px;font:inherit;font-size:15px;font-weight:700;line-height:20px;padding:8px 16px;min-height:36px;cursor:pointer;border:1px solid var(--xp-border);background:transparent;color:var(--xp-fg);transition:background .15s ease,border-color .15s ease,opacity .15s ease}.xp-btn-ui:hover{background:var(--xp-hover)}.xp-btn-ui:focus-visible{outline:2px solid var(--xp-accent);outline-offset:2px}.xp-hotkey-input{align-self:flex-start;min-width:96px;font-variant-numeric:tabular-nums}.xp-hotkey-input.is-recording{border-color:var(--xp-accent);color:var(--xp-accent);animation:xp-hotkey-wait 1.1s ease-in-out infinite}@keyframes xp-hotkey-wait{50%{box-shadow:0 0 0 4px #1d9bf040}}@media(prefers-reduced-motion:reduce){.xp-hotkey-input.is-recording{animation:none}}.xp-btn-ui--compact{flex:0 0 auto;align-self:stretch}.xp-btn-ui--primary{border-color:transparent;background:var(--xp-accent);color:#fff}.xp-btn-ui--primary:hover{background:var(--xp-accent-hover)}.xp-btn-ui--danger,.xp-btn-ui--ghost.xp-btn-ui--danger{border-color:var(--xp-danger-border);color:var(--xp-danger)}.xp-btn-ui--danger:hover{background:var(--xp-danger-bg)}.xp-btn-ui--danger-solid{border-color:transparent;background:var(--xp-danger);color:#fff}.xp-btn-ui--danger-solid:hover{background:var(--xp-danger);opacity:.9}.xp-textarea{box-sizing:border-box;width:100%;margin:8px 0;padding:8px 12px;border-radius:4px;border:1px solid var(--xp-input-border);background:var(--xp-input-bg);color:var(--xp-fg);font:13px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;resize:vertical;outline:none}.xp-textarea:focus{border-color:var(--xp-accent);box-shadow:0 0 0 1px var(--xp-accent)}.xp-confirm-overlay{position:fixed;inset:0;z-index:2147483300;display:grid;place-items:center;padding:16px;background:var(--xp-backdrop)}.xp-confirm{width:min(360px,100%);padding:20px;border-radius:16px;border:1px solid var(--xp-border);background:var(--xp-surface);color:var(--xp-fg);box-shadow:var(--xp-shadow)}.xp-confirm__title{margin:0 0 8px;font-size:20px;font-weight:800;line-height:24px}.xp-confirm__text{margin:0 0 16px;font-size:15px;line-height:20px;color:var(--xp-fg-muted)}.xp-confirm__actions{display:flex;justify-content:flex-end;gap:8px}.xp-settings-backdrop{backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);transition:background-color .18s ease,backdrop-filter .18s ease,-webkit-backdrop-filter .18s ease}.xp-settings-backdrop.is-peeking{backdrop-filter:none;-webkit-backdrop-filter:none}.xp-settings__body,.xp-settings__tabs,.xp-popup,.xp-textarea{scrollbar-width:thin;scrollbar-color:var(--xp-scroll-thumb) transparent}.xp-settings__body::-webkit-scrollbar,.xp-settings__tabs::-webkit-scrollbar,.xp-popup::-webkit-scrollbar,.xp-textarea::-webkit-scrollbar{width:10px;height:10px}.xp-settings__tabs::-webkit-scrollbar{height:6px}.xp-settings__body::-webkit-scrollbar-track,.xp-settings__tabs::-webkit-scrollbar-track,.xp-popup::-webkit-scrollbar-track,.xp-textarea::-webkit-scrollbar-track{background:transparent}.xp-settings__body::-webkit-scrollbar-thumb,.xp-settings__tabs::-webkit-scrollbar-thumb,.xp-popup::-webkit-scrollbar-thumb,.xp-textarea::-webkit-scrollbar-thumb{background-color:var(--xp-scroll-thumb);background-clip:content-box;border:2px solid transparent;border-radius:999px}.xp-settings__body::-webkit-scrollbar-thumb:hover,.xp-settings__tabs::-webkit-scrollbar-thumb:hover,.xp-popup::-webkit-scrollbar-thumb:hover,.xp-textarea::-webkit-scrollbar-thumb:hover{background-color:var(--xp-scroll-thumb-hover)}.xp-settings__body::-webkit-scrollbar-corner,.xp-textarea::-webkit-scrollbar-corner{background:transparent}.xp-row.is-locked{opacity:.45;pointer-events:none}.xp-dock{position:fixed;left:12px;bottom:12px;z-index:2147482000;display:flex;align-items:center;gap:8px}.xp-dock[hidden]{display:none}.xp-hotkey-hint{appearance:none;order:0;display:inline-flex;align-items:center;gap:8px;margin:0;padding:5px 10px;border:0;border-radius:999px;background:#00000073;color:#fff;font:500 12px/1.2 system-ui,-apple-system,Segoe UI,sans-serif;opacity:.4;cursor:pointer;backdrop-filter:blur(6px);transition:opacity .2s ease}.xp-hotkey-hint[hidden]{display:none}.xp-hotkey-hint:hover,.xp-hotkey-hint:focus-visible{opacity:.95}.xp-hotkey-hint__keys{padding:1px 6px;border-radius:5px;background:#fff3;font:inherit;font-weight:600}.xp-settings__search{flex:0 0 auto;padding:8px 16px;border-bottom:1px solid var(--xp-border)}.xp-search{display:flex;align-items:center;gap:8px;height:38px;padding:0 6px 0 12px;border-radius:999px;border:1px solid var(--xp-input-border);background:var(--xp-input-bg);color:var(--xp-fg-muted);transition:border-color .15s ease,box-shadow .15s ease}.xp-search:focus-within{border-color:var(--xp-accent);box-shadow:0 0 0 1px var(--xp-accent);color:var(--xp-accent)}.xp-search__icon{display:grid;place-items:center}.xp-search__icon svg{width:18px;height:18px}.xp-search__input{flex:1 1 auto;min-width:0;height:100%;padding:0;border:0;outline:0;background:transparent;color:var(--xp-fg);font:inherit;font-size:15px}.xp-search__input::placeholder{color:var(--xp-fg-muted)}.xp-search__clear{appearance:none;display:grid;place-items:center;width:28px;height:28px;margin:0;padding:0;border:0;border-radius:999px;background:transparent;color:var(--xp-fg-muted);cursor:pointer}.xp-search__clear[hidden]{display:none}.xp-search__clear:hover{background:var(--xp-hover);color:var(--xp-fg)}.xp-search__clear svg{width:16px;height:16px}.xp-hits{display:none;flex-direction:column;padding:6px 0}.xp-settings.is-searching .xp-hits{display:flex}.xp-settings.is-searching .xp-settings__panel{display:none}.xp-settings.is-searching .xp-settings__tabs{opacity:.45;pointer-events:none}.xp-hits__empty{margin:0;padding:32px 16px;text-align:center;color:var(--xp-fg-muted);font-size:15px}.xp-hit{appearance:none;display:flex;flex-direction:column;gap:2px;width:100%;margin:0;padding:10px 16px;border:0;background:transparent;color:var(--xp-fg);font:inherit;text-align:left;cursor:pointer}.xp-hit.is-active{background:var(--xp-hover)}.xp-hit__title{font-size:15px;font-weight:700;line-height:20px}.xp-hit__crumb{font-size:12px;line-height:16px;color:var(--xp-accent)}.xp-hit__hint{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;font-size:13px;line-height:18px;color:var(--xp-fg-muted)}.xp-hit mark{padding:0;border-radius:2px;background:#1d9bf047;color:inherit}.is-found{animation:xp-found 1.8s ease-out}@keyframes xp-found{0%,60%{background-color:#1d9bf033}to{background-color:transparent}}@media(prefers-reduced-motion:reduce){.is-found{animation:none}}@keyframes xp-reveal{0%{opacity:0;filter:blur(6px);transform:translateY(6px) scale(.985)}60%{opacity:1;filter:blur(.8px)}to{opacity:1;filter:blur(0);transform:none}}@keyframes xp-swap{0%{opacity:.2;transform:translateY(3px)}to{opacity:1;transform:none}}@keyframes xp-rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes xp-pop{0%{opacity:0;transform:scale(.94) translateY(-4px)}to{opacity:1;transform:none}}@keyframes xp-dialog-in{0%{opacity:0;transform:translateY(14px) scale(.965)}to{opacity:1;transform:none}}@keyframes xp-fade{0%{opacity:0}to{opacity:1}}@keyframes xp-shake{20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}@keyframes xp-shimmer{0%{background-position:150% 0}to{background-position:-50% 0}}.xp-text--reveal{animation:xp-reveal .6s var(--xp-ease-out) both}.xp-text--swap{animation:xp-swap .22s var(--xp-ease-out) both}.xp-split__pane{animation:xp-rise .42s var(--xp-ease-out) both}.xp-split__pane--translated{animation-delay:.12s}.xp-result.is-open .xp-result__label,.xp-result.is-open .xp-result__meta,.xp-result.is-open .xp-result__text,.xp-result.is-open .xp-result__error,.xp-result.is-open .xp-btn--retry{animation:xp-rise .4s var(--xp-ease-out) both}.xp-result.is-open .xp-result__meta{animation-delay:.05s}.xp-result.is-open .xp-result__text,.xp-result.is-open .xp-btn--retry{animation-delay:.1s}.xp-result.is-open .xp-result__error{animation-name:xp-rise,xp-shake;animation-duration:.4s,.4s;animation-delay:0s,.35s}.xp-result__inner{position:relative;overflow:hidden}.xp-result.is-open .xp-result__inner:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(105deg,transparent 35%,rgba(29,155,240,.14) 50%,transparent 65%);background-size:250% 100%;animation:xp-shimmer .9s var(--xp-ease-out) .1s 1 both}.xp-article-tr{animation:xp-rise .45s var(--xp-ease-out) both}.xp-peek-badge{animation:xp-pop .2s var(--xp-ease-spring) both}.xp-text--translating{transition:filter .55s var(--xp-ease-out),opacity .55s var(--xp-ease-out)}.xp-btn,.xp-action__btn,.xp-btn-ui{transition-property:color,background-color,transform,box-shadow,opacity;transition-duration:.15s}.xp-btn--header:active:not(:disabled),.xp-action__btn:active,.xp-btn-ui:active:not(:disabled){transform:scale(.92)}.xp-btn--header .xp-btn__icon,.xp-action__btn .xp-icon{transition:transform .25s var(--xp-ease-spring)}.xp-btn--header:hover:not(:disabled) .xp-btn__icon,.xp-action__btn:hover .xp-icon{transform:scale(1.12) rotate(-6deg)}.xp-toast{transition:opacity .22s ease,transform .38s var(--xp-ease-spring)}.xp-popup{transform-origin:top right;animation:xp-pop .18s var(--xp-ease-out) both}.xp-popup__item{animation:xp-fade .2s ease both}.xp-popup__item:nth-child(2){animation-delay:.03s}.xp-popup__item:nth-child(3){animation-delay:.06s}.xp-popup__item:nth-child(4){animation-delay:.09s}.xp-popup__item:nth-child(n+5){animation-delay:.12s}.xp-settings-backdrop,.xp-confirm-overlay{animation:xp-fade .2s ease both}.xp-settings,.xp-confirm{animation:xp-dialog-in .32s var(--xp-ease-out) both}.xp-settings__panel{animation:xp-rise .28s var(--xp-ease-out) both}.xp-section{animation:xp-rise .35s var(--xp-ease-out) both}.xp-section:nth-child(2){animation-delay:.04s}.xp-section:nth-child(3){animation-delay:.08s}.xp-section:nth-child(4){animation-delay:.12s}.xp-section:nth-child(n+5){animation-delay:.16s}@media(prefers-reduced-motion:reduce){.xp-text--reveal,.xp-text--swap,.xp-split__pane,.xp-result.is-open *,.xp-result.is-open .xp-result__inner:after,.xp-article-tr,.xp-peek-badge,.xp-popup,.xp-popup__item,.xp-settings-backdrop,.xp-confirm-overlay,.xp-settings,.xp-confirm,.xp-settings__panel,.xp-section{animation:none!important}.xp-toast,.xp-btn--header .xp-btn__icon,.xp-action__btn .xp-icon{transition-duration:.01s!important}} '); (function () { 'use strict'; const e="XP-1010",t="XP-1201",a="XP-1301",n="XP-1302",r="XP-1401",i="font-weight:bold",o="color:#71767b";function s(){try{if("undefined"!=typeof window&&!0===window.__XP_DEBUG__)return !0}catch{}try{return "1"===localStorage.getItem("xp_debug")}catch{return false}}function l(e,t,a,n){const r=new Error(`[${e}] ${t}`);return r.code=e,void 0!==a&&(r.details=a),void 0!==n&&(r.cause=n),r}function c(e,t,a,n,r){ void 0===r?e(`%cX Plus%c ${a} ${n}`,t,i):e(`%cX Plus%c ${a} ${n}`,t,i,r);}function d(e,t,a){c(console.error,"background:#1d9bf0;color:#fff;border-radius:3px;padding:1px 6px;font-weight:bold",e,t,a);}function u(e,t,a){c(console.warn,"background:#b58900;color:#fff;border-radius:3px;padding:1px 6px;font-weight:bold",e,t,a);}function p(e,t,a){s()&&(void 0===a?console.info(`%cX Plus · ${e}%c ${t}`,o,""):console.info(`%cX Plus · ${e}%c ${t}`,o,"",a));}const m=new Map;function f(e,t){return m.has(e)||m.set(e,new Set),m.get(e).add(t),()=>function(e,t){m.get(e)?.delete(t);}(e,t)}function h(e,...t){m.get(e)?.forEach(a=>{try{a(...t);}catch(n){d("XP-1001",`listener for "${e}" failed`,{event:e,error:n});}});}const g="X Plus",b="0.9.0",v="nemoking1210@gmail.com",y="xp_settings_v1",w="xp_translation_cache_v1",x="data-xp-ui",A=`[${x}], [data-xp-post]`,k="data-xp-root",H="data-xp-shorts",S="data-xp-shorts-settled",P="data-xp-shorts-focus",L="data-xp-theme",C=10485760,T=Object.freeze({article:'article[data-testid="tweet"]',tweetText:'[data-testid="tweetText"]',quoteTweet:'[data-testid="quoteTweet"]',userName:'[data-testid="User-Name"]',quoteAvatar:'[data-testid="Tweet-User-Avatar"]',caret:'[data-testid="caret"]',actionReply:'[data-testid="reply"]',photo:'[data-testid="tweetPhoto"]',videoPlayer:'[data-testid="videoPlayer"]',cell:'[data-testid="cellInnerDiv"]',sidebar:'[data-testid="sidebarColumn"]',primaryColumn:'[data-testid="primaryColumn"]',sideNav:'[data-testid="AppTabBar"], nav[role="navigation"]',showMore:'[data-testid="tweet-text-show-more-link"]'}),M="M12.745 20.54",q=new Map;function E(e){if(!e?.id||!e.fields)throw new Error("registerFeature: `id` and `fields` are required");if(q.has(e.id))throw new Error(`registerFeature: duplicate feature "${e.id}"`);q.set(e.id,{order:100,...e});}function D(){return [...q.values()].sort((e,t)=>e.order-t.order)}function _(t,...a){for(const r of D()){const i=r[t];if("function"==typeof i)try{i(...a);}catch(n){d(e,`feature "${r.id}" ${t}() failed`,{error:n});}}}function B(t,a,...n){const r=q.get(t)?.[a];if("function"==typeof r)try{r(...n);}catch(i){d(e,`feature "${t}" ${a}() failed`,{error:i});}}function z(e,t="",a=""){const n=document.createElement(e);return t&&(n.className=t),a&&(n.textContent=a),n.setAttribute(x,""),n}function I(e){const t=1===e?.nodeType?e:e?.parentElement;return Boolean(t?.closest?.(A))}function F(e,t){let a=0;const n=function(...n){clearTimeout(a),a=setTimeout(()=>e.apply(this,n),t);};return n.cancel=()=>clearTimeout(a),n}const R=["auxclick","mousedown","mouseup","pointerdown","pointerup","touchstart","touchend"];function K(e){const t=e=>e.stopPropagation();for(const a of R)e.addEventListener(a,t,true);}const V=new Set;let O=null,N=false,$="";function X(e,t=350){const a={schedule:F(e,t)};return V.add(a),O||(O=new MutationObserver(e=>{(function(e){for(const t of e)for(let e=0;ee.schedule());}),O.observe(document.documentElement,{childList:true,subtree:true})),()=>{a.schedule.cancel(),V.delete(a);}}function j(e,t){const a=history[e];"function"==typeof a&&(history[e]=function(...e){const n=a.apply(this,e);return t(),n});}const G=new Set(["home","explore","search","notifications","messages","settings","i","compose","login","logout","signup","tos","privacy","hashtag","intent","share","following","followers","lists","bookmarks","communities","premium","jobs","articles","topics","about","download","help","display","account"]);function U(e){let t=String(e||"").replace(/ /g," ").trim();return t?(t=t.replace(/^@+/,""),t=t.replace(/^https?:\/\/(www\.)?(x|twitter)\.com\//i,""),t=t.replace(/^\//,""),t=t.split(/[/?#\s]/)[0]||"",t=t.replace(/^@+/,"").replace(/\/+$/,""),t=t.toLowerCase(),!t||G.has(t)?"":/^[a-z0-9_]{1,15}$/i.test(t)?t:""):""}function Q(e){if(!e)return "";let t=String(e).trim();try{/^https?:\/\//i.test(t)&&(t=new URL(t).pathname);}catch{}return t=t.replace(/^\//,""),U(t.split(/[/?#]/)[0]||"")}function W(e){const t=U(e);return t?`@${t}`:""}function Y(e){return String(e||"").trim().toLowerCase().replace(/_/g,"-")}function Z(e){return Array.isArray(e)?[...new Set(e.map(Y).filter(Boolean))].sort():[]}function J(e){return Array.isArray(e)?[...new Set(e.map(U).filter(Boolean))].sort():[]}const ee={handle:U,lang:Y,text:e=>String(e??"").trim()},te=(e=false)=>({type:"bool",default:e}),ae=(e,t)=>({type:"enum",values:e,default:t}),ne=(e,{min:t=0,max:a=Number.MAX_SAFE_INTEGER}={})=>({type:"int",default:e,min:t,max:a}),re=(e="",{max:t=500,trim:a=true}={})=>({type:"text",default:e,max:t,trim:a}),ie=(e,t=[],{max:a=500,sort:n=true}={})=>({type:"list",kind:e,default:t,max:a,sort:n}),oe=e=>({type:"record",fields:e});function se(e){return "record"===e.type?le(e.fields):"list"===e.type?[...e.default]:e.default}function le(e){const t={};for(const[a,n]of Object.entries(e))t[a]=se(n);return t}function ce(e,t){switch(e.type){case "bool":return "boolean"==typeof t?t:e.default;case "enum":return function(e){return "function"==typeof e.values?e.values():e.values}(e).includes(t)?t:e.default;case "int":{const a=Number(t);return ""!==t&&null!=t&&Number.isFinite(a)?Math.min(e.max,Math.max(e.min,Math.round(a))):e.default}case "text":return "string"!=typeof t?e.default:(e.trim?t.trim():t).slice(0,e.max);case "list":{if(!Array.isArray(t))return [...e.default];const a=[...new Set(t.map(ee[e.kind]||ee.text).filter(Boolean))].slice(0,e.max);return e.sort?a.sort():a}case "record":return de(e.fields,t);default:return e.default}}function de(e,t){const a=t&&"object"==typeof t&&!Array.isArray(t)?t:{},n={};for(const[r,i]of Object.entries(e))n[r]=ce(i,a[r]);return n}function ue(e,t,a){const n=t.split("."),r=n.pop();let i=e;for(const o of n)null!=i[o]&&"object"==typeof i[o]||(i[o]={}),i=i[o];i[r]=a;}var pe=(()=>"undefined"!=typeof GM_getValue?GM_getValue:void 0)(),me=(()=>"undefined"!=typeof GM_registerMenuCommand?GM_registerMenuCommand:void 0)(),fe=(()=>"undefined"!=typeof GM_setValue?GM_setValue:void 0)(),he=(()=>"undefined"!=typeof GM_xmlhttpRequest?GM_xmlhttpRequest:void 0)();function ge(e,t=null){try{const a=pe(e,t);return void 0===a?t:a}catch{return t}}function be(e,t){try{return fe(e,t),!0}catch{return false}}let ve=null;function ye(){const e={};for(const t of D())Object.keys(t.fields).length&&(e[t.id]=t.fields);return e}function we(e){const t=e&&"object"==typeof e?e:{},a={};for(const[n,r]of Object.entries(ye()))a[n]=de(r,t[n]);return a}function xe(){return ve=we(ge(y,null)),ve}function Ae(){return ve||xe()}function ke(e){return Ae()[e]}function He(e){const t=Ae();return ve=we(e),be(y,ve)||d("XP-1002","failed to persist settings"),function(e,t){for(const a of Object.keys(t))JSON.stringify(e?.[a])!==JSON.stringify(t[a])&&h(`settings:${a}`,t[a],e?.[a]??null);h("settings:changed",{prev:e,next:t});}(t,ve),ve}function Se(e,t){const a=Ae();return He({...a,[e]:{...a[e],...t}})}function Pe(){return JSON.stringify(Ae(),null,2)}function Le(e){const t=function(e){if(!e||"transparent"===e||"rgba(0, 0, 0, 0)"===e)return null;const t=e.match(/rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i);return t?{r:Number(t[1]),g:Number(t[2]),b:Number(t[3])}:null}(e);if(!t)return null;const a=(.2126*t.r+.7152*t.g+.0722*t.b)/255;return a>.55?"light":a<.04?"dark":a>=.04&&a<=.28&&t.b>=t.r-5?"dim":"dark"}function Ce(e){if(!e)return null;const t=String(e).toLowerCase().trim();return "light"===t||"dim"===t||"dark"===t?t:"lights-out"===t||"lightsout"===t||"black"===t?"dark":null}function Te(e=function(){const e=document.documentElement,t=document.body,a=Ce(e.getAttribute("data-color-mode"))||Ce(e.getAttribute("data-theme"))||Ce(t?.getAttribute?.("data-color-mode"))||Ce(t?.getAttribute?.("data-theme"));if(a)return a;const n=`${e.className||""} ${t?.className||""}`.toLowerCase();if(/\bdim\b/.test(n))return "dim";if(/\blights?-?out\b/.test(n))return "dark";for(const i of [t,e]){if(!i)continue;const e=Le(getComputedStyle(i).backgroundColor);if(e)return e}const r=getComputedStyle(e).colorScheme||"";return /\blight\b/i.test(r)&&!/\bdark\b/i.test(r)?"light":/\bdark\b/i.test(r)&&!/\blight\b/i.test(r)?"dark":window.matchMedia?.("(prefers-color-scheme: light)")?.matches?"light":"dark"}()){const t="light"===e||"dim"===e?e:"dark";return document.documentElement.getAttribute(L)!==t&&document.documentElement.setAttribute(L,t),t}const Me=["en","ru","zh","es","pt","de","fr","ja"],qe={en:"English",ru:"Русский",zh:"中文",es:"Español",pt:"Português",de:"Deutsch",fr:"Français",ja:"日本語"},Ee={en:"🇺🇸",ru:"🇷🇺",zh:"🇨🇳",es:"🇪🇸",pt:"🇧🇷",de:"🇩🇪",fr:"🇫🇷",ja:"🇯🇵"},De="🌐",_e={en:"en",ru:"ru",zh:"zh","zh-cn":"zh","zh-tw":"zh","zh-hk":"zh","zh-hans":"zh","zh-hant":"zh",es:"es",pt:"pt","pt-br":"pt","pt-pt":"pt",de:"de",fr:"fr",ja:"ja"},Be={en:{"translate.btnTranslate":"Translate","translate.btnHide":"Hide translation","translate.btnRetry":"Retry","translate.translating":"Translating…","translate.translationLabel":"Translation","translate.detectedLang":"Detected: {lang}","translate.errNetwork":"Translation failed. Try again.","general.title":"General","translate.sectionTranslation":"Translation","translate.sectionCache":"Cache","translate.settingsProvider":"Translation provider","translate.settingsProviderHint":"Credentials are stored in userscript storage on this device only.","translate.providerFieldApiKey":"API key","translate.providerFieldApiKeyOptional":"API key (optional)","translate.providerFieldDeeplPlan":"DeepL plan","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"Region","translate.providerFieldModel":"Model","translate.providerFieldBaseUrl":"API base URL","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"API URL","translate.providerHintGoogle":"Uses Google’s public Translate endpoint. No API key required.","translate.providerHintDeepl":"DeepL API Free or Pro. Create a key at deepl.com/pro-api.","translate.providerHintDeeplKey":"Free keys usually end with :fx","translate.providerHintMicrosoft":"Azure Translator resource key from the Azure portal.","translate.providerHintMicrosoftRegion":"Use the resource region, or global for multi-service keys.","translate.providerHintOpenai":"Chat Completions API. Compatible endpoints work if they speak OpenAI’s format.","translate.providerHintOpenaiBase":"Default https://api.openai.com/v1 — change for proxies / compatible hosts.","translate.providerHintYandex":"Yandex Cloud Translate API key + folder ID.","translate.providerHintYandexFolder":"From the Yandex Cloud console (folder / catalog id).","translate.providerHintLibre":"Self-hosted or public LibreTranslate instance.","translate.errProviderConfig":"Provider is not configured. Open Translator settings → Providers.","about.title":"About","about.repo":"Open repository on GitHub","about.license":"MIT License","translate.settingsTargetLang":"Translate into","general.language":"Interface language","translate.settingsCacheHours":"Cache translations (hours)","translate.settingsCacheHint":"0 disables the cache. Entries expire by TTL or when you clear the cache.","translate.cacheMeterTitle":"Storage","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} entries","translate.cacheMeterTtl":"TTL {hours}h","translate.cacheMeterDisabled":"Cache off","translate.cacheMeterFree":"{free} free","translate.cacheMeterAria":"Cache {used} of {limit} ({pct}), {count} entries","translate.cacheMeterHint":"Soft budget for GM storage. Oldest entries are evicted when full.","translate.settingsDisplayMode":"Translation display","translate.settingsDisplayModeHint":"Panel: show translation under the post. Replace: swap the post text and offer Show original.","translate.displayModePanel":"Separate panel","translate.displayModeReplace":"Replace original text","translate.btnShowOriginal":"Show original","translate.settingsTranslateMode":"Translation mode","translate.settingsTranslateModeHint":"Automatic: translate as soon as a post is even slightly visible on screen. Button: only when you tap Translate.","translate.translateModeButton":"On button click","translate.translateModeAuto":"Automatic (on screen)","translate.settingsAutoScope":"Auto-translate scope","translate.settingsAutoScopeHint":"Choose whether every visible post is translated, or only accounts you pick.","translate.autoScopeAll":"All accounts","translate.autoScopeAllowlist":"Selected accounts only","translate.settingsAllowlistHint":"You can also add or remove accounts from a post’s ⋮ menu.","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"Add","translate.allowlistEmpty":"No accounts yet. Add a nickname above.","translate.allowlistInvalid":"Enter a valid X handle.","translate.allowlistAdded":"Added {handle} to auto-translate","translate.allowlistRemoved":"Removed {handle} from auto-translate","translate.menuAddAutoAccount":"Auto-translate this account","translate.menuRemoveAutoAccount":"Remove from auto-translate","panel.save":"Save","panel.close":"Close","panel.search":"Search settings","panel.searchClear":"Clear search","panel.searchEmpty":"Nothing found","translate.settingsClearCache":"Clear cache","panel.saved":"Settings saved","translate.settingsCacheCleared":"Translation cache cleared","toast.title.success":"Success","toast.title.info":"Info","toast.title.warning":"Notice","toast.title.error":"Error","toast.dismiss":"Dismiss","translate.langAuto":"Auto (match UI / browser)","general.languageAuto":"Auto (browser)","translate.badgeLangAuto":"Auto","translate.originalLabel":"Original","translate.settingsReplaceReveal":"Replace mode details","translate.settingsReplaceRevealHint":"Button only, peek original on hover (hides the button after translate), or show original and translation together.","translate.replaceRevealButton":"Button only","translate.replaceRevealHover":"Show original on hover","translate.replaceRevealSplit":"Split view (original + translation)","translate.settingsAccountBlocklist":"Account blocklist","translate.settingsAccountBlocklistHint":"Never show Translate and never auto-translate these accounts. Also available from a post's menu.","translate.blocklistEmpty":"No blocked accounts.","translate.blocklistAdded":"Blocked {handle} from translation","translate.blocklistRemoved":"Unblocked {handle}","translate.menuBlockAccount":"Never translate this account","translate.menuUnblockAccount":"Allow translating this account","translate.settingsLangAllowlist":"Source language allowlist","translate.settingsLangAllowlistHint":"If not empty, only posts detected as these languages are translated. Leave empty for all.","translate.settingsLangBlocklist":"Source language blocklist","translate.settingsLangBlocklistHint":"Skip posts detected as these languages.","translate.settingsSkipNative":"Skip posts X already auto-translated","translate.settingsSkipNativeHint":"When X shows its translation bar (Show original), don’t add Translate or auto-translate.","translate.settingsHideErrors":"Hide translation errors","translate.settingsHideErrorsHint":"Don’t show “Translation failed. Try again.”; the post just stays untranslated.","translate.langListEmpty":"No languages selected.","translate.langListAdd":"Add","translate.langSkippedBlocked":"Skipped: source language is blocked","translate.langSkippedNotAllowed":"Skipped: source language is not in the allowlist","general.sectionInterface":"Interface","translate.settingsSectionTranslate":"Translation","translate.settingsSectionAccounts":"Accounts","translate.settingsSectionLanguages":"Languages","translate.settingsSectionProvider":"Provider","translate.settingsSectionCache":"Cache","translate.badgeCacheOff":"Off","menu.settings":"X Plus — Settings","nav.label":"X Plus","common.off":"Off","panel.cancel":"Cancel","panel.confirm":"Confirm","panel.reset":"Reset","panel.resetTitle":"Reset all settings?","panel.resetText":"Every option goes back to its default. Nothing changes until you press Save.","list.add":"Add","list.remove":"Remove","list.empty":"Nothing here yet.","list.invalid":"Enter a valid value.","list.exists":"{item} is already in the list","list.handlePlaceholder":"@username","general.languageHint":"Language of X Plus menus and messages.","general.navButton":"Sidebar button","general.navButtonHint":"Show an “X Plus” entry in X’s left navigation that opens these settings.","general.hotkey":"Keyboard shortcut","general.hotkeyHint":"Ctrl + M opens the X Plus settings.","general.hotkeyReminder":"Shortcut reminder","general.hotkeyReminderHint":"Shows a faint reminder in the bottom left corner of the screen.","hotkey.hint":"X Plus settings","general.sectionToasts":"Notifications","general.toasts":"Show notifications","general.toastsHint":"Toasts for saved settings, downloads and errors.","general.toastPosition":"Position","general.toastPosition.top-right":"Top right","general.toastPosition.top-left":"Top left","general.toastPosition.bottom-right":"Bottom right","general.toastPosition.bottom-left":"Bottom left","general.toastDuration":"Display time (seconds)","general.toastDurationHint":"0 keeps a notification until you close it.","about.description":"Userscript that adds translation, media download and many quality-of-life improvements to X (x.com). Works with Tampermonkey, Violentmonkey, ScriptCat and similar managers.","backup.title":"Backup","backup.exportTitle":"Export","backup.exportDesc":"Save your current settings as a JSON file or copy them to the clipboard.","backup.download":"Download file","backup.copy":"Copy JSON","backup.exported":"Settings exported","backup.copied":"Settings copied to the clipboard","backup.copyFailed":"Could not access the clipboard","backup.secretsHint":"The export contains API keys of translation providers. Keep it private.","backup.importTitle":"Import","backup.importDesc":"Paste a backup or choose a file. Unknown or invalid values are ignored. Importing applies immediately.","backup.importPaste":"Import pasted JSON","backup.importFile":"Choose file…","backup.imported":"Settings imported","backup.importFailed":"That is not a valid X Plus backup","translate.sectionMain":"Translate posts","translate.enabled":"Enable translation","translate.enabledHint":"Adds a Translate control to posts and replies.","media.title":"Media","media.sectionMain":"Media download","media.sectionMainDesc":"Save videos, GIFs and photos from posts.","media.enabled":"Enable download","media.enabledHint":"Adds download buttons to posts that contain media.","media.sectionButtons":"Buttons","media.showInActions":"Button in the action bar","media.showInActionsHint":"Next to Share. Downloads all media of the post.","media.showOnMedia":"Button over the media","media.showOnMediaHint":"A small button on hover that downloads that video or photo only.","media.videos":"Videos","media.gifs":"GIFs","media.images":"Photos","media.sectionQuality":"Quality","media.videoQuality":"Video quality","media.videoQualityHint":"MP4 versions published by X. “Ask every time” lets you pick when you download.","media.quality.best":"Best available","media.quality.ask":"Ask every time","media.quality.1080":"Up to 1080p","media.quality.720":"Up to 720p","media.quality.480":"Up to 480p","media.quality.lowest":"Smallest file","media.imageQuality":"Photo quality","media.imageQualityHint":"Original is the upload as sent; Large is X’s 2048 px version.","media.image.orig":"Original","media.image.large":"Large (2048 px)","media.onMultiple":"Posts with several files","media.onMultipleHint":"What to do when a post has more than one video or photo.","media.multiple.ask":"Let me choose","media.multiple.all":"Download everything","media.sectionFiles":"File names","media.fileTemplate":"Name template","media.fileTemplateHint":"Characters not allowed in file names are replaced automatically. The extension is added for you.","media.fileTokens":"Placeholders: {user} author handle · {id} post id · {date} 2025-01-31 · {time} 235959 · {n} file number · {quality} 720p / orig · {type} video / gif / photo · {text} start of the post text","media.sectionFeed":"Timeline","media.feedImageQuality":"Photos in the timeline","media.feedImageQualityHint":"Load a larger version of photos while browsing. Uses more data.","media.feed.default":"X default","media.feed.large":"Large","media.feed.orig":"Original","media.sectionViewer":"Photo viewer","media.sectionViewerDesc":"Open post photos in a fast gallery, and zoom and move photos in the full-screen view.","media.photoZoom":"Zoom and pan photos","media.photoZoomHint":"Mouse wheel zooms towards the cursor, drag moves the photo, double click toggles zoom, + / - / 0 work too. Pinch and drag on touch screens.","media.photoGrid":"Grid behind photos","media.photoGridHint":"Draws a grid pattern behind the photo so transparent or dark images stay visible.","media.zoomOut":"Zoom out","media.zoomIn":"Zoom in","media.zoomReset":"Reset zoom","media.photoGallery":"Open photos in the X Plus gallery","media.photoGalleryHint":"A click on a post photo opens a lightweight gallery instead of X’s photo page: no replies or timeline are loaded. Browse all photos of the post with ← / →, zoom with the wheel, download or open the original. Ctrl/Cmd/Shift-click still opens X’s own viewer.","media.gallery":"Photo gallery","media.galleryClose":"Close (Esc)","media.galleryPrev":"Previous photo (←)","media.galleryNext":"Next photo (→)","media.galleryDownload":"Download this photo","media.galleryOpenOriginal":"Open the original in a new tab","media.galleryActualSize":"Actual size / fit","media.galleryPhoto":"Photo {n}","media.download":"Download media","media.downloadAll":"Download all","media.downloading":"Downloading…","media.saved":"Saved","media.savedText":"{count} file(s) · {size}","media.partial":"Partly saved","media.partialText":"Saved {saved}, failed {failed}","media.failed":"Download failed. Try again.","media.noId":"Could not find this post’s id","media.noMedia":"No downloadable media found in this post","media.noVariants":"This video has no downloadable MP4 version (stream-only)","media.needLogin":"Could not load the media. Sign in to X and try again.","media.resolveFailed":"Could not load the media of this post","media.item.video":"Video","media.item.gif":"GIF","media.item.photo":"Photo {n}","media.item.photoSingle":"Photo","media.item.quoted":"Quoted post · {label}","interface.title":"Interface","interface.sectionMain":"Clean-up","interface.sectionMainDesc":"Hide parts of X you do not use. Changes apply when you save.","interface.enabled":"Enable clean-up","interface.contentWidth":"Content width","interface.contentWidthHint":"Width of the central column with posts, in pixels. 0 keeps the default width of X.","interface.width.default":"Default","interface.width.narrow":"Narrow","interface.width.wide":"Wide","interface.width.wider":"Wider","interface.width.full":"Full width","interface.menuLeft":"Left menu at the screen edge","interface.menuLeftHint":"Moves the navigation menu to the left edge of the screen instead of next to the feed.","interface.menuCenter":"Centre the menu vertically","interface.menuCenterHint":"Aligns all left menu items to the vertical centre of the screen.","interface.menuHide":"Hide the left menu","interface.menuHideHint":"Removes the whole left menu. X Plus settings stay available from the userscript manager menu.","interface.feedTabsStatic":"Don’t pin feed tabs","interface.feedTabsStaticHint":"The For you / Following tabs scroll away with the page instead of floating at the top.","interface.sidebarRight":"Right column at the screen edge","interface.sidebarRightHint":"Moves search, trends and suggestions to the right edge of the screen and keeps them in place while you scroll.","interface.sidebarHide":"Hide the right column","interface.sidebarHideHint":"Removes the whole right column (search, trends, suggestions). Its separate switches are not needed then.","interface.centerContent":"Center the feed on the screen","interface.centerContentHint":"Places the feed exactly in the middle of the screen. The menu and the right column are pinned to the screen edges.","interface.rule.posts.composer":"Post composer","interface.rule.posts.handles":"@handle in posts","interface.rule.posts.handlesHint":"Hides the @username next to the name in the post header (and the dot before the time).","interface.rule.posts.translateNotice":"“Source language” notice","interface.rule.posts.translateNoticeHint":"Hides the “Source language: … Show original” line X adds under translated posts. Translation by X Plus is not affected.","interface.rule.posts.articles":"Articles","interface.rule.posts.articlesHint":"Hides the X Article card (cover, title and teaser) under a post.","interface.rule.posts.linkCards":"Link previews","interface.rule.posts.linkCardsHint":"Hides the preview card under a link (picture, title and “From site” caption). The link in the text stays.","interface.rule.posts.images":"Images in posts","interface.rule.posts.imagesHint":"Hides photos attached to posts. Videos and GIFs stay.","interface.rule.posts.videos":"Videos in posts","interface.rule.posts.videosHint":"Hides videos and GIFs in posts. Photos stay.","interface.rule.posts.quotedPosts":"Quoted posts","interface.rule.posts.quotedPostsHint":"Hides the post embedded in another post (a quote).","interface.rule.posts.actionBar":"Action bar under posts","interface.rule.posts.actionBarHint":"Removes the reply, repost, like and share row. The X Plus download button in that row goes too; the button over the media stays.","interface.postView.hideAvatars":"Avatars in posts","interface.postView.hideAvatarsHint":"Hides profile pictures next to posts and the empty space they leave.","interface.rule.posts.moreFromX":"“Discover more” under a post","interface.rule.posts.moreFromXHint":"On a post’s page, hides the “Discover more” heading and the recommended posts below the replies.","interface.rule.posts.feedTabs":"Feed tabs","interface.rule.posts.newPostsPill":"“New posts” button","interface.rule.posts.showPosts":"“Show N posts” row","interface.rule.posts.promoted":"Promoted posts","interface.rule.posts.viewCounts":"View counts","interface.rule.posts.verifiedBadges":"Verified badges","interface.rule.posts.grokButton":"Grok button on posts","interface.rule.sidebar.search":"Search box","interface.rule.sidebar.whoToFollow":"Who to follow","interface.rule.sidebar.trends":"Trends","interface.rule.sidebar.premium":"Premium offers","interface.rule.sidebar.footer":"Footer links","interface.rule.chrome.grokDrawer":"Grok panel","interface.rule.chrome.chatDrawer":"Chat panel","interface.rule.nav.logo":"Site logo","interface.rule.nav.home":"Home","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"Explore","interface.rule.nav.chat":"Chat","interface.rule.nav.calls":"Calls","interface.rule.nav.history":"History","interface.rule.nav.creatorStudio":"Creator Studio","interface.rule.nav.followerRequests":"Follower requests","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"Notifications","interface.rule.nav.profile":"Profile","interface.rule.nav.more":"More","interface.rule.nav.post":"Post button","interface.rule.nav.account":"Account menu","interface.peekHint":"Hover over a setting to preview it on the page behind this window.","interface.sectionFeed":"Feed","interface.sectionFeedDesc":"The central column with posts.","interface.sectionNav":"Left menu","interface.sectionNavDesc":"Navigation with Home, Explore, Profile and other links.","interface.sectionSide":"Right column","interface.sectionSideDesc":"Search, trends and suggestions.","interface.sectionDrawers":"Floating panels","interface.sectionDrawersDesc":"Panels pinned to the bottom right corner of the screen.","interface.sub.layout":"Layout","interface.sub.hide":"Hide","interface.enabledHint":"Master switch for every “Hide” option below. Layout options are not affected.","interface.rule.posts.composerHint":"Hides the “What is happening?” box above the timeline. The compose dialog still works.","interface.rule.posts.feedTabsHint":"Hides the For you / Following tabs above the timeline.","interface.rule.posts.newPostsPillHint":"Removes the floating “Show new posts” pill at the top of the timeline.","interface.rule.posts.showPostsHint":"Removes the “Show 35 posts” row at the top of the timeline. A gap of the same height may stay.","interface.rule.posts.promotedHint":"Hides ads in the timeline.","interface.rule.posts.viewCountsHint":"Removes the view counter under each post.","interface.rule.posts.verifiedBadgesHint":"Removes the blue check and other verification badges next to names.","interface.rule.posts.grokButtonHint":"Removes the Grok icon in the top right corner of posts.","interface.rule.sidebar.searchHint":"Removes the search field at the top of the right column.","interface.rule.sidebar.whoToFollowHint":"Removes the block with account suggestions.","interface.rule.sidebar.trendsHint":"Removes the “What’s happening” block with trends.","interface.rule.sidebar.premiumHint":"Removes the Premium subscription offer.","interface.rule.sidebar.footerHint":"Removes the Terms, Privacy and other links at the bottom.","interface.rule.chrome.grokDrawerHint":"Removes the floating Grok panel.","interface.rule.chrome.chatDrawerHint":"Removes the floating Chat panel.","interface.sectionPosts":"Post","interface.sectionPostsDesc":"How a single post looks and what it shows. Hover over a setting to preview it.","interface.sub.cards":"Cards","interface.sub.spacing":"Spacing","interface.sub.look":"Text and avatars","interface.postView.none":"None","interface.postView.cards":"Posts as cards","interface.postView.cardsHint":"Draws every post as a separate card. Use the spacing slider below to set the distance between cards.","interface.postView.cardStyle":"Card style","interface.postView.cardStyleHint":"Outline, soft background or shadow.","interface.postView.cardStyle.outline":"Outline","interface.postView.cardStyle.filled":"Filled","interface.postView.cardStyle.shadow":"Shadow","interface.postView.cardRadius":"Corner radius","interface.postView.cardRadiusHint":"How round the corners of a card are.","interface.postView.cardOpacity":"Background opacity","interface.postView.cardOpacityHint":"How opaque the card fill is. Lower values let the page background show through.","interface.postView.gap":"Space between posts","interface.postView.gapHint":"Empty space under each post, in pixels.","interface.postView.padding":"Inner padding","interface.postView.paddingHint":"Extra space inside each post, in pixels.","interface.postView.hideDividers":"Hide dividers between posts","interface.postView.hideDividersHint":"Removes the thin lines that separate posts.","interface.postView.hideFeedBorder":"Hide feed borders","interface.postView.hideFeedBorderHint":"Removes the vertical lines on both sides of the feed column.","interface.postView.textScale":"Text size","interface.postView.textScaleHint":"Scales the text of posts. 100% keeps the default size.","interface.postView.avatarShape":"Avatar shape","interface.postView.avatarShapeHint":"Shape of profile pictures in the feed.","interface.postView.avatarShape.default":"Default (circle)","interface.postView.avatarShape.rounded":"Rounded square","interface.postView.avatarShape.square":"Square","peek.missing":"Nothing to show on this page right now","translate.articles":"Translate articles","translate.articlesHint":"Adds a Translate control to X Articles and translates them paragraph by paragraph.","translate.articleProgress":"Translating… {done}/{total}","translate.articleSame":"The article is already in your language","shorts.title":"Shorts","shorts.sectionMain":"Shorts mode","shorts.sectionMainDesc":"Browse the feed one post at a time, like YouTube Shorts.","shorts.enabled":"Browse the feed post by post","shorts.enabledHint":"The wheel and the arrow keys jump to the next or previous post and centre it. The current post grows a little, the posts around it are blurred. Works in feeds (Home, profiles, search, lists), not on a post page. Also available as a switch at the bottom left.","shorts.keys":"Keyboard navigation","shorts.keysHint":"↑ / ↓, J / K and Space move to the previous / next post (Shift + Space goes back).","shorts.sectionLook":"Look","shorts.scale":"Current post size","shorts.scaleHint":"How much the post in the middle is enlarged (100% = not at all).","shorts.blur":"Blur of the other posts","shorts.blurHint":"0 turns the blur off.","shorts.dockLabel":"Shorts","shorts.dockTitle":"Shorts mode: one post at a time","shorts.buttons":"Previous / next buttons","shorts.buttonsHint":"Two round buttons beside the current post, for the mouse.","shorts.prev":"Previous post","shorts.next":"Next post","shorts.speed":"Transition speed","shorts.speedHint":"How long the jump to the next post and the grow / blur effect take.","shorts.speed.slow":"Slow","shorts.speed.normal":"Normal","shorts.speed.fast":"Fast","shorts.speed.instant":"Instant","shorts.sectionAuto":"Auto-scroll","shorts.sectionAutoDesc":"Moves to the next post by itself after a delay. Pause or start it with the button under the arrows.","shorts.autoplay":"Auto-scroll","shorts.autoplayHint":"Turns the automatic move to the next post on or off.","shorts.autoDelay":"Time per post","shorts.autoDelayHint":"Seconds before the jump to the next post.","shorts.autoWaitVideo":"Let videos finish","shorts.autoWaitVideoHint":"A post with a video stays until the video ends, if it is longer than the time above.","shorts.autoHover":"Pause over the buttons","shorts.autoHoverHint":"The countdown waits while the pointer is on the arrow buttons.","shorts.autoStyle":"Progress indicator","shorts.autoStyleHint":"Automatic: a ring around the “next” button, or a bar over the post when the buttons are hidden.","shorts.autoStyle.auto":"Automatic","shorts.autoStyle.ring":"Ring on the button","shorts.autoStyle.bar":"Bar over the post","shorts.autoStyle.both":"Ring and bar","shorts.autoStyle.none":"None","shorts.autoPause":"Pause auto-scroll","shorts.autoPlay":"Start auto-scroll","shorts.autoKey":"Pause / resume key","shorts.autoKeyHint":"Click the field and press a key; Backspace clears it. The key works while auto-scroll is on.","shorts.autoResume":"Resume auto-scroll","common.keyPress":"Press a key…","common.keyNone":"Not set","common.keyReserved":"{key} is already used in Shorts mode","shorts.prevOpacity":"Previous post opacity","shorts.nextOpacity":"Next post opacity","shorts.opacityHint":"0 makes the post invisible, 100 shows it in full; the blur is set separately.","shorts.translateOnlyCurrent":"Translate only the current post","shorts.translateOnlyCurrentHint":"Automatic translation runs only for the post in the middle, after it stays there for a moment — posts you scroll past cost no API requests. The Translate button still works on any post.","shorts.translateNext":"Translate the next post in advance","shorts.translateNextHint":"While you read the current post, the next one is translated in the background (one more API request), but its text is replaced only when you get to it."},ru:{"translate.btnTranslate":"Перевести","translate.btnHide":"Скрыть перевод","translate.btnRetry":"Повторить","translate.translating":"Перевод…","translate.translationLabel":"Перевод","translate.detectedLang":"Определён язык: {lang}","translate.errNetwork":"Не удалось перевести. Попробуйте ещё раз.","general.title":"Общие","translate.sectionTranslation":"Перевод","translate.sectionCache":"Кэш","translate.settingsProvider":"Провайдер перевода","translate.settingsProviderHint":"Ключи хранятся только в хранилище userscript на этом устройстве.","translate.providerFieldApiKey":"API-ключ","translate.providerFieldApiKeyOptional":"API-ключ (необязательно)","translate.providerFieldDeeplPlan":"Тариф DeepL","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"Регион","translate.providerFieldModel":"Модель","translate.providerFieldBaseUrl":"Базовый URL API","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"URL API","translate.providerHintGoogle":"Публичный endpoint Google Translate. API-ключ не нужен.","translate.providerHintDeepl":"DeepL API Free или Pro. Ключ: deepl.com/pro-api.","translate.providerHintDeeplKey":"У бесплатных ключей обычно суффикс :fx","translate.providerHintMicrosoft":"Ключ ресурса Azure Translator из портала Azure.","translate.providerHintMicrosoftRegion":"Регион ресурса или global для multi-service ключей.","translate.providerHintOpenai":"Chat Completions API. Подойдут совместимые endpoint’ы.","translate.providerHintOpenaiBase":"По умолчанию https://api.openai.com/v1 — смените для прокси.","translate.providerHintYandex":"API-ключ Yandex Cloud Translate и folder ID.","translate.providerHintYandexFolder":"Из консоли Yandex Cloud (id каталога).","translate.providerHintLibre":"Свой или публичный экземпляр LibreTranslate.","translate.errProviderConfig":"Провайдер не настроен. Откройте Translator → Провайдеры.","about.title":"О скрипте","about.repo":"Открыть репозиторий на GitHub","about.license":"Лицензия MIT","translate.settingsTargetLang":"Переводить на","general.language":"Язык интерфейса","translate.settingsCacheHours":"Кэш переводов (часы)","translate.settingsCacheHint":"0 отключает кэш. Записи истекают по TTL или при ручной очистке.","translate.cacheMeterTitle":"Занято","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} записей","translate.cacheMeterTtl":"TTL {hours} ч","translate.cacheMeterDisabled":"Кэш выкл.","translate.cacheMeterFree":"свободно {free}","translate.cacheMeterAria":"Кэш {used} из {limit} ({pct}), записей: {count}","translate.cacheMeterHint":"Мягкий лимит GM-хранилища. При переполнении удаляются самые старые записи.","translate.settingsDisplayMode":"Отображение перевода","translate.settingsDisplayModeHint":"Панель: перевод под постом. Замена: текст поста меняется на перевод, кнопка «Показать оригинал».","translate.displayModePanel":"Отдельная панель","translate.displayModeReplace":"Вместо оригинала","translate.btnShowOriginal":"Показать оригинал","translate.settingsTranslateMode":"Режим перевода","translate.settingsTranslateModeHint":"Автоматический: перевод, как только пост хоть чуть-чуть виден на экране. По кнопке: только после нажатия «Перевести».","translate.translateModeButton":"По кнопке","translate.translateModeAuto":"Автоматический (на экране)","translate.settingsAutoScope":"Область автоперевода","translate.settingsAutoScopeHint":"Переводить все видимые посты или только выбранные аккаунты.","translate.autoScopeAll":"Все аккаунты","translate.autoScopeAllowlist":"Только избранные аккаунты","translate.settingsAllowlistHint":"Аккаунт можно добавить или убрать и из меню ⋮ у поста.","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"Добавить","translate.allowlistEmpty":"Список пуст. Введите nickname выше.","translate.allowlistInvalid":"Введите корректный X handle.","translate.allowlistAdded":"{handle} добавлен в автоперевод","translate.allowlistRemoved":"{handle} убран из автоперевода","translate.menuAddAutoAccount":"Автоперевод этого аккаунта","translate.menuRemoveAutoAccount":"Убрать из автоперевода","panel.save":"Сохранить","panel.close":"Закрыть","panel.search":"Поиск по настройкам","panel.searchClear":"Очистить поиск","panel.searchEmpty":"Ничего не найдено","translate.settingsClearCache":"Очистить кэш","panel.saved":"Настройки сохранены","translate.settingsCacheCleared":"Кэш переводов очищен","toast.title.success":"Готово","toast.title.info":"Инфо","toast.title.warning":"Внимание","toast.title.error":"Ошибка","toast.dismiss":"Закрыть","translate.langAuto":"Авто (как UI / браузер)","general.languageAuto":"Авто (браузер)","translate.badgeLangAuto":"Авто","translate.originalLabel":"Оригинал","translate.settingsReplaceReveal":"Детали режима замены","translate.settingsReplaceRevealHint":"Только кнопка, оригинал по наведению (кнопка скрывается после перевода) или оригинал и перевод рядом.","translate.replaceRevealButton":"Только кнопка","translate.replaceRevealHover":"Оригинал по наведению","translate.replaceRevealSplit":"Разделённый вид (оригинал + перевод)","translate.settingsAccountBlocklist":"Блоклист аккаунтов","translate.settingsAccountBlocklistHint":"Не показывать «Перевести» и не автопереводить эти аккаунты. Также из меню поста.","translate.blocklistEmpty":"Заблокированных аккаунтов нет.","translate.blocklistAdded":"{handle} исключён из перевода","translate.blocklistRemoved":"{handle} снова можно переводить","translate.menuBlockAccount":"Не переводить этот аккаунт","translate.menuUnblockAccount":"Разрешить перевод этого аккаунта","translate.settingsLangAllowlist":"Разрешённые языки оригинала","translate.settingsLangAllowlistHint":"Если список не пуст — переводятся только посты на этих языках. Пустой список = все языки.","translate.settingsLangBlocklist":"Запрещённые языки оригинала","translate.settingsLangBlocklistHint":"Пропускать посты на этих языках.","translate.settingsSkipNative":"Пропускать посты с автопереводом X","translate.settingsSkipNativeHint":"Если X уже показывает панель перевода («Показать оригинал»), не добавлять нашу кнопку и не автопереводить.","translate.settingsHideErrors":"Скрывать ошибки перевода","translate.settingsHideErrorsHint":"Не показывать «Не удалось перевести. Попробуйте ещё раз.» — пост просто останется непереведённым.","translate.langListEmpty":"Языки не выбраны.","translate.langListAdd":"Добавить","translate.langSkippedBlocked":"Пропущено: язык в блоклисте","translate.langSkippedNotAllowed":"Пропущено: языка нет в списке разрешённых","general.sectionInterface":"Интерфейс","translate.settingsSectionTranslate":"Перевод","translate.settingsSectionAccounts":"Аккаунты","translate.settingsSectionLanguages":"Языки","translate.settingsSectionProvider":"Провайдер","translate.settingsSectionCache":"Кэш","translate.badgeCacheOff":"Выкл","menu.settings":"X Plus — Настройки","nav.label":"X Plus","common.off":"Выкл.","panel.cancel":"Отмена","panel.confirm":"Подтвердить","panel.reset":"Сбросить","panel.resetTitle":"Сбросить все настройки?","panel.resetText":"Все параметры вернутся к значениям по умолчанию. Ничего не изменится, пока вы не нажмёте «Сохранить».","list.add":"Добавить","list.remove":"Удалить","list.empty":"Пока пусто.","list.invalid":"Введите корректное значение.","list.exists":"{item} уже есть в списке","list.handlePlaceholder":"@username","general.languageHint":"Язык меню и сообщений X Plus.","general.navButton":"Кнопка в боковом меню","general.navButtonHint":"Показывать пункт «X Plus» в левом меню X, открывающий эти настройки.","general.hotkey":"Горячая клавиша","general.hotkeyHint":"Ctrl + M открывает настройки X Plus.","general.hotkeyReminder":"Подсказка о сочетании","general.hotkeyReminderHint":"Показывает бледную подсказку в левом нижнем углу экрана.","hotkey.hint":"настройки X Plus","general.sectionToasts":"Уведомления","general.toasts":"Показывать уведомления","general.toastsHint":"Всплывающие сообщения о сохранении настроек, загрузках и ошибках.","general.toastPosition":"Расположение","general.toastPosition.top-right":"Сверху справа","general.toastPosition.top-left":"Сверху слева","general.toastPosition.bottom-right":"Снизу справа","general.toastPosition.bottom-left":"Снизу слева","general.toastDuration":"Время показа (секунды)","general.toastDurationHint":"0 — уведомление остаётся, пока вы его не закроете.","about.description":"Юзер-скрипт, добавляющий на X (x.com) перевод постов, скачивание медиа и множество удобных улучшений. Работает с Tampermonkey, Violentmonkey, ScriptCat и похожими менеджерами.","backup.title":"Резервная копия","backup.exportTitle":"Экспорт","backup.exportDesc":"Сохраните текущие настройки в JSON-файл или скопируйте их в буфер обмена.","backup.download":"Скачать файл","backup.copy":"Копировать JSON","backup.exported":"Настройки экспортированы","backup.copied":"Настройки скопированы в буфер обмена","backup.copyFailed":"Нет доступа к буферу обмена","backup.secretsHint":"Экспорт содержит API-ключи переводчиков. Храните файл в тайне.","backup.importTitle":"Импорт","backup.importDesc":"Вставьте копию или выберите файл. Неизвестные и некорректные значения игнорируются. Импорт применяется сразу.","backup.importPaste":"Импортировать вставленный JSON","backup.importFile":"Выбрать файл…","backup.imported":"Настройки импортированы","backup.importFailed":"Это не похоже на копию настроек X Plus","translate.sectionMain":"Перевод постов","translate.enabled":"Включить перевод","translate.enabledHint":"Добавляет кнопку «Перевести» к постам и ответам.","media.title":"Медиа","media.sectionMain":"Скачивание медиа","media.sectionMainDesc":"Сохраняйте видео, GIF и фото из постов.","media.enabled":"Включить скачивание","media.enabledHint":"Добавляет кнопки скачивания к постам с медиа.","media.sectionButtons":"Кнопки","media.showInActions":"Кнопка в панели действий","media.showInActionsHint":"Рядом с «Поделиться». Скачивает все медиа поста.","media.showOnMedia":"Кнопка поверх медиа","media.showOnMediaHint":"Небольшая кнопка при наведении, скачивающая только это видео или фото.","media.videos":"Видео","media.gifs":"GIF-анимации","media.images":"Фото","media.sectionQuality":"Качество","media.videoQuality":"Качество видео","media.videoQualityHint":"MP4-версии, опубликованные X. «Спрашивать» позволяет выбирать при каждой загрузке.","media.quality.best":"Лучшее доступное","media.quality.ask":"Спрашивать каждый раз","media.quality.1080":"До 1080p","media.quality.720":"До 720p","media.quality.480":"До 480p","media.quality.lowest":"Наименьший размер","media.imageQuality":"Качество фото","media.imageQualityHint":"«Оригинал» — файл как загружен; «Крупное» — версия X до 2048 px.","media.image.orig":"Оригинал","media.image.large":"Крупное (2048 px)","media.onMultiple":"Посты с несколькими файлами","media.onMultipleHint":"Что делать, если в посте больше одного видео или фото.","media.multiple.ask":"Дать выбрать","media.multiple.all":"Скачать всё","media.sectionFiles":"Имена файлов","media.fileTemplate":"Шаблон имени","media.fileTemplateHint":"Недопустимые в именах файлов символы заменяются автоматически. Расширение добавляется само.","media.fileTokens":"Подстановки: {user} ник автора · {id} id поста · {date} 2025-01-31 · {time} 235959 · {n} номер файла · {quality} 720p / orig · {type} video / gif / photo · {text} начало текста поста","media.sectionFeed":"Лента","media.feedImageQuality":"Фото в ленте","media.feedImageQualityHint":"Загружать фото в большем размере при просмотре ленты. Расходует больше трафика.","media.feed.default":"По умолчанию (X)","media.feed.large":"Крупные","media.feed.orig":"Оригинал","media.sectionViewer":"Просмотр фото","media.sectionViewerDesc":"Быстрая галерея для фото из постов, приближение и перемещение фото в полноэкранном просмотре.","media.photoZoom":"Приближать и двигать фото","media.photoZoomHint":"Колесо мыши приближает к курсору, перетаскивание двигает фото, двойной клик переключает масштаб, работают и клавиши + / - / 0. На сенсорных экранах — щипок и перетаскивание.","media.photoGrid":"Сетка за фото","media.photoGridHint":"Рисует сетку за фото, чтобы прозрачные и тёмные изображения были лучше видны.","media.zoomOut":"Отдалить","media.zoomIn":"Приблизить","media.zoomReset":"Сбросить масштаб","media.photoGallery":"Открывать фото в галерее X Plus","media.photoGalleryHint":"Клик по фото в посте открывает лёгкую галерею вместо страницы фото X: комментарии и лента не загружаются. Все фото поста листаются клавишами ← / →, колесо приближает, можно скачать или открыть оригинал. Ctrl/Cmd/Shift-клик по-прежнему открывает родной просмотр X.","media.gallery":"Галерея фото","media.galleryClose":"Закрыть (Esc)","media.galleryPrev":"Предыдущее фото (←)","media.galleryNext":"Следующее фото (→)","media.galleryDownload":"Скачать это фото","media.galleryOpenOriginal":"Открыть оригинал в новой вкладке","media.galleryActualSize":"Реальный размер / по размеру окна","media.galleryPhoto":"Фото {n}","media.download":"Скачать медиа","media.downloadAll":"Скачать всё","media.downloading":"Загрузка…","media.saved":"Сохранено","media.savedText":"Файлов: {count} · {size}","media.partial":"Сохранено частично","media.partialText":"Сохранено: {saved}, ошибок: {failed}","media.failed":"Не удалось скачать. Попробуйте ещё раз.","media.noId":"Не удалось определить id поста","media.noMedia":"В этом посте нет медиа для скачивания","media.noVariants":"У этого видео нет MP4-версии для скачивания (только потоковое)","media.needLogin":"Не удалось загрузить медиа. Войдите в X и повторите попытку.","media.resolveFailed":"Не удалось получить медиа этого поста","media.item.video":"Видео","media.item.gif":"GIF","media.item.photo":"Фото {n}","media.item.photoSingle":"Фото","media.item.quoted":"Цитируемый пост · {label}","interface.title":"Интерфейс","interface.sectionMain":"Очистка","interface.sectionMainDesc":"Скройте части X, которыми не пользуетесь. Изменения применяются после сохранения.","interface.enabled":"Включить очистку","interface.contentWidth":"Ширина контента","interface.contentWidthHint":"Ширина центральной колонки с постами в пикселях. 0 — стандартная ширина X.","interface.width.default":"Стандартная","interface.width.narrow":"Узкая","interface.width.wide":"Широкая","interface.width.wider":"Шире","interface.width.full":"Во всю ширину","interface.menuLeft":"Меню у левого края экрана","interface.menuLeftHint":"Переносит меню навигации к левому краю экрана вместо позиции рядом с лентой.","interface.menuCenter":"Меню по центру по вертикали","interface.menuCenterHint":"Выравнивает все элементы левого меню по вертикальному центру экрана.","interface.menuHide":"Скрыть левое меню","interface.menuHideHint":"Полностью убирает левое меню. Настройки X Plus остаются доступны из меню менеджера скриптов.","interface.feedTabsStatic":"Не закреплять вкладки ленты","interface.feedTabsStaticHint":"Вкладки «Для вас» / «Читаю» прокручиваются вместе со страницей, а не плавают сверху.","interface.sidebarRight":"Правая колонка у края экрана","interface.sidebarRightHint":"Переносит поиск, тренды и рекомендации к правому краю экрана и закрепляет их при прокрутке.","interface.sidebarHide":"Скрыть правую колонку","interface.sidebarHideHint":"Полностью убирает правую колонку (поиск, актуальные темы, рекомендации). Отдельные переключатели блоков тогда не нужны.","interface.centerContent":"Лента ровно по центру экрана","interface.centerContentHint":"Размещает ленту точно по центру экрана. Меню и правая колонка закрепляются по краям экрана.","interface.rule.posts.composer":"Окно «Что происходит?»","interface.rule.posts.handles":"@имя пользователя в постах","interface.rule.posts.handlesHint":"Скрывает @имя рядом с именем в шапке поста (и точку перед временем).","interface.rule.posts.translateNotice":"Плашка «Исходный язык»","interface.rule.posts.translateNoticeHint":"Скрывает строку «Исходный язык: … Показать оригинал», которую X добавляет под переведёнными постами. Перевод X Plus это не затрагивает.","interface.rule.posts.articles":"Статьи","interface.rule.posts.articlesHint":"Скрывает карточку статьи X (обложка, заголовок и анонс) под постом.","interface.rule.posts.linkCards":"Превью ссылок","interface.rule.posts.linkCardsHint":"Скрывает карточку-превью под ссылкой (картинка, заголовок и подпись «С сайта»). Сама ссылка в тексте остаётся.","interface.rule.posts.images":"Изображения в постах","interface.rule.posts.imagesHint":"Скрывает фотографии в постах. Видео и GIF остаются.","interface.rule.posts.videos":"Видео в постах","interface.rule.posts.videosHint":"Скрывает видео и GIF в постах. Фотографии остаются.","interface.rule.posts.quotedPosts":"Вложенные посты","interface.rule.posts.quotedPostsHint":"Скрывает пост, встроенный в другой пост (цитату).","interface.rule.posts.actionBar":"Панель действий под постами","interface.rule.posts.actionBarHint":"Убирает ряд кнопок ответа, репоста, лайка и «Поделиться». Кнопка скачивания X Plus из этого ряда тоже исчезнет, кнопка поверх медиа останется.","interface.postView.hideAvatars":"Аватары в постах","interface.postView.hideAvatarsHint":"Скрывает аватары рядом с постами вместе с освободившимся местом.","interface.rule.posts.moreFromX":"«Больше твитов» под постом","interface.rule.posts.moreFromXHint":"На странице поста скрывает заголовок «Больше твитов» и рекомендованные посты под ответами.","interface.rule.posts.feedTabs":"Вкладки ленты","interface.rule.posts.newPostsPill":"Кнопка «Новые посты»","interface.rule.posts.showPosts":"Строка «Показать N постов»","interface.rule.posts.promoted":"Рекламные посты","interface.rule.posts.viewCounts":"Счётчик просмотров","interface.rule.posts.verifiedBadges":"Значки верификации","interface.rule.posts.grokButton":"Кнопка Grok на постах","interface.rule.sidebar.search":"Поиск","interface.rule.sidebar.whoToFollow":"Кого читать","interface.rule.sidebar.trends":"Актуальные темы","interface.rule.sidebar.premium":"Предложения Premium","interface.rule.sidebar.footer":"Ссылки внизу","interface.rule.chrome.grokDrawer":"Панель Grok","interface.rule.chrome.chatDrawer":"Панель чата","interface.rule.nav.logo":"Логотип сайта","interface.rule.nav.home":"Главная","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"Обзор","interface.rule.nav.chat":"Чат","interface.rule.nav.calls":"Звонки","interface.rule.nav.history":"История","interface.rule.nav.creatorStudio":"Творческая студия","interface.rule.nav.followerRequests":"Запросы на чтение","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"Уведомления","interface.rule.nav.profile":"Профиль","interface.rule.nav.more":"Ещё","interface.rule.nav.post":"Кнопка «Опубликовать пост»","interface.rule.nav.account":"Меню учётной записи","interface.peekHint":"Наведите на настройку, чтобы увидеть её действие на странице за этим окном.","interface.sectionFeed":"Лента","interface.sectionFeedDesc":"Центральная колонка с постами.","interface.sectionNav":"Левое меню","interface.sectionNavDesc":"Навигация: Главная, Обзор, Профиль и другие ссылки.","interface.sectionSide":"Правая колонка","interface.sectionSideDesc":"Поиск, актуальные темы и рекомендации.","interface.sectionDrawers":"Плавающие панели","interface.sectionDrawersDesc":"Панели в правом нижнем углу экрана.","interface.sub.layout":"Макет","interface.sub.hide":"Скрыть","interface.enabledHint":"Главный выключатель для всех пунктов «Скрыть» ниже. На параметры макета не влияет.","interface.rule.posts.composerHint":"Скрывает поле создания поста над лентой. Окно публикации по кнопке продолжает работать.","interface.rule.posts.feedTabsHint":"Скрывает вкладки «Для вас» / «Читаю» над лентой.","interface.rule.posts.newPostsPillHint":"Убирает плавающую кнопку «Смотреть новые посты» над лентой.","interface.rule.posts.showPostsHint":"Убирает строку «Показать 35 постов» в начале ленты. Пустое место такой же высоты может остаться.","interface.rule.posts.promotedHint":"Скрывает рекламу в ленте.","interface.rule.posts.viewCountsHint":"Убирает счётчик просмотров под каждым постом.","interface.rule.posts.verifiedBadgesHint":"Убирает синюю галочку и другие значки верификации рядом с именами.","interface.rule.posts.grokButtonHint":"Убирает значок Grok в правом верхнем углу постов.","interface.rule.sidebar.searchHint":"Убирает поле поиска в верхней части правой колонки.","interface.rule.sidebar.whoToFollowHint":"Убирает блок с рекомендациями аккаунтов.","interface.rule.sidebar.trendsHint":"Убирает блок «Актуальные темы».","interface.rule.sidebar.premiumHint":"Убирает предложение подписки Premium.","interface.rule.sidebar.footerHint":"Убирает ссылки на условия, конфиденциальность и другие внизу колонки.","interface.rule.chrome.grokDrawerHint":"Убирает плавающую панель Grok.","interface.rule.chrome.chatDrawerHint":"Убирает плавающую панель чата.","interface.sectionPosts":"Пост","interface.sectionPostsDesc":"Как выглядит отдельный пост и что в нём показано. Наведите курсор на параметр, чтобы увидеть результат.","interface.sub.cards":"Карточки","interface.sub.spacing":"Отступы","interface.sub.look":"Текст и аватары","interface.postView.none":"Нет","interface.postView.cards":"Посты в виде карточек","interface.postView.cardsHint":"Рисует каждый пост отдельной карточкой. Расстояние между карточками задаётся ползунком ниже.","interface.postView.cardStyle":"Стиль карточек","interface.postView.cardStyleHint":"Рамка, мягкий фон или тень.","interface.postView.cardStyle.outline":"Рамка","interface.postView.cardStyle.filled":"Заливка","interface.postView.cardStyle.shadow":"Тень","interface.postView.cardRadius":"Скругление углов","interface.postView.cardRadiusHint":"Насколько скруглены углы карточки.","interface.postView.cardOpacity":"Прозрачность фона","interface.postView.cardOpacityHint":"Насколько непрозрачна заливка карточки. Меньшие значения делают фон прозрачнее.","interface.postView.gap":"Расстояние между постами","interface.postView.gapHint":"Пустое место под каждым постом, в пикселях.","interface.postView.padding":"Внутренний отступ","interface.postView.paddingHint":"Дополнительное место внутри каждого поста, в пикселях.","interface.postView.hideDividers":"Скрыть разделители между постами","interface.postView.hideDividersHint":"Убирает тонкие линии между постами.","interface.postView.hideFeedBorder":"Скрыть границы ленты","interface.postView.hideFeedBorderHint":"Убирает вертикальные линии по бокам колонки с лентой.","interface.postView.textScale":"Размер текста","interface.postView.textScaleHint":"Масштабирует текст постов. 100% — размер по умолчанию.","interface.postView.avatarShape":"Форма аватаров","interface.postView.avatarShapeHint":"Форма фотографий профиля в ленте.","interface.postView.avatarShape.default":"По умолчанию (круг)","interface.postView.avatarShape.rounded":"Скруглённый квадрат","interface.postView.avatarShape.square":"Квадрат","peek.missing":"На этой странице сейчас нечего показать","translate.articles":"Переводить статьи","translate.articlesHint":"Добавляет кнопку «Перевести» к статьям X и переводит их по абзацам.","translate.articleProgress":"Перевод… {done}/{total}","translate.articleSame":"Статья уже на вашем языке","shorts.title":"Шортс","shorts.sectionMain":"Режим шортсов","shorts.sectionMainDesc":"Лента листается по одному посту, как в YouTube Shorts.","shorts.enabled":"Листать ленту по одному посту","shorts.enabledHint":"Колесо и стрелки переходят к следующему или предыдущему посту и ставят его по центру. Текущий пост немного увеличивается, соседние размываются. Работает в лентах (Главная, профили, поиск, списки), но не на странице поста. Также доступно переключателем внизу слева.","shorts.keys":"Управление с клавиатуры","shorts.keysHint":"↑ / ↓, J / K и пробел переходят к предыдущему / следующему посту (Shift + пробел — назад).","shorts.sectionLook":"Внешний вид","shorts.scale":"Размер текущего поста","shorts.scaleHint":"Насколько увеличивается пост в центре (100% — без увеличения).","shorts.blur":"Размытие остальных постов","shorts.blurHint":"0 отключает размытие.","shorts.dockLabel":"Шортс","shorts.dockTitle":"Режим шортсов: по одному посту","shorts.buttons":"Кнопки «предыдущий» / «следующий»","shorts.buttonsHint":"Две круглые кнопки рядом с текущим постом, для управления мышью.","shorts.prev":"Предыдущий пост","shorts.next":"Следующий пост","shorts.speed":"Скорость переходов","shorts.speedHint":"Сколько длятся переход к следующему посту и эффект увеличения и размытия.","shorts.speed.slow":"Медленно","shorts.speed.normal":"Обычная","shorts.speed.fast":"Быстро","shorts.speed.instant":"Мгновенно","shorts.sectionAuto":"Автопрокрутка","shorts.sectionAutoDesc":"Сама переходит к следующему посту через заданное время. Пауза и запуск — кнопкой под стрелками.","shorts.autoplay":"Автопрокрутка","shorts.autoplayHint":"Включает или выключает автоматический переход к следующему посту.","shorts.autoDelay":"Время на пост","shorts.autoDelayHint":"Сколько секунд проходит до перехода к следующему посту.","shorts.autoWaitVideo":"Дожидаться конца видео","shorts.autoWaitVideoHint":"Пост с видео остаётся, пока видео не закончится, если оно длиннее времени выше.","shorts.autoHover":"Пауза над кнопками","shorts.autoHoverHint":"Отсчёт стоит, пока курсор находится на кнопках со стрелками.","shorts.autoStyle":"Индикатор прогресса","shorts.autoStyleHint":"Авто: кольцо вокруг кнопки «следующий» или полоска над постом, если кнопки скрыты.","shorts.autoStyle.auto":"Авто","shorts.autoStyle.ring":"Кольцо на кнопке","shorts.autoStyle.bar":"Полоска над постом","shorts.autoStyle.both":"Кольцо и полоска","shorts.autoStyle.none":"Нет","shorts.autoPause":"Приостановить автопрокрутку","shorts.autoPlay":"Включить автопрокрутку","shorts.autoKey":"Клавиша паузы и продолжения","shorts.autoKeyHint":"Нажмите на поле и затем на нужную клавишу; Backspace очищает. Клавиша работает, пока включена автопрокрутка.","shorts.autoResume":"Продолжить автопрокрутку","common.keyPress":"Нажмите клавишу…","common.keyNone":"Не задана","common.keyReserved":"{key} уже используется в режиме шортсов","shorts.prevOpacity":"Прозрачность предыдущего поста","shorts.nextOpacity":"Прозрачность следующего поста","shorts.opacityHint":"0 — пост не виден, 100 — виден полностью; размытие настраивается отдельно.","shorts.translateOnlyCurrent":"Переводить только текущий пост","shorts.translateOnlyCurrentHint":"Автоперевод работает только для поста в центре, после того как он задержался на экране, — посты, которые вы пролистываете, не тратят запросы к API. Кнопка «Перевести» работает на любом посте.","shorts.translateNext":"Переводить следующий пост заранее","shorts.translateNextHint":"Пока вы читаете текущий пост, следующий переводится в фоне (ещё один запрос к API), но его текст заменяется, только когда вы перейдёте к нему."},zh:{"translate.btnTranslate":"翻译","translate.btnHide":"隐藏翻译","translate.btnRetry":"重试","translate.translating":"翻译中…","translate.translationLabel":"译文","translate.detectedLang":"检测到:{lang}","translate.errNetwork":"翻译失败,请重试。","general.title":"常规","translate.sectionTranslation":"翻译","translate.sectionCache":"缓存","translate.settingsProvider":"翻译服务商","translate.settingsProviderHint":"密钥仅保存在本机的 userscript 存储中。","translate.providerFieldApiKey":"API 密钥","translate.providerFieldApiKeyOptional":"API 密钥(可选)","translate.providerFieldDeeplPlan":"DeepL 套餐","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"区域","translate.providerFieldModel":"模型","translate.providerFieldBaseUrl":"API 基址","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"API URL","translate.providerHintGoogle":"使用 Google 公开翻译接口,无需 API 密钥。","translate.providerHintDeepl":"DeepL API Free 或 Pro。在 deepl.com/pro-api 创建密钥。","translate.providerHintDeeplKey":"免费密钥通常以 :fx 结尾","translate.providerHintMicrosoft":"Azure 门户中的 Translator 资源密钥。","translate.providerHintMicrosoftRegion":"填写资源区域,或多服务密钥可用 global。","translate.providerHintOpenai":"Chat Completions API。兼容 OpenAI 格式的接口也可。","translate.providerHintOpenaiBase":"默认 https://api.openai.com/v1,代理可改。","translate.providerHintYandex":"Yandex Cloud Translate 的 API 密钥与 folder ID。","translate.providerHintYandexFolder":"来自 Yandex Cloud 控制台。","translate.providerHintLibre":"自建或公共 LibreTranslate 实例。","translate.errProviderConfig":"服务商未配置。请打开 Translator 设置 → 服务商。","about.title":"关于","about.repo":"在 GitHub 打开仓库","about.license":"MIT 许可证","translate.settingsTargetLang":"翻译为","general.language":"界面语言","translate.settingsCacheHours":"翻译缓存(小时)","translate.settingsCacheHint":"设为 0 可禁用缓存。条目按 TTL 过期,或可手动清空。","translate.cacheMeterTitle":"占用","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} 条","translate.cacheMeterTtl":"TTL {hours} 小时","translate.cacheMeterDisabled":"缓存已关闭","translate.cacheMeterFree":"剩余 {free}","translate.cacheMeterAria":"缓存 {used} / {limit}({pct}),共 {count} 条","translate.cacheMeterHint":"GM 存储的软性上限。满时会淘汰最旧条目。","translate.settingsDisplayMode":"译文显示方式","translate.settingsDisplayModeHint":"面板:在帖子下方显示译文。替换:用译文替换原文,并提供“显示原文”。","translate.displayModePanel":"单独面板","translate.displayModeReplace":"替换原文","translate.btnShowOriginal":"显示原文","translate.settingsTranslateMode":"翻译模式","translate.settingsTranslateModeHint":"自动:帖子只要在屏幕上露出一点就开始翻译。按钮:仅在点击「翻译」时。","translate.translateModeButton":"点击按钮","translate.translateModeAuto":"自动(出现在屏幕上)","translate.settingsAutoScope":"自动翻译范围","translate.settingsAutoScopeHint":"翻译所有可见帖子,或仅翻译你选择的账号。","translate.autoScopeAll":"所有账号","translate.autoScopeAllowlist":"仅选定账号","translate.settingsAllowlistHint":"也可在帖子 ⋮ 菜单中添加或移除账号。","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"添加","translate.allowlistEmpty":"暂无账号。请在上方输入昵称。","translate.allowlistInvalid":"请输入有效的 X 用户名。","translate.allowlistAdded":"已将 {handle} 加入自动翻译","translate.allowlistRemoved":"已将 {handle} 移出自动翻译","translate.menuAddAutoAccount":"自动翻译此账号","translate.menuRemoveAutoAccount":"移出自动翻译","panel.save":"保存","panel.close":"关闭","panel.search":"搜索设置","panel.searchClear":"清除搜索","panel.searchEmpty":"未找到结果","translate.settingsClearCache":"清除缓存","panel.saved":"设置已保存","translate.settingsCacheCleared":"翻译缓存已清除","toast.title.success":"成功","toast.title.info":"提示","toast.title.warning":"注意","toast.title.error":"错误","toast.dismiss":"关闭","translate.langAuto":"自动(跟随界面 / 浏览器)","general.languageAuto":"自动(浏览器)","translate.badgeLangAuto":"自动","translate.originalLabel":"原文","translate.settingsReplaceReveal":"替换模式详情","translate.settingsReplaceRevealHint":"仅按钮、悬停显示原文,或原文与译文并排。","translate.replaceRevealButton":"仅按钮","translate.replaceRevealHover":"悬停显示原文","translate.replaceRevealSplit":"分栏(原文 + 译文)","translate.settingsAccountBlocklist":"账号黑名单","translate.settingsAccountBlocklistHint":"不显示翻译按钮且不自动翻译这些账号。也可在帖子菜单中管理。","translate.blocklistEmpty":"暂无屏蔽账号。","translate.blocklistAdded":"已屏蔽 {handle}","translate.blocklistRemoved":"已取消屏蔽 {handle}","translate.menuBlockAccount":"永不翻译此账号","translate.menuUnblockAccount":"允许翻译此账号","translate.settingsLangAllowlist":"源语言白名单","translate.settingsLangAllowlistHint":"非空时仅翻译检测到的这些语言。留空表示全部。","translate.settingsLangBlocklist":"源语言黑名单","translate.settingsLangBlocklistHint":"跳过这些源语言的帖子。","translate.settingsSkipNative":"跳过已被 X 自动翻译的帖子","translate.settingsSkipNativeHint":"当 X 已显示翻译栏(显示原文)时,不添加翻译按钮,也不自动翻译。","translate.settingsHideErrors":"隐藏翻译错误","translate.settingsHideErrorsHint":"不显示“翻译失败,请重试。”,帖子将保持原文。","translate.langListEmpty":"尚未选择语言。","translate.langListAdd":"添加","translate.langSkippedBlocked":"已跳过:源语言在黑名单中","translate.langSkippedNotAllowed":"已跳过:源语言不在白名单中","general.sectionInterface":"界面","translate.settingsSectionTranslate":"翻译","translate.settingsSectionAccounts":"账号","translate.settingsSectionLanguages":"语言","translate.settingsSectionProvider":"服务商","translate.settingsSectionCache":"缓存","translate.badgeCacheOff":"关","menu.settings":"X Plus — 设置","nav.label":"X Plus","common.off":"关闭","panel.cancel":"取消","panel.confirm":"确认","panel.reset":"重置","panel.resetTitle":"重置所有设置?","panel.resetText":"所有选项将恢复为默认值。点击“保存”之前不会生效。","list.add":"添加","list.remove":"移除","list.empty":"暂无内容。","list.invalid":"请输入有效的值。","list.exists":"{item} 已在列表中","list.handlePlaceholder":"@用户名","general.languageHint":"X Plus 菜单和消息的语言。","general.navButton":"侧边栏按钮","general.navButtonHint":"在 X 左侧导航中显示“X Plus”入口,用于打开这些设置。","general.hotkey":"键盘快捷键","general.hotkeyHint":"按 Ctrl + M 打开 X Plus 设置。","general.hotkeyReminder":"快捷键提示","general.hotkeyReminderHint":"在屏幕左下角显示淡淡的提示。","hotkey.hint":"X Plus 设置","general.sectionToasts":"通知","general.toasts":"显示通知","general.toastsHint":"设置保存、下载和错误的提示消息。","general.toastPosition":"位置","general.toastPosition.top-right":"右上角","general.toastPosition.top-left":"左上角","general.toastPosition.bottom-right":"右下角","general.toastPosition.bottom-left":"左下角","general.toastDuration":"显示时长(秒)","general.toastDurationHint":"0 表示通知会一直保留,直到你关闭。","about.description":"为 X (x.com) 添加翻译、媒体下载和众多便利改进的用户脚本。适用于 Tampermonkey、Violentmonkey、ScriptCat 等管理器。","backup.title":"备份","backup.exportTitle":"导出","backup.exportDesc":"将当前设置保存为 JSON 文件,或复制到剪贴板。","backup.download":"下载文件","backup.copy":"复制 JSON","backup.exported":"设置已导出","backup.copied":"设置已复制到剪贴板","backup.copyFailed":"无法访问剪贴板","backup.secretsHint":"导出内容包含翻译服务的 API 密钥,请妥善保管。","backup.importTitle":"导入","backup.importDesc":"粘贴备份或选择文件。未知或无效的值会被忽略。导入会立即生效。","backup.importPaste":"导入粘贴的 JSON","backup.importFile":"选择文件…","backup.imported":"设置已导入","backup.importFailed":"这不是有效的 X Plus 备份","translate.sectionMain":"翻译帖子","translate.enabled":"启用翻译","translate.enabledHint":"为帖子和回复添加“翻译”按钮。","media.title":"媒体","media.sectionMain":"媒体下载","media.sectionMainDesc":"保存帖子中的视频、GIF 和图片。","media.enabled":"启用下载","media.enabledHint":"为包含媒体的帖子添加下载按钮。","media.sectionButtons":"按钮","media.showInActions":"操作栏按钮","media.showInActionsHint":"位于“分享”旁边,下载帖子的全部媒体。","media.showOnMedia":"媒体上的按钮","media.showOnMediaHint":"悬停时显示的小按钮,只下载该视频或图片。","media.videos":"视频","media.gifs":"GIF","media.images":"图片","media.sectionQuality":"质量","media.videoQuality":"视频质量","media.videoQualityHint":"X 发布的 MP4 版本。选择“每次询问”可在下载时挑选。","media.quality.best":"最高画质","media.quality.ask":"每次询问","media.quality.1080":"最高 1080p","media.quality.720":"最高 720p","media.quality.480":"最高 480p","media.quality.lowest":"最小文件","media.imageQuality":"图片质量","media.imageQualityHint":"“原图”为上传时的原始文件;“大图”为 X 提供的 2048 px 版本。","media.image.orig":"原图","media.image.large":"大图(2048 px)","media.onMultiple":"包含多个文件的帖子","media.onMultipleHint":"帖子包含多个视频或图片时的处理方式。","media.multiple.ask":"让我选择","media.multiple.all":"全部下载","media.sectionFiles":"文件名","media.fileTemplate":"名称模板","media.fileTemplateHint":"文件名中不允许的字符会被自动替换,扩展名会自动添加。","media.fileTokens":"占位符:{user} 作者用户名 · {id} 帖子 ID · {date} 2025-01-31 · {time} 235959 · {n} 文件序号 · {quality} 720p / orig · {type} video / gif / photo · {text} 帖子文本开头","media.sectionFeed":"时间线","media.feedImageQuality":"时间线中的图片","media.feedImageQualityHint":"浏览时加载更大尺寸的图片,会消耗更多流量。","media.feed.default":"X 默认","media.feed.large":"大图","media.feed.orig":"原图","media.sectionViewer":"图片查看器","media.sectionViewerDesc":"在快速图库中打开帖子图片,并在全屏查看中缩放和移动图片。","media.photoZoom":"缩放和平移图片","media.photoZoomHint":"滚轮向光标位置缩放,拖动移动图片,双击切换缩放,也可使用 + / - / 0。触屏支持捏合和拖动。","media.photoGrid":"图片背景网格","media.photoGridHint":"在图片后绘制网格图案,使透明或深色图片更清晰可见。","media.zoomOut":"缩小","media.zoomIn":"放大","media.zoomReset":"重置缩放","media.photoGallery":"在 X Plus 图库中打开图片","media.photoGalleryHint":"点击帖子图片将打开轻量图库,而不是 X 的图片页面:不会加载回复或时间线。用 ← / → 浏览帖子的全部图片,滚轮缩放,可下载或打开原图。Ctrl/Cmd/Shift 点击仍会打开 X 自带的查看器。","media.gallery":"图片图库","media.galleryClose":"关闭 (Esc)","media.galleryPrev":"上一张 (←)","media.galleryNext":"下一张 (→)","media.galleryDownload":"下载此图片","media.galleryOpenOriginal":"在新标签页中打开原图","media.galleryActualSize":"实际大小 / 适应窗口","media.galleryPhoto":"图片 {n}","media.download":"下载媒体","media.downloadAll":"全部下载","media.downloading":"正在下载…","media.saved":"已保存","media.savedText":"{count} 个文件 · {size}","media.partial":"部分已保存","media.partialText":"已保存 {saved} 个,失败 {failed} 个","media.failed":"下载失败,请重试。","media.noId":"无法找到该帖子的 ID","media.noMedia":"该帖子没有可下载的媒体","media.noVariants":"该视频没有可下载的 MP4 版本(仅流媒体)","media.needLogin":"无法加载媒体。请登录 X 后重试。","media.resolveFailed":"无法获取该帖子的媒体","media.item.video":"视频","media.item.gif":"GIF","media.item.photo":"图片 {n}","media.item.photoSingle":"图片","media.item.quoted":"引用的帖子 · {label}","interface.title":"界面","interface.sectionMain":"清理","interface.sectionMainDesc":"隐藏你不使用的 X 部分。保存后生效。","interface.enabled":"启用清理","interface.contentWidth":"内容宽度","interface.contentWidthHint":"帖子中央栏的宽度(像素)。0 表示保持 X 的默认宽度。","interface.width.default":"默认","interface.width.narrow":"窄","interface.width.wide":"宽","interface.width.wider":"更宽","interface.width.full":"全宽","interface.menuLeft":"菜单靠左显示","interface.menuLeftHint":"将导航菜单移到屏幕最左侧,而不是紧挨信息流。","interface.menuCenter":"菜单垂直居中","interface.menuCenterHint":"将左侧菜单的所有项目在屏幕上垂直居中。","interface.menuHide":"隐藏左侧菜单","interface.menuHideHint":"完全移除左侧菜单。X Plus 设置仍可通过用户脚本管理器菜单打开。","interface.feedTabsStatic":"不固定时间线标签","interface.feedTabsStaticHint":"“为你推荐”/“正在关注”标签随页面滚动,而不是悬浮在顶部。","interface.sidebarRight":"右栏靠右显示","interface.sidebarRightHint":"将搜索、趋势和推荐移到屏幕最右侧,并在滚动时保持固定。","interface.sidebarHide":"隐藏右侧栏","interface.sidebarHideHint":"完全移除右侧栏(搜索、趋势、推荐)。此时无需单独隐藏各个区块。","interface.centerContent":"信息流居中显示","interface.centerContentHint":"将信息流精确置于屏幕中央,菜单和右栏固定在屏幕两侧。","interface.rule.posts.composer":"发帖输入框","interface.rule.posts.handles":"帖子中的 @用户名","interface.rule.posts.handlesHint":"隐藏帖子标题中名称旁的 @用户名(以及时间前的圆点)。","interface.rule.posts.translateNotice":"“源语言”提示","interface.rule.posts.translateNoticeHint":"隐藏 X 在已翻译帖子下方添加的“源语言:… 显示原文”一行。不影响 X Plus 的翻译。","interface.rule.posts.articles":"文章","interface.rule.posts.articlesHint":"隐藏帖子下方的 X 文章卡片(封面、标题和摘要)。","interface.rule.posts.linkCards":"链接预览","interface.rule.posts.linkCardsHint":"隐藏链接下方的预览卡片(图片、标题和“来自网站”说明)。正文中的链接保留。","interface.rule.posts.images":"帖子中的图片","interface.rule.posts.imagesHint":"隐藏帖子中的照片。视频和 GIF 保留。","interface.rule.posts.videos":"帖子中的视频","interface.rule.posts.videosHint":"隐藏帖子中的视频和 GIF。照片保留。","interface.rule.posts.quotedPosts":"引用的帖子","interface.rule.posts.quotedPostsHint":"隐藏嵌入在另一条帖子中的帖子(引用)。","interface.rule.posts.actionBar":"帖子下方的操作栏","interface.rule.posts.actionBarHint":"移除回复、转帖、点赞和分享按钮行。该行中的 X Plus 下载按钮也会消失,媒体上的按钮保留。","interface.postView.hideAvatars":"帖子中的头像","interface.postView.hideAvatarsHint":"隐藏帖子旁的头像及其留下的空白。","interface.rule.posts.moreFromX":"帖子下方的“更多推文”","interface.rule.posts.moreFromXHint":"在帖子页面上,隐藏回复下方的“更多推文”标题及推荐帖子。","interface.rule.posts.feedTabs":"时间线标签","interface.rule.posts.newPostsPill":"“新帖子”按钮","interface.rule.posts.showPosts":"“显示 N 条帖子”行","interface.rule.posts.promoted":"推广帖子","interface.rule.posts.viewCounts":"浏览量","interface.rule.posts.verifiedBadges":"认证标识","interface.rule.posts.grokButton":"帖子上的 Grok 按钮","interface.rule.sidebar.search":"搜索框","interface.rule.sidebar.whoToFollow":"推荐关注","interface.rule.sidebar.trends":"趋势","interface.rule.sidebar.premium":"Premium 推广","interface.rule.sidebar.footer":"页脚链接","interface.rule.chrome.grokDrawer":"Grok 面板","interface.rule.chrome.chatDrawer":"聊天面板","interface.rule.nav.logo":"网站标志","interface.rule.nav.home":"主页","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"探索","interface.rule.nav.chat":"聊天","interface.rule.nav.calls":"通话","interface.rule.nav.history":"历史记录","interface.rule.nav.creatorStudio":"创作者工作室","interface.rule.nav.followerRequests":"关注请求","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"通知","interface.rule.nav.profile":"个人资料","interface.rule.nav.more":"更多","interface.rule.nav.post":"发帖按钮","interface.rule.nav.account":"账户菜单","interface.peekHint":"将鼠标悬停在设置上,即可在窗口后方的页面中预览效果。","interface.sectionFeed":"信息流","interface.sectionFeedDesc":"包含帖子的中间栏。","interface.sectionNav":"左侧菜单","interface.sectionNavDesc":"主页、探索、个人资料等导航链接。","interface.sectionSide":"右侧栏","interface.sectionSideDesc":"搜索、趋势和推荐。","interface.sectionDrawers":"悬浮面板","interface.sectionDrawersDesc":"固定在屏幕右下角的面板。","interface.sub.layout":"布局","interface.sub.hide":"隐藏","interface.enabledHint":"下方所有“隐藏”选项的总开关,不影响布局选项。","interface.rule.posts.composerHint":"隐藏时间线上方的“有什么新鲜事?”输入框,发帖对话框仍可使用。","interface.rule.posts.feedTabsHint":"隐藏时间线上方的“为你推荐”/“正在关注”标签。","interface.rule.posts.newPostsPillHint":"移除时间线顶部悬浮的“查看新帖子”按钮。","interface.rule.posts.showPostsHint":"移除时间线顶部的“显示 35 条帖子”行。可能会留下同样高度的空白。","interface.rule.posts.promotedHint":"隐藏时间线中的广告。","interface.rule.posts.viewCountsHint":"移除每条帖子下方的浏览量。","interface.rule.posts.verifiedBadgesHint":"移除名字旁的蓝色认证标记和其他认证徽章。","interface.rule.posts.grokButtonHint":"移除帖子右上角的 Grok 图标。","interface.rule.sidebar.searchHint":"移除右侧栏顶部的搜索框。","interface.rule.sidebar.whoToFollowHint":"移除账号推荐模块。","interface.rule.sidebar.trendsHint":"移除“正在发生”趋势模块。","interface.rule.sidebar.premiumHint":"移除 Premium 订阅推广。","interface.rule.sidebar.footerHint":"移除底部的条款、隐私等链接。","interface.rule.chrome.grokDrawerHint":"移除悬浮的 Grok 面板。","interface.rule.chrome.chatDrawerHint":"移除悬浮的聊天面板。","interface.sectionPosts":"帖子","interface.sectionPostsDesc":"单条帖子的外观和显示内容。将鼠标悬停在设置上即可预览。","interface.sub.cards":"卡片","interface.sub.spacing":"间距","interface.sub.look":"文字与头像","interface.postView.none":"无","interface.postView.cards":"帖子显示为卡片","interface.postView.cardsHint":"将每条帖子绘制为单独的卡片。使用下方的间距滑块设置卡片之间的距离。","interface.postView.cardStyle":"卡片样式","interface.postView.cardStyleHint":"描边、柔和背景或阴影。","interface.postView.cardStyle.outline":"描边","interface.postView.cardStyle.filled":"填充","interface.postView.cardStyle.shadow":"阴影","interface.postView.cardRadius":"圆角半径","interface.postView.cardRadiusHint":"卡片边角的圆润程度。","interface.postView.cardOpacity":"背景不透明度","interface.postView.cardOpacityHint":"卡片填充的不透明程度。数值越低,页面背景越透出。","interface.postView.gap":"帖子之间的间距","interface.postView.gapHint":"每条帖子下方的空白,单位为像素。","interface.postView.padding":"内边距","interface.postView.paddingHint":"每条帖子内部的额外空白,单位为像素。","interface.postView.hideDividers":"隐藏帖子之间的分隔线","interface.postView.hideDividersHint":"移除分隔帖子的细线。","interface.postView.hideFeedBorder":"隐藏信息流边框","interface.postView.hideFeedBorderHint":"移除信息流两侧的竖线。","interface.postView.textScale":"文字大小","interface.postView.textScaleHint":"缩放帖子文字。100% 保持默认大小。","interface.postView.avatarShape":"头像形状","interface.postView.avatarShapeHint":"信息流中头像的形状。","interface.postView.avatarShape.default":"默认(圆形)","interface.postView.avatarShape.rounded":"圆角方形","interface.postView.avatarShape.square":"方形","peek.missing":"当前页面上没有可显示的内容","translate.articles":"翻译文章","translate.articlesHint":"为 X 文章添加“翻译”按钮,并逐段翻译。","translate.articleProgress":"翻译中… {done}/{total}","translate.articleSame":"文章已是你的语言","shorts.title":"短视频式","shorts.sectionMain":"短视频浏览模式","shorts.sectionMainDesc":"像 YouTube Shorts 一样逐条浏览动态。","shorts.enabled":"逐条浏览动态","shorts.enabledHint":"滚轮和方向键会跳到上一条或下一条帖子并居中显示。当前帖子略微放大,周围的帖子被模糊。适用于动态列表(主页、个人资料、搜索、列表),不适用于帖子详情页。也可使用左下角的开关。","shorts.keys":"键盘导航","shorts.keysHint":"↑ / ↓、J / K 和空格键切换到上一条 / 下一条帖子(Shift + 空格返回上一条)。","shorts.sectionLook":"外观","shorts.scale":"当前帖子大小","shorts.scaleHint":"中间帖子的放大程度(100% 表示不放大)。","shorts.blur":"其他帖子的模糊度","shorts.blurHint":"0 表示关闭模糊。","shorts.dockLabel":"短视频式","shorts.dockTitle":"短视频模式:逐条浏览","shorts.buttons":"上一条 / 下一条按钮","shorts.buttonsHint":"当前帖子旁边的两个圆形按钮,方便用鼠标操作。","shorts.prev":"上一条帖子","shorts.next":"下一条帖子","shorts.speed":"切换速度","shorts.speedHint":"跳转到下一条帖子以及放大 / 模糊效果所需的时间。","shorts.speed.slow":"慢","shorts.speed.normal":"普通","shorts.speed.fast":"快","shorts.speed.instant":"即时","shorts.sectionAuto":"自动滚动","shorts.sectionAutoDesc":"经过设定的时间后自动跳到下一条帖子。可用箭头下方的按钮暂停或开始。","shorts.autoplay":"自动滚动","shorts.autoplayHint":"开启或关闭自动跳转到下一条帖子。","shorts.autoDelay":"每条帖子的时间","shorts.autoDelayHint":"跳转到下一条帖子前等待的秒数。","shorts.autoWaitVideo":"等待视频播完","shorts.autoWaitVideoHint":"如果视频比上面的时间更长,带视频的帖子会停留到视频结束。","shorts.autoHover":"悬停按钮时暂停","shorts.autoHoverHint":"指针停在箭头按钮上时,倒计时暂停。","shorts.autoStyle":"进度指示","shorts.autoStyleHint":"自动:“下一条”按钮周围的圆环;按钮隐藏时为帖子上方的进度条。","shorts.autoStyle.auto":"自动","shorts.autoStyle.ring":"按钮上的圆环","shorts.autoStyle.bar":"帖子上方的进度条","shorts.autoStyle.both":"圆环和进度条","shorts.autoStyle.none":"无","shorts.autoPause":"暂停自动滚动","shorts.autoPlay":"开始自动滚动","shorts.autoKey":"暂停 / 继续快捷键","shorts.autoKeyHint":"点击此框并按下按键;按 Backspace 清除。自动滚动开启时该按键有效。","shorts.autoResume":"继续自动滚动","common.keyPress":"请按下按键…","common.keyNone":"未设置","common.keyReserved":"{key} 已用于短视频模式","shorts.prevOpacity":"上一条帖子的不透明度","shorts.nextOpacity":"下一条帖子的不透明度","shorts.opacityHint":"0 为完全隐藏,100 为完全显示;模糊程度另行设置。","shorts.translateOnlyCurrent":"仅翻译当前帖子","shorts.translateOnlyCurrentHint":"自动翻译只对居中的帖子生效,且需在该帖停留片刻后才会触发——快速划过的帖子不会消耗 API 请求。“翻译”按钮对任何帖子仍然可用。","shorts.translateNext":"提前翻译下一条帖子","shorts.translateNextHint":"在你阅读当前帖子时,下一条会在后台翻译(多一次 API 请求),但只有当你切换到它时才会替换文字。"},es:{"translate.btnTranslate":"Traducir","translate.btnHide":"Ocultar traducción","translate.btnRetry":"Reintentar","translate.translating":"Traduciendo…","translate.translationLabel":"Traducción","translate.detectedLang":"Detectado: {lang}","translate.errNetwork":"Error al traducir. Inténtalo de nuevo.","general.title":"General","translate.sectionTranslation":"Traducción","translate.sectionCache":"Caché","translate.settingsProvider":"Proveedor de traducción","translate.settingsProviderHint":"Las credenciales se guardan solo en el almacenamiento del userscript de este dispositivo.","translate.providerFieldApiKey":"Clave API","translate.providerFieldApiKeyOptional":"Clave API (opcional)","translate.providerFieldDeeplPlan":"Plan DeepL","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"Región","translate.providerFieldModel":"Modelo","translate.providerFieldBaseUrl":"URL base de la API","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"URL de la API","translate.providerHintGoogle":"Endpoint público de Google Translate. No requiere clave.","translate.providerHintDeepl":"DeepL API Free o Pro. Crea una clave en deepl.com/pro-api.","translate.providerHintDeeplKey":"Las claves Free suelen terminar en :fx","translate.providerHintMicrosoft":"Clave del recurso Azure Translator en el portal de Azure.","translate.providerHintMicrosoftRegion":"Región del recurso, o global para claves multi-servicio.","translate.providerHintOpenai":"API Chat Completions. Endpoints compatibles también sirven.","translate.providerHintOpenaiBase":"Por defecto https://api.openai.com/v1 — cámbiala para proxies.","translate.providerHintYandex":"Clave API de Yandex Cloud Translate + folder ID.","translate.providerHintYandexFolder":"Desde la consola de Yandex Cloud.","translate.providerHintLibre":"Instancia LibreTranslate propia o pública.","translate.errProviderConfig":"Proveedor sin configurar. Abre Translator → Proveedores.","about.title":"Acerca de","about.repo":"Abrir repositorio en GitHub","about.license":"Licencia MIT","translate.settingsTargetLang":"Traducir a","general.language":"Idioma de la interfaz","translate.settingsCacheHours":"Caché de traducciones (horas)","translate.settingsCacheHint":"0 desactiva la caché. Las entradas caducan por TTL o al vaciarla.","translate.cacheMeterTitle":"Uso","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} entradas","translate.cacheMeterTtl":"TTL {hours} h","translate.cacheMeterDisabled":"Caché off","translate.cacheMeterFree":"{free} libres","translate.cacheMeterAria":"Caché {used} de {limit} ({pct}), {count} entradas","translate.cacheMeterHint":"Límite blando del almacenamiento GM. Si se llena, se eliminan las entradas más antiguas.","translate.settingsDisplayMode":"Visualización de la traducción","translate.settingsDisplayModeHint":"Panel: mostrar la traducción bajo el post. Reemplazar: cambiar el texto y ofrecer Mostrar original.","translate.displayModePanel":"Panel separado","translate.displayModeReplace":"Reemplazar el original","translate.btnShowOriginal":"Mostrar original","translate.settingsTranslateMode":"Modo de traducción","translate.settingsTranslateModeHint":"Automático: traduce en cuanto la publicación es visible aunque sea un poco. Botón: solo al pulsar Traducir.","translate.translateModeButton":"Al pulsar el botón","translate.translateModeAuto":"Automático (en pantalla)","translate.settingsAutoScope":"Alcance del autotraducido","translate.settingsAutoScopeHint":"Traducir todos los posts visibles o solo las cuentas que elijas.","translate.autoScopeAll":"Todas las cuentas","translate.autoScopeAllowlist":"Solo cuentas seleccionadas","translate.settingsAllowlistHint":"También puedes añadir o quitar cuentas desde el menú ⋮ del post.","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"Añadir","translate.allowlistEmpty":"Sin cuentas. Escribe un nickname arriba.","translate.allowlistInvalid":"Introduce un handle de X válido.","translate.allowlistAdded":"Se añadió {handle} al autotraducido","translate.allowlistRemoved":"Se quitó {handle} del autotraducido","translate.menuAddAutoAccount":"Autotraducir esta cuenta","translate.menuRemoveAutoAccount":"Quitar del autotraducido","panel.save":"Guardar","panel.close":"Cerrar","panel.search":"Buscar en los ajustes","panel.searchClear":"Borrar búsqueda","panel.searchEmpty":"No se encontró nada","translate.settingsClearCache":"Vaciar caché","panel.saved":"Ajustes guardados","translate.settingsCacheCleared":"Caché de traducciones vaciada","toast.title.success":"Listo","toast.title.info":"Info","toast.title.warning":"Aviso","toast.title.error":"Error","toast.dismiss":"Cerrar","translate.langAuto":"Auto (igual que UI / navegador)","general.languageAuto":"Auto (navegador)","translate.badgeLangAuto":"Auto","translate.originalLabel":"Original","translate.settingsReplaceReveal":"Detalles del modo reemplazo","translate.settingsReplaceRevealHint":"Solo botón, original al pasar el cursor, o ambos juntos.","translate.replaceRevealButton":"Solo botón","translate.replaceRevealHover":"Original al pasar el cursor","translate.replaceRevealSplit":"Vista dividida (original + traducción)","translate.settingsAccountBlocklist":"Lista de bloqueo de cuentas","translate.settingsAccountBlocklistHint":"No mostrar Traducir ni autotraducir estas cuentas. También desde el menú del post.","translate.blocklistEmpty":"No hay cuentas bloqueadas.","translate.blocklistAdded":"Se bloqueó {handle}","translate.blocklistRemoved":"Se desbloqueó {handle}","translate.menuBlockAccount":"Nunca traducir esta cuenta","translate.menuUnblockAccount":"Permitir traducir esta cuenta","translate.settingsLangAllowlist":"Idiomas de origen permitidos","translate.settingsLangAllowlistHint":"Si no está vacía, solo se traducen estos idiomas. Vacía = todos.","translate.settingsLangBlocklist":"Idiomas de origen bloqueados","translate.settingsLangBlocklistHint":"Omitir publicaciones en estos idiomas.","translate.settingsSkipNative":"Omitir posts que X ya autotradujo","translate.settingsSkipNativeHint":"Si X ya muestra su barra de traducción (Mostrar original), no añadir Traducir ni autotraducir.","translate.settingsHideErrors":"Ocultar errores de traducción","translate.settingsHideErrorsHint":"No mostrar «Error al traducir. Inténtalo de nuevo.»; la publicación simplemente queda sin traducir.","translate.langListEmpty":"Ningún idioma seleccionado.","translate.langListAdd":"Añadir","translate.langSkippedBlocked":"Omitido: idioma bloqueado","translate.langSkippedNotAllowed":"Omitido: idioma no permitido","general.sectionInterface":"Interfaz","translate.settingsSectionTranslate":"Traducción","translate.settingsSectionAccounts":"Cuentas","translate.settingsSectionLanguages":"Idiomas","translate.settingsSectionProvider":"Proveedor","translate.settingsSectionCache":"Caché","translate.badgeCacheOff":"Off","menu.settings":"X Plus — Ajustes","nav.label":"X Plus","common.off":"Desactivado","panel.cancel":"Cancelar","panel.confirm":"Confirmar","panel.reset":"Restablecer","panel.resetTitle":"¿Restablecer todos los ajustes?","panel.resetText":"Todas las opciones vuelven a su valor predeterminado. Nada cambia hasta que pulses Guardar.","list.add":"Añadir","list.remove":"Quitar","list.empty":"Aún no hay nada.","list.invalid":"Introduce un valor válido.","list.exists":"{item} ya está en la lista","list.handlePlaceholder":"@usuario","general.languageHint":"Idioma de los menús y mensajes de X Plus.","general.navButton":"Botón en el menú lateral","general.navButtonHint":"Muestra una entrada «X Plus» en el menú izquierdo de X que abre estos ajustes.","general.hotkey":"Atajo de teclado","general.hotkeyHint":"Ctrl + M abre los ajustes de X Plus.","general.hotkeyReminder":"Recordatorio del atajo","general.hotkeyReminderHint":"Muestra un recordatorio tenue en la esquina inferior izquierda.","hotkey.hint":"ajustes de X Plus","general.sectionToasts":"Notificaciones","general.toasts":"Mostrar notificaciones","general.toastsHint":"Avisos al guardar ajustes, al descargar y ante errores.","general.toastPosition":"Posición","general.toastPosition.top-right":"Arriba a la derecha","general.toastPosition.top-left":"Arriba a la izquierda","general.toastPosition.bottom-right":"Abajo a la derecha","general.toastPosition.bottom-left":"Abajo a la izquierda","general.toastDuration":"Tiempo visible (segundos)","general.toastDurationHint":"0 mantiene la notificación hasta que la cierres.","about.description":"Userscript que añade traducción, descarga de contenido multimedia y muchas mejoras a X (x.com). Funciona con Tampermonkey, Violentmonkey, ScriptCat y gestores similares.","backup.title":"Copia de seguridad","backup.exportTitle":"Exportar","backup.exportDesc":"Guarda tus ajustes actuales como archivo JSON o cópialos al portapapeles.","backup.download":"Descargar archivo","backup.copy":"Copiar JSON","backup.exported":"Ajustes exportados","backup.copied":"Ajustes copiados al portapapeles","backup.copyFailed":"No se pudo acceder al portapapeles","backup.secretsHint":"La exportación contiene las claves API de los traductores. Mantenla en privado.","backup.importTitle":"Importar","backup.importDesc":"Pega una copia o elige un archivo. Los valores desconocidos o no válidos se ignoran. La importación se aplica al instante.","backup.importPaste":"Importar JSON pegado","backup.importFile":"Elegir archivo…","backup.imported":"Ajustes importados","backup.importFailed":"No es una copia válida de X Plus","translate.sectionMain":"Traducir publicaciones","translate.enabled":"Activar traducción","translate.enabledHint":"Añade un control Traducir a publicaciones y respuestas.","media.title":"Multimedia","media.sectionMain":"Descarga de contenido","media.sectionMainDesc":"Guarda vídeos, GIF y fotos de las publicaciones.","media.enabled":"Activar descarga","media.enabledHint":"Añade botones de descarga a las publicaciones con contenido multimedia.","media.sectionButtons":"Botones","media.showInActions":"Botón en la barra de acciones","media.showInActionsHint":"Junto a Compartir. Descarga todo el contenido de la publicación.","media.showOnMedia":"Botón sobre el contenido","media.showOnMediaHint":"Un botón pequeño al pasar el cursor que descarga solo ese vídeo o foto.","media.videos":"Vídeos","media.gifs":"GIF","media.images":"Fotos","media.sectionQuality":"Calidad","media.videoQuality":"Calidad del vídeo","media.videoQualityHint":"Versiones MP4 publicadas por X. «Preguntar siempre» te deja elegir al descargar.","media.quality.best":"La mejor disponible","media.quality.ask":"Preguntar siempre","media.quality.1080":"Hasta 1080p","media.quality.720":"Hasta 720p","media.quality.480":"Hasta 480p","media.quality.lowest":"Archivo más pequeño","media.imageQuality":"Calidad de las fotos","media.imageQualityHint":"«Original» es el archivo tal como se subió; «Grande» es la versión de 2048 px de X.","media.image.orig":"Original","media.image.large":"Grande (2048 px)","media.onMultiple":"Publicaciones con varios archivos","media.onMultipleHint":"Qué hacer cuando una publicación tiene más de un vídeo o foto.","media.multiple.ask":"Dejarme elegir","media.multiple.all":"Descargar todo","media.sectionFiles":"Nombres de archivo","media.fileTemplate":"Plantilla de nombre","media.fileTemplateHint":"Los caracteres no permitidos en nombres de archivo se sustituyen automáticamente. La extensión se añade sola.","media.fileTokens":"Marcadores: {user} usuario del autor · {id} id de la publicación · {date} 2025-01-31 · {time} 235959 · {n} número de archivo · {quality} 720p / orig · {type} video / gif / photo · {text} inicio del texto","media.sectionFeed":"Cronología","media.feedImageQuality":"Fotos en la cronología","media.feedImageQualityHint":"Carga una versión más grande de las fotos al navegar. Usa más datos.","media.feed.default":"Predeterminado de X","media.feed.large":"Grande","media.feed.orig":"Original","media.sectionViewer":"Visor de fotos","media.sectionViewerDesc":"Abre las fotos de las publicaciones en una galería rápida y acerca o mueve las fotos en la vista a pantalla completa.","media.photoZoom":"Zoom y desplazamiento de fotos","media.photoZoomHint":"La rueda del ratón acerca hacia el cursor, arrastrar mueve la foto, doble clic alterna el zoom; también + / - / 0. En pantallas táctiles, pellizca y arrastra.","media.photoGrid":"Cuadrícula tras las fotos","media.photoGridHint":"Dibuja una cuadrícula detrás de la foto para ver mejor imágenes transparentes u oscuras.","media.zoomOut":"Alejar","media.zoomIn":"Acercar","media.zoomReset":"Restablecer zoom","media.photoGallery":"Abrir fotos en la galería de X Plus","media.photoGalleryHint":"Un clic en la foto de una publicación abre una galería ligera en lugar de la página de foto de X: no se cargan respuestas ni cronología. Recorre todas las fotos con ← / →, acerca con la rueda, descarga o abre el original. Ctrl/Cmd/Mayús + clic sigue abriendo el visor de X.","media.gallery":"Galería de fotos","media.galleryClose":"Cerrar (Esc)","media.galleryPrev":"Foto anterior (←)","media.galleryNext":"Foto siguiente (→)","media.galleryDownload":"Descargar esta foto","media.galleryOpenOriginal":"Abrir el original en una pestaña nueva","media.galleryActualSize":"Tamaño real / ajustar","media.galleryPhoto":"Foto {n}","media.download":"Descargar contenido","media.downloadAll":"Descargar todo","media.downloading":"Descargando…","media.saved":"Guardado","media.savedText":"{count} archivo(s) · {size}","media.partial":"Guardado parcialmente","media.partialText":"Guardados {saved}, con error {failed}","media.failed":"No se pudo descargar. Inténtalo de nuevo.","media.noId":"No se encontró el id de esta publicación","media.noMedia":"Esta publicación no tiene contenido descargable","media.noVariants":"Este vídeo no tiene versión MP4 descargable (solo streaming)","media.needLogin":"No se pudo cargar el contenido. Inicia sesión en X e inténtalo de nuevo.","media.resolveFailed":"No se pudo obtener el contenido de esta publicación","media.item.video":"Vídeo","media.item.gif":"GIF","media.item.photo":"Foto {n}","media.item.photoSingle":"Foto","media.item.quoted":"Publicación citada · {label}","interface.title":"Interfaz","interface.sectionMain":"Limpieza","interface.sectionMainDesc":"Oculta partes de X que no usas. Los cambios se aplican al guardar.","interface.enabled":"Activar limpieza","interface.contentWidth":"Ancho del contenido","interface.contentWidthHint":"Ancho de la columna central con publicaciones, en píxeles. 0 mantiene el ancho predeterminado de X.","interface.width.default":"Predeterminado","interface.width.narrow":"Estrecho","interface.width.wide":"Ancho","interface.width.wider":"Más ancho","interface.width.full":"Ancho completo","interface.menuLeft":"Menú en el borde izquierdo","interface.menuLeftHint":"Mueve el menú de navegación al borde izquierdo de la pantalla en lugar de junto al feed.","interface.menuCenter":"Centrar el menú verticalmente","interface.menuCenterHint":"Alinea todos los elementos del menú izquierdo al centro vertical de la pantalla.","interface.menuHide":"Ocultar el menú izquierdo","interface.menuHideHint":"Quita todo el menú izquierdo. Los ajustes de X Plus siguen disponibles en el menú del gestor de scripts.","interface.feedTabsStatic":"No fijar las pestañas","interface.feedTabsStaticHint":"Las pestañas «Para ti» / «Siguiendo» se desplazan con la página en lugar de flotar arriba.","interface.sidebarRight":"Columna derecha en el borde","interface.sidebarRightHint":"Mueve la búsqueda, tendencias y sugerencias al borde derecho de la pantalla y las mantiene fijas al desplazarte.","interface.sidebarHide":"Ocultar la columna derecha","interface.sidebarHideHint":"Quita toda la columna derecha (búsqueda, tendencias, sugerencias). Los interruptores de cada bloque ya no hacen falta.","interface.centerContent":"Centrar el feed en la pantalla","interface.centerContentHint":"Coloca el feed justo en el centro de la pantalla. El menú y la columna derecha se fijan a los bordes.","interface.rule.posts.composer":"Cuadro de publicación","interface.rule.posts.handles":"@usuario en las publicaciones","interface.rule.posts.handlesHint":"Oculta el @usuario junto al nombre en la cabecera de la publicación (y el punto antes de la hora).","interface.rule.posts.translateNotice":"Aviso de «Idioma de origen»","interface.rule.posts.translateNoticeHint":"Oculta la línea «Idioma de origen: … Mostrar original» que X añade bajo las publicaciones traducidas. La traducción de X Plus no se ve afectada.","interface.rule.posts.articles":"Artículos","interface.rule.posts.articlesHint":"Oculta la tarjeta de artículo de X (portada, título y adelanto) bajo una publicación.","interface.rule.posts.linkCards":"Vistas previas de enlaces","interface.rule.posts.linkCardsHint":"Oculta la tarjeta de vista previa bajo un enlace (imagen, título y «De sitio»). El enlace del texto se mantiene.","interface.rule.posts.images":"Imágenes en las publicaciones","interface.rule.posts.imagesHint":"Oculta las fotos de las publicaciones. Los vídeos y GIF se mantienen.","interface.rule.posts.videos":"Vídeos en las publicaciones","interface.rule.posts.videosHint":"Oculta los vídeos y GIF de las publicaciones. Las fotos se mantienen.","interface.rule.posts.quotedPosts":"Publicaciones citadas","interface.rule.posts.quotedPostsHint":"Oculta la publicación incrustada dentro de otra (una cita).","interface.rule.posts.actionBar":"Barra de acciones bajo las publicaciones","interface.rule.posts.actionBarHint":"Quita la fila de responder, repostear, me gusta y compartir. El botón de descarga de X Plus de esa fila también desaparece; el botón sobre el contenido multimedia se mantiene.","interface.postView.hideAvatars":"Avatares en las publicaciones","interface.postView.hideAvatarsHint":"Oculta las fotos de perfil junto a las publicaciones y el espacio que dejan.","interface.rule.posts.moreFromX":"«Descubre más» bajo una publicación","interface.rule.posts.moreFromXHint":"En la página de una publicación, oculta el encabezado «Descubre más» y las publicaciones recomendadas bajo las respuestas.","interface.rule.posts.feedTabs":"Pestañas de la cronología","interface.rule.posts.newPostsPill":"Botón «Nuevas publicaciones»","interface.rule.posts.showPosts":"Fila «Mostrar N publicaciones»","interface.rule.posts.promoted":"Publicaciones promocionadas","interface.rule.posts.viewCounts":"Contador de vistas","interface.rule.posts.verifiedBadges":"Insignias de verificación","interface.rule.posts.grokButton":"Botón de Grok en las publicaciones","interface.rule.sidebar.search":"Cuadro de búsqueda","interface.rule.sidebar.whoToFollow":"A quién seguir","interface.rule.sidebar.trends":"Tendencias","interface.rule.sidebar.premium":"Ofertas de Premium","interface.rule.sidebar.footer":"Enlaces del pie","interface.rule.chrome.grokDrawer":"Panel de Grok","interface.rule.chrome.chatDrawer":"Panel de chat","interface.rule.nav.logo":"Logotipo del sitio","interface.rule.nav.home":"Inicio","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"Explorar","interface.rule.nav.chat":"Chat","interface.rule.nav.calls":"Llamadas","interface.rule.nav.history":"Historial","interface.rule.nav.creatorStudio":"Estudio de creadores","interface.rule.nav.followerRequests":"Solicitudes de seguidores","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"Notificaciones","interface.rule.nav.profile":"Perfil","interface.rule.nav.more":"Más opciones","interface.rule.nav.post":"Botón de publicar","interface.rule.nav.account":"Menú de la cuenta","interface.peekHint":"Pasa el cursor sobre un ajuste para verlo en la página detrás de esta ventana.","interface.sectionFeed":"Cronología","interface.sectionFeedDesc":"La columna central con las publicaciones.","interface.sectionNav":"Menú izquierdo","interface.sectionNavDesc":"Navegación con Inicio, Explorar, Perfil y otros enlaces.","interface.sectionSide":"Columna derecha","interface.sectionSideDesc":"Búsqueda, tendencias y sugerencias.","interface.sectionDrawers":"Paneles flotantes","interface.sectionDrawersDesc":"Paneles fijados en la esquina inferior derecha.","interface.sub.layout":"Diseño","interface.sub.hide":"Ocultar","interface.enabledHint":"Interruptor general de todas las opciones de «Ocultar» de abajo. No afecta al diseño.","interface.rule.posts.composerHint":"Oculta el cuadro «¿Qué está pasando?» sobre la cronología. El diálogo de publicar sigue funcionando.","interface.rule.posts.feedTabsHint":"Oculta las pestañas «Para ti» / «Siguiendo» sobre la cronología.","interface.rule.posts.newPostsPillHint":"Quita el botón flotante «Ver publicaciones nuevas» sobre la cronología.","interface.rule.posts.showPostsHint":"Quita la fila «Mostrar 35 publicaciones» al inicio de la cronología. Puede quedar un hueco de la misma altura.","interface.rule.posts.promotedHint":"Oculta los anuncios de la cronología.","interface.rule.posts.viewCountsHint":"Quita el contador de visualizaciones bajo cada publicación.","interface.rule.posts.verifiedBadgesHint":"Quita la marca azul y otras insignias de verificación junto a los nombres.","interface.rule.posts.grokButtonHint":"Quita el icono de Grok en la esquina superior derecha de las publicaciones.","interface.rule.sidebar.searchHint":"Quita el campo de búsqueda de la parte superior de la columna derecha.","interface.rule.sidebar.whoToFollowHint":"Quita el bloque de sugerencias de cuentas.","interface.rule.sidebar.trendsHint":"Quita el bloque de tendencias «Qué está pasando».","interface.rule.sidebar.premiumHint":"Quita la oferta de suscripción a Premium.","interface.rule.sidebar.footerHint":"Quita los enlaces de términos, privacidad y otros de la parte inferior.","interface.rule.chrome.grokDrawerHint":"Quita el panel flotante de Grok.","interface.rule.chrome.chatDrawerHint":"Quita el panel flotante del chat.","interface.sectionPosts":"Publicación","interface.sectionPostsDesc":"Cómo se ve una publicación y qué muestra. Pasa el cursor sobre un ajuste para verlo en vivo.","interface.sub.cards":"Tarjetas","interface.sub.spacing":"Espaciado","interface.sub.look":"Texto y avatares","interface.postView.none":"Ninguno","interface.postView.cards":"Publicaciones como tarjetas","interface.postView.cardsHint":"Dibuja cada publicación como una tarjeta independiente. Usa el control de espaciado de abajo para la distancia entre tarjetas.","interface.postView.cardStyle":"Estilo de tarjeta","interface.postView.cardStyleHint":"Contorno, fondo suave o sombra.","interface.postView.cardStyle.outline":"Contorno","interface.postView.cardStyle.filled":"Relleno","interface.postView.cardStyle.shadow":"Sombra","interface.postView.cardRadius":"Radio de las esquinas","interface.postView.cardRadiusHint":"Cuánto se redondean las esquinas de la tarjeta.","interface.postView.cardOpacity":"Opacidad del fondo","interface.postView.cardOpacityHint":"Opacidad del relleno de la tarjeta. Valores bajos dejan ver el fondo de la página.","interface.postView.gap":"Espacio entre publicaciones","interface.postView.gapHint":"Espacio vacío bajo cada publicación, en píxeles.","interface.postView.padding":"Relleno interior","interface.postView.paddingHint":"Espacio adicional dentro de cada publicación, en píxeles.","interface.postView.hideDividers":"Ocultar separadores entre publicaciones","interface.postView.hideDividersHint":"Quita las líneas finas que separan las publicaciones.","interface.postView.hideFeedBorder":"Ocultar bordes del feed","interface.postView.hideFeedBorderHint":"Quita las líneas verticales a ambos lados de la columna del feed.","interface.postView.textScale":"Tamaño del texto","interface.postView.textScaleHint":"Escala el texto de las publicaciones. 100 % mantiene el tamaño por defecto.","interface.postView.avatarShape":"Forma del avatar","interface.postView.avatarShapeHint":"Forma de las fotos de perfil en el feed.","interface.postView.avatarShape.default":"Predeterminada (círculo)","interface.postView.avatarShape.rounded":"Cuadrado redondeado","interface.postView.avatarShape.square":"Cuadrado","peek.missing":"No hay nada que mostrar en esta página ahora","translate.articles":"Traducir artículos","translate.articlesHint":"Añade un control Traducir a los artículos de X y los traduce párrafo por párrafo.","translate.articleProgress":"Traduciendo… {done}/{total}","translate.articleSame":"El artículo ya está en tu idioma","shorts.title":"Shorts","shorts.sectionMain":"Modo Shorts","shorts.sectionMainDesc":"Recorre la cronología publicación a publicación, como en YouTube Shorts.","shorts.enabled":"Recorrer la cronología publicación a publicación","shorts.enabledHint":"La rueda y las flechas saltan a la publicación siguiente o anterior y la centran. La actual crece un poco y las de alrededor se desenfocan. Funciona en cronologías (Inicio, perfiles, búsqueda, listas), no en la página de una publicación. También disponible como interruptor abajo a la izquierda.","shorts.keys":"Navegación con teclado","shorts.keysHint":"↑ / ↓, J / K y la barra espaciadora van a la publicación anterior / siguiente (Mayús + espacio retrocede).","shorts.sectionLook":"Aspecto","shorts.scale":"Tamaño de la publicación actual","shorts.scaleHint":"Cuánto se agranda la publicación central (100 % = nada).","shorts.blur":"Desenfoque de las demás","shorts.blurHint":"0 desactiva el desenfoque.","shorts.dockLabel":"Shorts","shorts.dockTitle":"Modo Shorts: una publicación cada vez","shorts.buttons":"Botones anterior / siguiente","shorts.buttonsHint":"Dos botones redondos junto a la publicación actual, para usar el ratón.","shorts.prev":"Publicación anterior","shorts.next":"Publicación siguiente","shorts.speed":"Velocidad de transición","shorts.speedHint":"Cuánto duran el salto a la siguiente publicación y el efecto de ampliar / desenfocar.","shorts.speed.slow":"Lenta","shorts.speed.normal":"Normal","shorts.speed.fast":"Rápida","shorts.speed.instant":"Instantánea","shorts.sectionAuto":"Desplazamiento automático","shorts.sectionAutoDesc":"Pasa solo a la siguiente publicación tras un tiempo. Se pausa o inicia con el botón bajo las flechas.","shorts.autoplay":"Desplazamiento automático","shorts.autoplayHint":"Activa o desactiva el paso automático a la siguiente publicación.","shorts.autoDelay":"Tiempo por publicación","shorts.autoDelayHint":"Segundos antes de saltar a la siguiente publicación.","shorts.autoWaitVideo":"Dejar terminar los vídeos","shorts.autoWaitVideoHint":"Una publicación con vídeo permanece hasta que acabe, si dura más que el tiempo indicado.","shorts.autoHover":"Pausar sobre los botones","shorts.autoHoverHint":"La cuenta atrás espera mientras el puntero está sobre los botones de flecha.","shorts.autoStyle":"Indicador de progreso","shorts.autoStyleHint":"Automático: un anillo alrededor del botón «siguiente» o una barra sobre la publicación si los botones están ocultos.","shorts.autoStyle.auto":"Automático","shorts.autoStyle.ring":"Anillo en el botón","shorts.autoStyle.bar":"Barra sobre la publicación","shorts.autoStyle.both":"Anillo y barra","shorts.autoStyle.none":"Ninguno","shorts.autoPause":"Pausar desplazamiento automático","shorts.autoPlay":"Iniciar desplazamiento automático","shorts.autoKey":"Tecla de pausa / reanudar","shorts.autoKeyHint":"Haz clic en el campo y pulsa una tecla; Retroceso la borra. La tecla funciona mientras el desplazamiento automático está activo.","shorts.autoResume":"Reanudar desplazamiento automático","common.keyPress":"Pulsa una tecla…","common.keyNone":"Sin asignar","common.keyReserved":"{key} ya se usa en el modo Shorts","shorts.prevOpacity":"Opacidad de la publicación anterior","shorts.nextOpacity":"Opacidad de la publicación siguiente","shorts.opacityHint":"0 la oculta por completo y 100 la muestra entera; el desenfoque se ajusta aparte.","shorts.translateOnlyCurrent":"Traducir solo la publicación actual","shorts.translateOnlyCurrentHint":"La traducción automática solo actúa sobre la publicación central, cuando lleva un instante en ella: las que pasas de largo no gastan solicitudes de la API. El botón Traducir sigue funcionando en cualquier publicación.","shorts.translateNext":"Traducir la siguiente publicación por adelantado","shorts.translateNextHint":"Mientras lees la publicación actual, la siguiente se traduce en segundo plano (una solicitud más a la API), pero su texto solo se sustituye cuando llegues a ella."},pt:{"translate.btnTranslate":"Traduzir","translate.btnHide":"Ocultar tradução","translate.btnRetry":"Tentar de novo","translate.translating":"Traduzindo…","translate.translationLabel":"Tradução","translate.detectedLang":"Detectado: {lang}","translate.errNetwork":"Falha na tradução. Tente novamente.","general.title":"Geral","translate.sectionTranslation":"Tradução","translate.sectionCache":"Cache","translate.settingsProvider":"Provedor de tradução","translate.settingsProviderHint":"As credenciais ficam só no armazenamento do userscript neste dispositivo.","translate.providerFieldApiKey":"Chave de API","translate.providerFieldApiKeyOptional":"Chave de API (opcional)","translate.providerFieldDeeplPlan":"Plano DeepL","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"Região","translate.providerFieldModel":"Modelo","translate.providerFieldBaseUrl":"URL base da API","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"URL da API","translate.providerHintGoogle":"Endpoint público do Google Translate. Sem chave de API.","translate.providerHintDeepl":"DeepL API Free ou Pro. Crie uma chave em deepl.com/pro-api.","translate.providerHintDeeplKey":"Chaves Free costumam terminar com :fx","translate.providerHintMicrosoft":"Chave do recurso Azure Translator no portal Azure.","translate.providerHintMicrosoftRegion":"Região do recurso, ou global para chaves multi-serviço.","translate.providerHintOpenai":"API Chat Completions. Endpoints compatíveis também funcionam.","translate.providerHintOpenaiBase":"Padrão https://api.openai.com/v1 — altere para proxies.","translate.providerHintYandex":"Chave API do Yandex Cloud Translate + folder ID.","translate.providerHintYandexFolder":"No console do Yandex Cloud.","translate.providerHintLibre":"Instância LibreTranslate própria ou pública.","translate.errProviderConfig":"Provedor não configurado. Abra Translator → Provedores.","about.title":"Sobre","about.repo":"Abrir repositório no GitHub","about.license":"Licença MIT","translate.settingsTargetLang":"Traduzir para","general.language":"Idioma da interface","translate.settingsCacheHours":"Cache de traduções (horas)","translate.settingsCacheHint":"0 desativa o cache. As entradas expiram pelo TTL ou ao limpar.","translate.cacheMeterTitle":"Uso","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} itens","translate.cacheMeterTtl":"TTL {hours} h","translate.cacheMeterDisabled":"Cache off","translate.cacheMeterFree":"{free} livres","translate.cacheMeterAria":"Cache {used} de {limit} ({pct}), {count} itens","translate.cacheMeterHint":"Limite suave do armazenamento GM. Quando cheio, remove as entradas mais antigas.","translate.settingsDisplayMode":"Exibição da tradução","translate.settingsDisplayModeHint":"Painel: mostrar a tradução abaixo do post. Substituir: trocar o texto e oferecer Mostrar original.","translate.displayModePanel":"Painel separado","translate.displayModeReplace":"Substituir o original","translate.btnShowOriginal":"Mostrar original","translate.settingsTranslateMode":"Modo de tradução","translate.settingsTranslateModeHint":"Automático: traduz assim que o post fica um pouco visível. Botão: só ao tocar em Traduzir.","translate.translateModeButton":"Ao clicar no botão","translate.translateModeAuto":"Automático (na tela)","translate.settingsAutoScope":"Escopo da tradução automática","translate.settingsAutoScopeHint":"Traduzir todos os posts visíveis ou só as contas escolhidas.","translate.autoScopeAll":"Todas as contas","translate.autoScopeAllowlist":"Apenas contas selecionadas","translate.settingsAllowlistHint":"Também pode adicionar ou remover contas no menu ⋮ do post.","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"Adicionar","translate.allowlistEmpty":"Nenhuma conta. Digite um nickname acima.","translate.allowlistInvalid":"Digite um handle válido do X.","translate.allowlistAdded":"{handle} adicionado à tradução automática","translate.allowlistRemoved":"{handle} removido da tradução automática","translate.menuAddAutoAccount":"Traduzir automaticamente esta conta","translate.menuRemoveAutoAccount":"Remover da tradução automática","panel.save":"Salvar","panel.close":"Fechar","panel.search":"Pesquisar nas configurações","panel.searchClear":"Limpar pesquisa","panel.searchEmpty":"Nada encontrado","translate.settingsClearCache":"Limpar cache","panel.saved":"Configurações salvas","translate.settingsCacheCleared":"Cache de traduções limpo","toast.title.success":"Sucesso","toast.title.info":"Info","toast.title.warning":"Aviso","toast.title.error":"Erro","toast.dismiss":"Fechar","translate.langAuto":"Auto (igual à UI / navegador)","general.languageAuto":"Auto (navegador)","translate.badgeLangAuto":"Auto","translate.originalLabel":"Original","translate.settingsReplaceReveal":"Detalhes do modo substituir","translate.settingsReplaceRevealHint":"Só botão, original ao passar o mouse, ou ambos juntos.","translate.replaceRevealButton":"Só botão","translate.replaceRevealHover":"Original ao passar o mouse","translate.replaceRevealSplit":"Visão dividida (original + tradução)","translate.settingsAccountBlocklist":"Lista de bloqueio de contas","translate.settingsAccountBlocklistHint":"Não mostrar Traduzir nem traduzir automaticamente essas contas. Também no menu do post.","translate.blocklistEmpty":"Nenhuma conta bloqueada.","translate.blocklistAdded":"{handle} bloqueado","translate.blocklistRemoved":"{handle} desbloqueado","translate.menuBlockAccount":"Nunca traduzir esta conta","translate.menuUnblockAccount":"Permitir traduzir esta conta","translate.settingsLangAllowlist":"Idiomas de origem permitidos","translate.settingsLangAllowlistHint":"Se não estiver vazia, só traduz esses idiomas. Vazia = todos.","translate.settingsLangBlocklist":"Idiomas de origem bloqueados","translate.settingsLangBlocklistHint":"Ignorar posts nesses idiomas.","translate.settingsSkipNative":"Ignorar posts que o X já traduziu automaticamente","translate.settingsSkipNativeHint":"Quando o X já mostra a barra de tradução (Mostrar original), não adicionar Traduzir nem traduzir automaticamente.","translate.settingsHideErrors":"Ocultar erros de tradução","translate.settingsHideErrorsHint":"Não mostrar «Falha na tradução. Tente novamente.»; a publicação simplesmente fica sem tradução.","translate.langListEmpty":"Nenhum idioma selecionado.","translate.langListAdd":"Adicionar","translate.langSkippedBlocked":"Ignorado: idioma bloqueado","translate.langSkippedNotAllowed":"Ignorado: idioma não permitido","general.sectionInterface":"Interface","translate.settingsSectionTranslate":"Tradução","translate.settingsSectionAccounts":"Contas","translate.settingsSectionLanguages":"Idiomas","translate.settingsSectionProvider":"Provedor","translate.settingsSectionCache":"Cache","translate.badgeCacheOff":"Off","menu.settings":"X Plus — Configurações","nav.label":"X Plus","common.off":"Desativado","panel.cancel":"Cancelar","panel.confirm":"Confirmar","panel.reset":"Redefinir","panel.resetTitle":"Redefinir todas as configurações?","panel.resetText":"Todas as opções voltam ao padrão. Nada muda até você clicar em Salvar.","list.add":"Adicionar","list.remove":"Remover","list.empty":"Ainda não há nada.","list.invalid":"Digite um valor válido.","list.exists":"{item} já está na lista","list.handlePlaceholder":"@usuário","general.languageHint":"Idioma dos menus e mensagens do X Plus.","general.navButton":"Botão no menu lateral","general.navButtonHint":"Mostra uma entrada “X Plus” no menu esquerdo do X que abre estas configurações.","general.hotkey":"Atalho de teclado","general.hotkeyHint":"Ctrl + M abre as configurações do X Plus.","general.hotkeyReminder":"Lembrete do atalho","general.hotkeyReminderHint":"Mostra um lembrete discreto no canto inferior esquerdo.","hotkey.hint":"configurações do X Plus","general.sectionToasts":"Notificações","general.toasts":"Mostrar notificações","general.toastsHint":"Avisos ao salvar configurações, baixar arquivos e em caso de erros.","general.toastPosition":"Posição","general.toastPosition.top-right":"Canto superior direito","general.toastPosition.top-left":"Canto superior esquerdo","general.toastPosition.bottom-right":"Canto inferior direito","general.toastPosition.bottom-left":"Canto inferior esquerdo","general.toastDuration":"Tempo de exibição (segundos)","general.toastDurationHint":"0 mantém a notificação até você fechá-la.","about.description":"Userscript que adiciona tradução, download de mídia e muitas melhorias ao X (x.com). Funciona com Tampermonkey, Violentmonkey, ScriptCat e gerenciadores semelhantes.","backup.title":"Backup","backup.exportTitle":"Exportar","backup.exportDesc":"Salve as configurações atuais como arquivo JSON ou copie-as para a área de transferência.","backup.download":"Baixar arquivo","backup.copy":"Copiar JSON","backup.exported":"Configurações exportadas","backup.copied":"Configurações copiadas para a área de transferência","backup.copyFailed":"Não foi possível acessar a área de transferência","backup.secretsHint":"A exportação contém as chaves de API dos tradutores. Mantenha-a privada.","backup.importTitle":"Importar","backup.importDesc":"Cole um backup ou escolha um arquivo. Valores desconhecidos ou inválidos são ignorados. A importação é aplicada imediatamente.","backup.importPaste":"Importar JSON colado","backup.importFile":"Escolher arquivo…","backup.imported":"Configurações importadas","backup.importFailed":"Este não é um backup válido do X Plus","translate.sectionMain":"Traduzir posts","translate.enabled":"Ativar tradução","translate.enabledHint":"Adiciona um controle Traduzir a posts e respostas.","media.title":"Mídia","media.sectionMain":"Download de mídia","media.sectionMainDesc":"Salve vídeos, GIFs e fotos dos posts.","media.enabled":"Ativar download","media.enabledHint":"Adiciona botões de download aos posts com mídia.","media.sectionButtons":"Botões","media.showInActions":"Botão na barra de ações","media.showInActionsHint":"Ao lado de Compartilhar. Baixa toda a mídia do post.","media.showOnMedia":"Botão sobre a mídia","media.showOnMediaHint":"Um botão pequeno ao passar o mouse que baixa apenas aquele vídeo ou foto.","media.videos":"Vídeos","media.gifs":"GIFs","media.images":"Fotos","media.sectionQuality":"Qualidade","media.videoQuality":"Qualidade do vídeo","media.videoQualityHint":"Versões MP4 publicadas pelo X. “Perguntar sempre” permite escolher ao baixar.","media.quality.best":"A melhor disponível","media.quality.ask":"Perguntar sempre","media.quality.1080":"Até 1080p","media.quality.720":"Até 720p","media.quality.480":"Até 480p","media.quality.lowest":"Menor arquivo","media.imageQuality":"Qualidade das fotos","media.imageQualityHint":"“Original” é o arquivo como foi enviado; “Grande” é a versão de 2048 px do X.","media.image.orig":"Original","media.image.large":"Grande (2048 px)","media.onMultiple":"Posts com vários arquivos","media.onMultipleHint":"O que fazer quando um post tem mais de um vídeo ou foto.","media.multiple.ask":"Deixar-me escolher","media.multiple.all":"Baixar tudo","media.sectionFiles":"Nomes de arquivo","media.fileTemplate":"Modelo de nome","media.fileTemplateHint":"Caracteres não permitidos em nomes de arquivo são substituídos automaticamente. A extensão é adicionada sozinha.","media.fileTokens":"Marcadores: {user} usuário do autor · {id} id do post · {date} 2025-01-31 · {time} 235959 · {n} número do arquivo · {quality} 720p / orig · {type} video / gif / photo · {text} início do texto","media.sectionFeed":"Linha do tempo","media.feedImageQuality":"Fotos na linha do tempo","media.feedImageQualityHint":"Carrega uma versão maior das fotos ao navegar. Usa mais dados.","media.feed.default":"Padrão do X","media.feed.large":"Grande","media.feed.orig":"Original","media.sectionViewer":"Visualizador de fotos","media.sectionViewerDesc":"Abra as fotos dos posts numa galeria rápida e aproxime ou mova as fotos na visualização em tela cheia.","media.photoZoom":"Zoom e movimento de fotos","media.photoZoomHint":"A roda do mouse aproxima em direção ao cursor, arrastar move a foto, clique duplo alterna o zoom; também + / - / 0. Em telas sensíveis ao toque, pinça e arraste.","media.photoGrid":"Grade atrás das fotos","media.photoGridHint":"Desenha uma grade atrás da foto para destacar imagens transparentes ou escuras.","media.zoomOut":"Reduzir","media.zoomIn":"Ampliar","media.zoomReset":"Redefinir zoom","media.photoGallery":"Abrir fotos na galeria do X Plus","media.photoGalleryHint":"Um clique na foto de um post abre uma galeria leve em vez da página de foto do X: respostas e linha do tempo não são carregadas. Navegue por todas as fotos com ← / →, aproxime com a roda, baixe ou abra o original. Ctrl/Cmd/Shift + clique ainda abre o visualizador do X.","media.gallery":"Galeria de fotos","media.galleryClose":"Fechar (Esc)","media.galleryPrev":"Foto anterior (←)","media.galleryNext":"Próxima foto (→)","media.galleryDownload":"Baixar esta foto","media.galleryOpenOriginal":"Abrir o original em nova aba","media.galleryActualSize":"Tamanho real / ajustar","media.galleryPhoto":"Foto {n}","media.download":"Baixar mídia","media.downloadAll":"Baixar tudo","media.downloading":"Baixando…","media.saved":"Salvo","media.savedText":"{count} arquivo(s) · {size}","media.partial":"Salvo parcialmente","media.partialText":"Salvos {saved}, com falha {failed}","media.failed":"Falha no download. Tente novamente.","media.noId":"Não foi possível encontrar o id deste post","media.noMedia":"Este post não tem mídia para baixar","media.noVariants":"Este vídeo não tem versão MP4 para baixar (apenas streaming)","media.needLogin":"Não foi possível carregar a mídia. Entre no X e tente novamente.","media.resolveFailed":"Não foi possível obter a mídia deste post","media.item.video":"Vídeo","media.item.gif":"GIF","media.item.photo":"Foto {n}","media.item.photoSingle":"Foto","media.item.quoted":"Post citado · {label}","interface.title":"Interface","interface.sectionMain":"Limpeza","interface.sectionMainDesc":"Oculte partes do X que você não usa. As alterações são aplicadas ao salvar.","interface.enabled":"Ativar limpeza","interface.contentWidth":"Largura do conteúdo","interface.contentWidthHint":"Largura da coluna central com publicações, em pixels. 0 mantém a largura padrão do X.","interface.width.default":"Padrão","interface.width.narrow":"Estreito","interface.width.wide":"Largo","interface.width.wider":"Mais largo","interface.width.full":"Largura total","interface.menuLeft":"Menu na borda esquerda","interface.menuLeftHint":"Move o menu de navegação para a borda esquerda da tela em vez de ao lado do feed.","interface.menuCenter":"Centralizar o menu verticalmente","interface.menuCenterHint":"Alinha todos os itens do menu esquerdo ao centro vertical da tela.","interface.menuHide":"Ocultar o menu esquerdo","interface.menuHideHint":"Remove todo o menu esquerdo. As configurações do X Plus continuam disponíveis no menu do gerenciador de scripts.","interface.feedTabsStatic":"Não fixar as abas","interface.feedTabsStaticHint":"As abas «Para você» / «Seguindo» rolam com a página em vez de flutuar no topo.","interface.sidebarRight":"Coluna direita na borda","interface.sidebarRightHint":"Move a busca, tendências e sugestões para a borda direita da tela e as mantém fixas ao rolar.","interface.sidebarHide":"Ocultar a coluna da direita","interface.sidebarHideHint":"Remove toda a coluna da direita (pesquisa, tendências, sugestões). Os botões de cada bloco deixam de ser necessários.","interface.centerContent":"Centralizar o feed na tela","interface.centerContentHint":"Coloca o feed exatamente no meio da tela. O menu e a coluna direita ficam fixos nas bordas.","interface.rule.posts.composer":"Caixa de postagem","interface.rule.posts.handles":"@usuário nas publicações","interface.rule.posts.handlesHint":"Oculta o @usuário ao lado do nome no cabeçalho da publicação (e o ponto antes da hora).","interface.rule.posts.translateNotice":"Aviso de “Idioma de origem”","interface.rule.posts.translateNoticeHint":"Oculta a linha “Idioma de origem: … Mostrar original” que o X adiciona sob publicações traduzidas. A tradução do X Plus não é afetada.","interface.rule.posts.articles":"Artigos","interface.rule.posts.articlesHint":"Oculta o cartão de artigo do X (capa, título e resumo) sob uma publicação.","interface.rule.posts.linkCards":"Prévias de links","interface.rule.posts.linkCardsHint":"Oculta o cartão de prévia sob um link (imagem, título e legenda “De site”). O link no texto permanece.","interface.rule.posts.images":"Imagens nas publicações","interface.rule.posts.imagesHint":"Oculta as fotos das publicações. Vídeos e GIFs permanecem.","interface.rule.posts.videos":"Vídeos nas publicações","interface.rule.posts.videosHint":"Oculta vídeos e GIFs das publicações. As fotos permanecem.","interface.rule.posts.quotedPosts":"Publicações citadas","interface.rule.posts.quotedPostsHint":"Oculta a publicação incorporada em outra (uma citação).","interface.rule.posts.actionBar":"Barra de ações sob as publicações","interface.rule.posts.actionBarHint":"Remove a linha de responder, repostar, curtir e compartilhar. O botão de download do X Plus nessa linha também some; o botão sobre a mídia permanece.","interface.postView.hideAvatars":"Avatares nas publicações","interface.postView.hideAvatarsHint":"Oculta as fotos de perfil ao lado das publicações e o espaço que elas deixam.","interface.rule.posts.moreFromX":"“Descubra mais” abaixo de uma publicação","interface.rule.posts.moreFromXHint":"Na página de uma publicação, oculta o título “Descubra mais” e as publicações recomendadas abaixo das respostas.","interface.rule.posts.feedTabs":"Abas da linha do tempo","interface.rule.posts.newPostsPill":"Botão «Novos posts»","interface.rule.posts.showPosts":"Linha «Mostrar N posts»","interface.rule.posts.promoted":"Posts promovidos","interface.rule.posts.viewCounts":"Contador de visualizações","interface.rule.posts.verifiedBadges":"Selos de verificação","interface.rule.posts.grokButton":"Botão do Grok nos posts","interface.rule.sidebar.search":"Caixa de pesquisa","interface.rule.sidebar.whoToFollow":"Quem seguir","interface.rule.sidebar.trends":"Assuntos do momento","interface.rule.sidebar.premium":"Ofertas do Premium","interface.rule.sidebar.footer":"Links do rodapé","interface.rule.chrome.grokDrawer":"Painel do Grok","interface.rule.chrome.chatDrawer":"Painel de chat","interface.rule.nav.logo":"Logotipo do site","interface.rule.nav.home":"Página inicial","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"Explorar","interface.rule.nav.chat":"Chat","interface.rule.nav.calls":"Chamadas","interface.rule.nav.history":"Histórico","interface.rule.nav.creatorStudio":"Estúdio de criadores","interface.rule.nav.followerRequests":"Solicitações de seguidores","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"Notificações","interface.rule.nav.profile":"Perfil","interface.rule.nav.more":"Mais","interface.rule.nav.post":"Botão de postar","interface.rule.nav.account":"Menu da conta","interface.peekHint":"Passe o cursor sobre uma configuração para visualizá-la na página atrás desta janela.","interface.sectionFeed":"Linha do tempo","interface.sectionFeedDesc":"A coluna central com as publicações.","interface.sectionNav":"Menu esquerdo","interface.sectionNavDesc":"Navegação com Início, Explorar, Perfil e outros links.","interface.sectionSide":"Coluna direita","interface.sectionSideDesc":"Pesquisa, assuntos do momento e sugestões.","interface.sectionDrawers":"Painéis flutuantes","interface.sectionDrawersDesc":"Painéis fixados no canto inferior direito.","interface.sub.layout":"Layout","interface.sub.hide":"Ocultar","interface.enabledHint":"Chave geral de todas as opções de «Ocultar» abaixo. Não afeta as opções de layout.","interface.rule.posts.composerHint":"Oculta a caixa «O que está acontecendo?» acima da linha do tempo. A janela de postar continua funcionando.","interface.rule.posts.feedTabsHint":"Oculta as abas «Para você» / «Seguindo» acima da linha do tempo.","interface.rule.posts.newPostsPillHint":"Remove o botão flutuante «Ver novos posts» acima da linha do tempo.","interface.rule.posts.showPostsHint":"Remove a linha «Mostrar 35 posts» no topo da linha do tempo. Pode ficar um espaço da mesma altura.","interface.rule.posts.promotedHint":"Oculta os anúncios na linha do tempo.","interface.rule.posts.viewCountsHint":"Remove o contador de visualizações sob cada publicação.","interface.rule.posts.verifiedBadgesHint":"Remove o selo azul e outros selos de verificação ao lado dos nomes.","interface.rule.posts.grokButtonHint":"Remove o ícone do Grok no canto superior direito das publicações.","interface.rule.sidebar.searchHint":"Remove o campo de pesquisa no topo da coluna da direita.","interface.rule.sidebar.whoToFollowHint":"Remove o bloco de sugestões de contas.","interface.rule.sidebar.trendsHint":"Remove o bloco de assuntos do momento.","interface.rule.sidebar.premiumHint":"Remove a oferta de assinatura Premium.","interface.rule.sidebar.footerHint":"Remove os links de termos, privacidade e outros na parte inferior.","interface.rule.chrome.grokDrawerHint":"Remove o painel flutuante do Grok.","interface.rule.chrome.chatDrawerHint":"Remove o painel flutuante do chat.","interface.sectionPosts":"Publicação","interface.sectionPostsDesc":"Como uma publicação aparece e o que ela mostra. Passe o cursor sobre uma opção para pré-visualizar.","interface.sub.cards":"Cartões","interface.sub.spacing":"Espaçamento","interface.sub.look":"Texto e avatares","interface.postView.none":"Nenhum","interface.postView.cards":"Publicações como cartões","interface.postView.cardsHint":"Desenha cada publicação como um cartão separado. Use o controle de espaçamento abaixo para definir a distância entre os cartões.","interface.postView.cardStyle":"Estilo do cartão","interface.postView.cardStyleHint":"Contorno, fundo suave ou sombra.","interface.postView.cardStyle.outline":"Contorno","interface.postView.cardStyle.filled":"Preenchido","interface.postView.cardStyle.shadow":"Sombra","interface.postView.cardRadius":"Raio dos cantos","interface.postView.cardRadiusHint":"Quão arredondados são os cantos do cartão.","interface.postView.cardOpacity":"Opacidade do fundo","interface.postView.cardOpacityHint":"Opacidade do preenchimento do cartão. Valores menores deixam o fundo da página aparecer.","interface.postView.gap":"Espaço entre publicações","interface.postView.gapHint":"Espaço vazio sob cada publicação, em pixels.","interface.postView.padding":"Margem interna","interface.postView.paddingHint":"Espaço extra dentro de cada publicação, em pixels.","interface.postView.hideDividers":"Ocultar divisores entre publicações","interface.postView.hideDividersHint":"Remove as linhas finas que separam as publicações.","interface.postView.hideFeedBorder":"Ocultar bordas do feed","interface.postView.hideFeedBorderHint":"Remove as linhas verticais nos dois lados da coluna do feed.","interface.postView.textScale":"Tamanho do texto","interface.postView.textScaleHint":"Dimensiona o texto das publicações. 100% mantém o tamanho padrão.","interface.postView.avatarShape":"Formato do avatar","interface.postView.avatarShapeHint":"Formato das fotos de perfil no feed.","interface.postView.avatarShape.default":"Padrão (círculo)","interface.postView.avatarShape.rounded":"Quadrado arredondado","interface.postView.avatarShape.square":"Quadrado","peek.missing":"Nada para mostrar nesta página agora","translate.articles":"Traduzir artigos","translate.articlesHint":"Adiciona um controle Traduzir aos artigos do X e os traduz parágrafo por parágrafo.","translate.articleProgress":"Traduzindo… {done}/{total}","translate.articleSame":"O artigo já está no seu idioma","shorts.title":"Shorts","shorts.sectionMain":"Modo Shorts","shorts.sectionMainDesc":"Percorra o feed post a post, como no YouTube Shorts.","shorts.enabled":"Percorrer o feed post a post","shorts.enabledHint":"A roda do mouse e as setas saltam para o post seguinte ou anterior e o centralizam. O atual cresce um pouco e os vizinhos ficam desfocados. Funciona em feeds (Início, perfis, busca, listas), não na página de um post. Também disponível como interruptor no canto inferior esquerdo.","shorts.keys":"Navegação pelo teclado","shorts.keysHint":"↑ / ↓, J / K e a barra de espaço vão para o post anterior / seguinte (Shift + espaço volta).","shorts.sectionLook":"Aparência","shorts.scale":"Tamanho do post atual","shorts.scaleHint":"Quanto o post do meio é ampliado (100% = nada).","shorts.blur":"Desfoque dos outros posts","shorts.blurHint":"0 desativa o desfoque.","shorts.dockLabel":"Shorts","shorts.dockTitle":"Modo Shorts: um post de cada vez","shorts.buttons":"Botões anterior / seguinte","shorts.buttonsHint":"Dois botões redondos ao lado do post atual, para usar o mouse.","shorts.prev":"Post anterior","shorts.next":"Post seguinte","shorts.speed":"Velocidade da transição","shorts.speedHint":"Quanto duram o salto para o próximo post e o efeito de ampliar / desfocar.","shorts.speed.slow":"Lenta","shorts.speed.normal":"Normal","shorts.speed.fast":"Rápida","shorts.speed.instant":"Instantânea","shorts.sectionAuto":"Rolagem automática","shorts.sectionAutoDesc":"Passa sozinha para o próximo post após um tempo. Pause ou inicie com o botão sob as setas.","shorts.autoplay":"Rolagem automática","shorts.autoplayHint":"Liga ou desliga a passagem automática para o próximo post.","shorts.autoDelay":"Tempo por post","shorts.autoDelayHint":"Segundos antes de saltar para o próximo post.","shorts.autoWaitVideo":"Deixar os vídeos terminarem","shorts.autoWaitVideoHint":"Um post com vídeo fica até o vídeo acabar, se for mais longo que o tempo acima.","shorts.autoHover":"Pausar sobre os botões","shorts.autoHoverHint":"A contagem espera enquanto o ponteiro está sobre os botões de seta.","shorts.autoStyle":"Indicador de progresso","shorts.autoStyleHint":"Automático: um anel ao redor do botão «próximo» ou uma barra sobre o post quando os botões estão ocultos.","shorts.autoStyle.auto":"Automático","shorts.autoStyle.ring":"Anel no botão","shorts.autoStyle.bar":"Barra sobre o post","shorts.autoStyle.both":"Anel e barra","shorts.autoStyle.none":"Nenhum","shorts.autoPause":"Pausar rolagem automática","shorts.autoPlay":"Iniciar rolagem automática","shorts.autoKey":"Tecla de pausa / retomar","shorts.autoKeyHint":"Clique no campo e pressione uma tecla; Backspace a remove. A tecla funciona enquanto a rolagem automática está ativa.","shorts.autoResume":"Retomar rolagem automática","common.keyPress":"Pressione uma tecla…","common.keyNone":"Não definida","common.keyReserved":"{key} já é usada no modo Shorts","shorts.prevOpacity":"Opacidade do post anterior","shorts.nextOpacity":"Opacidade do próximo post","shorts.opacityHint":"0 oculta o post e 100 o mostra por inteiro; o desfoque é ajustado à parte.","shorts.translateOnlyCurrent":"Traduzir apenas o post atual","shorts.translateOnlyCurrentHint":"A tradução automática só atua no post do meio, depois de ele ficar ali por um instante — os posts que você passa direto não gastam requisições da API. O botão Traduzir continua funcionando em qualquer post.","shorts.translateNext":"Traduzir o próximo post com antecedência","shorts.translateNextHint":"Enquanto você lê o post atual, o próximo é traduzido em segundo plano (mais uma requisição à API), mas o texto só é substituído quando você chegar a ele."},de:{"translate.btnTranslate":"Übersetzen","translate.btnHide":"Übersetzung ausblenden","translate.btnRetry":"Erneut versuchen","translate.translating":"Übersetze…","translate.translationLabel":"Übersetzung","translate.detectedLang":"Erkannt: {lang}","translate.errNetwork":"Übersetzung fehlgeschlagen. Bitte erneut versuchen.","general.title":"Allgemein","translate.sectionTranslation":"Übersetzung","translate.sectionCache":"Cache","translate.settingsProvider":"Übersetzungsanbieter","translate.settingsProviderHint":"Zugangsdaten werden nur im Userscript-Speicher dieses Geräts gespeichert.","translate.providerFieldApiKey":"API-Schlüssel","translate.providerFieldApiKeyOptional":"API-Schlüssel (optional)","translate.providerFieldDeeplPlan":"DeepL-Tarif","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"Region","translate.providerFieldModel":"Modell","translate.providerFieldBaseUrl":"API-Basis-URL","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"API-URL","translate.providerHintGoogle":"Öffentlicher Google-Translate-Endpunkt. Kein API-Schlüssel nötig.","translate.providerHintDeepl":"DeepL API Free oder Pro. Schlüssel unter deepl.com/pro-api.","translate.providerHintDeeplKey":"Free-Schlüssel enden meist mit :fx","translate.providerHintMicrosoft":"Azure-Translator-Ressourcenschlüssel im Azure-Portal.","translate.providerHintMicrosoftRegion":"Ressourcenregion oder global für Multi-Service-Schlüssel.","translate.providerHintOpenai":"Chat-Completions-API. Kompatible Endpunkte funktionieren ebenfalls.","translate.providerHintOpenaiBase":"Standard https://api.openai.com/v1 — für Proxys ändern.","translate.providerHintYandex":"Yandex Cloud Translate API-Schlüssel + Folder ID.","translate.providerHintYandexFolder":"Aus der Yandex-Cloud-Konsole.","translate.providerHintLibre":"Eigene oder öffentliche LibreTranslate-Instanz.","translate.errProviderConfig":"Anbieter nicht konfiguriert. Öffne Translator → Anbieter.","about.title":"Über","about.repo":"Repository auf GitHub öffnen","about.license":"MIT-Lizenz","translate.settingsTargetLang":"Übersetzen nach","general.language":"Oberflächensprache","translate.settingsCacheHours":"Übersetzungscache (Stunden)","translate.settingsCacheHint":"0 deaktiviert den Cache. Einträge laufen per TTL ab oder bei manueller Löschung.","translate.cacheMeterTitle":"Belegt","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} Einträge","translate.cacheMeterTtl":"TTL {hours} Std.","translate.cacheMeterDisabled":"Cache aus","translate.cacheMeterFree":"{free} frei","translate.cacheMeterAria":"Cache {used} von {limit} ({pct}), {count} Einträge","translate.cacheMeterHint":"Weiches Limit für GM-Speicher. Bei Überlauf werden die ältesten Einträge entfernt.","translate.settingsDisplayMode":"Anzeige der Übersetzung","translate.settingsDisplayModeHint":"Panel: Übersetzung unter dem Post. Ersetzen: Posttext tauschen und Original anzeigen anbieten.","translate.displayModePanel":"Separates Panel","translate.displayModeReplace":"Original ersetzen","translate.btnShowOriginal":"Original anzeigen","translate.settingsTranslateMode":"Übersetzungsmodus","translate.settingsTranslateModeHint":"Automatisch: übersetzen, sobald ein Post auch nur leicht sichtbar ist. Taste: nur nach Tippen auf Übersetzen.","translate.translateModeButton":"Per Schaltfläche","translate.translateModeAuto":"Automatisch (am Bildschirm)","translate.settingsAutoScope":"Bereich der Auto-Übersetzung","translate.settingsAutoScopeHint":"Alle sichtbaren Posts übersetzen oder nur ausgewählte Konten.","translate.autoScopeAll":"Alle Konten","translate.autoScopeAllowlist":"Nur ausgewählte Konten","translate.settingsAllowlistHint":"Konten kannst du auch im ⋮-Menü eines Posts hinzufügen oder entfernen.","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"Hinzufügen","translate.allowlistEmpty":"Noch keine Konten. Nickname oben eingeben.","translate.allowlistInvalid":"Gib einen gültigen X-Handle ein.","translate.allowlistAdded":"{handle} zur Auto-Übersetzung hinzugefügt","translate.allowlistRemoved":"{handle} aus der Auto-Übersetzung entfernt","translate.menuAddAutoAccount":"Dieses Konto automatisch übersetzen","translate.menuRemoveAutoAccount":"Aus Auto-Übersetzung entfernen","panel.save":"Speichern","panel.close":"Schließen","panel.search":"Einstellungen durchsuchen","panel.searchClear":"Suche löschen","panel.searchEmpty":"Nichts gefunden","translate.settingsClearCache":"Cache leeren","panel.saved":"Einstellungen gespeichert","translate.settingsCacheCleared":"Übersetzungscache geleert","toast.title.success":"Erfolg","toast.title.info":"Info","toast.title.warning":"Hinweis","toast.title.error":"Fehler","toast.dismiss":"Schließen","translate.langAuto":"Auto (wie UI / Browser)","general.languageAuto":"Auto (Browser)","translate.badgeLangAuto":"Auto","translate.originalLabel":"Original","translate.settingsReplaceReveal":"Details zum Ersetzen-Modus","translate.settingsReplaceRevealHint":"Nur Schaltfläche, Original beim Hover oder beides zusammen.","translate.replaceRevealButton":"Nur Schaltfläche","translate.replaceRevealHover":"Original beim Hover","translate.replaceRevealSplit":"Geteilte Ansicht (Original + Übersetzung)","translate.settingsAccountBlocklist":"Konto-Sperrliste","translate.settingsAccountBlocklistHint":"Keine Übersetzen-Schaltfläche und kein Auto-Übersetzen für diese Konten. Auch im Post-Menü.","translate.blocklistEmpty":"Keine gesperrten Konten.","translate.blocklistAdded":"{handle} gesperrt","translate.blocklistRemoved":"{handle} entsperrt","translate.menuBlockAccount":"Dieses Konto nie übersetzen","translate.menuUnblockAccount":"Übersetzung für dieses Konto erlauben","translate.settingsLangAllowlist":"Erlaubte Ausgangssprachen","translate.settingsLangAllowlistHint":"Wenn nicht leer, nur diese Sprachen übersetzen. Leer = alle.","translate.settingsLangBlocklist":"Gesperrte Ausgangssprachen","translate.settingsLangBlocklistHint":"Beiträge in diesen Sprachen überspringen.","translate.settingsSkipNative":"Von X bereits automatisch übersetzte Beiträge überspringen","translate.settingsSkipNativeHint":"Wenn X bereits seine Übersetzungsleiste zeigt (Original anzeigen), keine Übersetzen-Schaltfläche und keine Auto-Übersetzung.","translate.settingsHideErrors":"Übersetzungsfehler ausblenden","translate.settingsHideErrorsHint":"„Übersetzung fehlgeschlagen. Bitte erneut versuchen.“ nicht anzeigen; der Beitrag bleibt einfach unübersetzt.","translate.langListEmpty":"Keine Sprachen ausgewählt.","translate.langListAdd":"Hinzufügen","translate.langSkippedBlocked":"Übersprungen: Sprache gesperrt","translate.langSkippedNotAllowed":"Übersprungen: Sprache nicht erlaubt","general.sectionInterface":"Oberfläche","translate.settingsSectionTranslate":"Übersetzung","translate.settingsSectionAccounts":"Konten","translate.settingsSectionLanguages":"Sprachen","translate.settingsSectionProvider":"Anbieter","translate.settingsSectionCache":"Cache","translate.badgeCacheOff":"Aus","menu.settings":"X Plus — Einstellungen","nav.label":"X Plus","common.off":"Aus","panel.cancel":"Abbrechen","panel.confirm":"Bestätigen","panel.reset":"Zurücksetzen","panel.resetTitle":"Alle Einstellungen zurücksetzen?","panel.resetText":"Alle Optionen werden auf die Standardwerte zurückgesetzt. Erst mit „Speichern“ wird etwas übernommen.","list.add":"Hinzufügen","list.remove":"Entfernen","list.empty":"Noch nichts vorhanden.","list.invalid":"Gib einen gültigen Wert ein.","list.exists":"{item} ist bereits in der Liste","list.handlePlaceholder":"@benutzername","general.languageHint":"Sprache der Menüs und Meldungen von X Plus.","general.navButton":"Schaltfläche in der Seitenleiste","general.navButtonHint":"Zeigt in der linken Navigation von X einen Eintrag „X Plus“, der diese Einstellungen öffnet.","general.hotkey":"Tastenkürzel","general.hotkeyHint":"Strg + M öffnet die X-Plus-Einstellungen.","general.hotkeyReminder":"Hinweis zum Kürzel","general.hotkeyReminderHint":"Zeigt einen dezenten Hinweis unten links auf dem Bildschirm.","hotkey.hint":"X-Plus-Einstellungen","general.sectionToasts":"Benachrichtigungen","general.toasts":"Benachrichtigungen anzeigen","general.toastsHint":"Hinweise zu gespeicherten Einstellungen, Downloads und Fehlern.","general.toastPosition":"Position","general.toastPosition.top-right":"Oben rechts","general.toastPosition.top-left":"Oben links","general.toastPosition.bottom-right":"Unten rechts","general.toastPosition.bottom-left":"Unten links","general.toastDuration":"Anzeigedauer (Sekunden)","general.toastDurationHint":"0 lässt die Meldung stehen, bis du sie schließt.","about.description":"Userscript, das X (x.com) um Übersetzung, Medien-Download und viele Komfortfunktionen erweitert. Funktioniert mit Tampermonkey, Violentmonkey, ScriptCat und ähnlichen Managern.","backup.title":"Sicherung","backup.exportTitle":"Exportieren","backup.exportDesc":"Speichere deine aktuellen Einstellungen als JSON-Datei oder kopiere sie in die Zwischenablage.","backup.download":"Datei herunterladen","backup.copy":"JSON kopieren","backup.exported":"Einstellungen exportiert","backup.copied":"Einstellungen in die Zwischenablage kopiert","backup.copyFailed":"Kein Zugriff auf die Zwischenablage","backup.secretsHint":"Der Export enthält die API-Schlüssel der Übersetzungsdienste. Halte ihn privat.","backup.importTitle":"Importieren","backup.importDesc":"Füge eine Sicherung ein oder wähle eine Datei. Unbekannte oder ungültige Werte werden ignoriert. Der Import wirkt sofort.","backup.importPaste":"Eingefügtes JSON importieren","backup.importFile":"Datei wählen …","backup.imported":"Einstellungen importiert","backup.importFailed":"Das ist keine gültige X-Plus-Sicherung","translate.sectionMain":"Posts übersetzen","translate.enabled":"Übersetzung aktivieren","translate.enabledHint":"Fügt Posts und Antworten eine Übersetzen-Schaltfläche hinzu.","media.title":"Medien","media.sectionMain":"Medien-Download","media.sectionMainDesc":"Speichere Videos, GIFs und Fotos aus Posts.","media.enabled":"Download aktivieren","media.enabledHint":"Fügt Posts mit Medien Download-Schaltflächen hinzu.","media.sectionButtons":"Schaltflächen","media.showInActions":"Schaltfläche in der Aktionsleiste","media.showInActionsHint":"Neben „Teilen“. Lädt alle Medien des Posts herunter.","media.showOnMedia":"Schaltfläche über dem Medium","media.showOnMediaHint":"Eine kleine Schaltfläche beim Überfahren, die nur dieses Video oder Foto lädt.","media.videos":"Videos","media.gifs":"GIFs","media.images":"Fotos","media.sectionQuality":"Qualität","media.videoQuality":"Videoqualität","media.videoQualityHint":"Von X veröffentlichte MP4-Versionen. „Jedes Mal fragen“ lässt dich beim Download wählen.","media.quality.best":"Beste verfügbare","media.quality.ask":"Jedes Mal fragen","media.quality.1080":"Bis 1080p","media.quality.720":"Bis 720p","media.quality.480":"Bis 480p","media.quality.lowest":"Kleinste Datei","media.imageQuality":"Fotoqualität","media.imageQualityHint":"„Original“ ist die Datei wie hochgeladen; „Groß“ ist die 2048-px-Version von X.","media.image.orig":"Original","media.image.large":"Groß (2048 px)","media.onMultiple":"Posts mit mehreren Dateien","media.onMultipleHint":"Was passieren soll, wenn ein Post mehr als ein Video oder Foto enthält.","media.multiple.ask":"Auswahl anzeigen","media.multiple.all":"Alles herunterladen","media.sectionFiles":"Dateinamen","media.fileTemplate":"Namensvorlage","media.fileTemplateHint":"In Dateinamen unzulässige Zeichen werden automatisch ersetzt. Die Endung wird automatisch ergänzt.","media.fileTokens":"Platzhalter: {user} Handle des Autors · {id} Post-ID · {date} 2025-01-31 · {time} 235959 · {n} Dateinummer · {quality} 720p / orig · {type} video / gif / photo · {text} Textanfang des Posts","media.sectionFeed":"Timeline","media.feedImageQuality":"Fotos in der Timeline","media.feedImageQualityHint":"Lädt beim Surfen eine größere Version der Fotos. Verbraucht mehr Daten.","media.feed.default":"X-Standard","media.feed.large":"Groß","media.feed.orig":"Original","media.sectionViewer":"Fotobetrachter","media.sectionViewerDesc":"Beitragsfotos in einer schnellen Galerie öffnen und Fotos in der Vollbildansicht zoomen und verschieben.","media.photoZoom":"Fotos zoomen und verschieben","media.photoZoomHint":"Mausrad zoomt zum Cursor, Ziehen verschiebt das Foto, Doppelklick wechselt den Zoom, auch + / - / 0 funktionieren. Auf Touchscreens: Pinch und Ziehen.","media.photoGrid":"Raster hinter Fotos","media.photoGridHint":"Zeichnet ein Rastermuster hinter das Foto, damit transparente oder dunkle Bilder sichtbar bleiben.","media.zoomOut":"Verkleinern","media.zoomIn":"Vergrößern","media.zoomReset":"Zoom zurücksetzen","media.photoGallery":"Fotos in der X-Plus-Galerie öffnen","media.photoGalleryHint":"Ein Klick auf ein Beitragsfoto öffnet eine schlanke Galerie statt der Foto-Seite von X: Antworten und Timeline werden nicht geladen. Alle Fotos des Beitrags mit ← / →, Zoom mit dem Mausrad, Download oder Original öffnen. Strg/Cmd/Umschalt-Klick öffnet weiterhin den Viewer von X.","media.gallery":"Fotogalerie","media.galleryClose":"Schließen (Esc)","media.galleryPrev":"Vorheriges Foto (←)","media.galleryNext":"Nächstes Foto (→)","media.galleryDownload":"Dieses Foto herunterladen","media.galleryOpenOriginal":"Original in neuem Tab öffnen","media.galleryActualSize":"Originalgröße / einpassen","media.galleryPhoto":"Foto {n}","media.download":"Medien herunterladen","media.downloadAll":"Alles herunterladen","media.downloading":"Wird heruntergeladen …","media.saved":"Gespeichert","media.savedText":"{count} Datei(en) · {size}","media.partial":"Teilweise gespeichert","media.partialText":"{saved} gespeichert, {failed} fehlgeschlagen","media.failed":"Download fehlgeschlagen. Versuche es erneut.","media.noId":"Die ID dieses Posts wurde nicht gefunden","media.noMedia":"In diesem Post gibt es keine herunterladbaren Medien","media.noVariants":"Dieses Video hat keine herunterladbare MP4-Version (nur Stream)","media.needLogin":"Medien konnten nicht geladen werden. Melde dich bei X an und versuche es erneut.","media.resolveFailed":"Die Medien dieses Posts konnten nicht geladen werden","media.item.video":"Video","media.item.gif":"GIF","media.item.photo":"Foto {n}","media.item.photoSingle":"Foto","media.item.quoted":"Zitierter Post · {label}","interface.title":"Oberfläche","interface.sectionMain":"Aufräumen","interface.sectionMainDesc":"Blende Teile von X aus, die du nicht nutzt. Änderungen gelten nach dem Speichern.","interface.enabled":"Aufräumen aktivieren","interface.contentWidth":"Inhaltsbreite","interface.contentWidthHint":"Breite der mittleren Spalte mit Beiträgen in Pixeln. 0 behält die Standardbreite von X bei.","interface.width.default":"Standard","interface.width.narrow":"Schmal","interface.width.wide":"Breit","interface.width.wider":"Breiter","interface.width.full":"Volle Breite","interface.menuLeft":"Menü am linken Bildschirmrand","interface.menuLeftHint":"Verschiebt das Navigationsmenü an den linken Bildschirmrand statt neben den Feed.","interface.menuCenter":"Menü vertikal zentrieren","interface.menuCenterHint":"Richtet alle Einträge des linken Menüs an der vertikalen Bildschirmmitte aus.","interface.menuHide":"Linkes Menü ausblenden","interface.menuHideHint":"Entfernt das gesamte linke Menü. Die X-Plus-Einstellungen bleiben über das Menü des Userscript-Managers erreichbar.","interface.feedTabsStatic":"Feed-Tabs nicht fixieren","interface.feedTabsStaticHint":"Die Tabs „Für dich“ / „Folge ich“ scrollen mit der Seite, statt oben zu schweben.","interface.sidebarRight":"Rechte Spalte am Bildschirmrand","interface.sidebarRightHint":"Verschiebt Suche, Trends und Vorschläge an den rechten Bildschirmrand und hält sie beim Scrollen fest.","interface.sidebarHide":"Rechte Spalte ausblenden","interface.sidebarHideHint":"Entfernt die gesamte rechte Spalte (Suche, Trends, Vorschläge). Die einzelnen Schalter werden dann nicht gebraucht.","interface.centerContent":"Feed mittig auf dem Bildschirm","interface.centerContentHint":"Platziert den Feed genau in der Bildschirmmitte. Menü und rechte Spalte werden an die Ränder gepinnt.","interface.rule.posts.composer":"Beitragsfeld","interface.rule.posts.handles":"@Handle in Beiträgen","interface.rule.posts.handlesHint":"Blendet den @Benutzernamen neben dem Namen im Beitragskopf aus (und den Punkt vor der Uhrzeit).","interface.rule.posts.translateNotice":"Hinweis „Ausgangssprache“","interface.rule.posts.translateNoticeHint":"Blendet die Zeile „Ausgangssprache: … Original anzeigen“ aus, die X unter übersetzten Beiträgen einfügt. Die Übersetzung von X Plus bleibt unberührt.","interface.rule.posts.articles":"Artikel","interface.rule.posts.articlesHint":"Blendet die X-Artikelkarte (Titelbild, Titel und Anriss) unter einem Beitrag aus.","interface.rule.posts.linkCards":"Link-Vorschauen","interface.rule.posts.linkCardsHint":"Blendet die Vorschaukarte unter einem Link aus (Bild, Titel und „Von Seite“). Der Link im Text bleibt.","interface.rule.posts.images":"Bilder in Beiträgen","interface.rule.posts.imagesHint":"Blendet Fotos in Beiträgen aus. Videos und GIFs bleiben.","interface.rule.posts.videos":"Videos in Beiträgen","interface.rule.posts.videosHint":"Blendet Videos und GIFs in Beiträgen aus. Fotos bleiben.","interface.rule.posts.quotedPosts":"Zitierte Beiträge","interface.rule.posts.quotedPostsHint":"Blendet den in einen anderen Beitrag eingebetteten Beitrag (Zitat) aus.","interface.rule.posts.actionBar":"Aktionsleiste unter Beiträgen","interface.rule.posts.actionBarHint":"Entfernt die Zeile mit Antworten, Reposten, Liken und Teilen. Der X-Plus-Download-Button in dieser Zeile verschwindet ebenfalls; der Button über den Medien bleibt.","interface.postView.hideAvatars":"Avatare in Beiträgen","interface.postView.hideAvatarsHint":"Blendet Profilbilder neben Beiträgen samt dem frei werdenden Platz aus.","interface.rule.posts.moreFromX":"„Mehr entdecken“ unter einem Beitrag","interface.rule.posts.moreFromXHint":"Blendet auf der Seite eines Beitrags die Überschrift „Mehr entdecken“ und die empfohlenen Beiträge unter den Antworten aus.","interface.rule.posts.feedTabs":"Feed-Tabs","interface.rule.posts.newPostsPill":"Button „Neue Beiträge“","interface.rule.posts.showPosts":"Zeile „N Beiträge anzeigen“","interface.rule.posts.promoted":"Werbe-Posts","interface.rule.posts.viewCounts":"Aufrufzähler","interface.rule.posts.verifiedBadges":"Verifizierungs-Badges","interface.rule.posts.grokButton":"Grok-Schaltfläche an Posts","interface.rule.sidebar.search":"Suchfeld","interface.rule.sidebar.whoToFollow":"Wem folgen","interface.rule.sidebar.trends":"Trends","interface.rule.sidebar.premium":"Premium-Angebote","interface.rule.sidebar.footer":"Fußzeilen-Links","interface.rule.chrome.grokDrawer":"Grok-Panel","interface.rule.chrome.chatDrawer":"Chat-Panel","interface.rule.nav.logo":"Website-Logo","interface.rule.nav.home":"Startseite","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"Entdecken","interface.rule.nav.chat":"Chat","interface.rule.nav.calls":"Anrufe","interface.rule.nav.history":"Verlauf","interface.rule.nav.creatorStudio":"Creator Studio","interface.rule.nav.followerRequests":"Follower-Anfragen","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"Benachrichtigungen","interface.rule.nav.profile":"Profil","interface.rule.nav.more":"Mehr","interface.rule.nav.post":"Posten-Button","interface.rule.nav.account":"Kontomenü","interface.peekHint":"Fahre über eine Einstellung, um sie auf der Seite hinter diesem Fenster zu sehen.","interface.sectionFeed":"Feed","interface.sectionFeedDesc":"Die mittlere Spalte mit den Beiträgen.","interface.sectionNav":"Linkes Menü","interface.sectionNavDesc":"Navigation mit Startseite, Entdecken, Profil und weiteren Links.","interface.sectionSide":"Rechte Spalte","interface.sectionSideDesc":"Suche, Trends und Vorschläge.","interface.sectionDrawers":"Schwebende Panels","interface.sectionDrawersDesc":"Am unteren rechten Bildschirmrand angeheftete Panels.","interface.sub.layout":"Layout","interface.sub.hide":"Ausblenden","interface.enabledHint":"Hauptschalter für alle „Ausblenden“-Optionen unten. Layout-Optionen sind nicht betroffen.","interface.rule.posts.composerHint":"Blendet das Feld „Was gibt’s Neues?“ über der Timeline aus. Der Posten-Dialog funktioniert weiter.","interface.rule.posts.feedTabsHint":"Blendet die Tabs „Für dich“ / „Folge ich“ über der Timeline aus.","interface.rule.posts.newPostsPillHint":"Entfernt den schwebenden Button „Neue Beiträge anzeigen“ über der Timeline.","interface.rule.posts.showPostsHint":"Entfernt die Zeile „35 Beiträge anzeigen“ am Anfang der Timeline. Eine Lücke gleicher Höhe kann bleiben.","interface.rule.posts.promotedHint":"Blendet Werbung in der Timeline aus.","interface.rule.posts.viewCountsHint":"Entfernt den Aufrufzähler unter jedem Beitrag.","interface.rule.posts.verifiedBadgesHint":"Entfernt das blaue Häkchen und andere Verifizierungsabzeichen neben Namen.","interface.rule.posts.grokButtonHint":"Entfernt das Grok-Symbol oben rechts an Beiträgen.","interface.rule.sidebar.searchHint":"Entfernt das Suchfeld oben in der rechten Spalte.","interface.rule.sidebar.whoToFollowHint":"Entfernt den Block mit Kontovorschlägen.","interface.rule.sidebar.trendsHint":"Entfernt den Trend-Block „Was gerade passiert“.","interface.rule.sidebar.premiumHint":"Entfernt das Premium-Abo-Angebot.","interface.rule.sidebar.footerHint":"Entfernt die Links zu Nutzungsbedingungen, Datenschutz u. a. am unteren Rand.","interface.rule.chrome.grokDrawerHint":"Entfernt das schwebende Grok-Panel.","interface.rule.chrome.chatDrawerHint":"Entfernt das schwebende Chat-Panel.","interface.sectionPosts":"Beitrag","interface.sectionPostsDesc":"Wie ein einzelner Beitrag aussieht und was er zeigt. Fahre über eine Einstellung, um sie live zu sehen.","interface.sub.cards":"Karten","interface.sub.spacing":"Abstände","interface.sub.look":"Text und Avatare","interface.postView.none":"Keine","interface.postView.cards":"Beiträge als Karten","interface.postView.cardsHint":"Zeigt jeden Beitrag als eigene Karte. Den Abstand zwischen den Karten stellst du mit dem Regler unten ein.","interface.postView.cardStyle":"Kartenstil","interface.postView.cardStyleHint":"Rahmen, sanfter Hintergrund oder Schatten.","interface.postView.cardStyle.outline":"Rahmen","interface.postView.cardStyle.filled":"Gefüllt","interface.postView.cardStyle.shadow":"Schatten","interface.postView.cardRadius":"Eckenradius","interface.postView.cardRadiusHint":"Wie stark die Ecken einer Karte abgerundet sind.","interface.postView.cardOpacity":"Hintergrund-Deckkraft","interface.postView.cardOpacityHint":"Wie deckend die Kartenfüllung ist. Niedrigere Werte lassen den Seitenhintergrund durchscheinen.","interface.postView.gap":"Abstand zwischen Beiträgen","interface.postView.gapHint":"Leerer Raum unter jedem Beitrag in Pixeln.","interface.postView.padding":"Innenabstand","interface.postView.paddingHint":"Zusätzlicher Platz innerhalb jedes Beitrags in Pixeln.","interface.postView.hideDividers":"Trennlinien zwischen Beiträgen ausblenden","interface.postView.hideDividersHint":"Entfernt die dünnen Linien zwischen den Beiträgen.","interface.postView.hideFeedBorder":"Feed-Rahmen ausblenden","interface.postView.hideFeedBorderHint":"Entfernt die senkrechten Linien an beiden Seiten der Feed-Spalte.","interface.postView.textScale":"Textgröße","interface.postView.textScaleHint":"Skaliert den Text der Beiträge. 100 % behält die Standardgröße.","interface.postView.avatarShape":"Avatarform","interface.postView.avatarShapeHint":"Form der Profilbilder im Feed.","interface.postView.avatarShape.default":"Standard (Kreis)","interface.postView.avatarShape.rounded":"Abgerundetes Quadrat","interface.postView.avatarShape.square":"Quadrat","peek.missing":"Auf dieser Seite gibt es gerade nichts zu zeigen","translate.articles":"Artikel übersetzen","translate.articlesHint":"Fügt X-Artikeln eine Übersetzen-Schaltfläche hinzu und übersetzt sie Absatz für Absatz.","translate.articleProgress":"Übersetze … {done}/{total}","translate.articleSame":"Der Artikel ist bereits in deiner Sprache","shorts.title":"Shorts","shorts.sectionMain":"Shorts-Modus","shorts.sectionMainDesc":"Den Feed Beitrag für Beitrag durchblättern, wie bei YouTube Shorts.","shorts.enabled":"Feed Beitrag für Beitrag durchblättern","shorts.enabledHint":"Mausrad und Pfeiltasten springen zum nächsten oder vorherigen Beitrag und zentrieren ihn. Der aktuelle Beitrag wird etwas größer, die Beiträge daneben werden unscharf. Funktioniert in Feeds (Startseite, Profile, Suche, Listen), nicht auf der Beitragsseite. Auch als Schalter unten links verfügbar.","shorts.keys":"Tastaturnavigation","shorts.keysHint":"↑ / ↓, J / K und die Leertaste wechseln zum vorherigen / nächsten Beitrag (Umschalt + Leertaste geht zurück).","shorts.sectionLook":"Darstellung","shorts.scale":"Größe des aktuellen Beitrags","shorts.scaleHint":"Wie stark der mittlere Beitrag vergrößert wird (100 % = gar nicht).","shorts.blur":"Unschärfe der anderen Beiträge","shorts.blurHint":"0 schaltet die Unschärfe aus.","shorts.dockLabel":"Shorts","shorts.dockTitle":"Shorts-Modus: ein Beitrag nach dem anderen","shorts.buttons":"Schaltflächen „Zurück“ / „Weiter“","shorts.buttonsHint":"Zwei runde Schaltflächen neben dem aktuellen Beitrag, für die Maus.","shorts.prev":"Vorheriger Beitrag","shorts.next":"Nächster Beitrag","shorts.speed":"Übergangsgeschwindigkeit","shorts.speedHint":"Wie lange der Sprung zum nächsten Beitrag und der Vergrößerungs- / Unschärfeeffekt dauern.","shorts.speed.slow":"Langsam","shorts.speed.normal":"Normal","shorts.speed.fast":"Schnell","shorts.speed.instant":"Sofort","shorts.sectionAuto":"Automatisches Scrollen","shorts.sectionAutoDesc":"Springt nach einer Wartezeit von selbst zum nächsten Beitrag. Pause und Start über die Schaltfläche unter den Pfeilen.","shorts.autoplay":"Automatisches Scrollen","shorts.autoplayHint":"Schaltet den automatischen Wechsel zum nächsten Beitrag ein oder aus.","shorts.autoDelay":"Zeit pro Beitrag","shorts.autoDelayHint":"Sekunden bis zum Sprung zum nächsten Beitrag.","shorts.autoWaitVideo":"Videos zu Ende laufen lassen","shorts.autoWaitVideoHint":"Ein Beitrag mit Video bleibt, bis das Video endet, wenn es länger als die Zeit oben ist.","shorts.autoHover":"Über den Schaltflächen pausieren","shorts.autoHoverHint":"Der Countdown wartet, solange der Zeiger auf den Pfeiltasten liegt.","shorts.autoStyle":"Fortschrittsanzeige","shorts.autoStyleHint":"Automatisch: ein Ring um die Schaltfläche „Weiter“ oder ein Balken über dem Beitrag, wenn die Schaltflächen ausgeblendet sind.","shorts.autoStyle.auto":"Automatisch","shorts.autoStyle.ring":"Ring auf der Schaltfläche","shorts.autoStyle.bar":"Balken über dem Beitrag","shorts.autoStyle.both":"Ring und Balken","shorts.autoStyle.none":"Keine","shorts.autoPause":"Automatisches Scrollen pausieren","shorts.autoPlay":"Automatisches Scrollen starten","shorts.autoKey":"Taste für Pause / Fortsetzen","shorts.autoKeyHint":"Auf das Feld klicken und eine Taste drücken; Rücktaste löscht sie. Die Taste wirkt, solange das automatische Scrollen an ist.","shorts.autoResume":"Automatisches Scrollen fortsetzen","common.keyPress":"Taste drücken …","common.keyNone":"Nicht festgelegt","common.keyReserved":"{key} wird im Shorts-Modus bereits verwendet","shorts.prevOpacity":"Deckkraft des vorherigen Beitrags","shorts.nextOpacity":"Deckkraft des nächsten Beitrags","shorts.opacityHint":"0 blendet den Beitrag aus, 100 zeigt ihn vollständig; die Unschärfe wird separat eingestellt.","shorts.translateOnlyCurrent":"Nur den aktuellen Beitrag übersetzen","shorts.translateOnlyCurrentHint":"Die automatische Übersetzung läuft nur für den Beitrag in der Mitte, nachdem er einen Moment dort geblieben ist – vorbeigescrollte Beiträge kosten keine API-Anfragen. Die Schaltfläche „Übersetzen“ funktioniert weiterhin bei jedem Beitrag.","shorts.translateNext":"Nächsten Beitrag vorab übersetzen","shorts.translateNextHint":"Während du den aktuellen Beitrag liest, wird der nächste im Hintergrund übersetzt (eine weitere API-Anfrage), sein Text wird aber erst ersetzt, wenn du bei ihm ankommst."},fr:{"translate.btnTranslate":"Traduire","translate.btnHide":"Masquer la traduction","translate.btnRetry":"Réessayer","translate.translating":"Traduction…","translate.translationLabel":"Traduction","translate.detectedLang":"Détecté : {lang}","translate.errNetwork":"Échec de la traduction. Réessayez.","general.title":"Général","translate.sectionTranslation":"Traduction","translate.sectionCache":"Cache","translate.settingsProvider":"Fournisseur de traduction","translate.settingsProviderHint":"Les identifiants sont stockés uniquement dans le stockage userscript de cet appareil.","translate.providerFieldApiKey":"Clé API","translate.providerFieldApiKeyOptional":"Clé API (facultatif)","translate.providerFieldDeeplPlan":"Offre DeepL","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"Région","translate.providerFieldModel":"Modèle","translate.providerFieldBaseUrl":"URL de base de l’API","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"URL de l’API","translate.providerHintGoogle":"Endpoint public Google Translate. Aucune clé requise.","translate.providerHintDeepl":"DeepL API Free ou Pro. Créez une clé sur deepl.com/pro-api.","translate.providerHintDeeplKey":"Les clés Free se terminent souvent par :fx","translate.providerHintMicrosoft":"Clé de ressource Azure Translator dans le portail Azure.","translate.providerHintMicrosoftRegion":"Région de la ressource, ou global pour les clés multi-service.","translate.providerHintOpenai":"API Chat Completions. Les endpoints compatibles fonctionnent aussi.","translate.providerHintOpenaiBase":"Par défaut https://api.openai.com/v1 — changez pour un proxy.","translate.providerHintYandex":"Clé API Yandex Cloud Translate + folder ID.","translate.providerHintYandexFolder":"Depuis la console Yandex Cloud.","translate.providerHintLibre":"Instance LibreTranslate auto-hébergée ou publique.","translate.errProviderConfig":"Fournisseur non configuré. Ouvrez Translator → Fournisseurs.","about.title":"À propos","about.repo":"Ouvrir le dépôt sur GitHub","about.license":"Licence MIT","translate.settingsTargetLang":"Traduire en","general.language":"Langue de l’interface","translate.settingsCacheHours":"Cache des traductions (heures)","translate.settingsCacheHint":"0 désactive le cache. Les entrées expirent selon le TTL ou lors d’un vidage manuel.","translate.cacheMeterTitle":"Occupation","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} entrées","translate.cacheMeterTtl":"TTL {hours} h","translate.cacheMeterDisabled":"Cache off","translate.cacheMeterFree":"{free} libres","translate.cacheMeterAria":"Cache {used} sur {limit} ({pct}), {count} entrées","translate.cacheMeterHint":"Limite souple du stockage GM. En cas de dépassement, les entrées les plus anciennes sont évincées.","translate.settingsDisplayMode":"Affichage de la traduction","translate.settingsDisplayModeHint":"Panneau : traduction sous le post. Remplacer : échanger le texte et proposer Afficher l’original.","translate.displayModePanel":"Panneau séparé","translate.displayModeReplace":"Remplacer l’original","translate.btnShowOriginal":"Afficher l’original","translate.settingsTranslateMode":"Mode de traduction","translate.settingsTranslateModeHint":"Automatique : traduit dès qu’un post est un peu visible à l’écran. Bouton : seulement après Traduire.","translate.translateModeButton":"Au clic sur le bouton","translate.translateModeAuto":"Automatique (à l’écran)","translate.settingsAutoScope":"Portée de la traduction auto","translate.settingsAutoScopeHint":"Traduire tous les posts visibles, ou seulement les comptes choisis.","translate.autoScopeAll":"Tous les comptes","translate.autoScopeAllowlist":"Comptes sélectionnés uniquement","translate.settingsAllowlistHint":"Vous pouvez aussi ajouter ou retirer un compte via le menu ⋮ du post.","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"Ajouter","translate.allowlistEmpty":"Aucun compte. Saisissez un nickname ci-dessus.","translate.allowlistInvalid":"Saisissez un handle X valide.","translate.allowlistAdded":"{handle} ajouté à la traduction auto","translate.allowlistRemoved":"{handle} retiré de la traduction auto","translate.menuAddAutoAccount":"Traduire auto ce compte","translate.menuRemoveAutoAccount":"Retirer de la traduction auto","panel.save":"Enregistrer","panel.close":"Fermer","panel.search":"Rechercher dans les réglages","panel.searchClear":"Effacer la recherche","panel.searchEmpty":"Aucun résultat","translate.settingsClearCache":"Vider le cache","panel.saved":"Paramètres enregistrés","translate.settingsCacheCleared":"Cache des traductions vidé","toast.title.success":"Succès","toast.title.info":"Info","toast.title.warning":"Attention","toast.title.error":"Erreur","toast.dismiss":"Fermer","translate.langAuto":"Auto (comme l’UI / le navigateur)","general.languageAuto":"Auto (navigateur)","translate.badgeLangAuto":"Auto","translate.originalLabel":"Original","translate.settingsReplaceReveal":"Détails du mode remplacement","translate.settingsReplaceRevealHint":"Bouton seul, original au survol, ou les deux ensemble.","translate.replaceRevealButton":"Bouton seul","translate.replaceRevealHover":"Original au survol","translate.replaceRevealSplit":"Vue partagée (original + traduction)","translate.settingsAccountBlocklist":"Liste de blocage des comptes","translate.settingsAccountBlocklistHint":"Ne pas afficher Traduire ni auto-traduire ces comptes. Aussi via le menu du post.","translate.blocklistEmpty":"Aucun compte bloqué.","translate.blocklistAdded":"{handle} bloqué","translate.blocklistRemoved":"{handle} débloqué","translate.menuBlockAccount":"Ne jamais traduire ce compte","translate.menuUnblockAccount":"Autoriser la traduction de ce compte","translate.settingsLangAllowlist":"Langues source autorisées","translate.settingsLangAllowlistHint":"Si non vide, seules ces langues sont traduites. Vide = toutes.","translate.settingsLangBlocklist":"Langues source bloquées","translate.settingsLangBlocklistHint":"Ignorer les posts dans ces langues.","translate.settingsSkipNative":"Ignorer les posts déjà auto-traduits par X","translate.settingsSkipNativeHint":"Si X affiche déjà sa barre de traduction (Afficher l’original), ne pas ajouter Traduire ni auto-traduire.","translate.settingsHideErrors":"Masquer les erreurs de traduction","translate.settingsHideErrorsHint":"Ne pas afficher « Échec de la traduction. Réessayez. » ; le post reste simplement non traduit.","translate.langListEmpty":"Aucune langue sélectionnée.","translate.langListAdd":"Ajouter","translate.langSkippedBlocked":"Ignoré : langue bloquée","translate.langSkippedNotAllowed":"Ignoré : langue non autorisée","general.sectionInterface":"Interface","translate.settingsSectionTranslate":"Traduction","translate.settingsSectionAccounts":"Comptes","translate.settingsSectionLanguages":"Langues","translate.settingsSectionProvider":"Fournisseur","translate.settingsSectionCache":"Cache","translate.badgeCacheOff":"Off","menu.settings":"X Plus — Paramètres","nav.label":"X Plus","common.off":"Désactivé","panel.cancel":"Annuler","panel.confirm":"Confirmer","panel.reset":"Réinitialiser","panel.resetTitle":"Réinitialiser tous les paramètres ?","panel.resetText":"Toutes les options reviennent à leur valeur par défaut. Rien ne change tant que vous n’avez pas cliqué sur Enregistrer.","list.add":"Ajouter","list.remove":"Retirer","list.empty":"Rien pour le moment.","list.invalid":"Saisissez une valeur valide.","list.exists":"{item} est déjà dans la liste","list.handlePlaceholder":"@utilisateur","general.languageHint":"Langue des menus et des messages de X Plus.","general.navButton":"Bouton dans le menu latéral","general.navButtonHint":"Affiche une entrée « X Plus » dans le menu de gauche de X qui ouvre ces paramètres.","general.hotkey":"Raccourci clavier","general.hotkeyHint":"Ctrl + M ouvre les réglages de X Plus.","general.hotkeyReminder":"Rappel du raccourci","general.hotkeyReminderHint":"Affiche un rappel discret en bas à gauche de l’écran.","hotkey.hint":"réglages de X Plus","general.sectionToasts":"Notifications","general.toasts":"Afficher les notifications","general.toastsHint":"Messages pour les paramètres enregistrés, les téléchargements et les erreurs.","general.toastPosition":"Position","general.toastPosition.top-right":"En haut à droite","general.toastPosition.top-left":"En haut à gauche","general.toastPosition.bottom-right":"En bas à droite","general.toastPosition.bottom-left":"En bas à gauche","general.toastDuration":"Durée d’affichage (secondes)","general.toastDurationHint":"0 garde la notification jusqu’à sa fermeture.","about.description":"Userscript qui ajoute à X (x.com) la traduction, le téléchargement de médias et de nombreuses améliorations. Compatible avec Tampermonkey, Violentmonkey, ScriptCat et gestionnaires similaires.","backup.title":"Sauvegarde","backup.exportTitle":"Exporter","backup.exportDesc":"Enregistrez vos paramètres actuels dans un fichier JSON ou copiez-les dans le presse-papiers.","backup.download":"Télécharger le fichier","backup.copy":"Copier le JSON","backup.exported":"Paramètres exportés","backup.copied":"Paramètres copiés dans le presse-papiers","backup.copyFailed":"Impossible d’accéder au presse-papiers","backup.secretsHint":"L’export contient les clés API des services de traduction. Gardez-le privé.","backup.importTitle":"Importer","backup.importDesc":"Collez une sauvegarde ou choisissez un fichier. Les valeurs inconnues ou invalides sont ignorées. L’import s’applique immédiatement.","backup.importPaste":"Importer le JSON collé","backup.importFile":"Choisir un fichier…","backup.imported":"Paramètres importés","backup.importFailed":"Ce n’est pas une sauvegarde X Plus valide","translate.sectionMain":"Traduire les posts","translate.enabled":"Activer la traduction","translate.enabledHint":"Ajoute un bouton Traduire aux posts et aux réponses.","media.title":"Médias","media.sectionMain":"Téléchargement de médias","media.sectionMainDesc":"Enregistrez les vidéos, GIF et photos des posts.","media.enabled":"Activer le téléchargement","media.enabledHint":"Ajoute des boutons de téléchargement aux posts contenant des médias.","media.sectionButtons":"Boutons","media.showInActions":"Bouton dans la barre d’actions","media.showInActionsHint":"À côté de Partager. Télécharge tous les médias du post.","media.showOnMedia":"Bouton sur le média","media.showOnMediaHint":"Un petit bouton au survol qui télécharge uniquement cette vidéo ou photo.","media.videos":"Vidéos","media.gifs":"GIF","media.images":"Photos","media.sectionQuality":"Qualité","media.videoQuality":"Qualité de la vidéo","media.videoQualityHint":"Versions MP4 publiées par X. « Toujours demander » permet de choisir à chaque téléchargement.","media.quality.best":"La meilleure disponible","media.quality.ask":"Toujours demander","media.quality.1080":"Jusqu’à 1080p","media.quality.720":"Jusqu’à 720p","media.quality.480":"Jusqu’à 480p","media.quality.lowest":"Fichier le plus léger","media.imageQuality":"Qualité des photos","media.imageQualityHint":"« Original » est le fichier tel que publié ; « Grande » est la version 2048 px de X.","media.image.orig":"Original","media.image.large":"Grande (2048 px)","media.onMultiple":"Posts avec plusieurs fichiers","media.onMultipleHint":"Que faire lorsqu’un post contient plusieurs vidéos ou photos.","media.multiple.ask":"Me laisser choisir","media.multiple.all":"Tout télécharger","media.sectionFiles":"Noms de fichiers","media.fileTemplate":"Modèle de nom","media.fileTemplateHint":"Les caractères interdits dans les noms de fichiers sont remplacés automatiquement. L’extension est ajoutée pour vous.","media.fileTokens":"Variables : {user} identifiant de l’auteur · {id} id du post · {date} 2025-01-31 · {time} 235959 · {n} numéro de fichier · {quality} 720p / orig · {type} video / gif / photo · {text} début du texte","media.sectionFeed":"Fil d’actualité","media.feedImageQuality":"Photos dans le fil","media.feedImageQualityHint":"Charge une version plus grande des photos pendant la navigation. Consomme plus de données.","media.feed.default":"Par défaut (X)","media.feed.large":"Grande","media.feed.orig":"Original","media.sectionViewer":"Visionneuse de photos","media.sectionViewerDesc":"Ouvrez les photos des posts dans une galerie rapide, puis zoomez et déplacez-les en plein écran.","media.photoZoom":"Zoom et déplacement des photos","media.photoZoomHint":"La molette zoome vers le curseur, le glisser déplace la photo, le double clic bascule le zoom ; + / - / 0 fonctionnent aussi. Sur écran tactile : pincer et glisser.","media.photoGrid":"Grille derrière les photos","media.photoGridHint":"Dessine une grille derrière la photo pour mieux voir les images transparentes ou sombres.","media.zoomOut":"Dézoomer","media.zoomIn":"Zoomer","media.zoomReset":"Réinitialiser le zoom","media.photoGallery":"Ouvrir les photos dans la galerie X Plus","media.photoGalleryHint":"Un clic sur la photo d’un post ouvre une galerie légère au lieu de la page photo de X : ni réponses ni fil ne sont chargés. Parcourez toutes les photos avec ← / →, zoomez à la molette, téléchargez ou ouvrez l’original. Ctrl/Cmd/Maj + clic ouvre toujours la visionneuse de X.","media.gallery":"Galerie photo","media.galleryClose":"Fermer (Échap)","media.galleryPrev":"Photo précédente (←)","media.galleryNext":"Photo suivante (→)","media.galleryDownload":"Télécharger cette photo","media.galleryOpenOriginal":"Ouvrir l’original dans un nouvel onglet","media.galleryActualSize":"Taille réelle / ajuster","media.galleryPhoto":"Photo {n}","media.download":"Télécharger les médias","media.downloadAll":"Tout télécharger","media.downloading":"Téléchargement…","media.saved":"Enregistré","media.savedText":"{count} fichier(s) · {size}","media.partial":"Enregistré en partie","media.partialText":"{saved} enregistré(s), {failed} en échec","media.failed":"Échec du téléchargement. Réessayez.","media.noId":"Impossible de trouver l’id de ce post","media.noMedia":"Ce post ne contient aucun média téléchargeable","media.noVariants":"Cette vidéo n’a pas de version MP4 téléchargeable (diffusion seule)","media.needLogin":"Impossible de charger le média. Connectez-vous à X et réessayez.","media.resolveFailed":"Impossible d’obtenir les médias de ce post","media.item.video":"Vidéo","media.item.gif":"GIF","media.item.photo":"Photo {n}","media.item.photoSingle":"Photo","media.item.quoted":"Post cité · {label}","interface.title":"Interface","interface.sectionMain":"Nettoyage","interface.sectionMainDesc":"Masquez les parties de X que vous n’utilisez pas. Les changements s’appliquent à l’enregistrement.","interface.enabled":"Activer le nettoyage","interface.contentWidth":"Largeur du contenu","interface.contentWidthHint":"Largeur de la colonne centrale avec les posts, en pixels. 0 conserve la largeur par défaut de X.","interface.width.default":"Par défaut","interface.width.narrow":"Étroit","interface.width.wide":"Large","interface.width.wider":"Plus large","interface.width.full":"Pleine largeur","interface.menuLeft":"Menu au bord gauche","interface.menuLeftHint":"Place le menu de navigation au bord gauche de l’écran au lieu de le coller au fil.","interface.menuCenter":"Centrer le menu verticalement","interface.menuCenterHint":"Aligne tous les éléments du menu de gauche sur le centre vertical de l’écran.","interface.menuHide":"Masquer le menu de gauche","interface.menuHideHint":"Retire tout le menu de gauche. Les réglages de X Plus restent accessibles depuis le menu du gestionnaire de scripts.","interface.feedTabsStatic":"Ne pas épingler les onglets","interface.feedTabsStaticHint":"Les onglets « Pour vous » / « Abonnements » défilent avec la page au lieu de flotter en haut.","interface.sidebarRight":"Colonne droite au bord","interface.sidebarRightHint":"Place la recherche, les tendances et les suggestions au bord droit de l’écran et les fixe pendant le défilement.","interface.sidebarHide":"Masquer la colonne de droite","interface.sidebarHideHint":"Retire toute la colonne de droite (recherche, tendances, suggestions). Les interrupteurs de chaque bloc deviennent inutiles.","interface.centerContent":"Centrer le fil sur l’écran","interface.centerContentHint":"Place le fil exactement au milieu de l’écran. Le menu et la colonne droite sont fixés aux bords.","interface.rule.posts.composer":"Zone de publication","interface.rule.posts.handles":"@identifiant dans les publications","interface.rule.posts.handlesHint":"Masque l’@identifiant à côté du nom dans l’en-tête de la publication (et le point avant l’heure).","interface.rule.posts.translateNotice":"Mention « Langue d’origine »","interface.rule.posts.translateNoticeHint":"Masque la ligne « Langue d’origine : … Afficher l’original » que X ajoute sous les publications traduites. La traduction de X Plus n’est pas affectée.","interface.rule.posts.articles":"Articles","interface.rule.posts.articlesHint":"Masque la carte d’article X (couverture, titre et résumé) sous une publication.","interface.rule.posts.linkCards":"Aperçus de liens","interface.rule.posts.linkCardsHint":"Masque la carte d’aperçu sous un lien (image, titre et mention « De site »). Le lien dans le texte reste.","interface.rule.posts.images":"Images dans les publications","interface.rule.posts.imagesHint":"Masque les photos des publications. Les vidéos et GIF restent.","interface.rule.posts.videos":"Vidéos dans les publications","interface.rule.posts.videosHint":"Masque les vidéos et GIF des publications. Les photos restent.","interface.rule.posts.quotedPosts":"Publications citées","interface.rule.posts.quotedPostsHint":"Masque la publication intégrée dans une autre (une citation).","interface.rule.posts.actionBar":"Barre d’actions sous les publications","interface.rule.posts.actionBarHint":"Retire la rangée répondre, republier, aimer et partager. Le bouton de téléchargement X Plus de cette rangée disparaît aussi ; le bouton sur les médias reste.","interface.postView.hideAvatars":"Avatars dans les publications","interface.postView.hideAvatarsHint":"Masque les photos de profil à côté des publications ainsi que l’espace qu’elles laissent.","interface.rule.posts.moreFromX":"« Découvrir plus » sous une publication","interface.rule.posts.moreFromXHint":"Sur la page d’une publication, masque le titre « Découvrir plus » et les publications recommandées sous les réponses.","interface.rule.posts.feedTabs":"Onglets du fil","interface.rule.posts.newPostsPill":"Bouton « Nouveaux posts »","interface.rule.posts.showPosts":"Ligne « Afficher N posts »","interface.rule.posts.promoted":"Posts sponsorisés","interface.rule.posts.viewCounts":"Compteur de vues","interface.rule.posts.verifiedBadges":"Badges de vérification","interface.rule.posts.grokButton":"Bouton Grok sur les posts","interface.rule.sidebar.search":"Champ de recherche","interface.rule.sidebar.whoToFollow":"Suggestions de comptes","interface.rule.sidebar.trends":"Tendances","interface.rule.sidebar.premium":"Offres Premium","interface.rule.sidebar.footer":"Liens du pied de page","interface.rule.chrome.grokDrawer":"Panneau Grok","interface.rule.chrome.chatDrawer":"Panneau de chat","interface.rule.nav.logo":"Logo du site","interface.rule.nav.home":"Accueil","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"Explorer","interface.rule.nav.chat":"Chat","interface.rule.nav.calls":"Appels","interface.rule.nav.history":"Historique","interface.rule.nav.creatorStudio":"Studio de créateurs","interface.rule.nav.followerRequests":"Demandes d’abonnés","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"Notifications","interface.rule.nav.profile":"Profil","interface.rule.nav.more":"Plus","interface.rule.nav.post":"Bouton Publier","interface.rule.nav.account":"Menu du compte","interface.peekHint":"Survolez un réglage pour le prévisualiser sur la page derrière cette fenêtre.","interface.sectionFeed":"Fil","interface.sectionFeedDesc":"La colonne centrale avec les publications.","interface.sectionNav":"Menu de gauche","interface.sectionNavDesc":"Navigation avec Accueil, Explorer, Profil et d’autres liens.","interface.sectionSide":"Colonne de droite","interface.sectionSideDesc":"Recherche, tendances et suggestions.","interface.sectionDrawers":"Panneaux flottants","interface.sectionDrawersDesc":"Panneaux fixés en bas à droite de l’écran.","interface.sub.layout":"Mise en page","interface.sub.hide":"Masquer","interface.enabledHint":"Interrupteur général de toutes les options « Masquer » ci-dessous. Les options de mise en page ne sont pas concernées.","interface.rule.posts.composerHint":"Masque la zone « Quoi de neuf ? » au-dessus du fil. La fenêtre de publication reste utilisable.","interface.rule.posts.feedTabsHint":"Masque les onglets « Pour vous » / « Abonnements » au-dessus du fil.","interface.rule.posts.newPostsPillHint":"Retire le bouton flottant « Voir les nouveaux posts » au-dessus du fil.","interface.rule.posts.showPostsHint":"Retire la ligne « Afficher 35 posts » en haut du fil. Un espace de même hauteur peut subsister.","interface.rule.posts.promotedHint":"Masque les publicités du fil.","interface.rule.posts.viewCountsHint":"Supprime le compteur de vues sous chaque publication.","interface.rule.posts.verifiedBadgesHint":"Supprime la coche bleue et les autres badges de vérification à côté des noms.","interface.rule.posts.grokButtonHint":"Supprime l’icône Grok en haut à droite des publications.","interface.rule.sidebar.searchHint":"Retire le champ de recherche en haut de la colonne de droite.","interface.rule.sidebar.whoToFollowHint":"Supprime le bloc de suggestions de comptes.","interface.rule.sidebar.trendsHint":"Supprime le bloc des tendances « Quoi de neuf ».","interface.rule.sidebar.premiumHint":"Supprime l’offre d’abonnement Premium.","interface.rule.sidebar.footerHint":"Supprime les liens conditions, confidentialité et autres en bas.","interface.rule.chrome.grokDrawerHint":"Retire le panneau flottant de Grok.","interface.rule.chrome.chatDrawerHint":"Retire le panneau flottant du chat.","interface.sectionPosts":"Publication","interface.sectionPostsDesc":"L’apparence d’une publication et ce qu’elle affiche. Survolez un réglage pour l’aperçu.","interface.sub.cards":"Cartes","interface.sub.spacing":"Espacement","interface.sub.look":"Texte et avatars","interface.postView.none":"Aucun","interface.postView.cards":"Publications en cartes","interface.postView.cardsHint":"Dessine chaque publication comme une carte distincte. Utilisez le curseur d’espacement ci-dessous pour la distance entre les cartes.","interface.postView.cardStyle":"Style des cartes","interface.postView.cardStyleHint":"Contour, fond doux ou ombre.","interface.postView.cardStyle.outline":"Contour","interface.postView.cardStyle.filled":"Rempli","interface.postView.cardStyle.shadow":"Ombre","interface.postView.cardRadius":"Rayon des coins","interface.postView.cardRadiusHint":"Degré d’arrondi des coins d’une carte.","interface.postView.cardOpacity":"Opacité du fond","interface.postView.cardOpacityHint":"Opacité du remplissage de la carte. Des valeurs basses laissent transparaître le fond de la page.","interface.postView.gap":"Espace entre les publications","interface.postView.gapHint":"Espace vide sous chaque publication, en pixels.","interface.postView.padding":"Marge intérieure","interface.postView.paddingHint":"Espace supplémentaire à l’intérieur de chaque publication, en pixels.","interface.postView.hideDividers":"Masquer les séparateurs entre publications","interface.postView.hideDividersHint":"Retire les fines lignes qui séparent les publications.","interface.postView.hideFeedBorder":"Masquer les bordures du fil","interface.postView.hideFeedBorderHint":"Retire les lignes verticales de chaque côté de la colonne du fil.","interface.postView.textScale":"Taille du texte","interface.postView.textScaleHint":"Met à l’échelle le texte des publications. 100 % garde la taille par défaut.","interface.postView.avatarShape":"Forme des avatars","interface.postView.avatarShapeHint":"Forme des photos de profil dans le fil.","interface.postView.avatarShape.default":"Par défaut (cercle)","interface.postView.avatarShape.rounded":"Carré arrondi","interface.postView.avatarShape.square":"Carré","peek.missing":"Rien à afficher sur cette page pour le moment","translate.articles":"Traduire les articles","translate.articlesHint":"Ajoute un bouton Traduire aux articles X et les traduit paragraphe par paragraphe.","translate.articleProgress":"Traduction… {done}/{total}","translate.articleSame":"L’article est déjà dans votre langue","shorts.title":"Shorts","shorts.sectionMain":"Mode Shorts","shorts.sectionMainDesc":"Parcourez le fil publication par publication, comme sur YouTube Shorts.","shorts.enabled":"Parcourir le fil publication par publication","shorts.enabledHint":"La molette et les flèches passent à la publication suivante ou précédente et la centrent. La publication courante grandit un peu, celles autour sont floutées. Fonctionne dans les fils (Accueil, profils, recherche, listes), pas sur la page d’une publication. Aussi disponible via l’interrupteur en bas à gauche.","shorts.keys":"Navigation au clavier","shorts.keysHint":"↑ / ↓, J / K et la barre d’espace passent à la publication précédente / suivante (Maj + espace revient en arrière).","shorts.sectionLook":"Apparence","shorts.scale":"Taille de la publication courante","shorts.scaleHint":"De combien la publication du milieu est agrandie (100 % = pas du tout).","shorts.blur":"Flou des autres publications","shorts.blurHint":"0 désactive le flou.","shorts.dockLabel":"Shorts","shorts.dockTitle":"Mode Shorts : une publication à la fois","shorts.buttons":"Boutons précédent / suivant","shorts.buttonsHint":"Deux boutons ronds à côté de la publication courante, pour la souris.","shorts.prev":"Publication précédente","shorts.next":"Publication suivante","shorts.speed":"Vitesse des transitions","shorts.speedHint":"Durée du saut vers la publication suivante et de l’effet d’agrandissement / flou.","shorts.speed.slow":"Lente","shorts.speed.normal":"Normale","shorts.speed.fast":"Rapide","shorts.speed.instant":"Instantanée","shorts.sectionAuto":"Défilement automatique","shorts.sectionAutoDesc":"Passe tout seul à la publication suivante après un délai. Pause et lecture avec le bouton sous les flèches.","shorts.autoplay":"Défilement automatique","shorts.autoplayHint":"Active ou désactive le passage automatique à la publication suivante.","shorts.autoDelay":"Durée par publication","shorts.autoDelayHint":"Secondes avant de passer à la publication suivante.","shorts.autoWaitVideo":"Laisser finir les vidéos","shorts.autoWaitVideoHint":"Une publication avec vidéo reste jusqu’à la fin de la vidéo si elle dépasse la durée ci-dessus.","shorts.autoHover":"Pause sur les boutons","shorts.autoHoverHint":"Le compte à rebours attend tant que le pointeur est sur les boutons fléchés.","shorts.autoStyle":"Indicateur de progression","shorts.autoStyleHint":"Automatique : un anneau autour du bouton « suivant », ou une barre au-dessus de la publication si les boutons sont masqués.","shorts.autoStyle.auto":"Automatique","shorts.autoStyle.ring":"Anneau sur le bouton","shorts.autoStyle.bar":"Barre sur la publication","shorts.autoStyle.both":"Anneau et barre","shorts.autoStyle.none":"Aucun","shorts.autoPause":"Mettre en pause le défilement automatique","shorts.autoPlay":"Lancer le défilement automatique","shorts.autoKey":"Touche pause / reprise","shorts.autoKeyHint":"Cliquez sur le champ puis appuyez sur une touche ; Retour arrière l’efface. La touche fonctionne tant que le défilement automatique est actif.","shorts.autoResume":"Reprendre le défilement automatique","common.keyPress":"Appuyez sur une touche…","common.keyNone":"Non définie","common.keyReserved":"{key} est déjà utilisée en mode Shorts","shorts.prevOpacity":"Opacité de la publication précédente","shorts.nextOpacity":"Opacité de la publication suivante","shorts.opacityHint":"0 la rend invisible, 100 l’affiche entièrement ; le flou se règle à part.","shorts.translateOnlyCurrent":"Traduire seulement la publication courante","shorts.translateOnlyCurrentHint":"La traduction automatique ne s’applique qu’à la publication du milieu, après qu’elle y est restée un instant : celles que vous dépassez ne consomment aucune requête d’API. Le bouton Traduire fonctionne toujours sur n’importe quelle publication.","shorts.translateNext":"Traduire la publication suivante à l’avance","shorts.translateNextHint":"Pendant que vous lisez la publication actuelle, la suivante est traduite en arrière-plan (une requête d’API de plus), mais son texte n’est remplacé que lorsque vous y arrivez."},ja:{"translate.btnTranslate":"翻訳","translate.btnHide":"翻訳を隠す","translate.btnRetry":"再試行","translate.translating":"翻訳中…","translate.translationLabel":"翻訳","translate.detectedLang":"検出: {lang}","translate.errNetwork":"翻訳に失敗しました。もう一度お試しください。","general.title":"一般","translate.sectionTranslation":"翻訳","translate.sectionCache":"キャッシュ","translate.settingsProvider":"翻訳プロバイダー","translate.settingsProviderHint":"認証情報はこの端末の userscript ストレージにのみ保存されます。","translate.providerFieldApiKey":"API キー","translate.providerFieldApiKeyOptional":"API キー(任意)","translate.providerFieldDeeplPlan":"DeepL プラン","translate.providerDeeplPlanFree":"Free (api-free.deepl.com)","translate.providerDeeplPlanPro":"Pro (api.deepl.com)","translate.providerFieldRegion":"リージョン","translate.providerFieldModel":"モデル","translate.providerFieldBaseUrl":"API ベース URL","translate.providerFieldFolderId":"Folder ID","translate.providerFieldApiUrl":"API URL","translate.providerHintGoogle":"Google の公開 Translate エンドポイント。API キー不要。","translate.providerHintDeepl":"DeepL API Free / Pro。deepl.com/pro-api でキーを作成。","translate.providerHintDeeplKey":"Free キーは通常 :fx で終わります","translate.providerHintMicrosoft":"Azure ポータルの Translator リソースキー。","translate.providerHintMicrosoftRegion":"リソースのリージョン。マルチサービスキーは global。","translate.providerHintOpenai":"Chat Completions API。互換エンドポイントも利用可。","translate.providerHintOpenaiBase":"既定は https://api.openai.com/v1。プロキシ用に変更可。","translate.providerHintYandex":"Yandex Cloud Translate の API キーと folder ID。","translate.providerHintYandexFolder":"Yandex Cloud コンソールから。","translate.providerHintLibre":"自前または公開の LibreTranslate。","translate.errProviderConfig":"プロバイダーが未設定です。Translator → プロバイダーを開いてください。","about.title":"情報","about.repo":"GitHub でリポジトリを開く","about.license":"MIT ライセンス","translate.settingsTargetLang":"翻訳先","general.language":"インターフェース言語","translate.settingsCacheHours":"翻訳キャッシュ(時間)","translate.settingsCacheHint":"0 でキャッシュ無効。TTL で期限切れ、または手動でクリア。","translate.cacheMeterTitle":"使用量","translate.cacheMeterUsed":"{used} / {limit}","translate.cacheMeterEntries":"{count} 件","translate.cacheMeterTtl":"TTL {hours} 時間","translate.cacheMeterDisabled":"キャッシュオフ","translate.cacheMeterFree":"空き {free}","translate.cacheMeterAria":"キャッシュ {used} / {limit}({pct})、{count} 件","translate.cacheMeterHint":"GM ストレージのソフト上限です。満杯になると古いエントリから削除されます。","translate.settingsDisplayMode":"翻訳の表示","translate.settingsDisplayModeHint":"パネル:投稿の下に表示。置換:本文を翻訳に差し替え、「原文を表示」を出す。","translate.displayModePanel":"別パネル","translate.displayModeReplace":"原文を置き換え","translate.btnShowOriginal":"原文を表示","translate.settingsTranslateMode":"翻訳モード","translate.settingsTranslateModeHint":"自動:投稿が画面に少しでも見えたら翻訳。ボタン:「翻訳」を押したときだけ。","translate.translateModeButton":"ボタンで翻訳","translate.translateModeAuto":"自動(画面に表示時)","translate.settingsAutoScope":"自動翻訳の対象","translate.settingsAutoScopeHint":"表示中のすべての投稿か、選んだアカウントのみを翻訳します。","translate.autoScopeAll":"すべてのアカウント","translate.autoScopeAllowlist":"選択したアカウントのみ","translate.settingsAllowlistHint":"投稿の ⋮ メニューからもアカウントを追加・削除できます。","translate.allowlistPlaceholder":"@username","translate.allowlistAdd":"追加","translate.allowlistEmpty":"まだありません。上にニックネームを入力してください。","translate.allowlistInvalid":"有効な X ハンドルを入力してください。","translate.allowlistAdded":"{handle} を自動翻訳に追加しました","translate.allowlistRemoved":"{handle} を自動翻訳から削除しました","translate.menuAddAutoAccount":"このアカウントを自動翻訳","translate.menuRemoveAutoAccount":"自動翻訳から外す","panel.save":"保存","panel.close":"閉じる","panel.search":"設定を検索","panel.searchClear":"検索をクリア","panel.searchEmpty":"見つかりませんでした","translate.settingsClearCache":"キャッシュをクリア","panel.saved":"設定を保存しました","translate.settingsCacheCleared":"翻訳キャッシュをクリアしました","toast.title.success":"成功","toast.title.info":"情報","toast.title.warning":"注意","toast.title.error":"エラー","toast.dismiss":"閉じる","translate.langAuto":"自動(UI / ブラウザに合わせる)","general.languageAuto":"自動(ブラウザ)","translate.badgeLangAuto":"自動","translate.originalLabel":"原文","translate.settingsReplaceReveal":"置換モードの詳細","translate.settingsReplaceRevealHint":"ボタンのみ、ホバーで原文、または原文と訳文を並べて表示。","translate.replaceRevealButton":"ボタンのみ","translate.replaceRevealHover":"ホバーで原文","translate.replaceRevealSplit":"分割表示(原文 + 訳文)","translate.settingsAccountBlocklist":"アカウントブロックリスト","translate.settingsAccountBlocklistHint":"これらのアカウントには翻訳ボタンを出さず自動翻訳もしません。投稿メニューからも変更できます。","translate.blocklistEmpty":"ブロック中のアカウントはありません。","translate.blocklistAdded":"{handle} をブロックしました","translate.blocklistRemoved":"{handle} のブロックを解除しました","translate.menuBlockAccount":"このアカウントを翻訳しない","translate.menuUnblockAccount":"このアカウントの翻訳を許可","translate.settingsLangAllowlist":"原文言語の許可リスト","translate.settingsLangAllowlistHint":"空でなければ、検出されたこれらの言語だけ翻訳します。空 = すべて。","translate.settingsLangBlocklist":"原文言語のブロックリスト","translate.settingsLangBlocklistHint":"これらの言語の投稿をスキップします。","translate.settingsSkipNative":"X が既に自動翻訳した投稿をスキップ","translate.settingsSkipNativeHint":"X の翻訳バー(オリジナルを表示)が出ている投稿には、翻訳ボタンを付けず自動翻訳もしません。","translate.settingsHideErrors":"翻訳エラーを非表示","translate.settingsHideErrorsHint":"「翻訳に失敗しました。もう一度お試しください。」を表示しません。投稿は未翻訳のままになります。","translate.langListEmpty":"言語が未選択です。","translate.langListAdd":"追加","translate.langSkippedBlocked":"スキップ:言語がブロックされています","translate.langSkippedNotAllowed":"スキップ:許可リストにない言語です","general.sectionInterface":"インターフェース","translate.settingsSectionTranslate":"翻訳","translate.settingsSectionAccounts":"アカウント","translate.settingsSectionLanguages":"言語","translate.settingsSectionProvider":"プロバイダー","translate.settingsSectionCache":"キャッシュ","translate.badgeCacheOff":"オフ","menu.settings":"X Plus — 設定","nav.label":"X Plus","common.off":"オフ","panel.cancel":"キャンセル","panel.confirm":"確認","panel.reset":"リセット","panel.resetTitle":"すべての設定をリセットしますか?","panel.resetText":"すべてのオプションが初期値に戻ります。「保存」を押すまで変更は反映されません。","list.add":"追加","list.remove":"削除","list.empty":"まだありません。","list.invalid":"有効な値を入力してください。","list.exists":"{item} は既にリストにあります","list.handlePlaceholder":"@ユーザー名","general.languageHint":"X Plus のメニューとメッセージの言語。","general.navButton":"サイドバーのボタン","general.navButtonHint":"X の左ナビゲーションに、この設定を開く「X Plus」項目を表示します。","general.hotkey":"キーボードショートカット","general.hotkeyHint":"Ctrl + M で X Plus の設定を開きます。","general.hotkeyReminder":"ショートカットの表示","general.hotkeyReminderHint":"画面左下に薄いヒントを表示します。","hotkey.hint":"X Plus の設定","general.sectionToasts":"通知","general.toasts":"通知を表示","general.toastsHint":"設定の保存、ダウンロード、エラーのトースト通知。","general.toastPosition":"表示位置","general.toastPosition.top-right":"右上","general.toastPosition.top-left":"左上","general.toastPosition.bottom-right":"右下","general.toastPosition.bottom-left":"左下","general.toastDuration":"表示時間(秒)","general.toastDurationHint":"0 にすると閉じるまで表示されます。","about.description":"X (x.com) に翻訳、メディアのダウンロード、多数の便利機能を追加するユーザースクリプト。Tampermonkey、Violentmonkey、ScriptCat などで動作します。","backup.title":"バックアップ","backup.exportTitle":"エクスポート","backup.exportDesc":"現在の設定を JSON ファイルとして保存するか、クリップボードにコピーします。","backup.download":"ファイルをダウンロード","backup.copy":"JSON をコピー","backup.exported":"設定をエクスポートしました","backup.copied":"設定をクリップボードにコピーしました","backup.copyFailed":"クリップボードにアクセスできません","backup.secretsHint":"エクスポートには翻訳サービスの API キーが含まれます。他人に共有しないでください。","backup.importTitle":"インポート","backup.importDesc":"バックアップを貼り付けるかファイルを選択してください。不明または無効な値は無視されます。インポートはすぐに反映されます。","backup.importPaste":"貼り付けた JSON をインポート","backup.importFile":"ファイルを選択…","backup.imported":"設定をインポートしました","backup.importFailed":"有効な X Plus のバックアップではありません","translate.sectionMain":"投稿を翻訳","translate.enabled":"翻訳を有効にする","translate.enabledHint":"投稿と返信に「翻訳」ボタンを追加します。","media.title":"メディア","media.sectionMain":"メディアのダウンロード","media.sectionMainDesc":"投稿の動画・GIF・写真を保存します。","media.enabled":"ダウンロードを有効にする","media.enabledHint":"メディアを含む投稿にダウンロードボタンを追加します。","media.sectionButtons":"ボタン","media.showInActions":"アクションバーのボタン","media.showInActionsHint":"共有の隣。投稿のすべてのメディアをダウンロードします。","media.showOnMedia":"メディア上のボタン","media.showOnMediaHint":"ホバー時に表示される小さなボタン。その動画または写真だけを保存します。","media.videos":"動画","media.gifs":"GIF","media.images":"写真","media.sectionQuality":"画質","media.videoQuality":"動画の画質","media.videoQualityHint":"X が公開している MP4 版です。「毎回確認」ではダウンロード時に選べます。","media.quality.best":"最高画質","media.quality.ask":"毎回確認","media.quality.1080":"最大 1080p","media.quality.720":"最大 720p","media.quality.480":"最大 480p","media.quality.lowest":"最小サイズ","media.imageQuality":"写真の画質","media.imageQualityHint":"「オリジナル」はアップロードされたままのファイル、「大」は X の 2048 px 版です。","media.image.orig":"オリジナル","media.image.large":"大(2048 px)","media.onMultiple":"複数ファイルの投稿","media.onMultipleHint":"投稿に動画や写真が複数あるときの動作。","media.multiple.ask":"選択する","media.multiple.all":"すべてダウンロード","media.sectionFiles":"ファイル名","media.fileTemplate":"名前テンプレート","media.fileTemplateHint":"ファイル名に使えない文字は自動的に置き換えられます。拡張子は自動で付きます。","media.fileTokens":"プレースホルダー: {user} 投稿者のハンドル · {id} 投稿 ID · {date} 2025-01-31 · {time} 235959 · {n} ファイル番号 · {quality} 720p / orig · {type} video / gif / photo · {text} 本文の冒頭","media.sectionFeed":"タイムライン","media.feedImageQuality":"タイムラインの写真","media.feedImageQualityHint":"閲覧中に写真を大きいサイズで読み込みます。通信量が増えます。","media.feed.default":"X の標準","media.feed.large":"大","media.feed.orig":"オリジナル","media.sectionViewer":"写真ビューア","media.sectionViewerDesc":"投稿の写真を高速ギャラリーで開き、全画面表示で拡大・移動できます。","media.photoZoom":"写真の拡大とドラッグ移動","media.photoZoomHint":"マウスホイールでカーソル位置に向けて拡大、ドラッグで移動、ダブルクリックで拡大の切り替え、+ / - / 0 キーも使えます。タッチ画面ではピンチとドラッグ。","media.photoGrid":"写真の背景グリッド","media.photoGridHint":"写真の背面にグリッド模様を表示し、透過画像や暗い画像を見やすくします。","media.zoomOut":"縮小","media.zoomIn":"拡大","media.zoomReset":"ズームをリセット","media.photoGallery":"X Plus ギャラリーで写真を開く","media.photoGalleryHint":"投稿の写真をクリックすると、Xの写真ページではなく軽量なギャラリーが開きます。返信やタイムラインは読み込まれません。← / → で投稿内の全写真を閲覧、ホイールで拡大、ダウンロードや原寸表示も可能です。Ctrl/Cmd/Shift+クリックではXの標準ビューアが開きます。","media.gallery":"写真ギャラリー","media.galleryClose":"閉じる (Esc)","media.galleryPrev":"前の写真 (←)","media.galleryNext":"次の写真 (→)","media.galleryDownload":"この写真をダウンロード","media.galleryOpenOriginal":"原寸を新しいタブで開く","media.galleryActualSize":"実寸 / ウィンドウに合わせる","media.galleryPhoto":"写真 {n}","media.download":"メディアをダウンロード","media.downloadAll":"すべてダウンロード","media.downloading":"ダウンロード中…","media.saved":"保存しました","media.savedText":"{count} 個のファイル · {size}","media.partial":"一部のみ保存","media.partialText":"保存 {saved} 件、失敗 {failed} 件","media.failed":"ダウンロードに失敗しました。もう一度お試しください。","media.noId":"この投稿の ID が見つかりません","media.noMedia":"この投稿にはダウンロードできるメディアがありません","media.noVariants":"この動画にはダウンロード可能な MP4 がありません(ストリームのみ)","media.needLogin":"メディアを読み込めませんでした。X にログインして再試行してください。","media.resolveFailed":"この投稿のメディアを取得できませんでした","media.item.video":"動画","media.item.gif":"GIF","media.item.photo":"写真 {n}","media.item.photoSingle":"写真","media.item.quoted":"引用された投稿 · {label}","interface.title":"インターフェース","interface.sectionMain":"クリーンアップ","interface.sectionMainDesc":"使わない X の要素を非表示にします。変更は保存後に反映されます。","interface.enabled":"クリーンアップを有効にする","interface.contentWidth":"コンテンツの幅","interface.contentWidthHint":"投稿を表示する中央カラムの幅(ピクセル)。0 の場合は X の標準幅のままです。","interface.width.default":"標準","interface.width.narrow":"狭い","interface.width.wide":"広い","interface.width.wider":"より広い","interface.width.full":"全幅","interface.menuLeft":"メニューを画面左端に配置","interface.menuLeftHint":"ナビゲーションメニューをフィードの隣ではなく画面の左端に移動します。","interface.menuCenter":"メニューを縦中央に配置","interface.menuCenterHint":"左メニューの項目をすべて画面の縦中央に揃えます。","interface.menuHide":"左メニューを非表示","interface.menuHideHint":"左メニュー全体を削除します。X Plus の設定はユーザースクリプトマネージャーのメニューから開けます。","interface.feedTabsStatic":"タブを固定しない","interface.feedTabsStaticHint":"「おすすめ」「フォロー中」タブが上部に浮かず、ページと一緒にスクロールします。","interface.sidebarRight":"右カラムを画面右端に配置","interface.sidebarRightHint":"検索・トレンド・おすすめを画面の右端に移動し、スクロール中も固定します。","interface.sidebarHide":"右カラムを非表示","interface.sidebarHideHint":"右カラム全体(検索、トレンド、おすすめ)を削除します。個別のブロックのスイッチは不要になります。","interface.centerContent":"フィードを画面中央に配置","interface.centerContentHint":"フィードを画面のちょうど中央に配置します。メニューと右カラムは画面の端に固定されます。","interface.rule.posts.composer":"ポスト入力欄","interface.rule.posts.handles":"投稿内の @ユーザー名","interface.rule.posts.handlesHint":"投稿ヘッダーの名前の横にある @ユーザー名(と時刻の前の点)を非表示にします。","interface.rule.posts.translateNotice":"「元の言語」表示","interface.rule.posts.translateNoticeHint":"翻訳された投稿の下に X が表示する「元の言語:… 元を表示」の行を非表示にします。X Plus の翻訳には影響しません。","interface.rule.posts.articles":"記事","interface.rule.posts.articlesHint":"投稿の下の X 記事カード(カバー、タイトル、概要)を非表示にします。","interface.rule.posts.linkCards":"リンクプレビュー","interface.rule.posts.linkCardsHint":"リンクの下のプレビューカード(画像、タイトル、「サイト名から」)を非表示にします。本文中のリンクは残ります。","interface.rule.posts.images":"投稿内の画像","interface.rule.posts.imagesHint":"投稿に添付された写真を非表示にします。動画と GIF は残ります。","interface.rule.posts.videos":"投稿内の動画","interface.rule.posts.videosHint":"投稿内の動画と GIF を非表示にします。写真は残ります。","interface.rule.posts.quotedPosts":"引用された投稿","interface.rule.posts.quotedPostsHint":"別の投稿に埋め込まれた投稿(引用)を非表示にします。","interface.rule.posts.actionBar":"投稿下のアクションバー","interface.rule.posts.actionBarHint":"返信・リポスト・いいね・共有の行を削除します。この行にある X Plus のダウンロードボタンも消えますが、メディア上のボタンは残ります。","interface.postView.hideAvatars":"投稿内のアイコン","interface.postView.hideAvatarsHint":"投稿横のプロフィール画像と、その空きスペースを非表示にします。","interface.rule.posts.moreFromX":"投稿下の「さらに見つける」","interface.rule.posts.moreFromXHint":"投稿ページで、返信の下にある「さらに見つける」の見出しとおすすめ投稿を非表示にします。","interface.rule.posts.feedTabs":"タイムラインのタブ","interface.rule.posts.newPostsPill":"「新しいポスト」ボタン","interface.rule.posts.showPosts":"「N 件のポストを表示」行","interface.rule.posts.promoted":"プロモーション投稿","interface.rule.posts.viewCounts":"表示回数","interface.rule.posts.verifiedBadges":"認証バッジ","interface.rule.posts.grokButton":"投稿の Grok ボタン","interface.rule.sidebar.search":"検索ボックス","interface.rule.sidebar.whoToFollow":"おすすめユーザー","interface.rule.sidebar.trends":"トレンド","interface.rule.sidebar.premium":"Premium のおすすめ","interface.rule.sidebar.footer":"フッターのリンク","interface.rule.chrome.grokDrawer":"Grok パネル","interface.rule.chrome.chatDrawer":"チャットパネル","interface.rule.nav.logo":"サイトのロゴ","interface.rule.nav.home":"ホーム","interface.rule.nav.premium":"Premium","interface.rule.nav.grok":"Grok","interface.rule.nav.explore":"話題を検索","interface.rule.nav.chat":"チャット","interface.rule.nav.calls":"通話","interface.rule.nav.history":"履歴","interface.rule.nav.creatorStudio":"クリエイタースタジオ","interface.rule.nav.followerRequests":"フォローリクエスト","interface.rule.nav.xplus":"X Plus","interface.rule.nav.notifications":"通知","interface.rule.nav.profile":"プロフィール","interface.rule.nav.more":"もっと見る","interface.rule.nav.post":"ポストボタン","interface.rule.nav.account":"アカウントメニュー","interface.peekHint":"設定にカーソルを合わせると、このウィンドウの背後のページでプレビューできます。","interface.sectionFeed":"フィード","interface.sectionFeedDesc":"投稿が並ぶ中央のカラム。","interface.sectionNav":"左メニュー","interface.sectionNavDesc":"ホーム、探索、プロフィールなどのナビゲーション。","interface.sectionSide":"右カラム","interface.sectionSideDesc":"検索、トレンド、おすすめ。","interface.sectionDrawers":"フローティングパネル","interface.sectionDrawersDesc":"画面右下に固定されたパネル。","interface.sub.layout":"レイアウト","interface.sub.hide":"非表示","interface.enabledHint":"下の「非表示」項目すべての親スイッチです。レイアウト設定には影響しません。","interface.rule.posts.composerHint":"タイムライン上部の「いまどうしてる?」入力欄を非表示にします。ポスト作成ダイアログは引き続き使えます。","interface.rule.posts.feedTabsHint":"タイムライン上部の「おすすめ」「フォロー中」タブを非表示にします。","interface.rule.posts.newPostsPillHint":"タイムライン上部に浮かぶ「新しいポストを表示」ボタンを削除します。","interface.rule.posts.showPostsHint":"タイムライン先頭の「35 件のポストを表示」行を削除します。同じ高さの空白が残る場合があります。","interface.rule.posts.promotedHint":"タイムラインの広告を非表示にします。","interface.rule.posts.viewCountsHint":"各投稿の下の表示回数を非表示にします。","interface.rule.posts.verifiedBadgesHint":"名前の横の青いチェックなどの認証バッジを非表示にします。","interface.rule.posts.grokButtonHint":"投稿の右上にある Grok アイコンを非表示にします。","interface.rule.sidebar.searchHint":"右カラム上部の検索ボックスを削除します。","interface.rule.sidebar.whoToFollowHint":"おすすめアカウントのブロックを非表示にします。","interface.rule.sidebar.trendsHint":"「いまどうしてる?」のトレンドブロックを非表示にします。","interface.rule.sidebar.premiumHint":"Premium の購読案内を非表示にします。","interface.rule.sidebar.footerHint":"下部の利用規約・プライバシーなどのリンクを非表示にします。","interface.rule.chrome.grokDrawerHint":"フローティングの Grok パネルを削除します。","interface.rule.chrome.chatDrawerHint":"フローティングのチャットパネルを削除します。","interface.sectionPosts":"投稿","interface.sectionPostsDesc":"個々の投稿の見た目と表示内容。設定にカーソルを合わせるとプレビューできます。","interface.sub.cards":"カード","interface.sub.spacing":"間隔","interface.sub.look":"テキストとアイコン","interface.postView.none":"なし","interface.postView.cards":"投稿をカード表示","interface.postView.cardsHint":"各投稿を独立したカードとして表示します。カード間の距離は下の間隔スライダーで設定します。","interface.postView.cardStyle":"カードのスタイル","interface.postView.cardStyleHint":"枠線、やわらかい背景、または影。","interface.postView.cardStyle.outline":"枠線","interface.postView.cardStyle.filled":"塗りつぶし","interface.postView.cardStyle.shadow":"影","interface.postView.cardRadius":"角の丸み","interface.postView.cardRadiusHint":"カードの角の丸さ。","interface.postView.cardOpacity":"背景の不透明度","interface.postView.cardOpacityHint":"カードの塗りつぶしの不透明度。低いほどページの背景が透けます。","interface.postView.gap":"投稿の間隔","interface.postView.gapHint":"各投稿の下の余白(ピクセル)。","interface.postView.padding":"内側の余白","interface.postView.paddingHint":"各投稿内側の追加余白(ピクセル)。","interface.postView.hideDividers":"投稿間の区切り線を非表示","interface.postView.hideDividersHint":"投稿を区切る細い線を削除します。","interface.postView.hideFeedBorder":"フィードの枠線を非表示","interface.postView.hideFeedBorderHint":"フィード列の両側の縦線を削除します。","interface.postView.textScale":"文字サイズ","interface.postView.textScaleHint":"投稿の文字を拡大縮小します。100% が標準サイズです。","interface.postView.avatarShape":"アイコンの形","interface.postView.avatarShapeHint":"フィード内のプロフィール画像の形。","interface.postView.avatarShape.default":"標準(円形)","interface.postView.avatarShape.rounded":"角丸の四角","interface.postView.avatarShape.square":"四角","peek.missing":"このページには現在表示できるものがありません","translate.articles":"記事を翻訳","translate.articlesHint":"X の記事に「翻訳」ボタンを追加し、段落ごとに翻訳します。","translate.articleProgress":"翻訳中… {done}/{total}","translate.articleSame":"記事はすでにお使いの言語です","shorts.title":"ショート風","shorts.sectionMain":"ショートモード","shorts.sectionMainDesc":"YouTube ショートのように、投稿を1つずつ見ていきます。","shorts.enabled":"投稿を1つずつ表示する","shorts.enabledHint":"ホイールと矢印キーで前後の投稿へ移動し、中央に表示します。現在の投稿は少し大きくなり、周りの投稿はぼかされます。ホーム、プロフィール、検索、リストなどのフィードで動作し、投稿ページでは動作しません。左下のスイッチからも切り替えられます。","shorts.keys":"キーボード操作","shorts.keysHint":"↑ / ↓、J / K、スペースキーで前 / 次の投稿へ移動します(Shift + スペースで前へ)。","shorts.sectionLook":"表示","shorts.scale":"現在の投稿のサイズ","shorts.scaleHint":"中央の投稿をどれだけ拡大するか(100% = 拡大なし)。","shorts.blur":"ほかの投稿のぼかし","shorts.blurHint":"0 でぼかしをオフにします。","shorts.dockLabel":"ショート","shorts.dockTitle":"ショートモード:1投稿ずつ","shorts.buttons":"前へ / 次へボタン","shorts.buttonsHint":"現在の投稿の横に表示される丸いボタン。マウス操作用です。","shorts.prev":"前の投稿","shorts.next":"次の投稿","shorts.speed":"切り替えの速さ","shorts.speedHint":"次の投稿への移動と、拡大・ぼかし効果にかかる時間。","shorts.speed.slow":"ゆっくり","shorts.speed.normal":"標準","shorts.speed.fast":"速い","shorts.speed.instant":"即時","shorts.sectionAuto":"自動スクロール","shorts.sectionAutoDesc":"一定時間後に自動で次の投稿へ移動します。矢印の下のボタンで一時停止・開始できます。","shorts.autoplay":"自動スクロール","shorts.autoplayHint":"次の投稿への自動移動をオン・オフします。","shorts.autoDelay":"1投稿あたりの時間","shorts.autoDelayHint":"次の投稿へ移動するまでの秒数。","shorts.autoWaitVideo":"動画の終了を待つ","shorts.autoWaitVideoHint":"動画が上の時間より長い場合、動画が終わるまでその投稿に留まります。","shorts.autoHover":"ボタン上で一時停止","shorts.autoHoverHint":"ポインターが矢印ボタンの上にある間、カウントダウンが止まります。","shorts.autoStyle":"進行表示","shorts.autoStyleHint":"自動:「次へ」ボタンの周りのリング。ボタンを隠している場合は投稿上部のバー。","shorts.autoStyle.auto":"自動","shorts.autoStyle.ring":"ボタン上のリング","shorts.autoStyle.bar":"投稿上のバー","shorts.autoStyle.both":"リングとバー","shorts.autoStyle.none":"なし","shorts.autoPause":"自動スクロールを一時停止","shorts.autoPlay":"自動スクロールを開始","shorts.autoKey":"一時停止 / 再開キー","shorts.autoKeyHint":"フィールドをクリックしてキーを押します。Backspace で解除します。自動スクロールがオンの間だけ有効です。","shorts.autoResume":"自動スクロールを再開","common.keyPress":"キーを押してください…","common.keyNone":"未設定","common.keyReserved":"{key} はショートモードですでに使われています","shorts.prevOpacity":"前の投稿の不透明度","shorts.nextOpacity":"次の投稿の不透明度","shorts.opacityHint":"0 で非表示、100 で完全に表示します。ぼかしは別に設定します。","shorts.translateOnlyCurrent":"現在の投稿だけを翻訳","shorts.translateOnlyCurrentHint":"自動翻訳は、中央の投稿がしばらく表示されたときだけ実行されます。素早く通り過ぎた投稿は API リクエストを消費しません。「翻訳」ボタンはどの投稿でも使えます。","shorts.translateNext":"次の投稿を先に翻訳","shorts.translateNextHint":"現在の投稿を読んでいる間に次の投稿をバックグラウンドで翻訳します(API リクエストが1回増えます)。テキストが置き換わるのは、その投稿に移動したときだけです。"}};function ze(e,t={}){return String(e).replace(/\{(\w+)\}/g,(e,a)=>null==t[a]?"":String(t[a]))}function Ie(e){const t=Math.max(0,Number(e)||0);return t<1024?`${Math.round(t)} B`:t<1048576?`${(t/1024).toFixed(1)} KB`:`${(t/1048576).toFixed(2)} MB`}function Fe(e){const t=Number(e)||0;return t?`${(t/1e6).toFixed(t>=1e6?1:2)} Mbps`:""}function Re(e,t=120){return String(e||"").normalize("NFKC").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"_").replace(/\s+/g," ").replace(/^[\s.]+|[\s.]+$/g,"").slice(0,t).trim()||"file"}let Ke="en";function Ve(e){const t=String(e||"").trim().toLowerCase();return _e[t]||_e[t.split("-")[0]]||null}function Oe(e="auto"){return "auto"!==e&&Me.includes(e)?e:function(){const e=navigator.languages?.length?navigator.languages:[navigator.language];for(const t of e){const e=Ve(t);if(e)return e}return "en"}()}function Ne(){return Ke}function $e(e,t){const a=Be[Ke]?.[e]??Be.en[e]??e;return t?ze(a,t):a}function Xe(e,t="auto"){if(e&&"auto"!==e)return "zh"===e?"zh-CN":e;const a=Oe(t);return "zh"===a?"zh-CN":a||"en"}const je=["top-right","top-left","bottom-right","bottom-left"];function Ge(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Ue(e){return Ge(e)}E({id:"general",order:0,fields:{language:ae(["auto",...Me],"auto"),navButton:te(true),hotkey:te(true),hotkeyHint:te(true),toastsEnabled:te(true),toastPosition:ae(je,"top-right"),toastDuration:ne(5,{min:0,max:120})},tabs:[{id:"general",titleKey:"general.title",sections:[{titleKey:"general.sectionInterface",controls:[{type:"select",path:"language",labelKey:"general.language",hintKey:"general.languageHint",options:function(){return [{value:"auto",label:`${De} ${$e("general.languageAuto")}`},...Me.map(e=>({value:e,label:`${Ee[e]} ${qe[e]}`}))]}},{type:"switch",path:"navButton",labelKey:"general.navButton",hintKey:"general.navButtonHint"},{type:"switch",path:"hotkey",labelKey:"general.hotkey",hintKey:"general.hotkeyHint"},{type:"switch",path:"hotkeyHint",labelKey:"general.hotkeyReminder",hintKey:"general.hotkeyReminderHint",showIf:e=>e.hotkey}]},{titleKey:"general.sectionToasts",controls:[{type:"switch",path:"toastsEnabled",labelKey:"general.toasts",hintKey:"general.toastsHint"},{type:"select",path:"toastPosition",labelKey:"general.toastPosition",options:je.map(e=>({value:e,labelKey:`general.toastPosition.${e}`})),showIf:e=>e.toastsEnabled},{type:"number",path:"toastDuration",labelKey:"general.toastDuration",hintKey:"general.toastDurationHint",min:0,max:120,showIf:e=>e.toastsEnabled}]}]}],apply(e){!function(e="auto"){Ke=Oe(e);}(e.language);}});const Qe=/\uE000\s*(\d+)\s*\uE001/g;function We(e){return `${e}`}function Ye(e){const t=function(e){const t=String(e||"").trim();if(!t)return null;if(t.startsWith("/")&&!t.startsWith("//"))return t;if(t.startsWith("#"))return t;try{const e=new URL(t,location.origin);if("http:"===e.protocol||"https:"===e.protocol)return e.href}catch{return null}return null}(e.href),a=Ge(e.text||e.href||"");if(!t)return a;const n=[`href="${Ue(t)}"`],r=String(e.target||"").trim(),i=String(e.rel||"").trim();return r&&n.push(`target="${Ue(r)}"`),i?n.push(`rel="${Ue(i)}"`):t.startsWith("http")&&n.push('target="_blank"','rel="noopener noreferrer"'),`${a}`}function Ze(e){return Boolean(function(e){return String(e||"").replace(Qe,"").replace(/\u00a0/g," ").replace(/\s+/g," ").trim()}(e))}function Je(e,t,{multiline:a=true,only:n=null}={}){const r=String(e||"");if(!t?.length){const e=Ge(r);return a?e.replace(/\n/g,"
"):e}let i,o="",s=0;Qe.lastIndex=0;const l=new Set;for(;i=Qe.exec(r);){o+=et(r.slice(s,i.index),a);const e=Number(i[1]),n=t[e];n?(o+=Ye(n),l.add(e)):o+=et(i[0],a),s=i.index+i[0].length;}o+=et(r.slice(s),a);for(const c of n??t.map((e,t)=>t))!l.has(c)&&t[c]&&(o+=(o?" ":"")+Ye(t[c]));return o}function et(e,t){const a=Ge(e);return t?a.replace(/\n/g,"
"):a}const tt=()=>ke("translate"),at=(e,t)=>$e(`translate.${e}`,t),nt=()=>"auto"===tt().translateMode,rt=()=>"replace"===tt().displayMode;function it(){const e=tt().replaceReveal;return "hover"===e||"split"===e?e:"button"}const ot=Object.freeze({post:"data-xp-post",button:"data-xp-btn",result:"data-xp-result",toolbar:"data-xp-toolbar",menu:"data-xp-menu",observed:"data-xp-observed",autoDone:"data-xp-auto-done",autoQueued:"data-xp-auto-queued",originalHtml:"data-xp-original-html",translatedHtml:"data-xp-translated-html",sourceLang:"data-xp-source-lang",peekBound:"data-xp-peek-bound"});function st(){return J(tt().accountBlocklist)}function lt(e){const t=U(e);return !!t&&st().includes(t)}function ct(e){Se("translate",{accountBlocklist:J(e)});}function dt(e){const t=U(e);return t?(ct(st().filter(e=>e!==t)),{ok:true,handle:t,removed:true}):{ok:false,reason:"invalid"}}function ut(e){return lt(e)?{...dt(e),added:false}:function(e){const t=U(e);if(!t)return {ok:false,reason:"invalid"};const a=st();return a.includes(t)?{ok:false,reason:"exists",handle:t}:(ct([...a,t]),{ok:true,handle:t,added:true})}(e)}function pt(e,t){const a=Y(e);return !!(a&&Array.isArray(t)&&t.length)&&t.some(e=>{const t=Y(e);return !!t&&(a===t||a.startsWith(`${t}-`))})}function mt(e){if(!e)return null;if(pt(e,Z(tt().langBlocklist)))return "blocked";const t=Z(tt().langAllowlist);return t.length&&!pt(e,t)?"not-allowed":null}function ft(){return Array.isArray(tt().autoAllowlist)?[...tt().autoAllowlist]:[]}function ht(e){const t=U(e);return !!t&&ft().includes(t)}function gt(e){Se("translate",{autoAllowlist:[...new Set(e.map(U).filter(Boolean))].sort()});}function bt(e){const t=U(e);return t?(gt(ft().filter(e=>e!==t)),{ok:true,handle:t,removed:true}):{ok:false,reason:"invalid"}}function vt(e){return ht(e)?{...bt(e),added:false}:function(e){const t=U(e);if(!t)return {ok:false,reason:"invalid"};const a=ft();return a.includes(t)?{ok:false,reason:"exists",handle:t}:(gt([...a,t]),{ok:true,handle:t,added:true})}(e)}function yt(e){const t=tt();return "auto"===t.translateMode&&!lt(e)&&("allowlist"!==t.autoScope||ht(e))}const wt=168;let xt=null,At=0;function kt(){if(xt)return xt;const e=ge(w,null);return xt=e&&"object"==typeof e?e:{},xt}function Ht(e=tt().cacheHours){const t=Number(e);return !Number.isFinite(t)||t<=0?0:3600*Math.min(t,wt)*1e3}function St(e){try{return 2*JSON.stringify(e).length}catch{return 0}}function Pt(e,t){try{return 2*(JSON.stringify(e).length+JSON.stringify(t).length)}catch{return 0}}function Lt(){clearTimeout(At),xt&&(function(){const e=kt(),t=Ht();if(t<=0){for(const t of Object.keys(e))delete e[t];return}const a=Date.now();for(const[n,r]of Object.entries(e))(!r||"object"!=typeof r||a-(r.at||0)>t)&&delete e[n];}(),function(){const e=kt();if(St(e)<=C)return;const t=Object.entries(e).sort((e,t)=>(e[1]?.at||0)-(t[1]?.at||0));for(const[a]of t)if(delete e[a],St(e)<=8912896)break}(),be(w,xt)||u("XP-1210","failed to persist the translation cache"));}function Ct(){clearTimeout(At),At=setTimeout(Lt,400);}function Tt(e){const t=kt(),a=t[e];if(!a||"object"!=typeof a)return null;const n=Ht();return n<=0?null:Date.now()-(a.at||0)>n?(delete t[e],Ct(),null):(a.at=Date.now(),Ct(),a.value)}function Mt(e){const t=kt();let a=0,n=0;for(const s of Object.keys(t))a+=Pt(s,t[s]),n+=1;const r=C,i=Number(e??tt().cacheHours),o=Number.isFinite(i)&&i>0;return {usedBytes:a,freeBytes:Math.max(0,r-a),limitBytes:r,entryCount:n,pct:Math.min(100,a/r*100),ttlHours:o?Math.min(i,wt):0,enabled:o}}function qt(e){return new Promise((t,a)=>{const n=e.responseType||"json",r={method:e.method||"GET",url:e.url,headers:e.headers||{},responseType:n,timeout:e.timeout||2e4,onload(r){if(e.allow404&&404===r.status)t(null);else {if(r.status<200||r.status>=300){const e=new Error(`HTTP ${r.status}`);return e.status=r.status,e.body="string"==typeof r.responseText?r.responseText:"",void a(e)}if("text"===n)t(null!=r.responseText&&""!==r.responseText?r.responseText:r.response);else if("json"===n){if(null!=r.response&&"object"==typeof r.response)return void t(r.response);const e=r.responseText;if("string"==typeof e&&e.trim())try{return void t(JSON.parse(e))}catch{}t(r.response);}else t(r.response);}},onerror:()=>a(new Error("Network error")),ontimeout:()=>a(new Error("Timeout")),onabort:()=>a(new Error("Aborted"))};"boolean"==typeof e.anonymous&&(r.anonymous=e.anonymous),"function"==typeof e.onProgress&&(r.onprogress=t=>e.onProgress({loaded:t.loaded||0,total:t.total||0})),null!=e.data&&(r.data="string"==typeof e.data?e.data:JSON.stringify(e.data));const i=he(r);"function"==typeof e.onAbort&&i?.abort&&e.onAbort(()=>i.abort());})}function Et(e){const t=String(e||"").toLowerCase();return "zh-cn"===t||"zh"===t?"ZH-HANS":"zh-tw"===t?"ZH-HANT":"pt"===t?"PT-BR":"en"===t?"EN":t.toUpperCase()}function Dt(e){const t=String(e||"").toLowerCase();return "zh-cn"===t||"zh"===t||"zh-tw"===t?"zh":t.split("-")[0]}function _t(e){const t=String(e||"").toLowerCase();return "zh-cn"===t||"zh"===t?"zh":"zh-tw"===t?"zt":t.split("-")[0]}function Bt(e,t="en"){try{return new Intl.DisplayNames([t,"en"],{type:"language"}).of(String(e||"en").replace(/_/g,"-").split("-")[0])}catch(a){return e}}const zt=Object.freeze([{id:"google",name:"Google Translate",badge:"Google",hintKey:"translate.providerHintGoogle",fields:[]},{id:"deepl",name:"DeepL",badge:"DeepL",hintKey:"translate.providerHintDeepl",fields:[{key:"apiKey",type:"password",labelKey:"translate.providerFieldApiKey",hintKey:"translate.providerHintDeeplKey",placeholder:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:fx",required:true,default:""},{key:"plan",type:"select",labelKey:"translate.providerFieldDeeplPlan",default:"free",options:[{value:"free",labelKey:"translate.providerDeeplPlanFree"},{value:"pro",labelKey:"translate.providerDeeplPlanPro"}]}]},{id:"microsoft",name:"Microsoft Translator",badge:"Azure",hintKey:"translate.providerHintMicrosoft",fields:[{key:"apiKey",type:"password",labelKey:"translate.providerFieldApiKey",required:true,default:""},{key:"region",type:"text",labelKey:"translate.providerFieldRegion",hintKey:"translate.providerHintMicrosoftRegion",placeholder:"global",required:true,default:"global"}]},{id:"openai",name:"OpenAI",badge:"OpenAI",hintKey:"translate.providerHintOpenai",fields:[{key:"apiKey",type:"password",labelKey:"translate.providerFieldApiKey",required:true,default:""},{key:"model",type:"text",labelKey:"translate.providerFieldModel",placeholder:"gpt-4o-mini",default:"gpt-4o-mini"},{key:"baseUrl",type:"url",labelKey:"translate.providerFieldBaseUrl",hintKey:"translate.providerHintOpenaiBase",placeholder:"https://api.openai.com/v1",default:"https://api.openai.com/v1"}]},{id:"yandex",name:"Yandex Translate",badge:"Yandex",hintKey:"translate.providerHintYandex",fields:[{key:"apiKey",type:"password",labelKey:"translate.providerFieldApiKey",required:true,default:""},{key:"folderId",type:"text",labelKey:"translate.providerFieldFolderId",hintKey:"translate.providerHintYandexFolder",required:true,default:""}]},{id:"libretranslate",name:"LibreTranslate",badge:"Libre",hintKey:"translate.providerHintLibre",fields:[{key:"apiUrl",type:"url",labelKey:"translate.providerFieldApiUrl",placeholder:"https://libretranslate.com",required:true,default:"https://libretranslate.com"},{key:"apiKey",type:"password",labelKey:"translate.providerFieldApiKeyOptional",default:""}]}]),It=Object.freeze(zt.map(e=>e.id)),Ft=new Map,Rt=3e5,Kt=new Map;function Vt(e,t,a){return `tr:${e}:${a}:${t}`}function Ot(e,t,a){const n=function(e){const t=tt().providerConfig?.[e];return t&&"object"==typeof t?t:{}}(e);switch(e){case "deepl":return async function(e,t,a){const n=String(a.apiKey||"").trim();if(!n)throw new Error("missing-config");const r="pro"==("pro"===a.plan?"pro":"free")?"api.deepl.com":"api-free.deepl.com",i=new URLSearchParams({text:e,target_lang:Et(t)}),o=await qt({method:"POST",url:`https://${r}/v2/translate`,headers:{Authorization:`DeepL-Auth-Key ${n}`,"Content-Type":"application/x-www-form-urlencoded"},data:i.toString(),responseType:"json"}),s=o?.translations?.[0]?.text;if(!s)throw new Error("empty-result");return {text:s,detectedSourceLang:o.translations[0].detected_source_language||null}}(t,a,n);case "microsoft":return async function(e,t,a){const n=String(a.apiKey||"").trim(),r=String(a.region||"global").trim()||"global";if(!n)throw new Error("missing-config");const i=encodeURIComponent(function(e){const t=String(e||"").toLowerCase();return "zh-cn"===t||"zh"===t?"zh-Hans":"zh-tw"===t?"zh-Hant":t}(t)),o=await qt({method:"POST",url:`https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=${i}`,headers:{"Ocp-Apim-Subscription-Key":n,"Ocp-Apim-Subscription-Region":r,"Content-Type":"application/json"},data:[{Text:e}],responseType:"json"}),s=Array.isArray(o)?o[0]:null,l=s?.translations?.[0]?.text;if(!l)throw new Error("empty-result");return {text:l,detectedSourceLang:s?.detectedLanguage?.language||null}}(t,a,n);case "openai":return async function(e,t,a){const n=String(a.apiKey||"").trim();if(!n)throw new Error("missing-config");const r=String(a.model||"gpt-4o-mini").trim()||"gpt-4o-mini",i=String(a.baseUrl||"https://api.openai.com/v1").trim().replace(/\/+$/,"")||"https://api.openai.com/v1",o=Bt(t)||t,s=await qt({method:"POST",url:`${i}/chat/completions`,headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},data:{model:r,temperature:.2,messages:[{role:"system",content:`You are a translator. Translate the user message into ${o} (${t}). Reply with only the translation, no quotes or commentary.`},{role:"user",content:e}]},responseType:"json"}),l=String(s?.choices?.[0]?.message?.content||"").trim();if(!l)throw new Error("empty-result");return {text:l,detectedSourceLang:null}}(t,a,n);case "yandex":return async function(e,t,a){const n=String(a.apiKey||"").trim(),r=String(a.folderId||"").trim();if(!n||!r)throw new Error("missing-config");const i=await qt({method:"POST",url:"https://translate.api.cloud.yandex.net/translate/v2/translate",headers:{Authorization:`Api-Key ${n}`,"Content-Type":"application/json"},data:{folderId:r,texts:[e],targetLanguageCode:Dt(t)},responseType:"json"}),o=i?.translations?.[0]?.text;if(!o)throw new Error("empty-result");return {text:o,detectedSourceLang:i.translations[0].detectedLanguageCode||null}}(t,a,n);case "libretranslate":return async function(e,t,a){const n=function(e){const t=String(e||"").trim().replace(/\/+$/,"");if(!t)throw new Error("missing-config");return t}(a.apiUrl),r=String(a.apiKey||"").trim(),i={q:e,source:"auto",target:_t(t),format:"text"};r&&(i.api_key=r);const o=await qt({method:"POST",url:`${n}/translate`,headers:{"Content-Type":"application/json"},data:i,responseType:"json"}),s=String(o?.translatedText||"").trim();if(!s)throw new Error("empty-result");return {text:s,detectedSourceLang:o.detectedLanguage?.language||null}}(t,a,n);default:return async function(e,t){const a=new URLSearchParams({client:"gtx",sl:"auto",tl:t,dt:"t",q:e}),n=await qt({method:"GET",url:`https://translate.googleapis.com/translate_a/single?${a.toString()}`,responseType:"json",anonymous:true}),r=(Array.isArray(n?.[0])?n[0]:[]).map(e=>Array.isArray(e)?e[0]:"").filter(Boolean).join("");if(!r)throw new Error("empty-result");return {text:r,detectedSourceLang:"string"==typeof n?.[2]?n[2]:"string"==typeof n?.[8]?.[0]?.[0]?n[8][0][0]:null}}(t,a)}}function Nt(){return e=tt().provider,It.includes(e)?tt().provider:"google";var e;}function $t(e,t){const a=String(e||"").trim();if(!a)return false;const n=Vt(Nt(),a,t),r=Tt(n);if(r&&"object"==typeof r&&r.text)return true;const i=Kt.get(n);return Boolean(i)&&Date.now()-i.at{const e=await Ot(n,a,t),i={text:e.text,detectedSourceLang:e.detectedSourceLang||null,fromCache:false,provider:n};return function(e,t){Ht()<=0||(kt()[e]={value:t,at:Date.now()},Ct());}(r,{text:i.text,detectedSourceLang:i.detectedSourceLang}),i})();Ft.set(r,s);try{return await s}finally{Ft.delete(r);}}const jt={translate:"M12.87 15.07l-2.54-2.51.03-.03A17.52 17.52 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z",hide:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z",original:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z",retry:"M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z",download:"M12,16l-5.7-5.7l1.4-1.4l3.3,3.3V2.6h2v9.6l3.3-3.3l1.4,1.4L12,16z M21,15l0,3.5c0,1.4-1.1,2.5-2.5,2.5h-13 C4.1,21,3,19.9,3,18.5V15h2v3.5C5,18.8,5.2,19,5.5,19h13c0.3,0,0.5-0.2,0.5-0.5l0-3.5H21z",search:"M15.5 14h-.79l-.28-.27A6.47 6.47 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z",chevronLeft:"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z",chevronRight:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",play:"M8 5v14l11-7z",pause:"M6 19h4V5H6v14zm8-14v14h4V5h-4z",chevronUp:"M7.41 15.41 12 10.83l4.59 4.58L18 14l-6-6-6 6z",chevronDown:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z",external:"M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z",check:"M9.2 16.2 5.5 12.5l1.4-1.4 2.3 2.3 7-7 1.4 1.4-8.4 8.4Z",close:"M10.59 12 4.54 5.96l1.42-1.42L12 10.59l6.04-6.05 1.42 1.42L13.41 12l6.05 6.04-1.42 1.42L12 13.41l-6.04 6.05-1.42-1.42L10.59 12z",plus:"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z",block:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8 0-1.85.63-3.55 1.69-4.9L16.9 18.31C15.55 19.37 13.85 20 12 20zm6.31-3.1L7.1 5.69C8.45 4.63 10.15 4 12 4c4.42 0 8 3.58 8 8 0 1.85-.63 3.55-1.69 4.9z",video:"M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z",image:"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z",info:"M12 2.75a9.25 9.25 0 1 1 0 18.5 9.25 9.25 0 0 1 0-18.5Zm0 8.25a1 1 0 0 0-1 1v4.5a1 1 0 1 0 2 0V12a1 1 0 0 0-1-1Zm0-3.75a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Z",warning:"M12.87 4.5c-.38-.68-1.36-.68-1.74 0L3.4 18.25c-.37.66.11 1.5.87 1.5h15.46c.76 0 1.24-.84.87-1.5L12.87 4.5ZM11 10.5h2v4h-2v-4Zm0 5.5h2v2h-2v-2Z",error:"M12 2.75a9.25 9.25 0 1 1 0 18.5 9.25 9.25 0 0 1 0-18.5Zm3.03 6.22-1.41-1.41L12 10.59 9.38 7.97 7.97 9.38 10.59 12l-2.62 2.62 1.41 1.41L12 13.41l2.62 2.62 1.41-1.41L13.41 12l2.62-2.62Z"};function Gt(e,t=""){const a=jt[e];return a?``:""}const Ut=Object.freeze([{code:"en",name:"English",flag:"🇺🇸"},{code:"ru",name:"Русский",flag:"🇷🇺"},{code:"uk",name:"Українська",flag:"🇺🇦"},{code:"be",name:"Беларуская",flag:"🇧🇾"},{code:"zh-CN",name:"中文(简体)",flag:"🇨🇳"},{code:"zh-TW",name:"中文(繁體)",flag:"🇹🇼"},{code:"ja",name:"日本語",flag:"🇯🇵"},{code:"ko",name:"한국어",flag:"🇰🇷"},{code:"es",name:"Español",flag:"🇪🇸"},{code:"pt",name:"Português",flag:"🇧🇷"},{code:"de",name:"Deutsch",flag:"🇩🇪"},{code:"fr",name:"Français",flag:"🇫🇷"},{code:"it",name:"Italiano",flag:"🇮🇹"},{code:"pl",name:"Polski",flag:"🇵🇱"},{code:"nl",name:"Nederlands",flag:"🇳🇱"},{code:"tr",name:"Türkçe",flag:"🇹🇷"},{code:"ar",name:"العربية",flag:"🇸🇦"},{code:"he",name:"עברית",flag:"🇮🇱"},{code:"hi",name:"हिन्दी",flag:"🇮🇳"},{code:"bn",name:"বাংলা",flag:"🇧🇩"},{code:"th",name:"ไทย",flag:"🇹🇭"},{code:"vi",name:"Tiếng Việt",flag:"🇻🇳"},{code:"id",name:"Bahasa Indonesia",flag:"🇮🇩"},{code:"ms",name:"Bahasa Melayu",flag:"🇲🇾"},{code:"sv",name:"Svenska",flag:"🇸🇪"},{code:"no",name:"Norsk",flag:"🇳🇴"},{code:"da",name:"Dansk",flag:"🇩🇰"},{code:"fi",name:"Suomi",flag:"🇫🇮"},{code:"cs",name:"Čeština",flag:"🇨🇿"},{code:"sk",name:"Slovenčina",flag:"🇸🇰"},{code:"ro",name:"Română",flag:"🇷🇴"},{code:"hu",name:"Magyar",flag:"🇭🇺"},{code:"el",name:"Ελληνικά",flag:"🇬🇷"},{code:"bg",name:"Български",flag:"🇧🇬"},{code:"sr",name:"Српски",flag:"🇷🇸"},{code:"hr",name:"Hrvatski",flag:"🇭🇷"},{code:"lt",name:"Lietuvių",flag:"🇱🇹"},{code:"lv",name:"Latviešu",flag:"🇱🇻"},{code:"et",name:"Eesti",flag:"🇪🇪"},{code:"fa",name:"فارسی",flag:"🇮🇷"}]);function Qt(e){return e&&e instanceof Element?e.closest('article[data-testid="tweet"]'):null}function Wt(e){if(!(e&&e instanceof Element))return null;const t=Qt(e);if(!t)return null;const a=[...t.querySelectorAll('[data-testid="tweetText"]')];if(a.length<2)return null;if(a[0]===e)return null;const n=e.closest('[data-testid="quoteTweet"]')||e.closest('div[role="link"]')||null;return n&&t.contains(n)&&n.contains(e)?n:null}function Yt(e){if(!e)return null;const t=e.querySelector('[data-testid="User-Name"]');if(t)for(const a of t.querySelectorAll("a[href]")){const e=Q(a.getAttribute("href"));if(e)return e}for(const a of e.querySelectorAll('a[href^="/"]')){const e=a.getAttribute("href")||"";if(/\/status\//i.test(e))continue;const t=Q(e);if(t)return t}return null}function Zt(e){if(!(e&&e instanceof Element))return null;const t=Wt(e);if(t){const e=Yt(t);if(e)return e}const a=Qt(e);if(a){for(const e of a.querySelectorAll('[data-testid="User-Name"]')){if(t&&t.contains(e))continue;const a=Yt(e);if(a)return a}return Yt(a)}return Yt(e.parentElement)}let Jt=null;function ea(e){const t=function(e){const t=Wt(e);if(!t)return null;const a=e=>Boolean(e?.querySelector?.(T.quoteAvatar)&&e?.querySelector?.(T.userName)&&!e.querySelector?.(T.tweetText)),n=[...t.querySelectorAll(".r-1awozwy.r-18u37iz.r-1wbh5a2, .r-1habvwh.r-18u37iz.r-1wbh5a2")].find(a);if(n)return {row:n,before:null};const r=t.querySelector(T.userName);if(!r)return null;let i=r.parentElement;for(;i&&i!==t;){if(a(i)){const e=getComputedStyle(i);if(("flex"===e.display||"inline-flex"===e.display)&&String(e.flexDirection||"row").startsWith("row"))return {row:i,before:null}}i=i.parentElement;}return null}(e);if(t)return t;if(Wt(e))return null;const a=Qt(e);if(!a)return null;const n=e=>!function(e,t){if(!e||!t)return false;const a=e.closest(T.quoteTweet);return Boolean(a&&t.contains(a))}(e,a)&&e.closest("article")===a;let r=null;for(const c of a.querySelectorAll("button[aria-label]"))if(n(c)&&/grok/i.test(c.getAttribute("aria-label")||"")){r=c;break}if(r?.parentElement?.parentElement){const e=r.parentElement,t=e.parentElement;if(t&&a.contains(t))return {row:t,before:e}}const i=[...a.querySelectorAll(T.caret)].find(n);if(!i)return null;let o=null,s=null,l=i;for(;l.parentElement&&l.parentElement!==a;){const e=l.parentElement,t=getComputedStyle(e);if(("flex"===t.display||"inline-flex"===t.display)&&String(t.flexDirection||"").startsWith("row")&&e.children.length>=1&&e.children.length<=4){const t=[...e.children].find(e=>e.contains(i));t&&(o??(o={row:e,before:t}),!s&&e.children.length>=2&&e.getBoundingClientRect().width<=120&&(s={row:e,before:e.firstElementChild}));}l=e;}return s||o}function ta(e){const t=e.querySelector(`[${ot.toolbar}]`);if(t)return t;const a=e.nextElementSibling;if(a?.hasAttribute?.(ot.toolbar))return a;const n=Wt(e);if(n){const e=n.querySelector(`[${ot.toolbar}]`);if(e)return e}return null}function aa(e){const t=ta(e),a=t?.querySelector(`[${ot.button}]`);if(a)return a;const n=Wt(e)||Qt(e);return n?n.querySelector(`.xp-header-action [${ot.button}]`)||n.querySelector(`[${ot.button}][data-xp-header="1"]`):null}function na(e,t){const a=Wt(e);a?t.parentElement===a&&a.lastElementChild===t||a.appendChild(t):e.nextElementSibling!==t&&e.insertAdjacentElement("afterend",t);}function ra(e){let t=ta(e);return t||(t=document.createElement("div"),t.className="xp-toolbar",t.setAttribute(ot.toolbar,"1"),t.setAttribute(x,"")),na(e,t),Jt?.(t,e),t}function ia(e,t,a=false){t.classList.add("xp-btn--header"),t.setAttribute("data-xp-header","1");let n=t.closest(".xp-header-action");n?t.parentElement!==n&&n.appendChild(t):(n=document.createElement("div"),n.className="xp-header-action",n.setAttribute(x,""),n.appendChild(t)),n.classList.toggle("xp-header-action--quote",a),a||!e.before?n.parentElement===e.row&&e.row.lastElementChild===n||e.row.appendChild(n):n.parentElement===e.row&&n.nextElementSibling===e.before||e.row.insertBefore(n,e.before);const r=t.getAttribute("aria-label");r&&(t.title=r);}function oa(e,t){const a=ea(e);if(a)return void ia(a,t,Boolean(Wt(e)));t.classList.remove("xp-btn--header"),t.removeAttribute("data-xp-header");const n=t.closest(".xp-header-action"),r=ra(e);n&&n.replaceWith(t),t.parentElement!==r&&r.insertBefore(t,r.firstChild);}const sa=["xp-text--translated","xp-text--split","xp-text--peeking","xp-text--hover-peek","xp-text--translating","xp-text--blur-ready","xp-text--reveal","xp-text--swap"];function la(e,t){e.classList.remove("xp-text--reveal","xp-text--swap"),e.classList.add(t);const a=n=>{n.target===e&&(e.classList.remove(t),e.removeEventListener("animationend",a));};e.addEventListener("animationend",a),setTimeout(()=>{e.classList.remove(t),e.removeEventListener("animationend",a);},900);}function ca(e){const t=ta(e);if(!t)return;const a=t.querySelector(`[${ot.button}]`),n=Boolean(t.querySelector(`[${ot.result}]`)),r=Boolean(!a||a.hidden)&&!n;t.classList.toggle("xp-toolbar--quiet",r);}const da=new WeakMap;function ua(e){const t=da.get(e);if(!t)return;const a=e.getBoundingClientRect();a.width<=0&&a.height<=0?t.badge.hidden=true:(t.badge.hidden=false,t.badge.style.top=`${Math.max(4,a.top-6)}px`,t.badge.style.left=`${a.right}px`,t.badge.style.transform="translate(-100%, -100%)");}function pa(e){const t=da.get(e);t&&(window.removeEventListener("scroll",t.onMove,true),window.removeEventListener("resize",t.onMove),t.badge.remove(),da.delete(e));}function ma(e){pa(e);const t=e.getAttribute(ot.originalHtml);null!=t&&(e.innerHTML=t,e.removeAttribute(ot.originalHtml),e.removeAttribute(ot.translatedHtml),e.removeAttribute(ot.sourceLang),e.classList.remove(...sa));}function fa(e,t){if(t)return e.setAttribute("aria-busy","true"),e.classList.add("xp-text--blur-ready"),void requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.isConnected&&"true"===e.getAttribute("aria-busy")&&e.classList.add("xp-text--translating");});});e.classList.remove("xp-text--translating","xp-text--blur-ready"),e.removeAttribute("aria-busy");}function ha(e){"1"!==e.getAttribute(ot.peekBound)&&(e.setAttribute(ot.peekBound,"1"),e.addEventListener("mouseenter",()=>{if(!rt()||"hover"!==it())return;if(!e.classList.contains("xp-text--translated"))return;if(e.classList.contains("xp-text--split"))return;if(e.classList.contains("xp-text--translating"))return;const t=e.getAttribute(ot.originalHtml);if(null==t)return;e.innerHTML=t,e.classList.add("xp-text--peeking"),la(e,"xp-text--swap");const a=e.getAttribute(ot.sourceLang);a&&function(e,t){pa(e);const a=function(e){const t=function(e){const t=Y(e);return t&&(Ut.find(e=>Y(e.code)===t)||Ut.find(e=>t.startsWith(`${Y(e.code)}-`))||(t.startsWith("zh")?Ut.find(e=>"zh-CN"===e.code):null))||null}(e);if(t)return `${t.flag} ${t.code}`;const a=Bt(e,Ne());if(a)return a;const n=Y(e);return n?n.toUpperCase():""}(t);if(!a)return;const n=document.createElement("div");n.className="xp-peek-badge",n.setAttribute(x,""),n.textContent=a,n.title=ze(at("detectedLang"),{lang:a}),n.setAttribute("aria-hidden","true"),document.body.appendChild(n);const r=()=>ua(e);da.set(e,{badge:n,onMove:r}),ua(e),window.addEventListener("scroll",r,true),window.addEventListener("resize",r);}(e,a);}),e.addEventListener("mouseleave",()=>{if(!e.classList.contains("xp-text--peeking"))return;pa(e);const t=e.getAttribute(ot.translatedHtml);null!=t?(e.innerHTML=t,e.classList.remove("xp-text--peeking"),e.classList.add("xp-text--translated","xp-text--hover-peek"),la(e,"xp-text--swap")):e.classList.remove("xp-text--peeking");}));}function ga(e,{remove:t=false}={}){const a=ta(e)?.querySelector(`[${ot.result}]`);if(!a)return;const n=()=>{if(a.classList.remove("is-closing"),t)a.remove();else {const e=a.querySelector(".xp-result__inner");e&&(e.innerHTML="");}};if(!a.classList.contains("is-open"))return void n();a.classList.remove("is-open"),a.classList.add("is-closing");const r=e=>{e.target===a.querySelector(".xp-result__clip")&&(a.removeEventListener("transitionend",r),n());};a.addEventListener("transitionend",r),setTimeout(()=>{a.removeEventListener("transitionend",r),n();},360);}function ba(e,t){if(rt()&&!t.error&&!t.panelOnly&&null!=t.translated)return ga(e,{remove:true}),function(e,t,a=[],n=null){e.hasAttribute(ot.originalHtml)||e.setAttribute(ot.originalHtml,e.innerHTML);const r=Y(n);r?e.setAttribute(ot.sourceLang,r):e.removeAttribute(ot.sourceLang),function(e,t){const a=it(),n=e.getAttribute(ot.originalHtml)||"";if(e.setAttribute(ot.translatedHtml,t),e.classList.remove(...sa.filter(e=>"xp-text--translated"!==e)),e.removeAttribute("aria-busy"),"split"===a)return e.innerHTML=`
${Ge(at("originalLabel"))}
${n}
${Ge(at("translationLabel"))}
${t}
`,e.classList.add("xp-text--translated","xp-text--split"),void la(e,"xp-text--swap");e.innerHTML=t,e.classList.add("xp-text--translated"),la(e,"xp-text--reveal"),"hover"===a&&(e.classList.add("xp-text--hover-peek"),ha(e));}(e,Je(t,a));}(e,t.translated,t.links||[],t.detected),null;ma(e);const a=function(e){const t=ra(e);let a=t.querySelector(`[${ot.result}]`);return a||(a=document.createElement("div"),a.className="xp-result",a.setAttribute(ot.result,"1"),a.setAttribute(x,""),a.innerHTML='
',t.appendChild(a),a)}(e),n=a.querySelector(".xp-result__inner");return n?(n.innerHTML=function({translated:e,detected:t,error:a,links:n}){if(a)return `
${Ge(a)}
`;const r=t?ze(at("detectedLang"),{lang:t}):"",i=Je(e,n||[]);return `
${Ge(at("translationLabel"))}
`+(r?`
${Ge(r)}
`:"")+`
${i}
`}(t),a.classList.remove("is-open","is-closing"),requestAnimationFrame(()=>{a.classList.add("is-open");}),a):a}function va(e){ma(e),ga(e,{remove:true});}function ya(){return rt()&&"hover"===it()}function wa(e){return "shown"===e.dataset.xpState}function xa(e){return e.classList.contains("is-loading")}function Aa(e,t,{loading:a=false,glyph:n="translate"}={}){const r=e.classList.contains("xp-btn--header");if(e.classList.toggle("is-loading",a),e.disabled=a,e.setAttribute("aria-label",t),a)return e.setAttribute("aria-busy","true"),void(e.innerHTML=`${Ge(t)}`);e.removeAttribute("aria-busy"),e.innerHTML=`${Gt(n,"xp-btn__icon")}${Ge(t)}`,r?e.title=t:e.removeAttribute("title");}function ka(e,t){if(e.dataset.xpState="shown",ya())return function(e){e.classList.remove("is-loading"),e.disabled=false,e.removeAttribute("aria-busy");}(e),e.hidden=true,void ca(t);e.hidden=false;const a=rt();Aa(e,at(a?"btnShowOriginal":"btnHide"),{glyph:a?"original":"hide"}),ca(t);}function Ha(e,t){e.dataset.xpState="",e.hidden=false,Aa(e,at("btnTranslate")),ca(t);}const Sa='p, h1, h2, h3, h4, li, blockquote, figcaption, [data-block="true"]',Pa="data-xp-art-original",La="data-xp-art-translated";function Ca(e){const t=()=>({text:"",ids:[],chars:0,boldChars:0,italicChars:0}),a=[{text:"",ids:[],chars:0,boldChars:0,italicChars:0}],n=[],r=()=>a[a.length-1],i=(e,t,a)=>{const n=r();n.text+=e;const i=e.replace(/\s/g,"").length;n.chars+=i,t&&(n.boldChars+=i),a&&(n.italicChars+=i);},o=(e,s,l)=>{for(const c of e.childNodes){if(3===c.nodeType){i(String(c.nodeValue).replace(/ /g," ").replace(//g,""),s,l);continue}if(1!==c.nodeType||c.hasAttribute(x))continue;const e=c.tagName;if("STYLE"!==e&&"SCRIPT"!==e)if("BR"!==e){if("IMG"===e){const e=String(c.getAttribute("alt")||"").trim();e&&i(e,s,l);continue}if("A"===e&&c.hasAttribute("href")){const e=n.length,t=String(c.textContent||"").replace(/ /g," ").trim();n.push({href:c.getAttribute("href")||"",text:t,target:c.getAttribute("target")||"",rel:c.getAttribute("rel")||""}),r().ids.push(e),i(We(e),s,l),r().chars+=Math.max(0,t.length-1),s&&(r().boldChars+=Math.max(0,t.length-1)),l&&(r().italicChars+=Math.max(0,t.length-1));continue}o(c,s||"B"===e||"STRONG"===e,l||"I"===e||"EM"===e);}else a.push(t());}};o(e,false,false);const s=a.map(e=>({...e,text:e.text.replace(/[ \t]+/g," ").trim()})).filter(e=>Ze(e.text));if(!s.length)return null;const l=s.map(e=>({text:e.text,ids:e.ids,bold:e.chars>0&&e.boldChars>=e.chars,italic:e.chars>0&&e.italicChars>=e.chars})),c=l.map(e=>e.text.replace(/\s*\d+\s*/g,"")).join(" ").trim();return {lines:l,links:n,plain:c}}function Ta(e,t){const{lines:a,links:n}=e,r=String(t).split(/\r?\n/).map(e=>e.trim());return r.length!==a.length?Je(t,n,{multiline:true}):a.map((e,t)=>{let a=Je(r[t],n,{multiline:false,only:e.ids});return e.italic&&(a=`${a}`),e.bold&&(a=`${a}`),a}).join("
")}function Ma(e){const t=[],a=function(e){let t=e;for(let a=0;a<6;a+=1){if(t=t.parentElement,!t)return null;for(const a of t.querySelectorAll('[data-testid="twitter-article-title"], h1'))if(!e.contains(a)&&!a.closest("article, [data-xp-ui]"))return a}return null}(e);return a&&t.push(a),e.querySelectorAll(Sa).forEach(a=>{if(a.closest(`[${x}]`))return;const n=a.closest("article");n&&e.contains(n)||a.querySelector(Sa)||t.push(a);}),t}function qa(){return Q(location.pathname)||null}const Ea=new Map;let Da=null;function _a(e){Fa(e,""),e.button.dataset.xpState="",e.button.hidden=false,Aa(e.button,at("btnTranslate"));}function Ba(e){Fa(e,"");const t=rt()&&"split"!==it();e.button.dataset.xpState="shown",e.button.hidden=false,Aa(e.button,at(t?"btnShowOriginal":"btnHide"),{glyph:t?"original":"hide"});}function za(e){e.bar.hidden=!(e.button.parentElement===e.bar)&&e.status.hidden&&e.progress.hidden;}function Ia(e,t,a=false){e.status.textContent=t||"",e.status.hidden=!t,e.status.classList.toggle("is-error",a),za(e);}function Fa(e,t){e.progress.textContent=t||"",e.progress.hidden=!t,za(e);}function Ra(e){const{button:t}=e,a=function(e){const t=e.closest(T.article);if(t)return t;let a=e;for(let n=0;n<8;n+=1){if(a=a.parentElement,!a)return null;const t=[...a.querySelectorAll(T.article)].find(t=>!e.contains(t)&&t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING);if(t)return t}return null}(e.root),n=a&&ea(a);if(n)t.classList.remove("xp-article-bar__btn"),ia(n,t);else {t.classList.add("xp-article-bar__btn"),t.classList.remove("xp-btn--header"),t.removeAttribute("data-xp-header");const a=t.closest(".xp-header-action");t.parentElement!==e.bar&&e.bar.prepend(t),a?.remove();}za(e);}function Ka(e,t,a){if(rt()&&"split"!==it())return t.hasAttribute(Pa)||t.setAttribute(Pa,t.innerHTML),t.setAttribute(La,a),t.innerHTML=a,"hover"===it()&&function(e){"1"!==e.dataset.xpPeekBound&&(e.dataset.xpPeekBound="1",e.addEventListener("mouseenter",()=>{const t=e.getAttribute(Pa);null!=t&&e.hasAttribute(La)&&(e.innerHTML=t,e.classList.add("xp-article-peek"));}),e.addEventListener("mouseleave",()=>{const t=e.getAttribute(La);null!=t&&e.classList.contains("xp-article-peek")&&(e.innerHTML=t,e.classList.remove("xp-article-peek"));}));}(t),void e.painted.push({el:t,box:null});const n=document.createElement("div");n.className="xp-article-tr",n.setAttribute(x,""),n.innerHTML=a,"LI"===t.tagName?t.appendChild(n):t.insertAdjacentElement("afterend",n),e.painted.push({el:t,box:n});}function Va(e){for(const{el:t,box:a}of e.painted){a?.remove();const e=t.getAttribute(Pa);null!=e&&(t.innerHTML=e,t.removeAttribute(Pa),t.removeAttribute(La),t.classList.remove("xp-article-peek"));}e.painted=[];}const Oa=e=>new Promise(t=>setTimeout(t,e));async function Na(e){const a=e.runId+=1,n=()=>e.runId===a&&e.root.isConnected,r=Ma(e.root).map(e=>({el:e,extracted:Ca(e)})).filter(e=>e.extracted);if(!r.length)return;const i=Xe(tt().targetLang,Ne()),o=r.length;let s=0,l=0,c=false;const d=()=>{const t=ze(at("articleProgress"),{done:s,total:o});Aa(e.button,t,{loading:true}),Fa(e,t);};Ia(e,""),d(),e.painted=[];const p=Math.max(0,r.findIndex(e=>e.extracted.plain.length>=25)),m=[p,...r.map((e,t)=>t).filter(e=>e!==p)],f=async e=>{const{el:a,extracted:o}=r[e];try{const{result:e,html:t}=await async function(e,t){const a=e.lines.map(e=>e.text).join("\n");for(let r=1;;r+=1)try{const n=await Xt(a,t);return {result:n,html:Ta(e,n.text)}}catch(n){if("missing-config"===n?.message||r>=3)throw n;await Oa(700*r*r);}}(o,i);return n()?(s+=1,d(),{block:a,result:e,html:t}):null}catch(p){return n()?(l+=1,s+=1,"missing-config"===p?.message?c=true:u(t,"article block translation failed",{error:p}),d(),null):null}},h=await f(m[0]);if(n()){if(h){const t=h.result.detectedSourceLang,a=mt(t);if(a)return Ia(e,at("blocked"===a?"langSkippedBlocked":"langSkippedNotAllowed")),void _a(e);if(t&&t.toLowerCase()===i.toLowerCase()&&r[m[0]].extracted.plain.trim()===h.result.text.trim())return Ia(e,at("articleSame")),void _a(e);Ka(e,h.block,h.html);}else if(c)return Ia(e,at("errProviderConfig"),true),void _a(e);if(await async function(e,t,a){let n=0;const r=Array.from({length:Math.min(2,e.length)},async()=>{for(;n{if(!n())return;const a=await f(t);a&&n()&&Ka(e,a.block,a.html);}),n()){if(l===o)return c?Ia(e,at("errProviderConfig"),true):tt().hideErrors||Ia(e,at("errNetwork"),true),void _a(e);l&&!tt().hideErrors&&Ia(e,at("errNetwork"),true),Ba(e);}}}function $a(e){const t=document.createElement("div");t.className="xp-article-bar",t.setAttribute("data-xp-article-bar","1"),t.setAttribute(x,"");const a=document.createElement("button");a.type="button",a.className="xp-btn xp-article-bar__btn",a.setAttribute(x,"");const n=document.createElement("span");n.className="xp-article-bar__status",n.setAttribute(x,""),n.hidden=true;const r=document.createElement("span");r.className="xp-article-bar__status",r.setAttribute(x,""),r.hidden=true,t.append(a,r,n);const i={root:e,bar:t,button:a,status:n,progress:r,runId:0,painted:[],autoDone:false};return Aa(a,at("btnTranslate")),a.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),function(e){const{button:t}=e;t.classList.contains("is-loading")||("shown"===t.dataset.xpState?(e.runId+=1,Va(e),Ia(e,""),_a(e)):Na(e));}(i);}),e.insertAdjacentElement("beforebegin",t),Ea.set(e,i),Ra(i),i}function Xa(e){nt()&&yt(qa())&&(e.autoDone||(Da??(Da=new IntersectionObserver(e=>{for(const t of e){if(!t.isIntersecting)continue;Da.unobserve(t.target);const e=Ea.get(t.target);e&&!e.autoDone&&(e.autoDone=true,"shown"!==e.button.dataset.xpState&&Na(e));}})),Da.observe(e.root)));}function ja(e){const t=Ea.get(e);t&&(t.runId+=1,Va(t),Da?.unobserve(t.root),t.button.closest(".xp-header-action")?.remove(),t.bar.remove(),Ea.delete(e));}function Ga(){for(const e of [...Ea.keys()])ja(e);}function Ua(){const e=tt(),t=qa();if(!e.enabled||!e.articles||t&<(t))return void Ga();const a=new Set(document.querySelectorAll('[data-testid="twitterArticleRichTextView"], .x-article-body'));for(const n of [...Ea.keys()])a.has(n)&&n.isConnected||ja(n);for(const n of a){let e=Ea.get(n);if(e)e.bar.isConnected||n.insertAdjacentElement("beforebegin",e.bar);else {if(!Ma(n).some(e=>Ca(e)))continue;e=$a(n);}Ra(e);const{button:t}=e;t.classList.contains("is-loading")||("shown"===t.dataset.xpState?Ba(e):_a(e)),Xa(e);}}function Qa(e){return function(e){!function(e){for(const t of [...e.querySelectorAll("img[alt]")]){const e=String(t.getAttribute("alt")||"").replace(/\u00a0/g," ").trim();e&&t.replaceWith(document.createTextNode(e));}for(const t of [...e.querySelectorAll('[role="img"][aria-label]')]){if("IMG"===t.tagName)continue;const e=String(t.getAttribute("aria-label")||"").replace(/\u00a0/g," ").trim();e&&t.replaceWith(document.createTextNode(e));}}(e);const t=[],a=[...e.querySelectorAll("a[href]")];for(const n of a){const e=t.length;t.push({href:n.getAttribute("href")||"",text:String(n.innerText||n.textContent||"").replace(/\u00a0/g," ").trim(),target:n.getAttribute("target")||"",rel:n.getAttribute("rel")||""}),n.replaceWith(document.createTextNode(`${e}`));}return {text:String(e.innerText||e.textContent||"").replace(/\u00a0/g," ").trim(),links:t}}(function(e){const t=e.getAttribute(ot.originalHtml);if(null!=t){const e=document.createElement("div");return e.innerHTML=t,e}const a=e.cloneNode(true);return a.querySelectorAll(`[${ot.toolbar}], [${ot.button}], [${ot.result}]`).forEach(e=>e.remove()),a}(e))}const Wa=/^(show original|показать оригинал|mostrar (el )?original|afficher l['’]original|original anzeigen|mostra (l['’])?originale|オリジナルを表示|显示原文|顯示原文|mostrar original|about automatic translation|об автоматическом переводе|acerca de la traducci[oó]n autom[aá]tica|à propos de la traduction automatique|informationen zur automatischen [üu]bersetzung|informazioni sulla traduzione automatica|自動翻訳について|关于自动翻译|關於自動翻譯|sobre a tradu[cç][aã]o autom[aá]tica)$/i;function Ya(e){return Boolean(e?.closest?.(`[${ot.toolbar}], [${ot.button}], [${ot.result}], .xp-header-action, .xp-btn`))}function Za(e){if(!e||!(e instanceof Element)||Ya(e))return false;if(e.matches?.(T.tweetText))return false;if(e.querySelector?.(`:scope > ${T.tweetText}`))return false;if(e.matches?.(T.quoteTweet))return false;for(const t of e.querySelectorAll("svg path[d]"))if(!Ya(t)&&(t.getAttribute("d")||"").includes(M))return true;for(const t of e.querySelectorAll("button[aria-label]")){if(Ya(t))continue;const e=(t.getAttribute("aria-label")||"").trim();if(Wa.test(e))return true}return false}function Ja(e,t){for(const a of ["previousElementSibling","nextElementSibling"]){let n=e[a];for(;n;){if(true===t(n))return true;n=n[a];}}return false}function en(e){return false!==tt().skipNativeAutoTranslate&&function(e){const t=Wt(e),a=Qt(e),n=t||a;if(!n)return false;let r=e;for(let i=0;i<6&&r&&n.contains(r);i+=1){if(Ja(r,a=>a!==e&&!a.contains?.(e)&&!a.matches?.(T.tweetText)&&!(!t&&a.matches?.(T.quoteTweet))&&!a.querySelector?.(`${T.userName}, ${T.caret}`)&&Za(a)))return true;if(r===n)break;r=r.parentElement;}return false}(e)}let tn=null,an=0;const nn=[];function rn(e,t){"1"!==e.dataset.xpBound&&(e.dataset.xpBound="1",K(e),e.addEventListener("click",a=>{a.stopPropagation();const n=a.target.closest?.("a[href]");if(n&&e.contains(n))return;a.preventDefault();const r=a.target.closest?.("[data-xp-retry]");if(r&&e.contains(r)){const e=aa(t);e&&(t.removeAttribute(ot.autoDone),ln(t,e));}},true));}function on(e,t){"1"!==e.dataset.xpBound&&(e.dataset.xpBound="1",K(e),e.addEventListener("click",a=>{a.preventDefault(),a.stopPropagation(),function(e,t){if(!xa(t))wa(t)?(va(e),Ha(t,e),e.setAttribute(ot.autoDone,"1")):(e.removeAttribute(ot.autoDone),ln(e,t));}(t,e);},true));}function sn(e){let t=aa(e);return t||(t=document.createElement("button"),t.type="button",t.className="xp-btn",t.setAttribute(ot.button,"1"),t.setAttribute(x,""),Aa(t,at("btnTranslate"))),oa(e,t),on(t,e),ca(e),t}async function ln(e,a){const{text:n,links:r}=Qa(e);if(!Ze(n))return fa(e,false),void vn(e);const i=Xe(tt().targetLang,Ne());va(e),function(e,t){if(ya())return fa(e,true),t.hidden=true,t.classList.add("is-loading"),t.disabled=true,t.setAttribute("aria-busy","true"),void ca(e);t.hidden=false,ca(e),Aa(t,at("translating"),{loading:true});}(e,a);try{const t=await Xt(n,i);fa(e,!1);const o=mt(t.detectedSourceLang);o?(ba(e,{translated:at("blocked"===o?"langSkippedBlocked":"langSkippedNotAllowed"),detected:t.detectedSourceLang,fromCache:t.fromCache,panelOnly:!0}),function(e,t){e.hidden=!1,Aa(e,at("btnHide"),{glyph:"hide"}),e.dataset.xpState="shown",ca(t);}(a,e)):t.detectedSourceLang&&t.detectedSourceLang.toLowerCase()===i.toLowerCase()&&t.text.trim()===n.trim()?(va(e),Ha(a,e)):(ba(e,{translated:t.text,detected:t.detectedSourceLang,fromCache:t.fromCache,links:r}),ka(a,e)),e.setAttribute(ot.autoDone,"1");}catch(o){fa(e,false),"missing-config"!==o?.message&&u(t,"translation failed",{error:o}),"missing-config"===o?.message?ba(e,{error:at("errProviderConfig")}):tt().hideErrors?va(e):ba(e,{error:at("errNetwork")}),Ha(a,e),e.setAttribute(ot.autoDone,"1");}}function cn(e){if(!nt())return false;if(en(e))return false;const t=Zt(e);return !lt(t)&&yt(t)}function dn(e){if(!document.documentElement.hasAttribute(P))return false;const t=e.closest(`[${H}="active"]`);return !t||!t.hasAttribute(S)&&!function(e){const t=un(e);return Boolean(t)&&$t(t.text,t.targetLang)}(e)}function un(e){const{text:t}=Qa(e);return Ze(t)?{text:t,targetLang:Xe(tt().targetLang,Ne())}:null}function pn(e){tt().enabled&&nt()&&e.querySelectorAll(`[${ot.post}]`).forEach(e=>{if(!cn(e)||"1"===e.getAttribute(ot.autoDone))return;const t=un(e);t&&async function(e,t){const a=String(e||"").trim();if(!a||$t(a,t))return;const n=Vt(Nt(),a,t);if(!Ft.has(n))try{!function(e,t){for(Kt.set(e,{result:t,at:Date.now()});Kt.size>16;)Kt.delete(Kt.keys().next().value);}(n,await Xt(a,t));}catch{}}(t.text,t.targetLang);});}function mn(e){tt().enabled&&nt()&&e.querySelectorAll(`[${ot.post}]`).forEach(e=>{cn(e)&&gn(e);});}function fn(){nn.length=0,an=0,tn&&(tn.disconnect(),tn=null),document.querySelectorAll(`[${ot.observed}]`).forEach(e=>{e.removeAttribute(ot.observed);});}function hn(){for(;an<2&&nn.length;){const e=nn.shift();if(!e||!document.contains(e))continue;if(e.removeAttribute(ot.autoQueued),!cn(e)||dn(e))continue;if("1"===e.getAttribute(ot.autoDone))continue;const t=aa(e);!t||xa(t)||wa(t)?t&&wa(t)&&e.setAttribute(ot.autoDone,"1"):(an+=1,Promise.resolve(ln(e,t)).catch(()=>{}).finally(()=>{an=Math.max(0,an-1),hn();}));}}function gn(e){if(!cn(e)||dn(e))return;if("1"===e.getAttribute(ot.autoDone))return;if("1"===e.getAttribute(ot.autoQueued))return;const t=aa(e);!t||xa(t)||wa(t)?t&&wa(t)&&e.setAttribute(ot.autoDone,"1"):(e.setAttribute(ot.autoQueued,"1"),nn.push(e),hn());}function bn(e){if(!cn(e))return;const t=tn||(tn=new IntersectionObserver(e=>{if(nt())for(const t of e)t.isIntersecting&&t.target instanceof HTMLElement&&gn(t.target);},{root:null,rootMargin:"0px",threshold:0}),tn);"1"!==e.getAttribute(ot.observed)&&(e.setAttribute(ot.observed,"1"),t.observe(e));}function vn(e){va(e);const t=aa(e),a=t?.closest?.(".xp-header-action");ta(e)?.remove(),a?a.remove():"1"===t?.getAttribute?.("data-xp-header")&&t.remove(),e.removeAttribute(ot.post),e.removeAttribute(ot.observed),e.removeAttribute(ot.autoDone),e.removeAttribute(ot.autoQueued);try{tn?.unobserve(e);}catch{}}function yn(e){if(lt(Zt(e))||en(e))vn(e);else if(function(e){const{text:t}=Qa(e);return Ze(t)}(e)){if(e.hasAttribute(ot.post)){const t=ta(e);t&&(na(e,t),rn(t,e));const a=aa(e);return a?(oa(e,a),on(a,e)):sn(e),void bn(e)}e.setAttribute(ot.post,"1"),sn(e),bn(e);}else vn(e);}function wn(){if(!tt().enabled)return fn(),document.querySelectorAll(`[${ot.post}]`).forEach(vn),void document.querySelectorAll(`[${ot.toolbar}], .xp-header-action`).forEach(e=>e.remove());nt()||fn(),function(e=document){const t=[];return e.querySelectorAll(T.tweetText).forEach(e=>{if(!e.closest?.(T.article))return;const a=e.parentElement?.closest?.(T.tweetText);a&&a!==e||t.push(e);}),t}().forEach(yn),nt()&&document.querySelectorAll(`[${ot.post}]`).forEach(e=>{cn(e)&&gn(e);}),document.querySelectorAll(`[${ot.post}]`).forEach(e=>{const t=aa(e);t&&!xa(t)&&(wa(t)?ka(t,e):Ha(t,e));});}Jt=rn;const xn="xp-toast-host",An=["info","success","warning","error"],kn={info:"info",success:"check",warning:"warning",error:"error"};function Hn(e){if(!e||"1"===e.dataset.xpLeaving)return;e.dataset.xpLeaving="1",e.classList.add("is-leaving");const t=()=>e.remove();e.addEventListener("transitionend",t,{once:true}),setTimeout(t,280);}const Sn={update(){},dismiss(){}};function Pn(e,t={}){const a=ke("general");if(false===a.toastsEnabled&&!t.force)return Sn;let n=An.includes(t.type)?t.type:"info";const r=function(e){let t=document.getElementById(xn);return t?.isConnected||(t=document.createElement("div"),t.id=xn,t.setAttribute(x,""),t.setAttribute("aria-live","polite"),t.setAttribute("aria-relevant","additions"),(document.body||document.documentElement).appendChild(t)),t.className=`xp-toast-host xp-toast-host--${e}`,t}(a.toastPosition);for(;r.children.length>=4;)Hn(r.firstElementChild);const i=document.createElement("div");i.setAttribute(x,""),i.setAttribute("role","status"),i.innerHTML=``;const o=i.querySelector(".xp-toast__icon"),s=i.querySelector(".xp-toast__title"),l=i.querySelector(".xp-toast__text"),c=i.querySelector(".xp-toast__bar");let d=0,u=t.title||"";const p=()=>{i.className=`xp-toast xp-toast--${n}${i.classList.contains("is-visible")?" is-visible":""}`,o.innerHTML=Gt(kn[n]);const e=u||function(e){return $e(`toast.title.${e}`)}(n);s.textContent=e,s.hidden=!e;},m=e=>{clearTimeout(d),c.style.animation="none",c.style.width="",e>0?(c.hidden=false,c.style.animation="",c.style.animationDuration=`${e}ms`,d=setTimeout(()=>Hn(i),e)):c.hidden=true;};l.textContent=String(e||""),l.hidden=!l.textContent,p(),i.querySelector(".xp-toast__close").addEventListener("click",()=>Hn(i)),r.appendChild(i),requestAnimationFrame(()=>i.classList.add("is-visible"));const f=Number.isFinite(t.duration)?t.duration:1e3*a.toastDuration;return m(f),{update(e={}){var t;i.isConnected&&"1"!==i.dataset.xpLeaving&&(e.type&&An.includes(e.type)&&(n=e.type),null!=e.title&&(u=e.title),null!=e.message&&(l.textContent=String(e.message),l.hidden=!l.textContent),p(),"number"==typeof e.progress&&(t=e.progress,clearTimeout(d),c.hidden=false,c.style.animation="none",c.style.transform="none",c.style.width=`${Math.round(100*Math.min(1,Math.max(0,t)))}%`),Number.isFinite(e.duration)&&(c.style.transform="",m(e.duration)));},dismiss:()=>Hn(i)}}const Ln=`${T.article} ${T.caret}[aria-expanded="true"]`,Cn=["delete","embed","mute","block","report","not interested","follow","unfollow","bookmark","add/remove","view post","copy link","удалить","встроить","игнорировать","пожаловаться","читать"];function Tn(e,t,a,n){const r=document.createElement("div");return r.setAttribute(ot.menu,e),r.setAttribute(x,""),r.setAttribute("role","menuitem"),r.setAttribute("tabindex","0"),r.setAttribute("aria-label",t),r.className="xp-menu-item",r.style.cssText="display: flex; flex-direction: row; align-items: center; gap: 12px; padding: 12px 16px; outline: 0; cursor: pointer; color: inherit;",r.innerHTML=`
${Gt(a)}
${Ge(t)}
`,r.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),n();},true),r}function Mn(e,t,a,n){const r=t(e);if(!r.ok&&"invalid"===r.reason)return void Pn(at("allowlistInvalid"),{type:"warning"});const i=W(r.handle||e);r.added?Pn(ze(at(a),{handle:i}),{type:"success"}):Pn(ze(at(n),{handle:i}),{type:"info"}),wn(),document.dispatchEvent(new KeyboardEvent("keydown",{key:"Escape",bubbles:true,cancelable:true}));}function qn(){if(!tt().enabled)return void document.querySelectorAll(`[${ot.menu}]`).forEach(e=>e.remove());const e=function(e){if(!(e&&e instanceof Element))return null;const t=e.closest('article[data-testid="tweet"]');if(t){const e=t.querySelector('[data-testid="tweetText"]');return e?Zt(e):Yt(t)}return null}(document.querySelector(Ln)||document.querySelector(`${T.article} ${T.caret}[aria-pressed="true"]`)||document.querySelector(`${T.article} ${T.caret}`));e&&document.querySelectorAll('[role="menu"]').forEach(t=>{(function(e){if(!(e instanceof Element))return false;if(e.querySelector(`[${ot.menu}]`))return true;if(!e.querySelectorAll('[role="menuitem"], [data-testid]').length)return false;const t=(e.textContent||"").toLowerCase();return !!Cn.some(e=>t.includes(e))||Boolean(document.querySelector(Ln))})(t)&&function(e,t){const a=e.querySelector(`[${ot.menu}="auto"]`),n=e.querySelector(`[${ot.menu}="block"]`),r=function(e){const t=e.querySelector('[role="menuitem"]')||e.querySelector("[data-testid]");return t?.parentElement||e}(e);if("auto"===tt().translateMode){if(!a){const a=e.querySelector('[role="menuitem"]')||e.querySelector("[data-testid]"),n=function(e){return Tn("auto",ht(e)?at("menuRemoveAutoAccount"):at("menuAddAutoAccount"),"translate",()=>Mn(e,vt,"allowlistAdded","allowlistRemoved"))}(t);a?.parentElement?a.parentElement.insertBefore(n,a):r.appendChild(n);}}else a?.remove();if(!n){const a=e.querySelector(`[${ot.menu}="auto"]`),n=function(e){return Tn("block",lt(e)?at("menuUnblockAccount"):at("menuBlockAccount"),"block",()=>Mn(e,ut,"blocklistAdded","blocklistRemoved"))}(t);a?.parentElement?a.insertAdjacentElement("afterend",n):r.appendChild(n);}}(t,e);});}const En={Backquote:"`",Minus:"-",Equal:"=",BracketLeft:"[",BracketRight:"]",Backslash:"\\",Semicolon:";",Quote:"'",Comma:",",Period:".",Slash:"/",Space:"Space",Escape:"Esc",ArrowUp:"↑",ArrowDown:"↓",ArrowLeft:"←",ArrowRight:"→"};function Dn(e){if(!e)return "";if(En[e])return En[e];const t=/^(?:Key|Digit)(.+)$/.exec(e);return t?t[1]:e.replace(/^Numpad/,"Num ")}function _n(e=""){return z("div","xp-row"+(e?` ${e}`:""))}function Bn({title:e,desc:t}){const a=z("section","xp-section"),n=z("header","xp-section__head");e&&n.appendChild(z("h3","xp-section__title",e)),t&&n.appendChild(z("p","xp-section__desc",t)),a.appendChild(n);const r=z("div","xp-section__body");return a.appendChild(r),{section:a,body:r}}function zn(e){return z("p","xp-hint",e)}function In(e,t,a){const n=_n(),r=z("label","xp-field");return e&&r.appendChild(z("span","xp-field__label",e)),r.appendChild(a),t&&r.appendChild(z("span","xp-field__hint",t)),n.appendChild(r),n}function Fn({label:e,hint:t,options:a,value:n,onChange:r}){const i=document.createElement("select");return Rn(i,a,n),i.addEventListener("change",()=>r(i.value)),{row:In(e,t,i),input:i}}function Rn(e,t,a){e.replaceChildren(...t.map(e=>{const t=document.createElement("option");return t.value=e.value,t.textContent=e.label,t.selected=String(e.value)===String(a),t}));}function Kn({label:e,hint:t,value:a,type:n="text",placeholder:r,onChange:i}){const o=document.createElement("input");return o.type=n,o.autocomplete="off",o.spellcheck=false,r&&(o.placeholder=r),o.value=a??"",o.addEventListener("input",()=>i(o.value)),{row:In(e,t,o),input:o}}const Vn=new Set(["ShiftLeft","ShiftRight","ControlLeft","ControlRight","AltLeft","AltRight","MetaLeft","MetaRight"]);function On({label:e,variant:t="ghost",onClick:a,compact:n=false}){const r=z("button",`xp-btn-ui xp-btn-ui--${t}${n?" xp-btn-ui--compact":""}`,e);return r.type="button",r.addEventListener("click",a),r}function Nn(...e){const t=_n("xp-row--actions");return t.append(...e),t}const $n=(e,t)=>$e(`translate.${e}`,t);function Xn(e){const t=Y(e),a=Ut.find(e=>Y(e.code)===t);return a?`${a.flag} ${a.name}`:e}function jn(e=[]){const t=new Set(e.map(Y));return Ut.filter(e=>!t.has(Y(e.code))).map(e=>({value:Y(e.code),label:`${e.flag} ${e.name}`}))}const Gn=e=>"auto"===e.translateMode,Un=[{id:"translate",titleKey:"translate.sectionTranslation",badge:e=>function(e){if(!e||"auto"===e)return `${De} ${$n("badgeLangAuto")}`;const t=Ut.find(t=>t.code===e)||("zh"===e?Ut.find(e=>"zh-CN"===e.code):null);return t?`${t.flag} ${t.code}`:e}(e.translate.targetLang),sections:[{titleKey:"translate.sectionMain",controls:[{type:"switch",path:"enabled",labelKey:"translate.enabled",hintKey:"translate.enabledHint"},{type:"switch",path:"articles",labelKey:"translate.articles",hintKey:"translate.articlesHint",showIf:e=>e.enabled}]},{titleKey:"translate.settingsSectionTranslate",showIf:e=>e.enabled,controls:[{type:"select",path:"targetLang",labelKey:"translate.settingsTargetLang",options:()=>[{value:"auto",label:`${De} ${$n("langAuto")}`},...Ut.map(e=>({value:e.code,label:`${e.flag} ${e.name}`}))]},{type:"select",path:"translateMode",labelKey:"translate.settingsTranslateMode",hintKey:"translate.settingsTranslateModeHint",options:[{value:"button",labelKey:"translate.translateModeButton"},{value:"auto",labelKey:"translate.translateModeAuto"}]},{type:"select",path:"autoScope",labelKey:"translate.settingsAutoScope",hintKey:"translate.settingsAutoScopeHint",options:[{value:"all",labelKey:"translate.autoScopeAll"},{value:"allowlist",labelKey:"translate.autoScopeAllowlist"}],showIf:Gn},{type:"list",kind:"handle",path:"autoAllowlist",titleKey:"translate.autoScopeAllowlist",hintKey:"translate.settingsAllowlistHint",placeholderKey:"translate.allowlistPlaceholder",addKey:"translate.allowlistAdd",emptyKey:"translate.allowlistEmpty",showIf:e=>Gn(e)&&"allowlist"===e.autoScope},{type:"select",path:"displayMode",labelKey:"translate.settingsDisplayMode",hintKey:"translate.settingsDisplayModeHint",options:[{value:"panel",labelKey:"translate.displayModePanel"},{value:"replace",labelKey:"translate.displayModeReplace"}]},{type:"select",path:"replaceReveal",labelKey:"translate.settingsReplaceReveal",hintKey:"translate.settingsReplaceRevealHint",options:[{value:"button",labelKey:"translate.replaceRevealButton"},{value:"hover",labelKey:"translate.replaceRevealHover"},{value:"split",labelKey:"translate.replaceRevealSplit"}],showIf:e=>"replace"===e.displayMode},{type:"switch",path:"skipNativeAutoTranslate",labelKey:"translate.settingsSkipNative",hintKey:"translate.settingsSkipNativeHint"},{type:"switch",path:"hideErrors",labelKey:"translate.settingsHideErrors",hintKey:"translate.settingsHideErrorsHint"}]},{titleKey:"translate.settingsSectionProvider",showIf:e=>e.enabled,controls:[{type:"select",path:"provider",labelKey:"translate.settingsProvider",hintKey:"translate.settingsProviderHint",options:zt.map(e=>({value:e.id,label:e.name}))},{type:"custom",render:function(e){const t=z("div","xp-provider-panels"),a=new Map;for(const r of zt){const n=z("div","xp-provider-fields"),i=e.section.providerConfig[r.id];for(const t of r.fields){const a={label:$e(t.labelKey),hint:t.hintKey?$e(t.hintKey):"",value:i[t.key],onChange:a=>{i[t.key]=a,e.changed();}},r="select"===t.type?Fn({...a,options:t.options.map(e=>({value:e.value,label:$e(e.labelKey)}))}):Kn({...a,type:"password"===t.type?"password":"url"===t.type?"url":"text",placeholder:t.placeholder});n.appendChild(r.row);}n.appendChild(z("p","xp-hint",$e(r.hintKey))),a.set(r.id,n),t.appendChild(n);}const n=()=>{for(const[t,n]of a)n.hidden=t!==e.section.provider;};return e.subscribe(n),n(),t}}]},{titleKey:"translate.settingsSectionAccounts",showIf:e=>e.enabled,controls:[{type:"list",kind:"handle",path:"accountBlocklist",titleKey:"translate.settingsAccountBlocklist",hintKey:"translate.settingsAccountBlocklistHint",placeholderKey:"translate.allowlistPlaceholder",addKey:"translate.allowlistAdd",emptyKey:"translate.blocklistEmpty"}]},{titleKey:"translate.settingsSectionLanguages",showIf:e=>e.enabled,controls:[{type:"list",kind:"lang",path:"langAllowlist",titleKey:"translate.settingsLangAllowlist",hintKey:"translate.settingsLangAllowlistHint",addKey:"translate.langListAdd",emptyKey:"translate.langListEmpty",formatItem:Xn,pickerOptions:jn},{type:"list",kind:"lang",path:"langBlocklist",titleKey:"translate.settingsLangBlocklist",hintKey:"translate.settingsLangBlocklistHint",addKey:"translate.langListAdd",emptyKey:"translate.langListEmpty",formatItem:Xn,pickerOptions:jn}]}]},{id:"translate-cache",titleKey:"translate.sectionCache",badge:function(e){const t=Mt(e.translate.cacheHours);return t.enabled?`${t.pct<10&&t.pct>0?t.pct.toFixed(1):String(Math.round(t.pct))}%`:$n("badgeCacheOff")},sections:[{titleKey:"translate.settingsSectionCache",controls:[{type:"custom",render:function(e){const t=function({title:e}){const t=z("div","xp-meter");return t.innerHTML='

',t.querySelector(".xp-meter__title").textContent=e,t}({title:$n("cacheMeterTitle")}),a=_n();a.appendChild(t);const n=()=>function(e,t){const a=Mt(t),n=function(e=Mt()){return e.enabled?e.pct>=85?"high":e.pct>=60?"warn":"ok":"off"}(a),r=`${a.pct<10&&a.pct>0?a.pct.toFixed(1):Math.round(a.pct)}%`,i={used:Ie(a.usedBytes),limit:Ie(a.limitBytes)},o=a.enabled?ze($n("cacheMeterTtl"),{hours:a.ttlHours}):$n("cacheMeterDisabled");e.dataset.level=n,e.querySelector(".xp-meter__pct").textContent=r,e.querySelector(".xp-meter__used").textContent=ze($n("cacheMeterUsed"),i);const s=e.querySelector(".xp-meter__bar");s.setAttribute("aria-valuenow",String(Math.round(a.pct))),s.setAttribute("aria-label",ze($n("cacheMeterAria"),{...i,pct:r,count:a.entryCount})),e.querySelector(".xp-meter__fill").style.width=`${Math.max(a.pct>0?1.5:0,a.pct)}%`,e.querySelector(".xp-meter__meta").textContent=[ze($n("cacheMeterEntries"),{count:a.entryCount}),o,ze($n("cacheMeterFree"),{free:Ie(a.freeBytes)})].join(" · "),e.querySelector(".xp-meter__hint").textContent=$n("cacheMeterHint");}(t,e.section.cacheHours);return e.subscribe(n),n(),a}},{type:"number",path:"cacheHours",labelKey:"translate.settingsCacheHours",hintKey:"translate.settingsCacheHint",min:0,max:wt},{type:"custom",render:function(e){return Nn(On({label:$n("settingsClearCache"),variant:"danger",onClick:()=>{xt={},clearTimeout(At),be(w,{}),e.changed(),Pn($n("settingsCacheCleared"),{type:"info"});}}))}}]}]}],Qn=Un.filter(e=>"translate-cache"!==e.id),Wn=Un.find(e=>"translate-cache"===e.id);E({id:"translate",order:10,fields:{enabled:te(true),articles:te(true),provider:ae(It,"google"),providerConfig:function(){const e={};for(const t of zt){const a={};for(const e of t.fields)a[e.key]="select"===e.type?ae(e.options.map(e=>e.value),e.default):re(e.default??"",{max:500});e[t.id]=oe(a);}return oe(e)}(),targetLang:ae(()=>["auto","zh",...Ut.map(e=>e.code)],"auto"),translateMode:ae(["button","auto"],"button"),displayMode:ae(["panel","replace"],"replace"),replaceReveal:ae(["button","hover","split"],"button"),autoScope:ae(["all","allowlist"],"all"),autoAllowlist:ie("handle"),accountBlocklist:ie("handle"),langAllowlist:ie("lang"),langBlocklist:ie("lang"),skipNativeAutoTranslate:te(true),hideErrors:te(true),cacheHours:ne(24,{min:0,max:wt})},tabs:Qn,init(){window.addEventListener("pagehide",Lt),f("shorts:active",mn),f("shorts:settled",mn),f("shorts:ahead",pn),X(qn,40),qn();},apply(){wn(),Ua();},scan(){wn(),Ua();},navigate(){Ga(),Ua();}});const Yn="xp-scroll-lock";let Zn=0,Jn=0;function er(){if(Zn+=1,Zn>1)return;const e=document.documentElement,t=document.body;t&&(Jn=window.scrollY||e.scrollTop||0,e.classList.add(Yn),t.classList.add(Yn),t.style.top=`-${Jn}px`);}function tr(){if(Zn=Math.max(0,Zn-1),Zn>0)return;const e=document.documentElement,t=document.body;t&&e.classList.contains(Yn)&&(e.classList.remove(Yn),t.classList.remove(Yn),t.style.top="",window.scrollTo(0,Jn));}const ar=()=>ke("media"),nr=(e,t)=>$e(`media.${e}`,t),rr=Object.freeze({article:"data-xp-media",action:"data-xp-media-action",overlay:"data-xp-media-overlay",host:"data-xp-media-host",feedImage:"data-xp-img"});async function ir({url:e,fileName:t,onProgress:a}){let r;try{r=await qt({url:e,responseType:"blob",anonymous:!0,timeout:9e5,onProgress:({loaded:e,total:t})=>a?.(t>0?e/t:null,e)});}catch(i){throw l(n,"download request failed",{url:e},i)}if(!(r instanceof Blob)||0===r.size)throw l(n,"download returned no data",{url:e});return function(e,t){const a=URL.createObjectURL(e),n=document.createElement("a");n.href=a,n.download=t,n.rel="noopener",n.style.display="none",document.body.appendChild(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(a),6e4);}(r,t),r.size}const or=e=>String(e).padStart(2,"0");function sr(e,t){const a=t.createdAt?new Date(t.createdAt):null,n=a&&!Number.isNaN(a.getTime()),r={user:t.user||"",id:t.id||"",date:n?`${a.getFullYear()}-${or(a.getMonth()+1)}-${or(a.getDate())}`:"",time:n?`${or(a.getHours())}${or(a.getMinutes())}${or(a.getSeconds())}`:"",n:null!=t.n?String(t.n):"",quality:t.quality||"",type:t.type||"",text:String(t.text||"").replace(/https?:\/\/\S+/g,"").trim().slice(0,40)};return Re(String(e||"").replace(/\{(\w+)\}/g,(e,t)=>r[t]??"").replace(/[-_ ]{2,}/g,"-"),120)}const lr=/\/status\/(\d+)/,cr=`${T.videoPlayer}, [data-testid="videoComponent"]`;function dr(e,t){const a=e.closest(T.quoteTweet);return Boolean(a&&t.contains(a))}function ur(e){for(const a of e.querySelectorAll('a[href*="/status/"] time')){if(dr(a,e))continue;const t=lr.exec(a.closest("a")?.getAttribute("href")||"");if(t)return t[1]}for(const a of e.querySelectorAll('a[href*="/status/"]')){if(dr(a,e))continue;const t=lr.exec(a.getAttribute("href")||"");if(t)return t[1]}const t=lr.exec(location.pathname);return t?t[1]:null}function pr(e){const t=[],a=new Set,n=(n,r)=>{a.has(n)||(a.add(n),t.push({el:n,kind:r,owner:dr(n,e)?"quote":"main"}));};return e.querySelectorAll(cr).forEach(e=>n(e,"video")),e.querySelectorAll(T.photo).forEach(e=>{e.querySelector("video")||e.closest(cr)||e.querySelector("img")&&n(e,"photo");}),t}const mr=1.4,fr="orig";let hr=false,gr=null;const br=(e,t,a)=>Math.min(a,Math.max(t,e));function vr(e,t){try{const a=new URL(e,location.href);if(a.searchParams.set("name",t),!a.searchParams.has("format")){const e=/\.(jpe?g|png|webp|gif)$/i.exec(a.pathname)?.[1];e&&a.searchParams.set("format","jpeg"===e.toLowerCase()?"jpg":e.toLowerCase());}return a.href}catch{return e}}function yr(e,t){if("quote"===t){const t=e.querySelector(T.quoteTweet),a=/@([A-Za-z0-9_]{1,15})/.exec(t?.querySelector(T.userName)?.textContent||"");return {id:"",user:a?a[1].toLowerCase():"",createdAt:"",text:t?.querySelector(T.tweetText)?.textContent||""}}const a=[...e.querySelectorAll('a[href*="/status/"] time')].map(e=>e.closest("a")).find(e=>e&&!e.closest(T.quoteTweet));return {id:ur(e)||"",user:Q(a?.getAttribute("href")),createdAt:a?.querySelector("time")?.getAttribute("datetime")||"",text:e.querySelector(T.tweetText)?.textContent||""}}function wr(e,t){for(let a=e;a&&a!==t.parentElement;a=a.parentElement)if(/blur/.test(getComputedStyle(a).filter))return true;return false}function xr(e,t,a,n){const r=z("button",e);return r.type="button",r.innerHTML=Gt(t),r.title=a,r.setAttribute("aria-label",a),r.addEventListener("click",e=>{e.stopPropagation(),n();}),r}function Ar(){if(!gr)return;const e=gr;gr=null,e.destroy();}function kr(e){if(!ar().photoGallery||gr)return;if(e.defaultPrevented||0!==e.button)return;if(e.ctrlKey||e.metaKey||e.shiftKey||e.altKey)return;const{target:t}=e;if(!(t instanceof Element)||t.closest("[data-xp-ui]"))return;const a=t.closest(T.photo);if(!a)return;const r=t.closest('button, [role="button"]');if(r&&r!==a&&a.contains(r))return;const i=a.closest(T.article);if(!i)return;const o=function(e,t){const a=pr(t).filter(e=>"photo"===e.kind),n=a.find(t=>t.el===e);if(!n)return null;const r=[];let i=-1;for(const o of a){if(o.owner!==n.owner)continue;const e=o.el.querySelector('img[src*="pbs.twimg.com/media/"]');if(!e)continue;if(wr(e,o.el)){if(o===n)return null;continue}const t=e.currentSrc||e.src;o===n&&(i=r.length),r.push({thumb:vr(t,"small"),view:vr(t,"large"),full:vr(t,fr),alt:e.alt||""});}return i<0?null:{slides:r,index:i,post:yr(t,n.owner)}}(a,i);o&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),gr=function({slides:e,index:t,post:a}){const r={slides:e,index:t,post:a,scale:1,x:0,y:0,pointers:new Map,pinchDistance:0,start:{x:0,y:0},downOnPhoto:false,moved:false,busy:false,opener:document.activeElement,token:0},i=z("div","xp-gallery");i.setAttribute("role","dialog"),i.setAttribute("aria-modal","true"),i.setAttribute("aria-label",nr("gallery")),i.tabIndex=-1,i.classList.toggle("has-strip",e.length>1);const o=z("div","xp-gallery__stage"),s=z("img","xp-gallery__img");s.draggable=false,s.decoding="async";const l=z("span","xp-gallery__spinner");l.setAttribute("aria-hidden","true"),o.append(s,l);const c=z("span","xp-gallery__counter"),u=xr("xp-gallery__btn","close",nr("galleryClose"),()=>Ar()),p=z("a","xp-gallery__btn");p.innerHTML=Gt("external"),p.target="_blank",p.rel="noopener noreferrer",p.title=nr("galleryOpenOriginal"),p.setAttribute("aria-label",nr("galleryOpenOriginal")),p.addEventListener("click",e=>e.stopPropagation());const m=xr("xp-gallery__btn","download",nr("galleryDownload"),()=>async function(){if(r.busy)return;const e=r.slides[r.index],t=`${Re(sr(ar().fileTemplate,{user:r.post.user,id:r.post.id,createdAt:r.post.createdAt,n:r.index+1,quality:fr,type:"photo",text:r.post.text}))}.${function(e){try{const t=new URL(e,location.href),a=(t.searchParams.get("format")||/\.(jpe?g|png|webp|gif)$/i.exec(t.pathname)?.[1]||"jpg").toLowerCase();return "jpeg"===a?"jpg":a}catch{return "jpg"}}(e.full)}`;r.busy=true,m.classList.add("is-loading");const a=Pn(t,{title:nr("downloading"),duration:0});try{const n=await ir({url:e.full,fileName:t,onProgress:e=>a.update({progress:null==e?0:e})});a.update({type:"success",title:nr("saved"),message:nr("savedText",{count:1,size:Ie(n)}),progress:1,duration:4e3});}catch(i){d(n,"failed to download gallery photo",{url:e.full,error:i}),a.dismiss(),Pn(nr("failed"),{type:"error",force:true});}finally{r.busy=false,m.classList.remove("is-loading");}}());m.insertAdjacentHTML("beforeend",'');const f=z("div","xp-gallery__bar"),h=z("div","xp-gallery__actions");h.append(p,m),f.append(u,c,h);const g=xr("xp-gallery__nav xp-gallery__nav--prev","chevronLeft",nr("galleryPrev"),()=>B(-1)),b=xr("xp-gallery__nav xp-gallery__nav--next","chevronRight",nr("galleryNext"),()=>B(1)),v=z("button","xp-gallery__zbtn","−"),y=z("button","xp-gallery__zbtn","+"),w=z("button","xp-gallery__zbtn xp-gallery__level","100%");for(const[n,d,z]of [[v,nr("zoomOut"),()=>M(1/mr)],[y,nr("zoomIn"),()=>M(mr)],[w,nr("galleryActualSize"),()=>function(){const e=s.naturalWidth||0,t=S().width,a=e&&t?e/t:1;1!==r.scale||a<=1.05?q():T(a);}()]])n.type="button",n.title=d,n.setAttribute("aria-label",d),n.addEventListener("click",e=>{e.stopPropagation(),z();});const x=z("div","xp-gallery__zoom");x.setAttribute("role","group"),x.append(v,w,y);const A=z("div","xp-gallery__strip"),k=e.map((e,t)=>{const a=z("button","xp-gallery__thumb");a.type="button",a.setAttribute("aria-label",nr("galleryPhoto",{n:t+1}));const n=z("img");return n.src=e.thumb,n.alt="",n.draggable=false,a.append(n),a.addEventListener("click",e=>{e.stopPropagation(),_(t);}),A.append(a),a});A.hidden=e.length<2,g.hidden=e.length<2,b.hidden=e.length<2;const H=z("div","xp-gallery__bottom");function S(){const e=s.offsetWidth,t=s.offsetHeight,a=s.naturalWidth,n=s.naturalHeight;if(!a||!n)return {width:e,height:t};const r=Math.min(e/a,t/n);return {width:a*r,height:n*r}}function P(){const e=o.getBoundingClientRect(),t=S(),a=r.scale>1?60:0,n=Math.max(0,(t.width*r.scale-e.width)/2+a),i=Math.max(0,(t.height*r.scale-e.height)/2+a);r.x=br(r.x,-n,n),r.y=br(r.y,-i,i);}function L(e=false){Math.abs(r.scale-1)<.02&&(r.scale=1,r.pointers.size||(r.x=0,r.y=0)),s.style.transition=e?"transform 0.18s ease":"none",s.style.transform=`translate(${r.x}px, ${r.y}px) scale(${r.scale})`,i.classList.toggle("is-zoomed",r.scale>1);const t=s.naturalWidth||0;w.textContent=t?`${Math.round(r.scale*(S().width/t)*100)}%`:"";}function C(e,t,a,n=false){const i=br(a,.1,8),o=s.getBoundingClientRect(),l=e-(o.left+o.width/2-r.x),c=t-(o.top+o.height/2-r.y),d=i/r.scale;r.x=l-(l-r.x)*d,r.y=c-(c-r.y)*d,r.scale=i,P(),L(n),i>1&&function(){const e=r.slides[r.index];if(!e||e.fullLoaded||e.fullLoading)return;e.fullLoading=true;const t=r.token,a=new Image;a.onload=()=>{e.fullLoading=false,e.fullLoaded=true,r.token===t&&(E(e.full),L());},a.onerror=()=>{e.fullLoading=false;},a.src=e.full;}();}function T(e,t=true){const a=s.getBoundingClientRect();C(a.left+a.width/2,a.top+a.height/2,e,t);}function M(e){T(r.scale*e);}function q(e=true){r.scale=1,r.x=0,r.y=0,L(e);}function E(e){s.src!==e&&(s.src=e);}function D(e){const t=r.slides[e];t&&!t.preloaded&&(t.preloaded=true,(new Image).src=t.view);}function _(e,t=true){const a=br(e,0,r.slides.length-1);if(t&&a===r.index)return;r.index=a,r.token+=1;const n=r.token,o=r.slides[a];if(q(false),i.classList.add("is-loading"),i.classList.remove("is-error"),s.alt=o.alt,E(o.fullLoaded?o.full:o.thumb),t&&(s.classList.remove("is-swap"),s.classList.add("is-swap")),o.fullLoaded)i.classList.remove("is-loading");else {const e=new Image;e.onload=()=>{r.token===n&&(E(o.view),i.classList.remove("is-loading"),L());},e.onerror=()=>{r.token===n&&(i.classList.remove("is-loading"),i.classList.add("is-error"));},e.src=o.view;}c.textContent=r.slides.length>1?`${a+1} / ${r.slides.length}`:"",p.href=o.full,g.disabled=0===a,b.disabled=a===r.slides.length-1,k.forEach((e,t)=>{e.classList.toggle("is-active",t===a),e.setAttribute("aria-current",t===a?"true":"false");}),k[a].scrollIntoView({block:"nearest",inline:"center",behavior:t?"smooth":"auto"}),D(a-1),D(a+1);}function B(e){_(r.index+e);}function I(){const[e,t]=[...r.pointers.values()];return Math.hypot(e.x-t.x,e.y-t.y)}function F(e,t){const a=s.getBoundingClientRect(),n=S(),i=n.width*r.scale,o=n.height*r.scale,l=a.top+a.height/2;return Math.abs(e-(a.left+a.width/2))<=i/2&&Math.abs(t-l)<=o/2}function R(e){if(!r.pointers.delete(e.pointerId))return;if(r.pinchDistance=0,r.pointers.size)return void(r.start={...[...r.pointers.values()][0]});o.classList.remove("is-grabbing");const{x:t,y:a}=r;r.downOnPhoto?r.moved&&(r.scale>1?L():a>110&&Math.abs(a)>Math.abs(t)?Ar():Math.abs(t)>60&&Math.abs(t)>Math.abs(a)&&r.slides.length>1?(r.x=0,r.y=0,B(t<0?1:-1),L()):(r.x=0,r.y=0,L(true))):r.moved||"pointerup"!==e.type||Ar();}function K(e){if(!(e.ctrlKey||e.metaKey||e.altKey)){switch(e.stopImmediatePropagation(),e.key){case "Escape":Ar();break;case "ArrowLeft":if(r.scale>1)return;B(-1);break;case "ArrowRight":if(r.scale>1)return;B(1);break;case "Home":_(0);break;case "End":_(r.slides.length-1);break;case "+":case "=":M(mr);break;case "-":case "_":M(1/mr);break;case "0":q();break;default:return}e.preventDefault();}}H.append(x,A),i.append(o,f,g,b,H);const V=()=>{P(),L();};return o.addEventListener("wheel",function(e){e.preventDefault(),C(e.clientX,e.clientY,r.scale*Math.exp(-e.deltaY*(1===e.deltaMode?16:2===e.deltaMode?400:1)*(e.ctrlKey?.01:.0018)));},{passive:false}),o.addEventListener("pointerdown",function(e){"mouse"===e.pointerType&&0!==e.button||(o.setPointerCapture?.(e.pointerId),r.pointers.set(e.pointerId,{x:e.clientX,y:e.clientY}),1===r.pointers.size?(r.downOnPhoto=F(e.clientX,e.clientY),r.start={x:e.clientX,y:e.clientY},r.moved=false):2===r.pointers.size&&(r.pinchDistance=I(),r.moved=true),r.downOnPhoto&&o.classList.add("is-grabbing"));}),o.addEventListener("pointermove",function(e){r.pointers.size||o.classList.toggle("is-over-photo",F(e.clientX,e.clientY));const t=r.pointers.get(e.pointerId);if(!t)return;const a={x:e.clientX,y:e.clientY};if(r.pointers.set(e.pointerId,a),r.pointers.size>=2){const e=I(),[t,a]=[...r.pointers.values()];return r.pinchDistance>0&&C((t.x+a.x)/2,(t.y+a.y)/2,r.scale*(e/r.pinchDistance)),void(r.pinchDistance=e)}!r.moved&&Math.hypot(a.x-r.start.x,a.y-r.start.y)<5||(r.moved=true,r.downOnPhoto&&(r.scale>1?(r.x+=a.x-t.x,r.y+=a.y-t.y,P(),L()):(r.x=a.x-r.start.x,r.y=a.y-r.start.y,s.style.transition="none",s.style.transform=`translate(${r.x}px, ${r.y}px) scale(${r.scale})`)));}),o.addEventListener("pointerup",R),o.addEventListener("pointercancel",R),o.addEventListener("dblclick",function(e){F(e.clientX,e.clientY)&&(1!==r.scale?q():C(e.clientX,e.clientY,2.5,true));}),s.addEventListener("load",()=>L()),document.addEventListener("keydown",K,true),window.addEventListener("resize",V),document.body.append(i),er(),_(t,false),requestAnimationFrame(()=>{i.classList.add("is-open"),u.focus({preventScroll:true});}),{destroy(){document.removeEventListener("keydown",K,true),window.removeEventListener("resize",V),r.token+=1,i.remove(),tr();const{opener:e}=r;e instanceof HTMLElement&&e.isConnected&&e.focus({preventScroll:true});}}}(o));}function Hr(){const e=ar().photoGallery;e&&!hr?(hr=true,document.addEventListener("click",kr,true)):!e&&hr&&(hr=false,document.removeEventListener("click",kr,true)),e||Ar();}const Sr=`${T.photo} img[src*="pbs.twimg.com/media/"]`;function Pr(){const e=ar(),t=e.enabled?e.feedImageQuality:"default";"default"!==t&&document.querySelectorAll(Sr).forEach(e=>{if(e.getAttribute(rr.feedImage)===t)return;let a;try{a=new URL(e.currentSrc||e.src);}catch{return}e.setAttribute(rr.feedImage,t),a.searchParams.get("name")!==t&&(a.searchParams.set("name",t),e.src=a.href);});}const Lr=[{id:"media",titleKey:"media.title",badge:e=>e.media.enabled?"":$e("common.off"),sections:[{titleKey:"media.sectionViewer",descKey:"media.sectionViewerDesc",controls:[{type:"switch",path:"photoGallery",labelKey:"media.photoGallery",hintKey:"media.photoGalleryHint"},{type:"switch",path:"photoZoom",labelKey:"media.photoZoom",hintKey:"media.photoZoomHint"},{type:"switch",path:"photoGrid",labelKey:"media.photoGrid",hintKey:"media.photoGridHint",showIf:e=>e.photoZoom}]},{titleKey:"media.sectionMain",descKey:"media.sectionMainDesc",controls:[{type:"switch",path:"enabled",labelKey:"media.enabled",hintKey:"media.enabledHint"}]},{titleKey:"media.sectionButtons",showIf:e=>e.enabled,controls:[{type:"switch",path:"showInActions",labelKey:"media.showInActions",hintKey:"media.showInActionsHint"},{type:"switch",path:"showOnMedia",labelKey:"media.showOnMedia",hintKey:"media.showOnMediaHint"},{type:"switch",path:"videos",labelKey:"media.videos"},{type:"switch",path:"gifs",labelKey:"media.gifs"},{type:"switch",path:"images",labelKey:"media.images"}]},{titleKey:"media.sectionQuality",showIf:e=>e.enabled,controls:[{type:"select",path:"videoQuality",labelKey:"media.videoQuality",hintKey:"media.videoQualityHint",options:[{value:"best",labelKey:"media.quality.best"},{value:"ask",labelKey:"media.quality.ask"},{value:"1080",labelKey:"media.quality.1080"},{value:"720",labelKey:"media.quality.720"},{value:"480",labelKey:"media.quality.480"},{value:"lowest",labelKey:"media.quality.lowest"}]},{type:"select",path:"imageQuality",labelKey:"media.imageQuality",hintKey:"media.imageQualityHint",options:[{value:"orig",labelKey:"media.image.orig"},{value:"large",labelKey:"media.image.large"}]},{type:"select",path:"onMultiple",labelKey:"media.onMultiple",hintKey:"media.onMultipleHint",options:[{value:"ask",labelKey:"media.multiple.ask"},{value:"all",labelKey:"media.multiple.all"}]}]},{titleKey:"media.sectionFiles",showIf:e=>e.enabled,controls:[{type:"text",path:"fileTemplate",labelKey:"media.fileTemplate",hintKey:"media.fileTemplateHint",placeholder:"{user}-{id}-{n}"},{type:"hint",textKey:"media.fileTokens"}]},{titleKey:"media.sectionFeed",showIf:e=>e.enabled,controls:[{type:"select",path:"feedImageQuality",labelKey:"media.feedImageQuality",hintKey:"media.feedImageQualityHint",options:[{value:"default",labelKey:"media.feed.default"},{value:"large",labelKey:"media.feed.large"},{value:"orig",labelKey:"media.feed.orig"}]}]}]}];let Cr=null;const Tr=/\/(\d{2,5})x(\d{2,5})\//,Mr={1080:1080,720:720,480:480};function qr(e,t){if(!e.length)return null;if("lowest"===t)return e[e.length-1];const a=Mr[t];return a?e.filter(e=>!e.quality||e.quality<=a)[0]||e[e.length-1]:e[0]}function Er(e){return e.quality?`${e.quality}p`:""}function Dr(e,t="orig"){const a=/^(https?:\/\/[^?#]+?)\.(jpe?g|png|webp|gif)(?:[?#].*)?$/i.exec(e);if(!a)return e;const n="jpeg"===a[2].toLowerCase()?"jpg":a[2].toLowerCase();return `${a[1]}?format=${n}&name=${t}`}function _r(e){const t=/\.(jpe?g|png|webp|gif)(?:[?#]|$)/i.exec(e);if(!t)return "jpg";const a=t[1].toLowerCase();return "jpeg"===a?"jpg":a}function Br(e,t,a){return Array.isArray(e)?e.map((e,n)=>{const r="photo"===e.type?"photo":"animated_gif"===e.type?"gif":"video",i=Number(e.original_info?.width)||0,o=Number(e.original_info?.height)||0,s={owner:t,type:r,index:n+1,tweetId:a.id,user:a.user,width:i,height:o,thumb:e.media_url_https||""};return "photo"===r?s.url=e.media_url_https||"":(s.variants=function(e,t={}){const a=Array.isArray(e?.variants)?e.variants:[],n=[];for(const r of a){const e=r.url||r.src||"";if(!e||!/video\/mp4/i.test(r.content_type||r.type||""))continue;const a=Tr.exec(e),i=a?Number(a[1]):Number(t.width)||0,o=a?Number(a[2]):Number(t.height)||0;n.push({url:e,bitrate:Number(r.bitrate)||0,width:i,height:o,quality:i&&o?Math.min(i,o):0});}return n.sort((e,t)=>t.bitrate-e.bitrate||t.quality-e.quality)}(e.video_info,{width:i,height:o}),s.durationMs=Number(e.video_info?.duration_millis)||0),s}):[]}const zr=["zAz9764BcLZOJ0JU2wrd1A","Xl5pC_lBk_gcO2ItU39DQw","0hWvDhmW8YQ-S_ib3azIrw"],Ir={creator_subscriptions_tweet_preview_api_enabled:true,premium_content_api_read_enabled:false,communities_web_enable_tweet_community_results_fetch:true,c9s_tweet_anatomy_moderator_badge_enabled:true,responsive_web_grok_analyze_button_fetch_trends_enabled:false,responsive_web_grok_analyze_post_followups_enabled:true,responsive_web_jetfuel_frame:false,responsive_web_grok_share_attachment_enabled:true,articles_preview_enabled:true,responsive_web_edit_tweet_api_enabled:true,graphql_is_translatable_rweb_tweet_is_translatable_enabled:true,view_counts_everywhere_api_enabled:true,longform_notetweets_consumption_enabled:true,responsive_web_twitter_article_tweet_consumption_enabled:true,tweet_awards_web_tipping_enabled:false,freedom_of_speech_not_reach_fetch_enabled:true,standardized_nudges_misinfo:true,tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled:true,longform_notetweets_rich_text_read_enabled:true,longform_notetweets_inline_media_enabled:true,profile_label_improvements_pcf_label_in_post_enabled:true,rweb_tipjar_consumption_enabled:true,verified_phone_label_enabled:false,responsive_web_graphql_skip_user_profile_image_extensions_enabled:false,responsive_web_graphql_timeline_navigation_enabled:true,responsive_web_enhance_cards_enabled:false};let Fr=null;async function Rr(){if(Fr)return Fr;const e=[...document.querySelectorAll("script[src]")].map(e=>e.src).filter(e=>/abs\.twimg\.com\/responsive-web\/client-web/.test(e)).sort((e,t)=>Number(/main\./.test(t))-Number(/main\./.test(e))).slice(0,6);for(const t of e)try{const e=await qt({url:t,responseType:"text",anonymous:!0,timeout:3e4}),a=/queryId:"([^"]+)",operationName:"TweetResultByRestId"/.exec(String(e));if(a)return Fr=a[1],p("media","discovered TweetResultByRestId query id",Fr),Fr}catch{}return null}async function Kr(e,t,a,n){const r=await fetch(function(e,t,a){const n=new URLSearchParams({variables:JSON.stringify({tweetId:t,withCommunity:false,includePromotedContent:false,withVoice:false}),features:JSON.stringify(a),fieldToggles:JSON.stringify({withArticleRichContentState:true,withArticlePlainText:false,withGrokAnalyze:false,withDisallowedReplyControls:false})});return `${location.origin}/i/api/graphql/${e}/TweetResultByRestId?${n}`}(e,t,a),{credentials:"include",headers:{authorization:"Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA","x-csrf-token":n,"x-twitter-active-user":"yes","x-twitter-auth-type":"OAuth2Session","x-twitter-client-language":"en","content-type":"application/json"}});let i=null;try{i=await r.json();}catch{}return {status:r.status,json:i}}async function Vr(e,t,a){const n=await Kr(e,t,Ir,a);if(400!==n.status)return n;const r=function(e){const t=(e?.errors||[]).map(e=>e.message||"").join(" "),a=/features cannot be null:\s*([\w,\s]+)/i.exec(t);return a?a[1].split(",").map(e=>e.trim()).filter(Boolean):[]}(n.json);if(!r.length)return n;const i={...Ir};for(const o of r)i[o]=true;return Kr(e,t,i,a)}const Or=e=>"TweetWithVisibilityResults"===e?.__typename?e.tweet:e;function Nr(e){const t=e?.core?.user_results?.result;return t?.core?.screen_name||t?.legacy?.screen_name||""}function $r(e){const t=e.legacy||{},a=Nr(e),n={id:e.rest_id||t.id_str||"",user:a},r=Br(t.extended_entities?.media||t.entities?.media,"main",n),i=Or(e.quoted_status_result?.result);i?.legacy&&r.push(...Br(i.legacy.extended_entities?.media||i.legacy.entities?.media,"quote",{id:i.rest_id||"",user:Nr(i)}));const o=e.core?.user_results?.result;return {id:n.id,user:a,name:o?.core?.name||o?.legacy?.name||"",createdAt:t.created_at||"",text:t.full_text||"",items:r}}const Xr=new Map;function jr(e){const t=Xr.get(e);if(t&&Date.now()-t.at<6e5)return t.promise;const n=async function(e){let t=null;try{const t=await async function(e){const t=`https://cdn.syndication.twimg.com/tweet-result?id=${encodeURIComponent(e)}&lang=en&token=${function(e){return (Number(e)/1e15*Math.PI).toString(36).replace(/(0+|\.)/g,"")}(e)}`,a=await qt({url:t,responseType:"json",anonymous:!0,timeout:15e3,allow404:!0});if(!a||"object"!=typeof a||"TweetTombstone"===a.__typename)return null;const n=a.user?.screen_name||"",r={id:a.id_str||String(e),user:n},i=Br(a.mediaDetails,"main",r),o=a.quoted_tweet;return o&&i.push(...Br(o.mediaDetails,"quote",{id:o.id_str||"",user:o.user?.screen_name||""})),{id:r.id,user:n,name:a.user?.name||"",createdAt:a.created_at||"",text:a.text||"",items:i}}(e);if(t?.items.length)return t;p("media","syndication returned no media, trying GraphQL",{id:e});}catch(n){t=n,p("media","syndication failed, trying GraphQL",{id:e,error:n});}try{const t=await async function(e){const t=function(){const e=document.cookie.match(new RegExp("(?:^|;\\s*)ct0=([^;]*)"));return e?decodeURIComponent(e[1]):""}();if(!t){const e=new Error("Not signed in");throw e.code="auth",e}const a=[...Fr?[Fr]:[],...zr];let n=Boolean(Fr);const r=[...new Set(a)];for(;r.length;){const i=r.shift(),{status:o,json:s}=await Vr(i,e,t);if(401===o||403===o){const e=new Error(`GraphQL auth failed (${o})`);throw e.code="auth",e}const l=Or(s?.data?.tweetResult?.result);if(200===o&&l)return l.legacy?$r(l):null;if(!r.length&&!n){n=!0;const e=await Rr();e&&!a.includes(e)&&r.push(e);}}return null}(e);if(t)return t}catch(n){t||(t=n),u(a,"GraphQL media lookup failed",{id:e,error:n});}if(t)throw l(a,"could not load post media",{id:e},t);return {id:e,user:"",name:"",createdAt:"",text:"",items:[]}}(e);return Xr.set(e,{at:Date.now(),promise:n}),n.catch(()=>Xr.delete(e)),n}function Gr(e,t,a){let n=`${e}.${t}`;for(let r=2;a.has(n);r+=1)n=`${e}-${r}.${t}`;return a.add(n),n}async function Ur(e,t,a){const r=Pn("",{title:nr("downloading"),duration:0}),i=new Set;let o=0,s=0,l=0;for(let u=0;u1?`${u+1}/${e.length} · `:"",f=Gr(sr(a.fileTemplate,{user:p.item.user||t.user,id:p.item.tweetId||t.id,createdAt:t.createdAt,n:p.n,quality:p.quality,type:p.item.type,text:t.text}),p.ext,i);r.update({message:`${m}${f}`,progress:0});try{l+=await ir({url:p.url,fileName:f,onProgress:(t,a)=>{const n=null==t?0:t;r.update({message:`${m}${f}${null==t?` · ${Ie(a)}`:` · ${Math.round(100*n)}%`}`,progress:(u+n)/e.length});}}),o+=1;}catch(c){s+=1,d(n,"failed to download media",{entry:p,error:c});}}s&&!o?(r.dismiss(),Pn(nr("failed"),{type:"error",force:true})):r.update(s?{type:"warning",title:nr("partial"),message:nr("partialText",{saved:o,failed:s}),progress:1,duration:6e3}:{type:"success",title:nr("saved"),message:nr("savedText",{count:o,size:Ie(l)}),progress:1,duration:4e3});}function Qr(e,t,a,n,r){const i=t.map(e=>({label:r?e.label:e.quality||e.label,hint:r?e.hint:e.bitrate||e.hint,iconHtml:Gt("photo"===e.item.type?"image":"video"),onSelect:()=>Ur([e],a,n)}));r&&i.unshift({label:nr("downloadAll"),iconHtml:Gt("download"),onSelect:()=>Ur(function(e){const t=new Set;return e.filter(e=>!t.has(e.item)&&(t.add(e.item),true))}(t),a,n)},{separator:true}),function({anchor:e,title:t="",items:a,onClose:n}){Cr?.();const r=document.createElement("div");r.className="xp-popup",r.setAttribute(x,""),r.setAttribute("role","menu");const i=a.map((e,t)=>e.separator?'':`").join("");r.innerHTML=(t?`
${Ge(t)}
`:"")+i;let o=false;const s=()=>{o||(o=true,document.removeEventListener("pointerdown",l,true),document.removeEventListener("keydown",c,true),window.removeEventListener("scroll",s,true),window.removeEventListener("resize",s),r.remove(),Cr===s&&(Cr=null),n?.());};function l(t){r.contains(t.target)||e.contains(t.target)||s();}function c(e){"Escape"===e.key&&(e.stopPropagation(),s());}r.addEventListener("click",e=>{e.stopPropagation();const t=e.target.closest?.(".xp-popup__item");if(!t||t.disabled)return;const n=a[Number(t.dataset.index)];s(),n?.onSelect?.();});for(const d of ["mousedown","pointerdown","mouseup","pointerup"])r.addEventListener(d,e=>e.stopPropagation());document.body.appendChild(r),function(e,t){const a=t.getBoundingClientRect(),{width:n,height:r}=e.getBoundingClientRect();let i=a.right-n,o=a.bottom+6;i<8&&(i=Math.min(a.left,window.innerWidth-n-8)),i=Math.max(8,Math.min(i,window.innerWidth-n-8)),o+r>window.innerHeight-8&&(o=Math.max(8,a.top-r-6)),e.style.left=`${Math.round(i)}px`,e.style.top=`${Math.round(o)}px`;}(r,e),document.addEventListener("pointerdown",l,true),document.addEventListener("keydown",c,true),window.addEventListener("scroll",s,true),window.addEventListener("resize",s),r.querySelector(".xp-popup__item:not([disabled])")?.focus({preventScroll:true}),Cr=s;}({anchor:e,title:a.user?`@${a.user}`:nr("download"),items:i});}async function Wr({article:e,anchor:t,filter:n,setBusy:r}){const i=ur(e);if(!i)return void Pn(nr("noId"),{type:"error",force:true});const o=ar();r?.(true);try{const e=await jr(i),a=e.items.filter(e=>function(e,t){return "video"===e.type?t.videos:"gif"===e.type?t.gifs:t.images}(e,o)&&(!n||n(e)));if(!a.length)return void Pn(nr("noMedia"),{type:"warning",force:!0});const{entries:r,unsupported:s}=function(e,t){const a={main:0,quote:0};for(const i of e)"photo"===i.type&&(a[i.owner]+=1);const n=[];let r=0;return e.forEach((e,i)=>{const o=i+1,s=function(e,t){let a;return a="photo"===e.type?nr("item.photo",{n:e.index}):nr("gif"===e.type?"item.gif":"item.video"),"photo"===e.type&&t[e.owner]<=1&&(a=nr("item.photoSingle")),"quote"===e.owner?nr("item.quoted",{label:a}):a}(e,a);if("photo"===e.type)return void n.push({item:e,n:o,url:Dr(e.url,t.imageQuality),ext:_r(e.url),quality:t.imageQuality,label:s,hint:e.width?`${e.width}×${e.height}`:""});const l="ask"===t.videoQuality?e.variants:[qr(e.variants,t.videoQuality)].filter(Boolean);l.length||(r+=1);for(const t of l)n.push({item:e,n:o,url:t.url,ext:"mp4",quality:Er(t),bitrate:Fe(t.bitrate),label:s,hint:[Er(t),Fe(t.bitrate)].filter(Boolean).join(" · ")});}),{entries:n,unsupported:r}}(a,o);if(!r.length)return void Pn(nr(s?"noVariants":"noMedia"),{type:"warning",force:!0});const l=new Set(r.map(e=>e.item)).size>1;"ask"===o.videoQuality&&r.length>new Set(r.map(e=>e.item)).size||l&&"ask"===o.onMultiple?Qr(t,r,e,o,l):await Ur(r,e,o);}catch(s){d(a,"media download failed",{error:s}),Pn(nr("auth"===s?.cause?.code||"auth"===s?.code?"needLogin":"resolveFailed"),{type:"error",force:true});}finally{r?.(false);}}function Yr(e,t){K(e),e.addEventListener("click",a=>{a.preventDefault(),a.stopPropagation(),e.classList.contains("is-loading")||t();},true);}function Zr(e){return t=>{e.classList.toggle("is-loading",t),e.toggleAttribute("aria-busy",t);}}function Jr(e){e.querySelectorAll(`[${rr.action}], [${rr.overlay}]`).forEach(e=>e.remove()),e.removeAttribute(rr.article);}function ei(e,t){const a=pr(e).filter(e=>"photo"===e.kind?t.images:t.videos||t.gifs);a.length?(e.setAttribute(rr.article,"1"),t.showInActions?function(e){const t=function(e){const t=e.querySelector(T.actionReply);return t?.closest('[role="group"]')||null}(e);if(!t)return;let a=e.querySelector(`[${rr.action}]`);a||(a=function(e){const t=z("div","xp-action");t.setAttribute(rr.action,"1");const a=z("button","xp-action__btn");return a.type="button",a.innerHTML=Gt("download")+'',a.setAttribute("aria-label",nr("download")),a.title=nr("download"),t.appendChild(a),Yr(a,()=>Wr({article:e,anchor:a,setBusy:Zr(a)})),t}(e)),a.parentElement===t&&t.lastElementChild===a||t.appendChild(a);const n=nr("download"),r=a.firstElementChild;r.getAttribute("aria-label")!==n&&(r.setAttribute("aria-label",n),r.title=n);}(e):e.querySelectorAll(`[${rr.action}]`).forEach(e=>e.remove()),t.showOnMedia?a.forEach(t=>function(e,t){t.el.querySelector(`:scope > [${rr.overlay}]`)||("static"===getComputedStyle(t.el).position&&t.el.classList.add("xp-media-host"),t.el.appendChild(function(e,t){const a=z("button","xp-media-btn");return a.type="button",a.setAttribute(rr.overlay,"1"),a.innerHTML=Gt("download")+'',a.setAttribute("aria-label",nr("download")),a.title=nr("download"),Yr(a,()=>{const n="photo"===t.kind?a=>"photo"===a.type&&a.owner===t.owner&&a.index===function(e,t){return pr(e).filter(e=>"photo"===e.kind&&e.owner===t.owner).findIndex(e=>e.el===t.el)+1}(e,t):e=>"photo"!==e.type&&e.owner===t.owner;Wr({article:e,anchor:a,filter:n,setBusy:Zr(a)});}),a}(e,t)));}(e,t)):e.querySelectorAll(`[${rr.overlay}]`).forEach(e=>e.remove())):e.hasAttribute(rr.article)&&Jr(e);}function ti(){const e=ar();e.enabled?document.querySelectorAll(T.article).forEach(t=>ei(t,e)):ai();}function ai(){document.querySelectorAll(T.article).forEach(e=>{e.hasAttribute(rr.article)&&Jr(e);});}const ni='[data-testid="swipe-to-dismiss"], [role="dialog"][aria-modal="true"]',ri=`:is(${ni}):not([data-xp-ui]) img[src*="pbs.twimg.com/media/"]`,ii="data-xp-grid",oi=1.4,si={img:null,node:null,layer:null,src:"",scale:1,x:0,y:0,pointers:new Map,pinchDistance:0,dragMoved:false,suppressClick:false};let li=false,ci=null,di=null;const ui=()=>ar().photoZoom,pi=(e,t,a)=>Math.min(a,Math.max(t,e));function mi(){return [...document.querySelectorAll(ri)]}function fi(e,t){for(const a of mi()){const n=a.getBoundingClientRect();if(n.width>40&&e>=n.left&&e<=n.right&&t>=n.top&&t<=n.bottom)return a}return null}function hi(e){si.img===e&&si.src===e.src||(gi(si.node),si.layer?.removeAttribute(ii),si.img=e,si.node=function(e){const t=e.getBoundingClientRect();let a=e;for(let n=0;n<3;n+=1){const e=a.parentElement;if(!e||e===document.body)break;const n=e.getBoundingClientRect();if(n.width>1.03*t.width+2||n.height>1.03*t.height+2)break;a=e;}return a}(e),si.layer=function(e){const t=e.closest(ni);for(let a=e.parentElement;a&&a!==document.body;a=a.parentElement)if(a.style.backgroundColor)return a;for(let a=e.parentElement;a&&a!==t;a=a.parentElement){const e=a.getBoundingClientRect();if(e.width>=.95*window.innerWidth&&e.height>=.95*window.innerHeight)return a}return t}(e),xi(),si.src=e.src,si.scale=1,si.x=0,si.y=0);}function gi(e){e&&(e.style.removeProperty("transform"),e.style.removeProperty("transition"),e.style.removeProperty("cursor"),e.style.removeProperty("will-change"));}function bi(){const e=si.node;if(!e)return;const t=e.getBoundingClientRect(),a=t.height/si.scale,n=Math.max(0,(t.width/si.scale*si.scale+window.innerWidth)/2-80),r=Math.max(0,(a*si.scale+window.innerHeight)/2-80);si.x=pi(si.x,-n,n),si.y=pi(si.y,-r,r);}function vi(e=false){const t=si.node;t&&(Math.abs(si.scale-1)<.02&&(si.scale=1),t.style.willChange="transform",t.style.transition=e?"transform 0.18s ease":"none",t.style.transform=`translate(${si.x}px, ${si.y}px) scale(${si.scale})`,t.style.cursor="grab",ki());}function yi(e,t,a,n=false){const r=si.img;if(!r||!si.node)return;const i=pi(a,.2,8),o=si.node.getBoundingClientRect(),s=o.left+o.width/2-si.x,l=o.top+o.height/2-si.y,c=i/si.scale;si.x=e-s-(e-s-si.x)*c,si.y=t-l-(t-l-si.y)*c,si.scale=i,bi(),vi(n),i>1&&function(e){let t;try{t=new URL(e.src);}catch{return}if("orig"===t.searchParams.get("name")||!t.searchParams.has("name"))return;t.searchParams.set("name","orig");const a=t.href,n=new Image;n.onload=()=>{si.img===e&&e.src!==a&&(e.src=a,si.src=e.src);},n.src=a;}(r);}function wi(e=true){si.img&&(si.scale=1,si.x=0,si.y=0,vi(e));}function xi(){const e=ui()&&ar().photoGrid;si.layer?.toggleAttribute(ii,e);}function Ai(e,t,a){const n=z("button","xp-zoom__btn",t);return n.type="button",n.title=e,n.setAttribute("aria-label",e),K(n),n.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),a();}),n}function ki(){const e=Boolean(si.img)&&(1!==si.scale||0!==si.x||0!==si.y);if(e||ci){if(ci||(ci=z("div","xp-zoom"),ci.setAttribute("role","group"),di=Ai(nr("zoomReset"),"100%",()=>wi()),di.classList.add("xp-zoom__level"),ci.append(Ai(nr("zoomOut"),"−",()=>Hi(1/oi)),di,Ai(nr("zoomIn"),"+",()=>Hi(oi))),document.body.append(ci)),ci.classList.toggle("is-visible",e),e&&si.layer){const e=si.layer.getBoundingClientRect();ci.style.left=`${e.left+e.width/2}px`,ci.style.bottom=`${Math.max(0,window.innerHeight-e.bottom)+88}px`;}e&&(di.textContent=`${Math.round(100*si.scale)}%`);}}function Hi(e){const t=si.img??mi().find(e=>e.getBoundingClientRect().width>40);t&&(hi(t),yi(window.innerWidth/2,window.innerHeight/2,si.scale*e,true));}function Si(e){if(!ui())return;const t=fi(e.clientX,e.clientY);if(!t)return;e.preventDefault(),e.stopPropagation(),hi(t);const a=Math.exp(-e.deltaY*(1===e.deltaMode?16:2===e.deltaMode?400:1)*(e.ctrlKey?.01:.0018));yi(e.clientX,e.clientY,si.scale*a);}function Pi(){const[e,t]=[...si.pointers.values()];return Math.hypot(e.x-t.x,e.y-t.y)}function Li(e){if(!ui())return;if("mouse"===e.pointerType&&0!==e.button)return;const t=fi(e.clientX,e.clientY);t&&(hi(t),si.pointers.set(e.pointerId,{x:e.clientX,y:e.clientY}),si.dragMoved=false,2===si.pointers.size&&(si.pinchDistance=Pi()),e.stopPropagation(),e.preventDefault(),si.node&&(si.node.style.cursor="grabbing"));}function Ci(e){const t=si.pointers.get(e.pointerId);if(!t||!si.img)return;const a={x:e.clientX,y:e.clientY};if(si.pointers.set(e.pointerId,a),si.pointers.size>=2){const t=Pi(),[a,n]=[...si.pointers.values()];return si.pinchDistance>0&&yi((a.x+n.x)/2,(a.y+n.y)/2,si.scale*(t/si.pinchDistance)),si.pinchDistance=t,si.dragMoved=true,void e.preventDefault()}const n=a.x-t.x,r=a.y-t.y;!si.dragMoved&&Math.hypot(n,r)<4?si.pointers.set(e.pointerId,t):(si.dragMoved=true,si.x+=n,si.y+=r,bi(),vi(),e.preventDefault(),e.stopPropagation());}function Ti(e){si.pointers.delete(e.pointerId)&&(si.pinchDistance=0,si.dragMoved&&(si.suppressClick=true,setTimeout(()=>{si.suppressClick=false;},0)),si.pointers.size||(si.dragMoved=false),si.img&&vi());}function Mi(e){si.suppressClick&&(e.preventDefault(),e.stopPropagation());}function qi(e){if(!ui())return;const t=fi(e.clientX,e.clientY);t&&(e.preventDefault(),e.stopPropagation(),hi(t),1!==si.scale||0!==si.x||0!==si.y?wi():yi(e.clientX,e.clientY,2.5,true));}function Ei(e){if(ui()&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!(e.target instanceof Element&&e.target.closest('input, textarea, select, [contenteditable="true"]'))&&mi().length){if("+"===e.key||"="===e.key)Hi(oi);else if("-"===e.key||"_"===e.key)Hi(1/oi);else {if("0"!==e.key)return;wi();}e.preventDefault(),e.stopPropagation();}}function Di(e){ui()&&e.target instanceof Element&&e.target.matches(ri)&&e.preventDefault();}function _i(){if(ui()&&function(){if(li)return;li=true;const e={capture:true};document.addEventListener("wheel",Si,{capture:true,passive:false}),document.addEventListener("pointerdown",Li,e),document.addEventListener("pointermove",Ci,{capture:true,passive:false}),document.addEventListener("pointerup",Ti,e),document.addEventListener("pointercancel",Ti,e),document.addEventListener("click",Mi,e),document.addEventListener("dblclick",qi,e),document.addEventListener("keydown",Ei,e),document.addEventListener("dragstart",Di,e);}(),ui()&&!si.img){const e=mi().find(e=>e.getBoundingClientRect().width>40);e&&hi(e);}xi();const e=si.img;e&&(!e.isConnected||!ui()||si.src!==e.src&&!e.src.includes(si.src.split("?")[0]))&&(gi(si.node),si.layer?.removeAttribute(ii),si.layer=null,si.img=null,si.node=null,si.src="",si.scale=1,si.x=0,si.y=0,si.pointers.clear(),ki());}E({id:"media",order:20,fields:{enabled:te(true),showInActions:te(true),showOnMedia:te(false),videos:te(true),gifs:te(true),images:te(true),videoQuality:ae(["best","ask","1080","720","480","lowest"],"best"),imageQuality:ae(["orig","large"],"orig"),onMultiple:ae(["ask","all"],"ask"),fileTemplate:re("{user}-{id}-{n}",{max:120}),feedImageQuality:ae(["default","large","orig"],"default"),photoZoom:te(true),photoGrid:te(true),photoGallery:te(false)},tabs:Lr,apply(e){e.enabled||ai(),ti(),Pr(),_i(),Hr();},scan(){ti(),Pr(),_i(),Hr();},navigate(){Ar(),_i();}});let Bi=null;function zi(){return Bi?.isConnected||(Bi=z("div","xp-dock"),(document.body||document.documentElement).appendChild(Bi)),Bi}function Ii(){Bi&&(Bi.hidden=![...Bi.children].some(e=>!e.hidden));}const Fi=2*Math.PI*25;let Ri=null,Ki=null,Vi=null,Oi=null,Ni=null,$i=null,Xi=null,ji=false;const Gi=new WeakMap;function Ui(e,t){const a=z("button","xp-shorts-nav__btn");return a.type="button",a.style.setProperty("--xp-nudge",4*t+"px"),a.innerHTML=Gt(e),a.addEventListener("mousedown",e=>e.preventDefault()),a.addEventListener("click",e=>{e.stopPropagation(),Xi?.step(t);}),a}function Qi(e,t){if(e.visible||Ri)if(function(e){Xi=e,Ri||(Ri=z("div","xp-shorts-nav"),Ri.setAttribute("role","group"),Ri.addEventListener("pointerenter",()=>ji=true),Ri.addEventListener("pointerleave",()=>ji=false),Ki=Ui("chevronUp",-1),Vi=Ui("chevronDown",1),Vi.classList.add("xp-shorts-nav__btn--next"),Vi.insertAdjacentHTML("beforeend",''),$i=Vi.querySelector(".xp-shorts-ring"),Ni=Vi.querySelector(".xp-shorts-ring__arc"),Oi=function(){const e=z("button","xp-shorts-nav__btn xp-shorts-nav__btn--auto");return e.type="button",e.addEventListener("mousedown",e=>e.preventDefault()),e.addEventListener("click",e=>{e.stopPropagation(),Xi?.toggleAuto();}),e}(),Ri.append(Ki,Vi,Oi),(document.body||document.documentElement).appendChild(Ri));}(t),Ri.hidden=!e.visible,e.visible){!function(){const e=document.querySelector(T.primaryColumn)?.getBoundingClientRect();if(!e?.width)return;const t=document.querySelector(T.sidebar)?.getBoundingClientRect(),a=(t?.width?t.left:window.innerWidth)-e.right,n=Math.min(Math.max(a>=60?e.right+(a-44)/2:e.right-44-8,8),window.innerWidth-44-8);Ri.style.left=`${Math.round(n)}px`;}(),Ki.disabled=!e.canPrev,Vi.disabled=false;for(const[e,t]of [[Ki,"shorts.prev"],[Vi,"shorts.next"]]){const a=$e(t);e.title!==a&&(e.title=a,e.setAttribute("aria-label",a));}!function(e){Oi.dataset.mode!==e&&(Oi.dataset.mode=e,Oi.innerHTML=Gt("running"===e?"pause":"play"),Oi.classList.toggle("is-on","running"===e),Oi.classList.toggle("is-paused","paused"===e));const t=ke("shorts"),a="off"!==e&&t.autoKey?` (${Dn(t.autoKey)})`:"",n=$e("running"===e?"shorts.autoPause":"paused"===e?"shorts.autoResume":"shorts.autoPlay");Oi.title=`${n}${a}`,Oi.setAttribute("aria-label",n),Oi.setAttribute("aria-pressed",String("running"===e));}(e.auto);}else ji=false;}function Wi(e){$i&&($i.classList.toggle("is-on",Boolean(e)),e&&($i.classList.toggle("is-paused",e.paused),Ni.style.strokeDashoffset=String(Fi*(1-e.progress))));}function Yi(e){const t=0===e?Oi:e<0?Ki:Vi;!t||Ri.hidden||t.disabled||(t.classList.remove("is-pressed"),t.classList.add("is-pressed"),clearTimeout(Gi.get(t)),Gi.set(t,setTimeout(()=>t.classList.remove("is-pressed"),380)));}let Zi=null,Ji=0,eo=0,to=0,ao=null,no=false,ro=0,io=false,oo=null,so=null,lo=false,co={progress:-1},uo=null,po=0,mo=null,fo={progress:-1,paused:null};function ho(){return io}function go(e,t,a=performance.now()){if(!e&&!oo)return;const n=oo||(oo=z("div","xp-shorts-bar"),oo.appendChild(z("div","xp-shorts-bar__fill")),(document.body||document.documentElement).appendChild(oo),oo),r=e?function(e,t){return (mo!==e||!uo||t-po>250)&&(mo=e,uo=e.querySelector(T.article)?.getBoundingClientRect()??null,po=t),uo}(e.cell,a):null,i=Boolean(r?.width);if(n.classList.toggle("is-on",i),!i)return so?.classList.remove("is-on"),co={progress:-1,paused:null},void(mo=null);n.classList.toggle("is-paused",e.paused),n.style.left=`${Math.round(r.left)}px`,n.style.top=`${Math.round(r.top)}px`,n.style.width=`${Math.round(r.width)}px`;const o=Math.round(1e3*e.progress)/1e3;o!==co.progress&&n.style.setProperty("--xp-auto-progress",String(o)),co={progress:o,paused:e.paused},function(e,t,a){const n=so||(so=z("button","xp-shorts-chip"),so.type="button",so.addEventListener("mousedown",e=>e.preventDefault()),so.addEventListener("pointerenter",()=>lo=true),so.addEventListener("pointerleave",()=>lo=false),so.addEventListener("click",e=>{e.stopPropagation(),Zi?.toggle();}),(document.body||document.documentElement).appendChild(so),so),r=Dn(a.autoKey),i=`${t.userPaused?"p":"r"}|${r}`;if(n.dataset.signature!==i){n.dataset.signature=i,n.replaceChildren(),n.insertAdjacentHTML("beforeend",Gt(t.userPaused?"play":"pause")),r&&n.appendChild(z("kbd","xp-shorts-chip__key",r));const e=$e(t.userPaused?"shorts.autoResume":"shorts.autoPause");n.title=r?`${e} (${r})`:e,n.setAttribute("aria-label",e);}n.style.left=`${Math.round(e.right-8)}px`,n.style.top=`${Math.max(4,Math.round(e.top-30))}px`,n.classList.toggle("is-on",true);}(r,e,t);}function bo(e,t){const a=Boolean(Ri)&&!Ri.hidden,n=t.autoStyle,r=a&&("auto"===n||"ring"===n||"both"===n),i="bar"===n||"both"===n||"auto"===n&&!a,o=Math.round(1e3*(e?.progress??0))/1e3,s=e?.paused??false;r?o===fo.progress&&s===fo.paused||(Wi({progress:o,paused:s}),fo={progress:o,paused:s}):(Wi(null),fo={progress:-1,paused:null}),go(i?e:null,t);}function vo(e){Ji=requestAnimationFrame(vo);const t=ke("shorts"),a=Math.min(e-eo,100);if(eo=e,Zi.moving())return to=0,ao=null,void bo(null,t);const n=Zi.cells(),r=n[0];if(!r)return void bo(null,t);if(r!==ao&&(ao=r,to=0),e-ro>250&&(no=Zi.blocked(),ro=e),no)return void bo(null,t);const i=io||t.autoHover&&(ji||lo);i||(to+=a);const o=Math.min(1,to/function(e,t){const a=1e3*t.autoDelay;if(!t.autoWaitVideo)return a;let n=0;for(const r of e)for(const e of r.querySelectorAll("video"))!e.loop&&Number.isFinite(e.duration)&&(n=Math.max(n,1e3*e.duration));return Math.max(a,Math.min(n,3e5))}(n,t));bo({cell:r,progress:o,paused:i,userPaused:io},t),o>=1&&(to=0,Zi.step());}function yo(){Ji&&cancelAnimationFrame(Ji),Ji=0,ao=null,to=0,Wi(null),fo={progress:-1,paused:null},lo=false,go(null,null);}const wo=`[${H}]:not([${H}="active"]) video`,xo=`[${H}="active"] video`,Ao=new WeakSet;function ko(e){e.paused||e.ended||(Ao.add(e),e.pause());}function Ho(e){const t=e.target;if(!(t instanceof HTMLVideoElement))return;const a=t.closest(`[${H}]`)?.getAttribute(H);a&&"active"!==a&&ko(t);}const So="data-xp-shorts-on",Po=H,Lo=/(?:^|\/)status\/|^\/(?:messages|settings|compose|i\/(?:grok|flow))(?:\/|$)/,Co='input, textarea, select, video, audio, [contenteditable=""], [contenteditable="true"], [role="textbox"], [role="slider"]',To=`${T.sidebar}, header[role="banner"]`,Mo={slow:1.7,normal:1,fast:.55,instant:0},qo={ArrowDown:1,ArrowUp:-1,KeyJ:1,KeyK:-1};let Eo=false,Do=0,_o=null,Bo=null,zo=0,Io=0,Fo=false,Ro=0,Ko=0,Vo=0,Oo=0,No=0,$o=0,Xo=false,jo=null,Go=0,Uo=false;const Qo=new WeakMap,Wo=(e,t,a)=>Math.min(a,Math.max(t,e));function Yo(){return !Lo.test(location.pathname)}function Zo(){if(document.fullscreenElement)return true;const e=performance.now();if(e-$o<200)return Xo;$o=e,Xo=false;for(const t of document.querySelectorAll('[role="dialog"], [role="alertdialog"], [role="menu"], [aria-modal="true"], .xp-gallery, .xp-popup, .xp-settings-backdrop, .xp-confirm-overlay'))if(t.getClientRects().length&&"hidden"!==getComputedStyle(t).visibility){Xo=true;break}return Xo}function Jo(e,t){const a=performance.now(),n=Qo.get(e);if(n&&awindow.innerHeight+i)return r;Qo.set(e,r);const o=e.querySelector(T.article),l=[...o?.querySelectorAll('[data-testid="Tweet-User-Avatar"]')??[]].find(e=>!e.closest(T.quoteTweet)),c=l?.getBoundingClientRect();if(!c?.width)return r;const d=c.left+c.width/2;let u=l;for(;u.parentElement&&u.parentElement!==o&&!u.parentElement.querySelector(T.userName);)u=u.parentElement;const m=s()?[]:null;for(const s of u.querySelectorAll("div")){if(s.childElementCount||l.contains(s)||s.contains(l))continue;const e=s.getBoundingClientRect();e.width<=0||e.width>6||e.height<2||Math.abs(e.left+e.width/2-d)>30||(m?.push({top:Math.round(e.top-c.top),bottom:Math.round(e.bottom-c.bottom),width:e.width}),e.bottom<=c.top+6?r.above=true:e.top>=c.bottom-6&&(r.below=true));}return (r.above||r.below)&&(r.until=a+8e3*(.75+.5*Math.random())),m&&p("shorts","thread lines",{above:r.above,below:r.below,bars:m,column:u.className}),r}function es(e,t){return t.index===e.index+1&&(Jo(e.cell,e.rect).below||Jo(t.cell,t.rect).above)}function ts(){const e=document.querySelector(T.primaryColumn);if(!e)return [];const t=[];for(const o of e.querySelectorAll(T.cell)){const e=o.getBoundingClientRect();e.height&&t.push({cell:o,rect:e,post:Boolean(o.querySelector(T.article))});}t.sort((e,t)=>e.rect.top-t.rect.top);const a=[];t.forEach((e,t)=>{e.post&&a.push({cell:e.cell,rect:e.rect,index:t});});const n=[];let r=[];const i=()=>{if(!r.length)return;const e=r[0].rect.top,t=r[r.length-1].rect.bottom;n.push({cell:r[0].cell,cells:r.map(e=>e.cell),tops:r.map(e=>e.rect.top),rect:{top:e,bottom:t,height:t-e}}),r=[];};for(const o of a)r.length&&!es(r[r.length-1],o)&&i(),r.push(o);return i(),n}function as(e){const t=window.innerHeight/2;return e.top<=t&&e.bottom>=t?0:Math.min(Math.abs(e.top-t),Math.abs(e.bottom-t))}function ns(e){if(Bo){const t=e.find(e=>e.cell===Bo);if(t)return t}let t=null,a=1/0;for(const n of e){const e=as(n.rect);e{const r=t===n?"active":t===n-1?"prev":t===n+1?"next":"far",i=(e.rect.top+e.rect.bottom)/2;e.cells.forEach((t,n)=>{if(a.add(t),t.getAttribute(Po)!==r&&t.setAttribute(Po,r),"active"===r){const a=`${Math.round(i-e.tops[n])}px`;t.style.getPropertyValue("--xp-shorts-oy")!==a&&t.style.setProperty("--xp-shorts-oy",a);}});});for(const i of document.querySelectorAll(`[${Po}]`))a.has(i)||i.removeAttribute(Po);!function(){for(const e of document.querySelectorAll(wo))ko(e);for(const e of document.querySelectorAll(xo))Ao.has(e)&&(Ao.delete(e),e.paused&&!e.ended&&e.play().catch(()=>{}));}();const r=ke("shorts");!function(e,t){if(t&&e)if(e.cell!==jo){rs(),jo=e.cell;for(const t of e.cells)h("shorts:active",t);Go=setTimeout(()=>{if(Go=0,!Eo||jo!==e.cell)return;Uo=true;const t=ts(),a=t.findIndex(t=>t.cell===e.cell);if(is(t[a]?.cells??e.cells),ke("shorts").translateNext)for(const e of t[a+1]?.cells??[])h("shorts:ahead",e);},450);}else Uo&&is(e.cells);else jo&&rs();}(t,r.translateOnlyCurrent),Qi({visible:Boolean(t)&&r.buttons&&!Zo(),canPrev:n>0||window.scrollY>4,auto:r.autoplay?ho()?"paused":"running":"off"},bs);}function ss(){if(Do||Ko||_o)return;const e=100-(performance.now()-Ro);e>0?Ko=setTimeout(()=>{Ko=0,Do=requestAnimationFrame(os);},e):Do=requestAnimationFrame(os);}function ls(){return Math.max(0,document.documentElement.scrollHeight-window.innerHeight)}function cs(e){const t=window.innerHeight;let a=1/0,n=-1/0;for(const o of e){const e=o.getBoundingClientRect();a=Math.min(a,e.top),n=Math.max(n,e.bottom);}const r=n-a;if(!(r>0))return null;const i=window.scrollY+a;return Wo(Math.round(r>t-96?i-48:i+r/2-t/2),0,ls())}function ds(){return Boolean(_o)&&performance.now()<_o.until}function us(){clearTimeout(Vo),Vo=0,_o&&cancelAnimationFrame(_o.id),_o=null,Bo=null;}function ps(e,t=null){us(),Bo=t;const a=Mo[ke("shorts").speed]??1,n=window.scrollY,r=e=>window.scrollTo({top:e,left:0,behavior:"instant"});if(matchMedia("(prefers-reduced-motion: reduce)").matches||0===a){const t=e();return null!=t&&r(t),Bo=null,void os()}let i=e();if(null==i)return void(Bo=null);let o=0;const s=Wo(340+.1*Math.abs(i-n),360,620)*a,l=performance.now(),c={id:0,until:l+s+400};_o=c,os();const d=a=>{if(_o!==c)return;const u=Math.min(1,(a-l)/s),p=u<.5?4*u**3:1-(-2*u+2)**3/2;if(o++%4==0||u>=1){const t=e();if(null==t)return us(),void os();i=t;}r(n+(i-n)*p),u<1?c.id=requestAnimationFrame(d):(us(),os(),t&&function(){if(Oo<=0)return;Oo-=1,clearTimeout(Vo);const e=performance.now();Vo=setTimeout(()=>{if(Vo=0,!Eo||_o||No>e)return;const t=ns(ts());if(!t)return;const a=cs(t.cells),n=null==a?0:Math.abs(a-window.scrollY);n<6||n>.5*window.innerHeight||ps(()=>cs(t.cells),t.cell);},350);}());};c.id=requestAnimationFrame(d);}function ms(e){Oo=1,ps(()=>cs(e.cells),e.cell);}function fs(e){Yi(e);const t=ts(),a=ns(t);if(!a)return;const n=t[t.indexOf(a)+e];if(n)return void ms(n);const r=Wo(Math.round(window.scrollY+e*window.innerHeight*.6),0,ls());r!==window.scrollY&&ps(()=>r);}function hs(e){Eo&&!ds()&&fs(e);}function gs(){var e;e=!ho(),io=Boolean(e),os();}const bs={step:hs,toggleAuto:function(){ke("shorts").autoplay?gs():Se("shorts",{autoplay:true});}};function vs(e){if(!Eo||e.ctrlKey||e.defaultPrevented)return;if(No=performance.now(),Math.abs(e.deltaX)>Math.abs(e.deltaY))return;const t=Math.sign(e.deltaY);if(!(t&&e.target instanceof Element))return;if(e.target.closest(To)||Zo())return;const a=performance.now(),n=Math.abs(e.deltaY),r=a-zo>120||n>Io+4;if(zo=a,Io=n,ds()||!r){if(Fo&&!ds())return;return e.preventDefault(),void e.stopPropagation()}const i=ns(ts());if(!i)return;const{rect:o}=i;Fo=t>0&&o.bottom>window.innerHeight-24||t<0&&o.top<24,Fo||(e.preventDefault(),e.stopPropagation(),fs(t));}function ys(e){if(!Eo||e.defaultPrevented||e.altKey||e.ctrlKey||e.metaKey)return;No=performance.now();const t=ke("shorts");if(t.autoplay&&t.autoKey&&e.code===t.autoKey&&!e.shiftKey){const t=e.target instanceof Element?e.target:document.activeElement;if(t?.closest?.(Co)||Zo())return;return e.preventDefault(),e.stopPropagation(),void(e.repeat||(gs(),Yi(0)))}if(!t.keys)return;const a="Space"===e.code||" "===e.key;if(e.shiftKey&&!a)return;const n=a?e.shiftKey?-1:1:qo[e.code]??qo[e.key];if(!n)return;const r=e.target instanceof Element?e.target:document.activeElement;r?.closest?.(Co)||Zo()||a&&r?.closest?.('button, a[href], summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="switch"], [role="checkbox"], [role="radio"]')||(e.preventDefault(),e.stopPropagation(),ds()||fs(n));}const ws={cells:()=>[...document.querySelectorAll(`[${Po}="active"]`)],moving:ds,blocked:Zo,step:()=>hs(1),toggle:gs};function xs(){const e=ke("shorts"),t=document.documentElement.style;t.setProperty("--xp-shorts-scale",String(e.scale/100)),t.setProperty("--xp-shorts-blur",`${e.blur}px`),t.setProperty("--xp-shorts-prev-opacity",String(e.prevOpacity/100)),t.setProperty("--xp-shorts-next-opacity",String(e.nextOpacity/100)),t.setProperty("--xp-shorts-far-opacity",String(Math.min(e.prevOpacity,e.nextOpacity)/100)),t.setProperty("--xp-shorts-time",.5*(Mo[e.speed]??1)+"s");const a=e.enabled&&Yo();a&&!Eo?function(){Eo=true,document.documentElement.setAttribute(So,""),window.addEventListener("wheel",vs,{capture:true,passive:false}),window.addEventListener("keydown",ys,true),window.addEventListener("scroll",ss,{passive:true}),window.addEventListener("resize",ss),window.addEventListener("play",Ho,true),os();const e=ns(ts());e&&ms(e);}():!a&&Eo?(Eo=false,us(),document.documentElement.removeAttribute(So),document.documentElement.removeAttribute(P),window.removeEventListener("wheel",vs,true),window.removeEventListener("keydown",ys,true),window.removeEventListener("scroll",ss),window.removeEventListener("resize",ss),window.removeEventListener("play",Ho,true),function(){Do&&cancelAnimationFrame(Do),clearTimeout(Ko),Do=0,Ko=0;for(const e of document.querySelectorAll(`[${Po}]`))e.removeAttribute(Po),e.style.removeProperty("--xp-shorts-oy");}(),rs(),yo(),ji=false,Ri&&(Ri.hidden=true)):Eo&&ss(),document.documentElement.toggleAttribute(P,Eo&&e.translateOnlyCurrent),Eo&&e.autoplay?(Zi=ws,Ji||(eo=performance.now(),to=0,ao=null,ro=0,io=false,Ji=requestAnimationFrame(vo))):yo();}let As=null;function ks(){const e=ke("shorts"),t=ke("general"),a=Yo()&&(e.enabled||t.hotkey&&t.hotkeyHint);if(!a&&!As)return;const n=As||(As=z("button","xp-dock-switch"),As.type="button",As.setAttribute("role","switch"),As.append(z("span","xp-dock-switch__label"),z("span","xp-dock-switch__track")),As.lastChild.setAttribute("aria-hidden","true"),As.addEventListener("click",()=>{Se("shorts",{enabled:!ke("shorts").enabled});}),zi().append(As),As);n.hidden=!a,n.setAttribute("aria-checked",String(e.enabled)),n.classList.toggle("is-on",e.enabled);const r=$e("shorts.dockLabel");n.firstChild.textContent=r,n.title=$e("shorts.dockTitle"),n.setAttribute("aria-label",r),Ii();}function Hs(){xs(),ks();}E({id:"shorts",order:25,fields:{enabled:te(false),keys:te(true),buttons:te(true),speed:ae(["slow","normal","fast","instant"],"normal"),translateOnlyCurrent:te(true),translateNext:te(true),autoplay:te(false),autoDelay:ne(8,{min:1,max:60}),autoWaitVideo:te(true),autoHover:te(true),autoKey:re("KeyP",{max:24}),autoStyle:ae(["auto","ring","bar","both","none"],"auto"),scale:ne(105,{min:100,max:120}),blur:ne(3,{min:0,max:12}),prevOpacity:ne(55,{min:0,max:100}),nextOpacity:ne(55,{min:0,max:100})},tabs:[{id:"shorts",titleKey:"shorts.title",badge:e=>e.shorts.enabled?"":$e("common.off"),sections:[{titleKey:"shorts.sectionMain",descKey:"shorts.sectionMainDesc",controls:[{type:"switch",path:"enabled",labelKey:"shorts.enabled",hintKey:"shorts.enabledHint"},{type:"switch",path:"keys",labelKey:"shorts.keys",hintKey:"shorts.keysHint",showIf:e=>e.enabled},{type:"switch",path:"buttons",labelKey:"shorts.buttons",hintKey:"shorts.buttonsHint",showIf:e=>e.enabled},{type:"switch",path:"translateOnlyCurrent",labelKey:"shorts.translateOnlyCurrent",hintKey:"shorts.translateOnlyCurrentHint",showIf:e=>e.enabled},{type:"switch",path:"translateNext",labelKey:"shorts.translateNext",hintKey:"shorts.translateNextHint",showIf:e=>e.enabled&&e.translateOnlyCurrent}]},{titleKey:"shorts.sectionAuto",descKey:"shorts.sectionAutoDesc",showIf:e=>e.enabled,controls:[{type:"switch",path:"autoplay",labelKey:"shorts.autoplay",hintKey:"shorts.autoplayHint"},{type:"slider",path:"autoDelay",labelKey:"shorts.autoDelay",hintKey:"shorts.autoDelayHint",min:1,max:60,step:1,unit:"s",showIf:e=>e.autoplay},{type:"switch",path:"autoWaitVideo",labelKey:"shorts.autoWaitVideo",hintKey:"shorts.autoWaitVideoHint",showIf:e=>e.autoplay},{type:"switch",path:"autoHover",labelKey:"shorts.autoHover",hintKey:"shorts.autoHoverHint",showIf:e=>e.autoplay},{type:"hotkey",path:"autoKey",labelKey:"shorts.autoKey",hintKey:"shorts.autoKeyHint",reserved:["Space","ArrowUp","ArrowDown","KeyJ","KeyK"],showIf:e=>e.autoplay},{type:"select",path:"autoStyle",labelKey:"shorts.autoStyle",hintKey:"shorts.autoStyleHint",options:[{value:"auto",labelKey:"shorts.autoStyle.auto"},{value:"ring",labelKey:"shorts.autoStyle.ring"},{value:"bar",labelKey:"shorts.autoStyle.bar"},{value:"both",labelKey:"shorts.autoStyle.both"},{value:"none",labelKey:"shorts.autoStyle.none"}],showIf:e=>e.autoplay}]},{titleKey:"shorts.sectionLook",showIf:e=>e.enabled,controls:[{type:"select",path:"speed",labelKey:"shorts.speed",hintKey:"shorts.speedHint",options:[{value:"slow",labelKey:"shorts.speed.slow"},{value:"normal",labelKey:"shorts.speed.normal"},{value:"fast",labelKey:"shorts.speed.fast"},{value:"instant",labelKey:"shorts.speed.instant"}]},{type:"slider",path:"scale",labelKey:"shorts.scale",hintKey:"shorts.scaleHint",min:100,max:120,step:1,unit:"%"},{type:"slider",path:"blur",labelKey:"shorts.blur",hintKey:"shorts.blurHint",min:0,max:12,step:1},{type:"slider",path:"prevOpacity",labelKey:"shorts.prevOpacity",hintKey:"shorts.opacityHint",min:0,max:100,step:1,unit:"%"},{type:"slider",path:"nextOpacity",labelKey:"shorts.nextOpacity",hintKey:"shorts.opacityHint",min:0,max:100,step:1,unit:"%"}]}]}],init(){f("settings:general",ks);},apply:Hs,scan:Hs,navigate:Hs});const Ss=["outline","filled","shadow"],Ps=["default","rounded","square"],Ls={cards:te(false),cardStyle:ae(Ss,"outline"),cardRadius:ne(16,{min:0,max:32}),cardOpacity:ne(100,{min:0,max:100}),gap:ne(0,{min:0,max:48}),padding:ne(0,{min:0,max:32}),hideDividers:te(false),hideFeedBorder:te(false),hideAvatars:te(false),textScale:ne(100,{min:80,max:160}),avatarShape:ae(Ps,"default")},Cs="data-xp-peek-posts",Ts=T.primaryColumn,Ms=`${Ts} ${T.cell}`,qs=`${Ms} ${T.article}`,Es={outline:"border:1px solid var(--xp-border)!important;box-shadow:none!important",filled:"border:1px solid transparent!important;background-color:var(--xp-elevated)!important;box-shadow:none!important",shadow:"border:1px solid transparent!important;background-color:var(--xp-surface)!important;box-shadow:var(--xp-shadow)!important"},Ds={rounded:"22%",square:"0"};function _s(e,t=false){if(!e)return "";const a=t?"html":`html:not([${Cs}])`,n=[];return e.hideFeedBorder&&n.push(`${a} ${Ts}{border-left-width:0!important;border-right-width:0!important}`,`${a} div.r-109y4c4.r-gu4em3:empty{display:none!important}`),e.cards?(n.push(`${a} ${Ms}{padding-left:8px!important;padding-right:8px!important}`,`${a} ${Ms} > div,${a} ${Ms} > div > div{border-bottom-width:0!important}`,`${a} ${qs}{${Es[e.cardStyle]||Es.outline};border-radius:${e.cardRadius}px!important;overflow:hidden}`),"filled"===e.cardStyle&&e.cardOpacity<100&&n.push(`${a} ${qs}{background-color:color-mix(in srgb,var(--xp-elevated) ${e.cardOpacity}%,transparent)!important}`)):e.hideDividers&&n.push(`${a} ${Ms} > div,${a} ${Ms} > div > div,${a} ${qs}{border-bottom-width:0!important}`),e.gap>0&&n.push(`${a} ${Ms} div:has(> ${T.article}){padding-top:${e.gap/2}px!important;padding-bottom:${e.gap/2}px!important;box-sizing:content-box!important}`),e.padding>0&&n.push(`${a} ${qs} > div{padding:${e.padding}px!important}`),100!==e.textScale&&n.push(`${a} ${qs} ${T.tweetText}{zoom:${e.textScale/100}}`),null!=Ds[e.avatarShape]&&n.push(`${a} ${qs} [data-testid^="UserAvatar-Container"],${a} ${qs} [data-testid^="UserAvatar-Container"] *{border-radius:${Ds[e.avatarShape]}!important}`),n.join("\n")}const Bs=new Set(["ad","promoted","реклама","anzeige","anuncio","annonce","publicité","publicidade","pubblicità","promowane","reklama","reklam","広告","广告","廣告","광고"]);function zs(e,t=3){let a=e;for(let n=0;nt=>{const a=new Set;return t.querySelectorAll(`${T.sidebar} ${e}`).forEach(e=>{const t=function(e){const t=e.closest(T.sidebar);if(!t)return null;const a=e.closest('aside, section, [role="complementary"], [role="region"]');return a&&t.contains(a)?a:null}(e);t&&a.add(zs(t));}),[...a]},Fs=e=>t=>[...t.querySelectorAll('header[role="banner"] a[href]')].filter(t=>e.test(t.getAttribute("href")||"")),Rs=e=>t=>[...t.querySelectorAll(`header[role="banner"] ${e}`)],Ks=e=>e.closest(T.cell)||e;function Vs(e,t){const a=e.closest(T.quoteTweet);if(a)return a;const n=e.closest('[role="link"]');return n&&n!==t&&t.contains(n)?n:null}const Os=`${T.videoPlayer}, [data-testid="previewInterstitial"], [data-testid="playButton"], video`,Ns=`${T.tweetText}, ${T.userName}, [role="group"]`,$s=(e,t,a)=>((t,a)=>(t.has(a)||t.set(a,function(e){const t=new Map;for(const a of e.querySelectorAll(`:is(${T.photo}, ${T.videoPlayer})`)){let n=a;for(;n.parentElement&&n.parentElement!==e&&!n.parentElement.querySelector(Ns);)n=n.parentElement;t.set(n,t.get(n)||a.matches(Os)||Boolean(a.querySelector(Os)));}return [...t].map(([e,t])=>({node:e,video:t||Boolean(e.querySelector(Os))}))}(e)),t.get(a)))(t,"media").filter(e=>e.video===a).map(e=>e.node);function Xs(e){return "/home"!==location.pathname?[]:[...e.querySelectorAll(`${T.primaryColumn} [role="tablist"][data-testid="ScrollSnap-List"]`)].filter(e=>e.querySelector('[role="tab"]')&&!e.closest('[role="dialog"]'))}function js(e){const t=Gs(e);let a=e;if(t)for(;a.parentElement&&a.parentElement!==t;)a=a.parentElement;else for(;a.parentElement&&1===a.parentElement.children.length&&!a.parentElement.matches(T.primaryColumn);)a=a.parentElement;return a.querySelector(`article, ${T.cell}`)?null:a}function Gs(e){const t=e.closest("[data-xp-sticky]");if(t)return t;for(let a=e.parentElement;a&&!a.matches(T.primaryColumn);a=a.parentElement)if(a.hasAttribute("data-xp-sticky")||"sticky"===getComputedStyle(a).position)return a;return null}const Us=[{group:"posts",key:"feedTabs",hint:true,find:e=>Xs(e).map(js).filter(Boolean)},{group:"posts",key:"showPosts",hint:true,find:function(e){return location.pathname.includes("/status/")?[]:[...e.querySelectorAll(`${T.primaryColumn} ${T.cell}`)].filter(e=>{if(e.querySelector("article"))return false;const t=e.querySelector("[data-keep-composer-open] > button"),a=(e.textContent||"").trim();return Boolean(t)&&a.length<=60&&/\d/.test(a)})}},{group:"posts",key:"newPostsPill",hint:true,css:'div:has(> div > [role="status"] [data-testid="pillLabel"])'},{group:"posts",key:"composer",hint:true,find:function(e){const t=new Set;return e.querySelectorAll(`${T.primaryColumn} [data-testid="tweetTextarea_0"]`).forEach(e=>{if(e.closest('[role="dialog"]'))return;let a=e.parentElement;for(;a&&!a.querySelector('[role="progressbar"]');)a=a.parentElement;if(!a||a.closest("article"))return;const n=a.parentElement;t.add(n&&!n.querySelector(`${T.cell}, article`)?n:a);}),[...t]}},{group:"posts",key:"moreFromX",hint:true,find:function(e){if(!location.pathname.includes("/status/"))return [];const t=[...document.querySelectorAll(`${T.primaryColumn} ${T.cell}`)],a=t.findIndex(e=>e.querySelector("article")),n=t.findIndex((e,t)=>t>a&&a>=0&&!e.querySelector("article")&&e.querySelector('h2[role="heading"]'));return n<0?[]:t.slice(n).filter(t=>e===document||e.contains(t)||t.contains(e))}},{group:"posts",key:"promoted",on:true,hint:true,inArticle:e=>function(e){if(e.querySelector('svg path[d^="M19.498 3h-15c-1.381"]'))return true;for(const t of e.querySelectorAll("span"))if(!(t.firstElementChild||t.textContent.length>20)&&Bs.has(t.textContent.trim().toLowerCase())&&!t.closest(T.tweetText))return true;return false}(e)?[Ks(e)]:[]},{group:"posts",key:"viewCounts",part:"post",hint:true,css:`${T.article} [role="group"] > div:has(> a[href$="/analytics"])`},{group:"posts",key:"avatars",view:"hideAvatars",hint:true,inArticle:function(e){const t=[];for(const a of e.querySelectorAll('[data-testid^="UserAvatar-Container"]')){if(Vs(a,e))continue;let n=a;for(;n.parentElement&&!n.parentElement.querySelector(T.userName)&&(n=n.parentElement,n!==e););t.push(n===e?a:n);}return t}},{group:"posts",key:"images",part:"post",hint:true,inArticle:(e,t)=>$s(e,t,false)},{group:"posts",key:"videos",part:"post",hint:true,inArticle:(e,t)=>$s(e,t,true)},{group:"posts",key:"linkCards",part:"post",hint:true,inArticle:function(e){return [...e.querySelectorAll('[data-testid="card.wrapper"]')].map(t=>{const a=t.parentElement;return a&&a!==e&&a.children.length<=2&&!a.querySelector(Ns)?a:t})}},{group:"posts",key:"articles",part:"post",hint:true,inArticle:function(e){return [...e.querySelectorAll('[data-testid="article-cover-image"]')].map(t=>{const a=t.parentElement||t;if(a===e||a.querySelector(Ns))return t;const n=a.parentElement;return n&&n!==e&&1===n.children.length&&!n.querySelector(Ns)?n:a})}},{group:"posts",key:"translateNotice",part:"post",hint:true,css:`${T.article} div:not([data-xp-ui], [data-xp-ui] *):has(> svg path[d^="${M}"]):has(> button)`},{group:"posts",key:"handles",part:"post",hint:true,inArticle:function(e){const t=[];for(const a of e.querySelectorAll(T.userName))for(const e of a.querySelectorAll("span")){if(e.firstElementChild)continue;const n=e.textContent.trim();if(64!==n.charCodeAt(0))continue;let r=e;for(;r.parentElement&&r.parentElement!==a&&r.parentElement.textContent.trim()===n;)r=r.parentElement;t.push(r);const i=r.nextElementSibling;i&&"·"===i.textContent.trim()&&t.push(i);}return t}},{group:"posts",key:"quotedPosts",part:"post",hint:true,inArticle:function(e){const t=[...e.querySelectorAll(T.quoteTweet)];for(const a of e.querySelectorAll(T.quoteAvatar)){const n=Vs(a,e);n&&t.push(n);}return t.map(t=>{const a=t.parentElement;return a&&a!==e&&a.children.length<=2?a:t})}},{group:"posts",key:"actionBar",part:"post",hint:true,css:[`${T.article} [role="group"]:has(> div > ${T.actionReply})`,`${T.article} div:has(> [role="group"]:only-child > div > ${T.actionReply})`,`${T.article} div:has(> div:only-child > [role="group"]:only-child > div > ${T.actionReply})`]},{group:"posts",key:"verifiedBadges",part:"post",hint:true,css:'[data-testid="icon-verified"]'},{group:"posts",key:"grokButton",part:"post",hint:true,css:`${T.article} div:has(> button[aria-label*="grok" i])`},{group:"sidebar",key:"search",find:e=>[...e.querySelectorAll(`${T.sidebar} form[role="search"]`)].map(e=>zs(e,8))},{group:"sidebar",key:"premium",on:true,hint:true,find:Is('a[href*="premium_sign_up"], a[href^="/i/premium"]')},{group:"sidebar",key:"trends",hint:true,find:Is('[data-testid="trend"]')},{group:"sidebar",key:"whoToFollow",hint:true,find:Is('[data-testid="UserCell"]')},{group:"sidebar",key:"footer",hint:true,find:e=>[...e.querySelectorAll(`${T.sidebar} nav[role="navigation"] a[href$="/tos"]`)].map(e=>e.closest("nav")).filter(Boolean).map(e=>zs(e))},{group:"nav",key:"logo",find:e=>Rs('h1 a[href="/home"]')(e).map(e=>{const t=e.closest("h1");return t?.parentElement||t||e})},{group:"nav",key:"home",find:Rs('[data-testid="AppTabBar_Home_Link"]')},{group:"nav",key:"explore",find:Fs(/^\/explore/)},{group:"nav",key:"notifications",find:Fs(/^\/notifications/)},{group:"nav",key:"chat",find:Fs(/^\/i\/chat/)},{group:"nav",key:"calls",find:Fs(/^\/i\/calls/)},{group:"nav",key:"grok",find:Fs(/^\/i\/grok/)},{group:"nav",key:"history",find:Fs(/^\/i\/history/)},{group:"nav",key:"creatorStudio",find:Fs(/^\/i\/jf\/creators/)},{group:"nav",key:"premium",find:Fs(/^\/i\/premium/)},{group:"nav",key:"followerRequests",find:Fs(/^\/follower_requests/)},{group:"nav",key:"xplus",css:'header[role="banner"] [data-xp-nav]'},{group:"nav",key:"profile",find:Rs('[data-testid="AppTabBar_Profile_Link"]')},{group:"nav",key:"more",find:Rs('[data-testid="AppTabBar_More_Menu"]')},{group:"nav",key:"post",find:e=>Rs('[data-testid="SideNav_NewTweet_Button"]')(e).map(e=>e.parentElement||e)},{group:"nav",key:"account",find:e=>Rs('[data-testid="SideNav_AccountSwitcher_Button"]')(e).map(e=>{const t=e.parentElement?.parentElement;return t&&!t.querySelector("nav")?t:e.parentElement||e})},{group:"chrome",key:"grokDrawer",hint:true,css:'div:has(> div > [data-testid="GrokDrawer"])'},{group:"chrome",key:"chatDrawer",hint:true,css:'div:has(> div > [data-testid="chat-drawer-root"])'}],Qs=["posts","sidebar","nav","chrome"],Ws=e=>`${e.group}.${e.key}`,Ys=e=>`interface.rule.${Ws(e)}`,Zs="xp-interface-style",Js="data-xp-hide",el="data-xp-sticky",tl="data-xp-peek",al="xp-interface-peek-style",nl=(e,t)=>t.view?true===e.postView?.[t.view]:e.enabled&&true===e[t.group]?.[t.key];function rl(e){if(!e)return "";const t=T.primaryColumn;return [`${t}{width:${e}px!important;max-width:100vw!important;flex:none!important}`,`${t} .r-1ye8kvj{max-width:none!important}`,`div:has(> ${t}),div:has(> div > ${t}){width:auto!important;max-width:none!important;flex-grow:1}`].join("\n")}const il=['header[role="banner"]{align-items:flex-start!important}','header[role="banner"] > div{align-items:flex-start!important}'].join("\n"),ol=['header[role="banner"] div:has(nav[role="navigation"]){flex:1 1 auto!important;min-height:0}','header[role="banner"] div:has(> nav[role="navigation"]){display:flex!important;flex-direction:column!important;justify-content:center!important}'].join("\n"),sl=`header[role="banner"]:not([${tl}]){display:none!important}`,ll=`${T.sidebar}:not([${tl}]){display:none!important}`,cl=`[${el}]{position:static!important}`,dl=`${T.sidebar}{position:fixed!important;top:0;right:0;bottom:0;width:350px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none}`,ul=['header[role="banner"]{position:fixed!important;top:0;bottom:0;left:0;z-index:2;width:auto!important;flex-grow:0!important}',dl,'main[role="main"]{flex:none!important;display:flex!important;flex-direction:row!important;justify-content:center!important;align-items:flex-start!important;width:100vw!important;max-width:none!important}','main[role="main"] > div,main[role="main"] > div > div{flex:0 1 auto!important;width:auto!important;max-width:none!important;margin:0!important}',`div:has(> ${T.primaryColumn}){width:auto!important;max-width:none!important;flex-grow:0!important}`].join("\n"),pl=e=>e.css?[].concat(e.css):[`[${Js}~="${Ws(e)}"]`];const ml=`[${tl}]{outline:2px solid var(--xp-accent,#1d9bf0)!important;outline-offset:3px;border-radius:6px;box-shadow:0 0 0 6px rgba(29,155,240,.25),0 0 24px 6px rgba(29,155,240,.35)!important;animation:xp-peek-pulse 1.1s ease-in-out infinite alternate}\n@keyframes xp-peek-pulse{from{outline-color:rgba(29,155,240,.5)}to{outline-color:var(--xp-accent,#1d9bf0)}}\n@media (prefers-reduced-motion:reduce){[${tl}]{animation:none!important}}`,fl={contentWidth:e=>rl(e),menuLeft:()=>il,menuCenter:()=>ol,feedTabsStatic:()=>cl,sidebarHide:()=>ll,menuHide:()=>sl,sidebarRight:()=>dl,centerContent:()=>[dl,ul].join("\n")};function hl(){let e=document.getElementById(al);return e||(e=document.createElement("style"),e.id=al,(document.head||document.documentElement).appendChild(e)),e}const gl=e=>{const t=e.getBoundingClientRect();return t.width>0&&t.height>0&&t.bottom>0&&t.right>0&&t.tope.removeAttribute(tl)),document.getElementById(al)?.remove(),document.documentElement.removeAttribute(Cs);}function vl(e){bl();const t=Us.find(t=>Ws(t)===e);if(!t)return 0;let a=[];try{a=function(e){return e.css?[...document.querySelectorAll([].concat(e.css).join(","))]:e.inArticle?[...document.querySelectorAll(T.article)].flatMap(t=>e.inArticle(t,new Map)):e.find(document)}(t);}catch(n){u(r,`peek "${e}" failed`,{error:n});}return hl().textContent=ml,a.forEach(e=>e.setAttribute(tl,"")),a.filter(gl).length}const yl={contentWidth:()=>document.querySelectorAll(T.primaryColumn),centerContent:()=>document.querySelectorAll(T.primaryColumn),menuLeft:()=>document.querySelectorAll('header[role="banner"]'),menuCenter:()=>document.querySelectorAll('header[role="banner"]'),menuHide:()=>document.querySelectorAll('header[role="banner"]'),sidebarRight:()=>document.querySelectorAll(T.sidebar),sidebarHide:()=>document.querySelectorAll(T.sidebar),feedTabsStatic:()=>document.querySelectorAll(`[${el}]`)},wl=`${T.article}, [${x}]`;let xl=[],Al=[],kl=false,Hl=null;const Sl=new Set;let Pl=0,Ll=false,Cl=0;const Tl=new WeakMap;function Ml(e,t){const a=e.getAttribute(Js)||"";a.split(" ").includes(t)||e.setAttribute(Js,`${a} ${t}`.trim());}function ql(e,t){const a=(e.getAttribute(Js)||"").split(" ").filter(e=>e&&e!==t);a.length?e.setAttribute(Js,a.join(" ")):e.removeAttribute(Js);}function El(e){if(!e.isConnected)return;const t=new Map,a=new Map;for(const o of xl){const n=Ws(o);try{for(const r of o.inArticle(e,t)){const e=a.get(r);e?e.add(n):a.set(r,new Set([n]));}}catch(i){u(r,`rule "${n}" failed`,{error:i});}}const n=Tl.get(e);if(n)for(const[r,o]of n){const e=a.get(r);for(const t of o)e?.has(t)||ql(r,t);}for(const[r,o]of a)for(const e of o)Ml(r,e);a.size?Tl.set(e,a):Tl.delete(e);}function Dl(){Pl=0;const e=performance.now();for(const t of Sl)if(Sl.delete(t),El(t),performance.now()-e>8)break;Sl.size&&(Pl=requestAnimationFrame(Dl));}function _l(){try{for(const e of Xs(document).map(Gs).filter(Boolean))e.setAttribute(el,"");}catch(e){u(r,"sticky feed header lookup failed",{error:e});}}function Bl(){Cl=performance.now(),kl&&_l();for(const t of Al)try{for(const e of t.find(document))Ml(e,Ws(t));}catch(e){u(r,`rule "${Ws(t)}" failed`,{error:e});}}function zl(){if(Ll||!Al.length&&!kl)return;Ll=true;const e=()=>{Ll=false,Bl();},t=120-(performance.now()-Cl);t>0?setTimeout(e,t):requestAnimationFrame(e);}function Il(e){let t=false;for(const a of e)for(const e of a.addedNodes){if(1!==e.nodeType)continue;const a=e.closest(wl);if(a)!a.hasAttribute(x)&&xl.length&&Sl.add(a);else if(t=true,xl.length)for(const t of e.querySelectorAll(T.article))Sl.add(t);}Sl.size&&!Pl&&Dl(),t&&zl();}const Fl=e=>({enter:()=>vl(Ws(e)),leave:bl}),Rl=e=>({enter:(t,a)=>function(e,t){bl(),"feedTabsStatic"===e&&_l();const a=fl[e]?.(t)??"",n=[...yl[e]?.()??[]],r=n.map(e=>{e.setAttribute(tl,"");const t=function(e){const t=[e];for(;t.length;){const e=t.shift(),a=e.getBoundingClientRect();if(a.width>0&&a.height>0)return e;t.push(...e.children);}return e}(e);return t.setAttribute(tl,""),t});return (a||n.length)&&(hl().textContent=`${a}\n${ml}`),r.filter(gl).length}(e,"contentWidth"!==e||a),leave:bl}),Kl={enter:e=>{return t=e.postView,bl(),document.documentElement.setAttribute(Cs,""),hl().textContent=_s(t,true),[...document.querySelectorAll(`${T.primaryColumn} ${T.article}`)].filter(gl).length;var t;},leave:bl},Vl=e=>e.postView.cards,Ol=(e,t,a={})=>({type:e,path:`postView.${t}`,labelKey:`interface.postView.${t}`,hintKey:`interface.postView.${t}Hint`,peek:Kl,...a}),Nl=e=>e.enabled,$l=e=>e.sidebarHide,Xl=e=>e.menuHide;function jl(e,t){return [{type:"subheading",textKey:"interface.sub.hide",showIf:Nl},...Us.filter(a=>a.group===e&&!a.view&&a.part===t).map(e=>({type:"switch",path:`${e.group}.${e.key}`,labelKey:Ys(e),hintKey:e.hint?`${Ys(e)}Hint`:void 0,peek:Fl(e),showIf:Nl,disabledIf:{sidebar:$l,nav:Xl}[e.group]}))]}const Gl=(e,t={})=>({...t,type:"switch",path:e,labelKey:`interface.${e}`,hintKey:`interface.${e}Hint`,peek:Rl(e)});E({id:"interface",order:30,fields:{enabled:te(true),menuLeft:te(false),menuCenter:te(false),menuHide:te(false),feedTabsStatic:te(false),sidebarRight:te(false),sidebarHide:te(false),centerContent:te(false),contentWidth:ne(0,{min:0,max:1600}),postView:oe(Ls),...function(){const e={};for(const t of Qs)e[t]={};for(const t of Us.filter(e=>!e.view))e[t.group][t.key]=te(Boolean(t.on));return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,oe(t)]))}()},tabs:[{id:"interface",titleKey:"interface.title",badge:e=>{const t=e.interface;if(!t.enabled)return $e("common.off");const a=Us.filter(e=>t[e.group][e.key]).length;return String(a)},sections:[{titleKey:"interface.sectionMain",descKey:"interface.sectionMainDesc",controls:[{type:"switch",path:"enabled",labelKey:"interface.enabled",hintKey:"interface.enabledHint"},{type:"hint",textKey:"interface.peekHint"}]},{titleKey:"interface.sectionFeed",descKey:"interface.sectionFeedDesc",controls:[{type:"subheading",textKey:"interface.sub.layout"},{type:"slider",path:"contentWidth",labelKey:"interface.contentWidth",hintKey:"interface.contentWidthHint",zeroKey:"interface.width.default",min:0,max:1600,step:10,presets:[{value:0,labelKey:"interface.width.default"},{value:500,labelKey:"interface.width.narrow"},{value:750,labelKey:"interface.width.wide"},{value:1e3,labelKey:"interface.width.wider"},{value:1400,labelKey:"interface.width.full"}],peek:Rl("contentWidth")},Gl("centerContent"),Gl("feedTabsStatic"),...jl("posts")]},{titleKey:"interface.sectionPosts",descKey:"interface.sectionPostsDesc",controls:[{type:"subheading",textKey:"interface.sub.cards"},Ol("switch","cards"),Ol("select","cardStyle",{options:Ss.map(e=>({value:e,labelKey:`interface.postView.cardStyle.${e}`})),showIf:Vl}),Ol("slider","cardRadius",{min:0,max:32,step:1,showIf:Vl}),Ol("slider","cardOpacity",{min:0,max:100,step:5,unit:"%",showIf:e=>Vl(e)&&"filled"===e.postView.cardStyle}),{type:"subheading",textKey:"interface.sub.spacing"},Ol("slider","gap",{min:0,max:48,step:2,zeroKey:"interface.postView.none"}),Ol("slider","padding",{min:0,max:32,step:2,zeroKey:"interface.postView.none"}),Ol("switch","hideDividers",{showIf:e=>!e.postView.cards}),Ol("switch","hideFeedBorder"),{type:"subheading",textKey:"interface.sub.look"},Ol("slider","textScale",{min:80,max:160,step:5,unit:"%"}),Ol("switch","hideAvatars",{peek:{enter:()=>vl("posts.avatars"),leave:bl}}),Ol("select","avatarShape",{disabledIf:e=>e.postView.hideAvatars,options:Ps.map(e=>({value:e,labelKey:`interface.postView.avatarShape.${e}`}))}),...jl("posts","post")]},{titleKey:"interface.sectionNav",descKey:"interface.sectionNavDesc",controls:[{type:"subheading",textKey:"interface.sub.layout"},Gl("menuHide"),Gl("menuLeft",{disabledIf:Xl}),Gl("menuCenter",{disabledIf:Xl}),...jl("nav")]},{titleKey:"interface.sectionSide",descKey:"interface.sectionSideDesc",controls:[{type:"subheading",textKey:"interface.sub.layout"},Gl("sidebarHide"),Gl("sidebarRight",{disabledIf:$l}),...jl("sidebar")]},{titleKey:"interface.sectionDrawers",descKey:"interface.sectionDrawersDesc",controls:jl("chrome")}]}],apply(){((function(){const e=ke("interface"),t=Us.filter(t=>nl(e,t)).flatMap(pl).map(e=>`${e}:not([${tl}]){display:none!important}`).join("\n");(function(){let e=document.getElementById(Zs);return e||(e=document.createElement("style"),e.id=Zs,(document.head||document.documentElement).appendChild(e)),e}()).textContent=[t,rl(e.contentWidth),e.menuLeft?il:"",e.menuCenter?ol:"",e.enabled&&e.feedTabsStatic?cl:"",e.enabled&&e.sidebarHide?ll:"",e.enabled&&e.menuHide?sl:"",e.sidebarRight||e.centerContent?dl:"",e.centerContent?ul:"",_s(e.postView)].filter(Boolean).join("\n");}))(),function(){const e=ke("interface"),t=Us.filter(t=>nl(e,t));var a;if(xl=t.filter(e=>e.inArticle),Al=t.filter(e=>e.find),kl=Boolean(e.enabled&&e.feedTabsStatic),(a=xl.length>0||Al.length>0||kl)&&!Hl?(Hl=new MutationObserver(Il),Hl.observe(document.documentElement,{childList:true,subtree:true})):!a&&Hl&&(Hl.disconnect(),Hl=null,Sl.clear()),xl.length){for(const e of document.querySelectorAll(T.article))Sl.add(e);Pl||Dl();}Bl();}();},navigate(){zl();}});const Ul="data-xp-nav";let Ql="r-1hdo0pc",Wl=()=>{};function Yl(e){const t=e?.querySelector?.("div[dir]");if(!t)return null;const a=getComputedStyle(t).fontWeight,n=Number.parseInt(a,10);return Number.isFinite(n)?n:"bold"===a?700:"normal"===a?400:null}function Zl(e){"1"!==e.dataset.xpHoverObs&&(e.dataset.xpHoverObs="1",new MutationObserver(t=>{for(const a of t){if("attributes"!==a.type||"class"!==a.attributeName)continue;const t=a.target;if(!(t instanceof Element))continue;if(t.closest(`[${Ul}]`))continue;if(!e.contains(t))continue;const n=t.parentElement;if(!n||n.parentElement!==e)continue;const r=n.getAttribute("role");if("link"!==r&&"button"!==r)continue;const i=new Set(String(a.oldValue||"").split(/\s+/).filter(Boolean)),o=[...t.classList].filter(e=>!i.has(e)&&/^r-[a-z0-9]+$/i.test(e));1===o.length&&(Ql=o[0]);}}).observe(e,{subtree:true,attributes:true,attributeFilter:["class"],attributeOldValue:true}));}function Jl(e){if(!(e instanceof HTMLElement)||"1"===e.dataset.xpNavHover)return;e.dataset.xpNavHover="1";const t=t=>{const a=(e=>e?.firstElementChild instanceof HTMLElement?e.firstElementChild:null)(e);a&&Ql&&a.classList.toggle(Ql,t);};e.addEventListener("pointerenter",()=>t(true)),e.addEventListener("pointerleave",()=>t(false)),e.addEventListener("focusin",()=>t(true)),e.addEventListener("focusout",a=>{a.relatedTarget instanceof Node&&e.contains(a.relatedTarget)||t(false);});}function ec(e){const t=e.querySelector('[data-testid="AppTabBar_More_Menu"]');if(t?.querySelector("svg")&&t.querySelector("div[dir]"))return t;const a=[...e.querySelectorAll('a[role="link"], a[href]')].filter(e=>!e.hasAttribute(Ul)&&e.querySelector("svg")&&e.querySelector("div[dir]"));return a.find(e=>{if("page"===e.getAttribute("aria-current"))return false;const t=Yl(e);return null==t||t<600})||e.querySelector('a[data-testid="AppTabBar_Explore_Link"]')||e.querySelector('a[data-testid="AppTabBar_Profile_Link"]')||a[0]||null}function tc(e){return e.querySelector('[data-testid="AppTabBar_More_Menu"]')||e.querySelector('a[href="/settings"]')||e.querySelector('a[href*="/settings"]')||null}function ac(e){const t=$e("nav.label");e.setAttribute("aria-label",t);const a=e.querySelector("[data-xp-nav-label]")||e.querySelector("div[dir] > span");a&&(a.textContent=t);}function nc(e){let t;e instanceof HTMLAnchorElement?t=e.cloneNode(true):(t=document.createElement("a"),t.className=e.className,t.innerHTML=e.innerHTML),t.href="#",t.setAttribute(Ul,"1"),t.setAttribute(x,""),t.setAttribute("role","link");for(const n of ["data-testid","type","aria-expanded","aria-haspopup","aria-describedby","aria-current"])t.removeAttribute(n);return t.setAttribute("aria-label",$e("nav.label")),t.tabIndex=0,t.querySelectorAll('[aria-live], [aria-label*="непрочит" i], [aria-label*="unread" i], [aria-label*="Количество" i]').forEach(e=>e.remove()),(a=t.querySelector("svg"))instanceof SVGElement&&(a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("aria-hidden","true"),a.removeAttribute("width"),a.removeAttribute("height"),a.innerHTML=``),function(e,t){const a=[...e.querySelectorAll("div[dir]")].find(e=>e.querySelector(":scope > span")&&!e.querySelector("svg")),n=a?a.querySelector(":scope > span"):e.querySelector("span");n&&(n.textContent=t,n.setAttribute("data-xp-nav-label","1"));}(t,$e("nav.label")),Jl(t),t.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),Wl();}),t;var a;}function rc(e){if(!e.querySelector("svg")||!e.querySelector("div[dir]"))return true;const t=Yl(e);return null!=t&&t>=600||"1"!==e.dataset.xpNavHover}function ic(){if(ke("general").navButton)for(const e of function(){const e=[...document.querySelectorAll('[data-testid="AppTabBar"]'),...document.querySelectorAll('nav[role="navigation"]')],t=new Set;return e.filter(e=>!t.has(e)&&(t.add(e),Boolean(e.querySelector('[data-testid="AppTabBar_More_Menu"]')||e.querySelector('a[href="/settings"]')||e.querySelector('a[href*="/settings"]')||e.querySelector('a[data-testid="AppTabBar_Home_Link"]'))))}()){Zl(e);const t=e.querySelector(`[${Ul}]`),a=ec(e);if(!a)continue;if(t){rc(t)?t.replaceWith(nc(a)):(ac(t),Jl(t));continue}const n=tc(e),r=nc(a);n?n.insertAdjacentElement("beforebegin",r):a.parentElement===e?a.insertAdjacentElement("beforebegin",r):e.appendChild(r);}else document.querySelectorAll(`[${Ul}]`).forEach(e=>e.remove());}const oc=new WeakMap;let sc=1;function lc(e){let t=oc.get(e);return t||(t=`f${sc}`,sc+=1,oc.set(e,t)),t}const cc=e=>String(e||"").toLowerCase().replace(/ё/g,"е"),dc=e=>e?$e(e):"";function uc(e,t,a){switch(a.type){case "group":for(const n of a.controls||[])uc(e,t,n);return;case "list":return void pc(e,t,"control",lc(a),dc(a.titleKey),dc(a.hintKey),"");case "button":return void pc(e,t,"control",lc(a),dc(a.labelKey),"","");case "switch":case "select":case "number":case "slider":case "hotkey":case "text":case "password":case "url":return void pc(e,t,"control",lc(a),dc(a.labelKey),dc(a.hintKey),"select"===a.type?function(e){let t=e.options;try{"function"==typeof t&&(t=t());}catch{return ""}return (t||[]).map(e=>e.label??dc(e.labelKey)).join(" ")}(a):"")}}function pc(e,t,a,n,r,i,o){r&&e.push({...t,id:n,kind:a,label:r,hint:i,extra:o,hay:cc([r,i,o,t.sectionTitle,t.tabTitle].join(" \n "))});}function mc(e){return cc(e).split(/\s+/).filter(Boolean)}function fc(e,t){const a=document.createDocumentFragment(),n=String(e||"");if(!t.length)return a.append(n),a;const r=cc(n);if(r.length!==n.length)return a.append(n),a;const i=new Array(n.length).fill(false);for(const s of t)for(let e=r.indexOf(s);-1!==e;e=r.indexOf(s,e+s.length))for(let t=e;te?$e(e):"";let gc=null;function bc(){const e=gc;gc=null,e?.spec.peek.leave?.();const t=document.querySelector(".xp-settings-backdrop");t?.classList.remove("is-peeking"),t?.querySelector(".xp-peek-note")?.remove();}function vc(e){return ("function"==typeof e.options?e.options():e.options).map(e=>({value:e.value,label:e.label??$e(e.labelKey)}))}function yc(e,{draft:t,featureId:a,onChange:n,rerender:r}){const i=z("div","xp-tab"),o=[],s=[],l=[],c={root:t,section:t[a]??{},featureId:a,changed(){d(),n?.();},subscribe(e){o.push(e);},rerender:r};function d(){for(const{node:e,showIf:t}of s)e.hidden=!t(c.section,c.root);for(const{node:e,disabledIf:t}of l){const a=Boolean(t(c.section,c.root));e.classList.toggle("is-locked",a),e.querySelectorAll("input, select, button, textarea").forEach(e=>{e.disabled=a;});}for(const e of o)e();}const u=e=>function(e,t){let a=e;for(const n of t.split(".")){if(null==a)return;a=a[n];}return a}(c.section,e.path),p=(e,t)=>{ue(c.section,e.path,t),c.changed(),gc?.spec===e&&gc.restart();};function m(e,t){const a=function(e){switch(e.type){case "switch":return function({label:e,hint:t,checked:a,onChange:n}){const r=_n(),i=z("label","xp-check"),o=z("span","xp-check__text");o.appendChild(z("span","xp-check__title",e)),t&&o.appendChild(z("span","xp-check__hint",t));const s=document.createElement("input");return s.type="checkbox",s.checked=Boolean(a),s.addEventListener("change",()=>n(s.checked)),i.append(o,s,z("span","xp-check__track")),i.lastChild.setAttribute("aria-hidden","true"),r.appendChild(i),{row:r,input:s}}({label:hc(e.labelKey),hint:hc(e.hintKey),checked:u(e),onChange:t=>p(e,t)}).row;case "select":return Fn({label:hc(e.labelKey),hint:hc(e.hintKey),options:vc(e),value:u(e),onChange:t=>{ue(c.section,e.path,t),e.onChange?.(t,c),c.changed();}}).row;case "number":return function({label:e,hint:t,value:a,min:n,max:r,step:i=1,onChange:o}){const s=document.createElement("input");return s.type="number",s.inputMode="numeric",null!=n&&(s.min=String(n)),null!=r&&(s.max=String(r)),s.step=String(i),s.value=String(a??""),s.addEventListener("input",()=>{const e=""===s.value?NaN:Number(s.value);o(Number.isFinite(e)?e:null);}),{row:In(e,t,s),input:s}}({label:hc(e.labelKey),hint:hc(e.hintKey),value:u(e),min:e.min,max:e.max,step:e.step,onChange:t=>p(e,t)}).row;case "slider":return function({label:e,hint:t,value:a,min:n,max:r,step:i=1,presets:o=[],format:s,onChange:l}){const c=s??String,d=document.createElement("input");d.type="range",d.min=String(n),d.max=String(r),d.step=String(i);const u=z("span","xp-slider__value"),p=z("div","xp-slider__presets"),m=o.map(e=>{const t=On({label:e.label,compact:true,onClick:()=>f(e.value,true)});return p.appendChild(t),{chip:t,value:e.value}});function f(e,t){d.value=String(e),u.textContent=c(Number(e));for(const{chip:a,value:n}of m)a.classList.toggle("is-active",n===Number(e));t&&l(Number(e));}d.addEventListener("input",()=>f(d.value,true)),f(a??n,false);const h=z("div","xp-slider__head");h.append(z("span","xp-field__label",e),u);const g=_n(),b=z("div","xp-field xp-slider");return b.append(h,d),o.length&&b.appendChild(p),t&&b.appendChild(z("span","xp-field__hint",t)),g.appendChild(b),{row:g,input:d}}({label:hc(e.labelKey),hint:hc(e.hintKey),value:u(e),min:e.min,max:e.max,step:e.step,presets:(e.presets??[]).map(e=>({value:e.value,label:$e(e.labelKey)})),format:t=>0===t&&e.zeroKey?$e(e.zeroKey):`${t} ${e.unit??"px"}`,onChange:t=>p(e,t)}).row;case "hotkey":return function({label:e,hint:t,value:a,reserved:n=[],onChange:r}){const i=z("button","xp-btn-ui xp-btn-ui--ghost xp-hotkey-input");i.type="button";let o=a||"",s=false;function l(){i.classList.toggle("is-recording",s),i.textContent=s?$e("common.keyPress"):o?Dn(o):$e("common.keyNone");}function c(){s=false,window.removeEventListener("keydown",d,true),l();}function d(e){if(i.isConnected){if(!Vn.has(e.code)){if(e.preventDefault(),e.stopPropagation(),"Escape"!==e.code)return "Backspace"===e.code||"Delete"===e.code?(o="",r(""),void c()):void(e.ctrlKey||e.altKey||e.metaKey||e.shiftKey||(n.includes(e.code)?Pn(ze($e("common.keyReserved"),{key:Dn(e.code)}),{type:"warning",force:true}):(o=e.code,r(o),c())));c();}}else c();}return i.addEventListener("click",()=>{s?c():(s=true,l(),window.addEventListener("keydown",d,true));}),i.addEventListener("blur",()=>{s&&c();}),l(),{row:In(e,t,i),input:i}}({label:hc(e.labelKey),hint:hc(e.hintKey),value:u(e),reserved:e.reserved,onChange:t=>p(e,t)}).row;case "text":case "password":case "url":return Kn({label:hc(e.labelKey),hint:hc(e.hintKey),type:e.type,value:u(e),placeholder:e.placeholder,onChange:t=>p(e,t)}).row;case "list":return function(e){const t="handle"===e.kind,a=t?U:Y,n=t?W:e.formatItem;return function(e){const t=_n("xp-list-editor"),a=z("div","xp-list-editor__head");a.appendChild(z("div","xp-list-editor__title",e.title)),e.hint&&a.appendChild(z("p","xp-list-editor__hint",e.hint));const n=z("div","xp-allowlist-add"),r=e.createInput(),i=On({label:e.addLabel,compact:true,onClick:d});n.append(r,i);const o=z("div","xp-list-editor__host");let s=[...e.items];function l(){if(s.length){const t=z("ul","xp-allowlist");for(const a of s){const n=z("li","xp-allowlist__item");n.appendChild(z("span","xp-allowlist__handle",e.formatItem(a)));const r=z("button","xp-allowlist__remove","×");r.type="button",r.setAttribute("aria-label",e.removeLabel),r.addEventListener("click",()=>{s=s.filter(e=>e!==a),c();}),n.appendChild(r),t.appendChild(n);}o.replaceChildren(t);}else o.replaceChildren(z("p","xp-empty",e.emptyText));e.afterChange?.(r,s);}function c(){e.onChange([...s]),l();}function d(){const t=e.validate(e.readInput(r),s);t.ok?(s=[...s,t.value].sort(),r instanceof HTMLInputElement&&(r.value="",r.focus()),c()):e.onReject?.(t.message);}return r.addEventListener("keydown",e=>{"Enter"===e.key&&(e.preventDefault(),d());}),t.append(a,n,o),l(),{row:t}}({title:hc(e.titleKey),hint:hc(e.hintKey),items:u(e)??[],formatItem:n,addLabel:hc(e.addKey||"list.add"),removeLabel:hc("list.remove"),emptyText:hc(e.emptyKey||"list.empty"),createInput:()=>{if(t){const t=document.createElement("input");return t.type="text",t.autocomplete="off",t.spellcheck=false,t.placeholder=hc(e.placeholderKey||"list.handlePlaceholder"),t}const a=document.createElement("select");return Rn(a,e.pickerOptions(u(e)??[]),""),a},readInput:e=>e.value,afterChange:(a,n)=>{t||Rn(a,e.pickerOptions(n),"");},validate:(e,t)=>{const r=a(e);return r?t.includes(r)?{ok:false,message:ze(hc("list.exists"),{item:n(r)})}:{ok:true,value:r}:{ok:false,message:hc("list.invalid")}},onReject:e=>Pn(e,{type:"warning",force:true}),onChange:t=>p(e,t)}).row}(e);case "hint":return zn(hc(e.textKey));case "subheading":return function(e){const t=_n("xp-subheading");return t.appendChild(z("h4","xp-subheading__title",e)),t}(hc(e.textKey));case "button":return Nn(On({label:hc(e.labelKey),variant:e.variant,onClick:()=>e.onClick(c)}));case "group":{const t=_n("xp-group");for(const a of e.controls)m(t,a);return t}case "custom":return e.render(c);default:return null}}(t);a&&(a.dataset.xpFind=lc(t),t.peek&&function(e,t){const a=()=>{gc={spec:t,restart:a};const n=t.peek.enter(c.section,u(t));!function(e,t){const a=e.closest(".xp-settings-backdrop");if(!a)return;a.classList.add("is-peeking");let n=a.querySelector(".xp-peek-note");t?n||(n=z("div","xp-peek-note",$e("peek.missing")),n.setAttribute("role","status"),a.appendChild(n)):n?.remove();}(e,0===n);},n=()=>{gc?.spec===t&&bc();};e.addEventListener("mouseenter",a),e.addEventListener("mouseleave",n),e.addEventListener("focusin",a),e.addEventListener("focusout",n);}(a,t),t.showIf&&s.push({node:a,showIf:t.showIf}),t.disabledIf&&l.push({node:a,disabledIf:t.disabledIf}),e.appendChild(a));}for(const f of e.sections||[]){const{section:e,body:t}=Bn({title:hc(f.titleKey),desc:hc(f.descKey)});e.dataset.xpFind=lc(f),f.showIf&&s.push({node:e,showIf:f.showIf});for(const a of f.controls)m(t,a);i.appendChild(e);}return "function"==typeof e.render&&i.appendChild(e.render(c)),d(),{root:i,refresh:d,ctx:c}}let wc=null;const xc=e=>JSON.parse(JSON.stringify(e));function Ac(e,t){const a=z("button","xp-settings__tab"+(t?" is-active":""));return a.type="button",a.id=`xp-tab-${e.id}`,a.dataset.xpTab=e.id,a.setAttribute("role","tab"),a.setAttribute("aria-selected",t?"true":"false"),a.setAttribute("aria-controls",`xp-panel-${e.id}`),a.tabIndex=t?0:-1,a.appendChild(z("span","xp-settings__tab-label",$e(e.titleKey))),e.badge&&a.appendChild(z("span","xp-settings__badge")),a}function kc(){const e=wc.dialog.querySelector(".xp-settings__tab-ink"),t=wc.dialog.querySelector(".xp-settings__tab.is-active");e&&t&&(e.style.width=`${t.offsetWidth}px`,e.style.transform=`translateX(${t.offsetLeft}px)`);}function Hc(){if(wc){for(const e of wc.tabs){if(!e.badge)continue;const t=wc.dialog.querySelector(`#xp-tab-${CSS.escape(e.id)} .xp-settings__badge`);if(!t)continue;const a=e.badge(wc.draft);t.textContent=a||"",t.hidden=!a;}kc();}}function Sc(e){const t=wc.tabs.find(t=>t.id===e);if(t){wc.active=e,function(e){let t=wc.rendered.get(e.id);if(t)return t;const a=z("div","xp-settings__panel");a.id=`xp-panel-${e.id}`,a.setAttribute("role","tabpanel"),a.setAttribute("aria-labelledby",`xp-tab-${e.id}`),a.hidden=true;const n=yc(e,{draft:wc.draft,featureId:e.featureId,onChange:Hc,rerender:Pc});a.appendChild(n.root),wc.dialog.querySelector(".xp-settings__body").appendChild(a),t={panel:a,view:n},wc.rendered.set(e.id,t);}(t),wc.dialog.querySelectorAll("[data-xp-tab]").forEach(t=>{const a=t.dataset.xpTab===e;t.classList.toggle("is-active",a),t.setAttribute("aria-selected",a?"true":"false"),t.tabIndex=a?0:-1;});for(const[t,a]of wc.rendered){const n=t===e;a.panel.classList.toggle("is-active",n),a.panel.hidden=!n;}wc.dialog.querySelector(".xp-settings__body").scrollTop=0,kc(),wc.dialog.querySelector(".xp-settings__tab.is-active")?.scrollIntoView({inline:"nearest",block:"nearest",behavior:"smooth"});}}function Pc(){if(wc){for(const{panel:e}of wc.rendered.values())e.remove();wc.rendered.clear(),Sc(wc.active),Hc();}}function Lc(e,t=true){const{search:a}=wc,n=[...a.results.querySelectorAll(".xp-hit")];a.active=n.length?Math.max(0,Math.min(n.length-1,e)):-1,n.forEach((e,n)=>{const r=n===a.active;e.classList.toggle("is-active",r),e.setAttribute("aria-selected",r?"true":"false"),r&&(a.input.setAttribute("aria-activedescendant",e.id),t&&e.scrollIntoView({block:"nearest"}));});}function Cc(){const{search:e}=wc,t=e.input.value,a=mc(t);e.clear.hidden=!t,a.length&&bc(),wc.dialog.classList.toggle("is-searching",a.length>0),e.results.replaceChildren(),wc.dialog.querySelector(".xp-settings__body").scrollTop=0,e.found=[],e.active=-1,a.length&&(e.index??(e.index=function(e){const t=[];for(const a of e){const e=dc(a.titleKey);pc(t,{tabId:a.id,tabTitle:e,sectionTitle:"",sectionId:""},"tab",`tab:${a.id}`,e,"","");for(const n of a.sections||[]){const r=dc(n.titleKey),i={tabId:a.id,tabTitle:e,sectionTitle:r,sectionId:lc(n)};r&&pc(t,i,"section",lc(n),r,dc(n.descKey),"");for(const e of n.controls||[])uc(t,i,e);}}return t}(wc.tabs)),e.found=function(e,t,a=40){const n=mc(t);if(!n.length)return [];const r=[];return e.forEach((e,t)=>{if(!n.every(t=>e.hay.includes(t)))return;const a=cc(e.label),i=cc(`${e.sectionTitle} ${e.tabTitle}`);let o="control"===e.kind?0:"section"===e.kind?2:1;for(const r of n)a.startsWith(r)?o+=12:a.includes(` ${r}`)?o+=9:a.includes(r)?o+=6:i.includes(r)?o+=3:o+=1;r.push({entry:e,score:o,order:t});}),r.sort((e,t)=>t.score-e.score||e.order-t.order),r.slice(0,a).map(e=>e.entry)}(e.index,t),e.found.length?(e.found.forEach((t,n)=>{const r=z("button","xp-hit");r.type="button",r.id=`xp-hit-${n}`,r.setAttribute("role","option"),r.tabIndex=-1;const i=[t.tabTitle,t.sectionTitle].filter(e=>e&&e!==t.label).join(" › "),o=z("span","xp-hit__title");if(o.appendChild(fc(t.label,a)),r.appendChild(o),i&&r.appendChild(z("span","xp-hit__crumb",i)),t.hint){const e=z("span","xp-hit__hint");e.appendChild(fc(t.hint,a)),r.appendChild(e);}r.addEventListener("mousemove",()=>{e.active!==n&&Lc(n,false);}),r.addEventListener("click",()=>Mc(t)),e.results.appendChild(r);}),Lc(0,false)):e.results.appendChild(z("p","xp-hits__empty",$e("panel.searchEmpty"))));}function Tc(){wc?.search&&(wc.search.input.value="",Cc());}function Mc(e){if(Tc(),Sc(e.tabId),"tab"===e.kind)return;const t=wc.rendered.get(e.tabId)?.panel;if(!t)return;const a=e=>{for(let a=e;a&&a!==t;a=a.parentElement)if(a.hidden)return false;return true},n=e=>t.querySelector(`[data-xp-find="${e}"]`);let r=n(e.id);r&&a(r)||(r=e.sectionId?n(e.sectionId):null),r&&a(r)&&(r.scrollIntoView({block:"center",behavior:"smooth"}),r.classList.remove("is-found"),r.classList.add("is-found"),r.addEventListener("animationend",()=>r.classList.remove("is-found"),{once:true}));}function qc(){wc&&(document.removeEventListener("keydown",Ec,true),bc(),wc.root.remove(),wc=null,tr());}function Ec(e){if(!wc)return;if(document.querySelector(".xp-confirm-overlay, .xp-popup"))return;const t=wc.search?.input,a=e.target instanceof Element&&e.target.closest('input, textarea, select, [contenteditable="true"]');if(("/"===e.key&&!a&&!e.ctrlKey&&!e.metaKey&&!e.altKey||(e.ctrlKey||e.metaKey)&&!e.altKey&&"k"===e.key.toLowerCase())&&t)return e.preventDefault(),e.stopPropagation(),t.focus(),void t.select();"Escape"===e.key&&(e.stopPropagation(),t?.value?Tc():qc());}function Dc(){He(wc.draft),Pn($e("panel.saved"),{type:"success"}),qc();}async function _c(){await function({title:e,message:t,confirmLabel:a,danger:n=false}){return new Promise(r=>{const i=z("div","xp-confirm-overlay"),o=z("div","xp-confirm");o.setAttribute("role","alertdialog"),o.setAttribute("aria-modal","true"),o.append(z("h3","xp-confirm__title",e)),t&&o.appendChild(z("p","xp-confirm__text",t));const s=z("div","xp-confirm__actions"),l=z("button","xp-btn-ui xp-btn-ui--ghost",$e("panel.cancel")),c=z("button","xp-btn-ui "+(n?"xp-btn-ui--danger-solid":"xp-btn-ui--primary"),a||$e("panel.confirm"));l.type="button",c.type="button",s.append(l,c),o.appendChild(s),i.appendChild(o);const d=e=>{document.removeEventListener("keydown",u,true),i.remove(),r(e);};function u(e){"Escape"===e.key&&(e.stopPropagation(),e.preventDefault(),d(false));}l.addEventListener("click",()=>d(false)),c.addEventListener("click",()=>d(true)),i.addEventListener("click",e=>{e.target===i&&d(false);}),document.addEventListener("keydown",u,true),document.body.appendChild(i),l.focus();})}({title:$e("panel.resetTitle"),message:$e("panel.resetText"),confirmLabel:$e("panel.reset"),danger:true})&&wc&&(wc.draft=function(){const e={};for(const[t,a]of Object.entries(ye()))e[t]=le(a);return e}(),Pc());}function Bc(e){qc();const t=function(){const e=[];for(const t of D())for(const a of t.tabs||[])e.push({...a,featureId:t.id});return e}();if(!t.length)return;const a=t.some(t=>t.id===e)?e:t[0].id,{root:n,dialog:r,search:i}=function(e,t){const a=z("div","xp-settings-backdrop");a.id="xp-settings-root";const n=z("div","xp-settings");n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.setAttribute("aria-labelledby","xp-settings-title");const r=z("header","xp-settings__header"),i=z("button","xp-settings__x");i.type="button",i.dataset.xpClose="",i.setAttribute("aria-label",$e("panel.close")),i.innerHTML=Gt("close");const o=z("div","xp-settings__heading"),s=z("h2","",g);s.id="xp-settings-title",o.append(s,z("p","xp-settings__ver",`v${b}`)),r.append(i,o,z("span","xp-settings__header-spacer"));const l=z("div","xp-settings__tabs");l.setAttribute("role","tablist"),l.setAttribute("aria-label",g),l.appendChild(z("span","xp-settings__tab-ink"));for(const g of e)l.appendChild(Ac(g,g.id===t));const c=z("div","xp-settings__body"),d=function(){const e=z("div","xp-settings__search"),t=z("div","xp-search"),a=z("span","xp-search__icon");a.innerHTML=Gt("search");const n=z("input","xp-search__input");n.type="text",n.autocomplete="off",n.spellcheck=false,n.placeholder=`${$e("panel.search")} ( / )`,n.setAttribute("role","combobox"),n.setAttribute("aria-label",$e("panel.search")),n.setAttribute("aria-expanded","true"),n.setAttribute("aria-controls","xp-settings-results");const r=z("button","xp-search__clear");r.type="button",r.hidden=true,r.innerHTML=Gt("close"),r.setAttribute("aria-label",$e("panel.searchClear")),r.title=$e("panel.searchClear"),t.append(a,n,r),e.appendChild(t);const i=z("div","xp-hits");return i.id="xp-settings-results",i.setAttribute("role","listbox"),i.setAttribute("aria-label",$e("panel.search")),n.addEventListener("input",Cc),r.addEventListener("click",()=>{Tc(),n.focus();}),n.addEventListener("keydown",e=>{const t=wc?.search;if(t){if("ArrowDown"===e.key)Lc(t.active+1);else if("ArrowUp"===e.key)Lc(t.active-1);else {if("Enter"!==e.key||!t.found[t.active])return;Mc(t.found[t.active]);}e.preventDefault();}}),{row:e,results:i,search:{input:n,clear:r,results:i,index:null,found:[],active:-1}}}();c.appendChild(d.results);const u=z("div","xp-settings__actions"),p=z("button","xp-btn-ui xp-btn-ui--ghost xp-btn-ui--danger",$e("panel.reset")),m=z("span","xp-settings__spacer"),f=z("button","xp-btn-ui xp-btn-ui--ghost",$e("panel.cancel")),h=z("button","xp-btn-ui xp-btn-ui--primary",$e("panel.save"));for(const g of [p,f,h])g.type="button";return p.addEventListener("click",_c),f.addEventListener("click",qc),h.addEventListener("click",Dc),u.append(p,m,f,h),n.append(r,d.row,l,c,u),a.appendChild(n),a.addEventListener("click",e=>{(e.target===a||e.target.closest?.("[data-xp-close]"))&&qc();}),l.addEventListener("click",e=>{const t=e.target.closest?.("[data-xp-tab]");t&&Sc(t.dataset.xpTab);}),l.addEventListener("keydown",e=>{const t=[...l.querySelectorAll("[data-xp-tab]")],a=e.target.closest?.("[data-xp-tab]");if(!a)return;const n=t.indexOf(a);let r=n;if("ArrowRight"===e.key||"ArrowDown"===e.key)r=(n+1)%t.length;else if("ArrowLeft"===e.key||"ArrowUp"===e.key)r=(n-1+t.length)%t.length;else if("Home"===e.key)r=0;else {if("End"!==e.key)return;r=t.length-1;}e.preventDefault(),Sc(t[r].dataset.xpTab),t[r].focus();}),{root:a,dialog:n,search:d.search}}(t,a);wc={root:n,dialog:r,draft:xc(Ae()),tabs:t,active:a,rendered:new Map,search:i},document.addEventListener("keydown",Ec,true),(document.body||document.documentElement).appendChild(n),er(),Sc(a),requestAnimationFrame(()=>{Hc(),kc();});}let zc=false,Ic=null;function Fc(e){ke("general").hotkey&&(e=>e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey&&("KeyM"===e.code||"m"===e.key.toLowerCase()))(e)&&!e.repeat&&(e.preventDefault(),e.stopPropagation(),Boolean(wc)?document.querySelector(".xp-confirm-overlay, .xp-popup")||qc():Bc());}function Rc(){zc||(zc=true,document.addEventListener("keydown",Fc,true));const e=ke("general"),t=e.hotkey&&e.hotkeyHint;if(!t&&!Ic)return void Ii();const a=Ic||(Ic=z("button","xp-hotkey-hint"),Ic.type="button",Ic.append(z("kbd","xp-hotkey-hint__keys","Ctrl + M"),z("span","xp-hotkey-hint__text")),Ic.addEventListener("click",()=>Bc()),zi().prepend(Ic),Ic);a.hidden=!t;const n=$e("hotkey.hint");a.lastChild.textContent=n,a.title=n,a.setAttribute("aria-label",`Ctrl + M — ${n}`),Ii();}function Kc(e,t,a){const n=z("a",e,a);return n.href=t,n.target="_blank",n.rel="noopener noreferrer",n}function Vc(e){try{!function(e){let t;try{t=JSON.parse(e);}catch(a){throw d("XP-1003","backup is not valid JSON",{error:a}),a}if(!t||"object"!=typeof t||Array.isArray(t))throw new Error("Backup must be a JSON object");He(t);}(e);}catch{return void Pn($e("backup.importFailed"),{type:"error",force:true})}wc&&(wc.draft=xc(Ae()),Pc()),Pn($e("backup.imported"),{type:"success"});}var Oc;E({id:"settings",order:900,fields:{},tabs:[Wn,{id:"backup",titleKey:"backup.title",render:function(){const e=z("div","xp-tab"),t=Bn({title:$e("backup.exportTitle"),desc:$e("backup.exportDesc")});t.body.appendChild(Nn(On({label:$e("backup.download"),onClick:()=>{!function(e,t){const a=URL.createObjectURL(new Blob([t],{type:"application/json"})),n=document.createElement("a");n.href=a,n.download="x-plus-settings.json",n.click(),setTimeout(()=>URL.revokeObjectURL(a),1e4);}(0,Pe()),Pn($e("backup.exported"),{type:"success"});}}),On({label:$e("backup.copy"),onClick:async()=>{const e=await async function(e){try{return await navigator.clipboard.writeText(e),!0}catch{return false}}(Pe());Pn($e(e?"backup.copied":"backup.copyFailed"),{type:e?"success":"warning",force:true});}}))),t.body.appendChild(zn($e("backup.secretsHint")));const a=Bn({title:$e("backup.importTitle"),desc:$e("backup.importDesc")}),n=z("textarea","xp-textarea");n.rows=6,n.spellcheck=false,n.placeholder='{ "general": { … }, "translate": { … } }';const r=document.createElement("input");return r.type="file",r.accept="application/json,.json",r.hidden=true,r.addEventListener("change",async()=>{const e=r.files?.[0];r.value="",e&&Vc(await e.text());}),a.body.append(n,Nn(On({label:$e("backup.importPaste"),onClick:()=>{n.value.trim()&&(Vc(n.value),n.value="");}}),On({label:$e("backup.importFile"),onClick:()=>r.click()})),r),e.append(t.section,a.section),e}},{id:"about",titleKey:"about.title",render:function(){const e=z("div","xp-about");e.appendChild(z("p","xp-about__desc",$e("about.description"))),e.appendChild(Kc("xp-about__repo","https://github.com/NemoKing1210/x-plus",$e("about.repo")));const t=z("div","xp-about__author"),a=z("img","xp-about__avatar");a.src="https://avatars.githubusercontent.com/u/58397369?v=4",a.alt="",a.width=56,a.height=56,a.decoding="async";const n=z("div","xp-about__meta");return n.append(Kc("xp-about__name","https://github.com/NemoKing1210","NemoKing"),z("span","xp-about__handle","@NemoKing1210"),Kc("xp-about__email",`mailto:${v}`,v)),t.append(a,n),e.appendChild(t),e.appendChild(z("p","xp-about__foot",`${$e("about.license")} · v${b}`)),e}}],init(){Wl=()=>Bc(),"function"==typeof me&&me($e("menu.settings"),()=>Bc()),f("settings:general",ic),f("settings:general",Rc),ic(),Rc();},scan(){ic();}}),Oc=function(){const e=document.documentElement;if(!e.hasAttribute(k)){e.setAttribute(k,"1"),xe(),function(e){let t=Te();e?.();const a=()=>{const a=Te();a!==t&&(t=a,e?.());},n=new MutationObserver(a);n.observe(document.documentElement,{attributes:true,attributeFilter:["class","style","data-color-mode","data-theme"]}),document.body&&n.observe(document.body,{attributes:true,attributeFilter:["class","style","data-color-mode","data-theme"]});const r=window.matchMedia?.("(prefers-color-scheme: dark)");r?.addEventListener?.("change",a);}(()=>h("theme"));for(const e of D())B(e.id,"init"),B(e.id,"apply",ke(e.id),null),f(`settings:${e.id}`,(t,a)=>B(e.id,"apply",t,a));f("scan",e=>_("scan",e)),f("navigate",e=>_("navigate",e)),X(()=>h("scan",document)),function(){if(N)return;N=true,$=location.href;const e=()=>{location.href!==$&&($=location.href,h("navigate",$),h("scan",document));},t=F(e,80);window.addEventListener("popstate",t,true),j("pushState",t),j("replaceState",t),setInterval(e,500);}(),h("scan",document);}},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",Oc,{once:true}):Oc(); })();