{"id":5970,"date":"2026-06-08T00:00:15","date_gmt":"2026-06-08T00:00:15","guid":{"rendered":"https:\/\/viewari.com\/?page_id=5970"},"modified":"2026-06-14T05:53:56","modified_gmt":"2026-06-14T05:53:56","slug":"gallery","status":"publish","type":"page","link":"https:\/\/viewari.com\/reddit\/gallery\/","title":{"rendered":"Reddit Gallery Viewer &#8211; Swipe Through Photo Albums Quickly"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5970\" class=\"elementor elementor-5970\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5e0f38bc e-con-full e-flex e-con e-parent\" data-id=\"5e0f38bc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2738833c elementor-widget elementor-widget-shortcode\" data-id=\"2738833c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><style>\n.nsrgv {width: 100vw;\n  max-width: none;\n  margin-left: calc(50% - 50vw);\n  margin-right: calc(50% - 50vw);\n  margin-top: -8px;\n--ink: #fdf4ff; --muted: #c4a4d4; --dim: #8a6a9a;\n  --panel: rgba(24, 12, 32, 0.93); --soft: rgba(255, 255, 255, 0.05);\n  --line: rgba(232, 121, 249, 0.32); --accent: #e879f9; --accent-soft: rgba(232, 121, 249, 0.16);\n  --cool: #f0abfc; --cool-deep: #c026d3; --danger: #ff6b7a; --ok: #3dd68c;\n  --radius: 18px; --shadow: 0 18px 42px rgba(12, 4, 18, 0.45);\n  --font: \"Outfit\", \"Segoe UI\", sans-serif; --gap: 14px;\n  box-sizing: border-box !important; font-family: var(--font); color: var(--ink); line-height: 1.5;\n  display: block; min-width: 0 !important;\n  background:\n    radial-gradient(ellipse 70% 48% at 14% 0%, rgba(232, 121, 249, 0.28), transparent 58%),\n    radial-gradient(ellipse 50% 40% at 94% 8%, rgba(192, 38, 211, 0.16), transparent 52%),\n    linear-gradient(158deg, #140a18 0%, #22122c 48%, #2c1838 100%);\n  position: relative; isolation: isolate; overflow-x: hidden !important; overflow-wrap: anywhere;\n}\n.nsrgv *, .nsrgv *::before, .nsrgv *::after { box-sizing: border-box; }\n.nsrgv h3 { color: var(--ink) !important; }\n.nsrgv h2 { color: var(--ink) !important; }\n.nsrgv :where(h1,h2,h3,p,ul,ol,li,label,span) { margin: 0; padding: 0; border: 0; font-weight: inherit; max-width: 100%; overflow-wrap: anywhere; }\n.nsrgv :where(ul,ol) { list-style: none; }\n.nsrgv img { max-width: 100%; height: auto; display: block; border: 0; }\n.nsrgv a { color: var(--cool); text-decoration: none; }\n.nsrgv a:hover { text-decoration: underline; }\n.nsrgv-shell {width:100%;max-width:min(1200px,100%);margin-left: auto; margin-right: auto;padding: 65px clamp(8px, 2vw, 16px);min-width:0; display: flex; flex-direction: column; gap: var(--gap); container-type: inline-size; container-name: nsrgv; }\n.nsrgv-hero {\n  background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius);\n  box-shadow: var(--shadow); padding: clamp(18px, 3.5vw, 28px) clamp(14px, 3vw, 22px);\n  text-align: center; backdrop-filter: blur(14px); animation: nsrgv-rise .45s ease both;\n}\n.nsrgv-brand {\n  width: 52px; height: 52px; margin: 0 auto 12px; border-radius: 16px; display: inline-flex;\n  align-items: center; justify-content: center; color: #2a1030; font-size: 1.35rem;\n  background: linear-gradient(145deg, #f0abfc, #e879f9);\n  box-shadow: 0 10px 24px rgba(232, 121, 249, .35);\n}\n.nsrgv .nsrgv-hero__title {color:var(--ink)!important; font-size: clamp(1.35rem, 5vw, 2rem); font-weight: 800; letter-spacing: -.035em; margin-bottom: 8px; }\n.nsrgv-hero__mark { color: var(--accent); background-image: linear-gradient(90deg, var(--accent), #f0abfc); background-position: 0 100%; background-repeat: no-repeat; background-size: 100% 3px; padding-bottom: 2px; }\n.nsrgv .nsrgv-hero__lead { max-width: 36rem; margin: 0 auto 20px; color: var(--muted); font-size: clamp(.9rem, 2.4vw, 1rem); }\n.nsrgv-tool { display: flex; flex-direction: column; gap: 12px; text-align: left; background: var(--soft); border: 1px solid rgba(255,255,255,.08); border-radius: 14px; padding: clamp(12px, 2.4vw, 16px); }\n.nsrgv .nsrgv-tool__label { font-size: .86rem; font-weight: 600; color: var(--muted); }\n.nsrgv-field { position: relative; display: flex; align-items: center; }\n.nsrgv .nsrgv-field__input {\n  width: 100%; height: 52px; padding: 0 52px 0 16px !important; border-radius: 12px;\n  border: 1px solid rgba(255,255,255,.12) !important; background: rgba(10, 6, 14, .55) !important;\n  color: var(--ink) !important; font: 500 16px var(--font); outline: none;\n}\n.nsrgv .nsrgv-field__input:focus { border-color: rgba(232,121,249,.55) !important; box-shadow: 0 0 0 3px var(--accent-soft); }\n.nsrgv .nsrgv-field__input::placeholder { color: var(--dim); }\n.nsrgv .nsrgv-field__paste {\n  position: absolute; right: 6px; top: 50%; transform: translateY(-50%); width: 40px; height: 40px;\n  border: 0 !important; border-radius: 10px; background: transparent !important; color: var(--muted) !important; cursor: pointer;\n}\n.nsrgv .nsrgv-field__paste:hover { color: var(--accent) !important; background: var(--accent-soft) !important; }\n.nsrgv .nsrgv-btn {\n  display: inline-flex; align-items: center; justify-content: center; gap: 8px; width: 100%; height: 50px;\n  border: 0 !important; border-radius: 12px; font: 700 .98rem var(--font); cursor: pointer;\n  transition: transform .2s, box-shadow .2s, opacity .2s; text-decoration: none; appearance: none;\n}\n.nsrgv .nsrgv-btn--primary { background: linear-gradient(135deg, #e879f9, #c026d3) !important; color: #2a1030 !important; box-shadow: 0 10px 22px rgba(232,121,249,.32); }\n.nsrgv .nsrgv-btn--primary:hover { transform: translateY(-1px); }\n.nsrgv .nsrgv-btn:disabled { opacity: .55; cursor: wait; transform: none !important; }\n.nsrgv .nsrgv-btn--ghost { background: rgba(255,255,255,.06) !important; color: var(--ink) !important; border: 1px solid rgba(255,255,255,.12) !important; }\n.nsrgv .nsrgv-btn--cool { background: linear-gradient(135deg, var(--cool), var(--cool-deep)) !important; color: #2a1030 !important; }\n.nsrgv .nsrgv-btn--cool.is-processing { background: linear-gradient(135deg, #c026d3, #86198f) !important; color: #fff !important; cursor: wait !important; pointer-events: none; opacity: 1; }\n.nsrgv .nsrgv-btn--cool.is-processing i { animation: nsrgv-spin .85s linear infinite; }\n.nsrgv .nsrgv-btn--cool:disabled:not(.is-processing) { opacity: .45; cursor: not-allowed; filter: grayscale(.2); }\n.nsrgv .nsrgv-btn--sm { height: 38px; font-size: .82rem !important; flex: 1 1 110px; }\n.nsrgv-alert { display: none; gap: 8px; align-items: flex-start; padding: 10px 12px; border-radius: 10px; font-size: .88rem; font-weight: 500; }\n.nsrgv-alert.is-visible { display: flex; }\n.nsrgv-alert--error { background: rgba(255,107,122,.12); border: 1px solid rgba(255,107,122,.35); color: #ffb4bc; }\n.nsrgv-alert--ok { background: rgba(61,214,140,.12); border: 1px solid rgba(61,214,140,.35); color: #9aecc0; }\n.nsrgv-alert--info { background: rgba(232,121,249,.14); border: 1px solid rgba(232,121,249,.35); color: #f5d0fe; }\n.nsrgv-hint { font-size: .8rem; color: var(--dim); text-align: center; }\n.nsrgv-skeleton { display: none; background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px; box-shadow: var(--shadow); }\n.nsrgv-skeleton.is-active { display: block; animation: nsrgv-rise .35s ease both; }\n.nsrgv-sk { background: linear-gradient(90deg, rgba(255,255,255,.06), rgba(232,121,249,.16), rgba(255,255,255,.06)); background-size: 200% 100%; animation: nsrgv-shimmer 1.2s ease infinite; border-radius: 10px; }\n.nsrgv-skeleton__block { height: 160px; margin-bottom: 12px; }\n.nsrgv-skeleton__line { height: 14px; margin-bottom: 10px; }\n.nsrgv-skeleton__line--lg { width: 55%; } .nsrgv-skeleton__line--md { width: 35%; }\n.nsrgv-result { display: none; animation: nsrgv-rise .45s ease both; }\n.nsrgv-result.is-visible { display: block; }\n.nsrgv-panel { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: clamp(14px, 3vw, 20px); }\n.nsrgv .nsrgv-profile__name {color:var(--ink)!important; font-size: clamp(1.15rem, 3.2vw, 1.45rem); font-weight: 800; letter-spacing: -.02em; }\n.nsrgv-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 16px; }\n.nsrgv-chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 10px; border-radius: 999px; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1); color: var(--muted); font-size: .78rem; font-weight: 600; }\n.nsrgv-chip i { color: var(--accent); }\n.nsrgv-chip--accent { background: var(--accent-soft); border-color: rgba(232,121,249,.4); color: #f5d0fe; }\n.nsrgv-grid { display: grid; grid-template-columns: 1fr; gap: 12px; }\n@container nsrgv (min-width: 680px) { .nsrgv-grid { grid-template-columns: 1fr 1fr; } }\n.nsrgv-card { display: flex; flex-direction: column; gap: 10px; padding: 12px; border-radius: 14px; background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.08); min-width: 0; }\n.nsrgv-card:hover { border-color: rgba(232,121,249,.4); }\n.nsrgv-mosaic { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; border-radius: 12px; overflow: hidden; background: #120814; }\n.nsrgv-mosaic img { width: 100%; aspect-ratio: 1; object-fit: cover; cursor: zoom-in; }\n.nsrgv-mosaic--one { grid-template-columns: 1fr; }\n.nsrgv-mosaic--one img { aspect-ratio: 16\/10; }\n.nsrgv .nsrgv-card__title {color: var(--ink) !important; font-size: .98rem; font-weight: 700; line-height: 1.35; }\n.nsrgv-card__meta { display: flex; flex-wrap: wrap; gap: 8px; font-size: .75rem; color: var(--dim); font-weight: 600; }\n.nsrgv-card__actions { display: flex; flex-wrap: wrap; gap: 8px; }\n.nsrgv-empty { display: none; text-align: center; padding: 32px 14px; color: var(--muted); }\n.nsrgv-empty.is-visible { display: block; }\n.nsrgv-empty i { display: block; font-size: 2rem; margin-bottom: 10px; opacity: .45; color: var(--accent); }\n.nsrgv-modal {\n  display: none; position: fixed; inset: 0; z-index: 99999; align-items: center; justify-content: center;\n  padding: 20px; background: rgba(10, 4, 14, 0.9); backdrop-filter: blur(8px);\n}\n.nsrgv-modal.is-open { display: flex; }\n.nsrgv-modal__dialog {\n  position: relative; width: min(960px, 100%); max-height: 90vh; display: flex; flex-direction: column;\n  gap: 12px; align-items: center;\n}\n.nsrgv-modal__title {\n  max-width: 100%; text-align: center; font-size: .95rem; font-weight: 700; color: #f5d0fe;\n  padding: 0 48px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n}\n.nsrgv-modal__stage {\n  position: relative; width: 100%; display: flex; align-items: center; justify-content: center;\n  min-height: 180px;\n}\n.nsrgv-modal__media {\n  max-width: 100%; max-height: 72vh; border-radius: 12px; object-fit: contain; background: #0a0610;\n}\n.nsrgv .nsrgv-modal__nav {\n  position: absolute; top: 50%; transform: translateY(-50%); width: 42px; height: 42px;\n  border: 0 !important; border-radius: 999px; background: rgba(24,12,32,.88) !important; color: #fff !important;\n  cursor: pointer; display: inline-flex; align-items: center; justify-content: center; font-size: 1rem;\n  box-shadow: 0 8px 20px rgba(0,0,0,.35);\n}\n.nsrgv .nsrgv-modal__nav:hover { background: rgba(192,38,211,.85) !important; }\n.nsrgv .nsrgv-modal__nav:disabled { opacity: .35; cursor: default; }\n.nsrgv .nsrgv-modal__nav--prev { left: 8px; }\n.nsrgv .nsrgv-modal__nav--next { right: 8px; }\n.nsrgv-modal__footer {\n  display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px;\n}\n.nsrgv-modal__counter {\n  font-size: .85rem; font-weight: 700; color: var(--muted);\n  padding: 6px 12px; border-radius: 999px; background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1);\n}\n.nsrgv .nsrgv-modal__close {\n  position: absolute; top: 16px; right: 16px; width: 40px; height: 40px; border: 0 !important;\n  border-radius: 999px; background: rgba(24,12,32,.92) !important; color: #fff !important; cursor: pointer; z-index: 2;\n}\n@keyframes nsrgv-rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }\n@keyframes nsrgv-shimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }\n@keyframes nsrgv-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n\n\/* --- Codex CSS updates --- *\/\n.nsrgv {\n  width: 100vw;\n  max-width: none;\n  margin-left: calc(50% - 50vw);\n  margin-right: calc(50% - 50vw);\n  margin-top: -8px;\n  --ink: #f8f5ff;\n  --muted: #c8bfdc;\n  --dim: #9187aa;\n  --panel: rgba(17, 24, 39, 0.8);\n  --soft: rgba(255, 255, 255, 0.07);\n  --line: rgba(167, 139, 250, 0.24);\n  --accent: #8b5cf6;\n  --accent-soft: rgba(139, 92, 246, 0.18);\n  --cool: #7dd3fc;\n  --cool-deep: #2563eb;\n  --danger: #fb7185;\n  --ok: #34d399;\n  --radius: 22px;\n  --shadow: 0 24px 60px rgba(2, 6, 23, 0.34);\n  --font: \"Outfit\", \"Segoe UI\", sans-serif;\n  --gap: 18px;\n  box-sizing: border-box !important;\n  font-family: var(--font);\n  color: var(--ink);\n  line-height: 1.55;\n  display: block;\n  min-width: 0 !important;\n  background:\n    radial-gradient(circle at 12% 0%, rgba(125, 211, 252, 0.2), transparent 28%),\n    radial-gradient(circle at 88% 10%, rgba(139, 92, 246, 0.24), transparent 30%),\n    radial-gradient(circle at 50% 100%, rgba(16, 185, 129, 0.08), transparent 32%),\n    linear-gradient(145deg, #081120 0%, #101828 42%, #1b2340 100%);\n  position: relative;\n  isolation: isolate;\n  overflow-x: hidden !important;\n  overflow-wrap: anywhere;\n}\n\n.nsrgv *,\n.nsrgv *::before,\n.nsrgv *::after {\n  box-sizing: border-box;\n}\n\n.nsrgv h3 {\n  color: var(--ink) !important;\n}\n\n.nsrgv h2 {\n  color: var(--ink) !important;\n}\n\n.nsrgv :where(h1, h2, h3, p, ul, ol, li, label, span) {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font-weight: inherit;\n  max-width: 100%;\n  overflow-wrap: anywhere;\n}\n\n.nsrgv :where(ul, ol) {\n  list-style: none;\n}\n\n.nsrgv img {\n  max-width: 100%;\n  height: auto;\n  display: block;\n  border: 0;\n}\n\n.nsrgv a {\n  color: var(--cool);\n  text-decoration: none;\n  transition: color 0.2s ease, opacity 0.2s ease;\n}\n\n.nsrgv a:hover {\n  text-decoration: underline;\n  color: #d7f2ff;\n}\n\n.nsrgv-shell {\n  width: 100%;\n  max-width: min(1240px, 100%);\n  margin-left: auto;\n  margin-right: auto;\n  padding: clamp(36px, 6vw, 72px) clamp(14px, 2.8vw, 26px);\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  gap: var(--gap);\n  container-type: inline-size;\n  container-name: nsrgv;\n  position: relative;\n  z-index: 1;\n}\n\n.nsrgv-hero {\n  background:\n    linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03)),\n    var(--panel);\n  border: 1px solid rgba(255, 255, 255, 0.12);\n  border-radius: calc(var(--radius) + 2px);\n  box-shadow: var(--shadow);\n  padding: clamp(22px, 4vw, 34px) clamp(16px, 3.5vw, 28px);\n  text-align: center;\n  backdrop-filter: blur(18px);\n  animation: nsrgv-rise 0.45s ease both;\n  position: relative;\n  overflow: hidden;\n}\n\n.nsrgv-hero::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background:\n    linear-gradient(135deg, rgba(125, 211, 252, 0.08), transparent 36%),\n    linear-gradient(315deg, rgba(139, 92, 246, 0.12), transparent 42%);\n  pointer-events: none;\n}\n\n.nsrgv-brand {\n  width: 58px;\n  height: 58px;\n  margin: 0 auto 14px;\n  border-radius: 18px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  color: #eff6ff;\n  font-size: 1.4rem;\n  background: linear-gradient(135deg, #7dd3fc 0%, #8b5cf6 55%, #6d28d9 100%);\n  box-shadow:\n    0 14px 30px rgba(37, 99, 235, 0.22),\n    inset 0 1px 0 rgba(255, 255, 255, 0.26);\n  position: relative;\n  z-index: 1;\n}\n\n.nsrgv .nsrgv-hero__title {\n  color: var(--ink) !important;\n  font-size: clamp(1.5rem, 5vw, 2.3rem);\n  font-weight: 800;\n  letter-spacing: -0.04em;\n  margin-bottom: 10px;\n  position: relative;\n  z-index: 1;\n}\n\n.nsrgv-hero__mark {\n  color: #dbeafe;\n  background-image: linear-gradient(90deg, #7dd3fc, #8b5cf6 55%, #c4b5fd);\n  background-position: 0 100%;\n  background-repeat: no-repeat;\n  background-size: 100% 4px;\n  padding-bottom: 2px;\n}\n\n.nsrgv .nsrgv-hero__lead {\n  max-width: 40rem;\n  margin: 0 auto 22px;\n  color: var(--muted);\n  font-size: clamp(0.95rem, 2.4vw, 1.04rem);\n  position: relative;\n  z-index: 1;\n}\n\n.nsrgv-tool {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n  text-align: left;\n  background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.035));\n  border: 1px solid rgba(255, 255, 255, 0.1);\n  border-radius: 18px;\n  padding: clamp(14px, 2.8vw, 20px);\n  backdrop-filter: blur(12px);\n  position: relative;\n  z-index: 1;\n}\n\n.nsrgv .nsrgv-tool__label {\n  font-size: 0.88rem;\n  font-weight: 700;\n  color: #ddd6fe;\n  letter-spacing: 0.01em;\n}\n\n.nsrgv-field {\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n\n.nsrgv .nsrgv-field__input {\n  width: 100%;\n  height: 56px;\n  padding: 0 56px 0 18px !important;\n  border-radius: 15px;\n  border: 1px solid rgba(255, 255, 255, 0.12) !important;\n  background:\n    linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.04)),\n    rgba(9, 14, 26, 0.82) !important;\n  color: var(--ink) !important;\n  font: 500 16px var(--font);\n  outline: none;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);\n  transition: border-color 0.22s ease, box-shadow 0.22s ease, background 0.22s ease, transform 0.22s ease;\n}\n\n.nsrgv .nsrgv-field__input:hover {\n  border-color: rgba(125, 211, 252, 0.24) !important;\n}\n\n.nsrgv .nsrgv-field__input:focus {\n  border-color: rgba(125, 211, 252, 0.55) !important;\n  box-shadow:\n    0 0 0 4px rgba(125, 211, 252, 0.14),\n    0 10px 26px rgba(37, 99, 235, 0.16);\n  background:\n    linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.05)),\n    rgba(10, 17, 31, 0.9) !important;\n}\n\n.nsrgv .nsrgv-field__input::placeholder {\n  color: var(--dim);\n}\n\n.nsrgv .nsrgv-field__paste {\n  position: absolute;\n  right: 8px;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 42px;\n  height: 42px;\n  border: 0 !important;\n  border-radius: 12px;\n  background: transparent !important;\n  color: var(--muted) !important;\n  cursor: pointer;\n  transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease;\n}\n\n.nsrgv .nsrgv-field__paste:hover {\n  color: #eff6ff !important;\n  background: linear-gradient(135deg, rgba(125, 211, 252, 0.18), rgba(139, 92, 246, 0.18)) !important;\n  transform: translateY(-50%) scale(1.03);\n}\n\n.nsrgv .nsrgv-field__paste:focus-visible {\n  outline: none;\n  box-shadow: 0 0 0 3px rgba(125, 211, 252, 0.2);\n}\n\n.nsrgv .nsrgv-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  width: 100%;\n  min-height: 50px;\n  padding: 0 16px;\n  border: 0 !important;\n  border-radius: 14px;\n  font: 700 0.98rem var(--font);\n  cursor: pointer;\n  transition: transform 0.2s ease, box-shadow 0.24s ease, opacity 0.2s ease, filter 0.2s ease, background 0.2s ease;\n  text-decoration: none;\n  appearance: none;\n  position: relative;\n  overflow: hidden;\n  -webkit-tap-highlight-color: transparent;\n}\n\n.nsrgv .nsrgv-btn::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(120deg, rgba(255, 255, 255, 0.22), transparent 34%, transparent 66%, rgba(255, 255, 255, 0.08));\n  opacity: 0.7;\n  pointer-events: none;\n}\n\n.nsrgv .nsrgv-btn:hover {\n  transform: translateY(-2px);\n}\n\n.nsrgv .nsrgv-btn:active {\n  transform: translateY(0);\n}\n\n.nsrgv .nsrgv-btn:focus-visible {\n  outline: none;\n  box-shadow: 0 0 0 4px rgba(125, 211, 252, 0.18);\n}\n\n.nsrgv .nsrgv-btn--primary {\n  background: linear-gradient(135deg, #7dd3fc 0%, #8b5cf6 52%, #6d28d9 100%) !important;\n  color: #f8fbff !important;\n  box-shadow: 0 16px 32px rgba(76, 81, 191, 0.3);\n}\n\n.nsrgv .nsrgv-btn--primary:hover {\n  box-shadow: 0 20px 36px rgba(76, 81, 191, 0.36);\n}\n\n.nsrgv .nsrgv-btn:disabled {\n  opacity: 0.55;\n  cursor: wait;\n  transform: none !important;\n  box-shadow: none !important;\n}\n\n.nsrgv .nsrgv-btn--ghost {\n  background: linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.04)) !important;\n  color: var(--ink) !important;\n  border: 1px solid rgba(255, 255, 255, 0.12) !important;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);\n}\n\n.nsrgv .nsrgv-btn--ghost:hover {\n  border-color: rgba(125, 211, 252, 0.24) !important;\n  box-shadow: 0 14px 28px rgba(2, 6, 23, 0.18);\n}\n\n.nsrgv .nsrgv-btn--cool {\n  background: linear-gradient(135deg, var(--cool) 0%, #4f8dfd 38%, var(--cool-deep) 100%) !important;\n  color: #f8fbff !important;\n  box-shadow: 0 16px 30px rgba(37, 99, 235, 0.26);\n}\n\n.nsrgv .nsrgv-btn--cool:hover {\n  box-shadow: 0 20px 38px rgba(37, 99, 235, 0.34);\n}\n\n.nsrgv .nsrgv-btn--cool.is-processing {\n  background: linear-gradient(135deg, #4f46e5, #312e81) !important;\n  color: #fff !important;\n  cursor: wait !important;\n  pointer-events: none;\n  opacity: 1;\n}\n\n.nsrgv .nsrgv-btn--cool.is-processing i {\n  animation: nsrgv-spin 0.85s linear infinite;\n}\n\n.nsrgv .nsrgv-btn--cool:disabled:not(.is-processing) {\n  opacity: 0.45;\n  cursor: not-allowed;\n  filter: grayscale(0.2);\n}\n\n.nsrgv .nsrgv-btn--sm {\n  height: 40px;\n  min-height: 40px;\n  font-size: 0.82rem !important;\n  flex: 1 1 110px;\n  border-radius: 12px;\n}\n\n.nsrgv-alert {\n  display: none;\n  gap: 10px;\n  align-items: flex-start;\n  padding: 12px 14px;\n  border-radius: 14px;\n  font-size: 0.9rem;\n  font-weight: 500;\n  backdrop-filter: blur(10px);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);\n}\n\n.nsrgv-alert.is-visible {\n  display: flex;\n}\n\n.nsrgv-alert--error {\n  background: rgba(251, 113, 133, 0.12);\n  border: 1px solid rgba(251, 113, 133, 0.34);\n  color: #ffd3da;\n}\n\n.nsrgv-alert--ok {\n  background: rgba(52, 211, 153, 0.12);\n  border: 1px solid rgba(52, 211, 153, 0.34);\n  color: #c8ffe9;\n}\n\n.nsrgv-alert--info {\n  background: rgba(125, 211, 252, 0.12);\n  border: 1px solid rgba(125, 211, 252, 0.3);\n  color: #dff7ff;\n}\n\n.nsrgv-hint {\n  font-size: 0.82rem;\n  color: var(--dim);\n  text-align: center;\n}\n\n.nsrgv-skeleton {\n  display: none;\n  background:\n    linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.03)),\n    var(--panel);\n  border: 1px solid var(--line);\n  border-radius: var(--radius);\n  padding: 16px;\n  box-shadow: var(--shadow);\n  backdrop-filter: blur(16px);\n}\n\n.nsrgv-skeleton.is-active {\n  display: block;\n  animation: nsrgv-rise 0.35s ease both;\n}\n\n.nsrgv-sk {\n  background: linear-gradient(90deg, rgba(255, 255, 255, 0.05), rgba(125, 211, 252, 0.18), rgba(139, 92, 246, 0.18), rgba(255, 255, 255, 0.05));\n  background-size: 220% 100%;\n  animation: nsrgv-shimmer 1.2s ease infinite;\n  border-radius: 12px;\n}\n\n.nsrgv-skeleton__block {\n  height: 160px;\n  margin-bottom: 12px;\n}\n\n.nsrgv-skeleton__line {\n  height: 14px;\n  margin-bottom: 10px;\n}\n\n.nsrgv-skeleton__line--lg {\n  width: 55%;\n}\n\n.nsrgv-skeleton__line--md {\n  width: 35%;\n}\n\n.nsrgv-result {\n  display: none;\n  animation: nsrgv-rise 0.45s ease both;\n}\n\n.nsrgv-result.is-visible {\n  display: block;\n}\n\n.nsrgv-panel {\n  background:\n    linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.03)),\n    var(--panel);\n  border: 1px solid var(--line);\n  border-radius: var(--radius);\n  box-shadow: var(--shadow);\n  padding: clamp(16px, 3vw, 24px);\n  backdrop-filter: blur(18px);\n  position: relative;\n  overflow: hidden;\n}\n\n.nsrgv-panel::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(135deg, rgba(125, 211, 252, 0.05), transparent 34%, rgba(139, 92, 246, 0.07));\n  pointer-events: none;\n}\n\n.nsrgv .nsrgv-profile__name {\n  color: var(--ink) !important;\n  font-size: clamp(1.2rem, 3.2vw, 1.55rem);\n  font-weight: 800;\n  letter-spacing: -0.025em;\n  position: relative;\n  z-index: 1;\n}\n\n.nsrgv-chips {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin: 12px 0 18px;\n  position: relative;\n  z-index: 1;\n}\n\n.nsrgv-chip {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n  padding: 7px 12px;\n  border-radius: 999px;\n  background: rgba(255, 255, 255, 0.06);\n  border: 1px solid rgba(255, 255, 255, 0.12);\n  color: var(--muted);\n  font-size: 0.78rem;\n  font-weight: 700;\n  backdrop-filter: blur(8px);\n}\n\n.nsrgv-chip i {\n  color: #a5f3fc;\n}\n\n.nsrgv-chip--accent {\n  background: linear-gradient(135deg, rgba(125, 211, 252, 0.16), rgba(139, 92, 246, 0.18));\n  border-color: rgba(125, 211, 252, 0.22);\n  color: #ebf8ff;\n}\n\n.nsrgv-grid {\n  display: grid;\n  grid-template-columns: 1fr;\n  gap: 14px;\n  position: relative;\n  z-index: 1;\n}\n\n@container nsrgv (min-width: 680px) {\n  .nsrgv-grid {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n\n.nsrgv-card {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  padding: 14px;\n  border-radius: 18px;\n  background:\n    linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.03)),\n    rgba(255, 255, 255, 0.03);\n  border: 1px solid rgba(255, 255, 255, 0.09);\n  min-width: 0;\n  box-shadow: 0 14px 28px rgba(2, 6, 23, 0.16);\n  transition: transform 0.22s ease, border-color 0.22s ease, box-shadow 0.22s ease;\n}\n\n.nsrgv-card:hover {\n  border-color: rgba(125, 211, 252, 0.26);\n  box-shadow: 0 22px 38px rgba(2, 6, 23, 0.22);\n  transform: translateY(-3px);\n}\n\n.nsrgv-mosaic {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 6px;\n  border-radius: 14px;\n  overflow: hidden;\n  background: #0b1120;\n  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05);\n}\n\n.nsrgv-mosaic img {\n  width: 100%;\n  aspect-ratio: 1;\n  object-fit: cover;\n  cursor: zoom-in;\n  transition: transform 0.28s ease, filter 0.28s ease, opacity 0.28s ease;\n}\n\n.nsrgv-mosaic img:hover {\n  transform: scale(1.03);\n  filter: saturate(1.05) contrast(1.02);\n}\n\n.nsrgv-mosaic--one {\n  grid-template-columns: 1fr;\n}\n\n.nsrgv-mosaic--one img {\n  aspect-ratio: 16 \/ 10;\n}\n\n.nsrgv .nsrgv-card__title {\n  color: var(--ink) !important;\n  font-size: 1rem;\n  font-weight: 700;\n  line-height: 1.4;\n}\n\n.nsrgv-card__meta {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px 10px;\n  font-size: 0.76rem;\n  color: var(--dim);\n  font-weight: 600;\n}\n\n.nsrgv-card__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n.nsrgv-empty {\n  display: none;\n  text-align: center;\n  padding: 36px 16px;\n  color: var(--muted);\n  background: rgba(255, 255, 255, 0.035);\n  border: 1px dashed rgba(255, 255, 255, 0.14);\n  border-radius: 18px;\n}\n\n.nsrgv-empty.is-visible {\n  display: block;\n}\n\n.nsrgv-empty i {\n  display: block;\n  font-size: 2.2rem;\n  margin-bottom: 12px;\n  opacity: 0.72;\n  color: #a5f3fc;\n}\n\n.nsrgv-modal {\n  display: none;\n  position: fixed;\n  inset: 0;\n  z-index: 99999;\n  align-items: center;\n  justify-content: center;\n  padding: 20px;\n  background:\n    radial-gradient(circle at top, rgba(125, 211, 252, 0.1), transparent 26%),\n    rgba(3, 7, 18, 0.88);\n  backdrop-filter: blur(14px);\n}\n\n.nsrgv-modal.is-open {\n  display: flex;\n}\n\n.nsrgv-modal__dialog {\n  position: relative;\n  width: min(960px, 100%);\n  max-height: 90vh;\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n  align-items: center;\n  padding: 22px 18px 18px;\n  border-radius: 24px;\n  background:\n    linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03)),\n    rgba(8, 15, 28, 0.92);\n  border: 1px solid rgba(255, 255, 255, 0.12);\n  box-shadow: 0 26px 60px rgba(0, 0, 0, 0.4);\n}\n\n.nsrgv-modal__title {\n  max-width: 100%;\n  text-align: center;\n  font-size: 0.96rem;\n  font-weight: 700;\n  color: #eef2ff;\n  padding: 0 52px;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n.nsrgv-modal__stage {\n  position: relative;\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 180px;\n}\n\n.nsrgv-modal__media {\n  max-width: 100%;\n  max-height: 72vh;\n  border-radius: 16px;\n  object-fit: contain;\n  background: #020617;\n  box-shadow: 0 18px 40px rgba(2, 6, 23, 0.4);\n}\n\n.nsrgv .nsrgv-modal__nav {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 46px;\n  height: 46px;\n  border: 0 !important;\n  border-radius: 999px;\n  background: rgba(15, 23, 42, 0.86) !important;\n  color: #fff !important;\n  cursor: pointer;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  box-shadow: 0 12px 26px rgba(0, 0, 0, 0.28);\n  transition: transform 0.2s ease, background 0.2s ease, opacity 0.2s ease;\n}\n\n.nsrgv .nsrgv-modal__nav:hover {\n  background: linear-gradient(135deg, rgba(125, 211, 252, 0.95), rgba(139, 92, 246, 0.95)) !important;\n  transform: translateY(-50%) scale(1.04);\n}\n\n.nsrgv .nsrgv-modal__nav:disabled {\n  opacity: 0.35;\n  cursor: default;\n}\n\n.nsrgv .nsrgv-modal__nav--prev {\n  left: 8px;\n}\n\n.nsrgv .nsrgv-modal__nav--next {\n  right: 8px;\n}\n\n.nsrgv-modal__footer {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n}\n\n.nsrgv-modal__counter {\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: var(--muted);\n  padding: 7px 12px;\n  border-radius: 999px;\n  background: rgba(255, 255, 255, 0.06);\n  border: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.nsrgv .nsrgv-modal__close {\n  position: absolute;\n  top: 14px;\n  right: 14px;\n  width: 42px;\n  height: 42px;\n  border: 0 !important;\n  border-radius: 999px;\n  background: rgba(15, 23, 42, 0.92) !important;\n  color: #fff !important;\n  cursor: pointer;\n  z-index: 2;\n  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.28);\n  transition: transform 0.2s ease, background 0.2s ease;\n}\n\n.nsrgv .nsrgv-modal__close:hover {\n  transform: scale(1.04);\n  background: linear-gradient(135deg, rgba(125, 211, 252, 0.95), rgba(139, 92, 246, 0.95)) !important;\n}\n\n.nsrgv .fa-chevron-left,\n.nsrgv .fa-chevron-right,\n.nsrgv .fa-clipboard,\n.nsrgv .fa-download,\n.nsrgv .fa-images,\n.nsrgv .fa-magnifying-glass,\n.nsrgv .fa-xmark,\n.nsrgv .fa-regular,\n.nsrgv .fa-solid {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  line-height: 1;\n  vertical-align: middle;\n}\n\n@media (max-width: 1024px) {\n  .nsrgv-shell {\n    padding: clamp(28px, 5vw, 48px) clamp(14px, 3vw, 22px);\n  }\n\n  .nsrgv-hero {\n    padding: clamp(20px, 4vw, 28px) clamp(16px, 3vw, 24px);\n  }\n\n  .nsrgv-modal__dialog {\n    padding: 20px 16px 16px;\n  }\n}\n\n@media (max-width: 767px) {\n  .nsrgv {\n    --gap: 16px;\n    --radius: 18px;\n  }\n\n  .nsrgv-shell {\n    padding: 24px 14px 34px;\n  }\n\n  .nsrgv-brand {\n    width: 52px;\n    height: 52px;\n    border-radius: 16px;\n  }\n\n  .nsrgv .nsrgv-hero__lead {\n    margin-bottom: 18px;\n  }\n\n  .nsrgv-tool {\n    padding: 14px;\n    gap: 12px;\n  }\n\n  .nsrgv .nsrgv-field__input {\n    height: 54px;\n    padding-left: 16px !important;\n    padding-right: 54px !important;\n    font-size: 15px;\n  }\n\n  .nsrgv .nsrgv-btn {\n    width: 100%;\n  }\n\n  .nsrgv .nsrgv-btn--sm {\n    flex: 1 1 100%;\n  }\n\n  .nsrgv-card__actions {\n    flex-direction: column;\n  }\n\n  .nsrgv-card__actions .nsrgv-btn {\n    width: 100%;\n  }\n\n  .nsrgv-grid {\n    grid-template-columns: 1fr;\n  }\n\n  .nsrgv-panel {\n    padding: 16px;\n  }\n\n  .nsrgv-modal {\n    padding: 12px;\n  }\n\n  .nsrgv-modal__dialog {\n    width: 100%;\n    max-height: 92vh;\n    padding: 18px 12px 14px;\n    gap: 12px;\n  }\n\n  .nsrgv-modal__title {\n    font-size: 0.9rem;\n    padding: 0 42px;\n  }\n\n  .nsrgv-modal__media {\n    max-height: 64vh;\n  }\n\n  .nsrgv .nsrgv-modal__nav {\n    width: 40px;\n    height: 40px;\n  }\n\n  .nsrgv .nsrgv-modal__nav--prev {\n    left: 4px;\n  }\n\n  .nsrgv .nsrgv-modal__nav--next {\n    right: 4px;\n  }\n\n  .nsrgv .nsrgv-modal__close {\n    top: 10px;\n    right: 10px;\n    width: 38px;\n    height: 38px;\n  }\n\n  .nsrgv-modal__footer {\n    width: 100%;\n    gap: 8px;\n  }\n}\n\n@media (max-width: 479px) {\n  .nsrgv-shell {\n    padding-left: 12px;\n    padding-right: 12px;\n  }\n\n  .nsrgv-hero {\n    border-radius: 18px;\n  }\n\n  .nsrgv-tool,\n  .nsrgv-panel,\n  .nsrgv-card,\n  .nsrgv-empty {\n    border-radius: 16px;\n  }\n\n  .nsrgv .nsrgv-hero__title {\n    font-size: 1.35rem;\n  }\n\n  .nsrgv .nsrgv-field__input {\n    height: 52px;\n  }\n\n  .nsrgv-mosaic {\n    gap: 4px;\n  }\n\n  .nsrgv-modal__title {\n    padding: 0 38px;\n  }\n\n  .nsrgv-modal__counter {\n    width: 100%;\n    text-align: center;\n  }\n}\n\n@keyframes nsrgv-rise {\n  from {\n    opacity: 0;\n    transform: translateY(14px);\n  }\n\n  to {\n    opacity: 1;\n    transform: none;\n  }\n}\n\n@keyframes nsrgv-shimmer {\n  0% {\n    background-position: 100% 0;\n  }\n\n  100% {\n    background-position: -100% 0;\n  }\n}\n\n@keyframes nsrgv-spin {\n  from {\n    transform: rotate(0deg);\n  }\n\n  to {\n    transform: rotate(360deg);\n  }\n}\n<\/style>\n<!-- New Social Reddit Gallery Viewer -->\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.1\/css\/all.min.css\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Outfit:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n<div class=\"nsrgv\" id=\"nsrgv-root\" data-nsrgv-ready=\"0\">\n  <div class=\"nsrgv-shell\">\n    <section class=\"nsrgv-hero\" aria-labelledby=\"nsrgv-title\">\n      <div class=\"nsrgv-brand\" aria-hidden=\"true\"><i class=\"fa-solid fa-images\"><\/i><\/div>\n<h1 class=\"nsrgv-hero__title\" id=\"nsrgv-title\">Reddit Gallery Viewer<\/h1>\n<p class=\"nsrgv-hero__lead\">Look up a Reddit username to preview gallery and multi-image posts from their recent activity.<\/p>\n<div class=\"nsrgv-tool\">\n        <label class=\"nsrgv-tool__label\" for=\"nsrgv-input\">Username or profile URL<\/label>\n        <div class=\"nsrgv-field\">\n          <input class=\"nsrgv-field__input\" id=\"nsrgv-input\" type=\"text\" placeholder=\"username or https:\/\/www.reddit.com\/user\/...\" autocomplete=\"off\" spellcheck=\"false\">\n          <button type=\"button\" class=\"nsrgv-field__paste\" id=\"nsrgv-paste\" aria-label=\"Paste from clipboard\"><i class=\"fa-regular fa-clipboard\"><\/i><\/button>\n        <\/div>\n        <button type=\"button\" class=\"nsrgv-btn nsrgv-btn--primary\" id=\"xrespond-tools-turnstile\"><i class=\"fa-solid fa-magnifying-glass\"><\/i><span>Get Galleries<\/span><\/button>\n        <div class=\"nsrgv-alert\" id=\"nsrgv-alert\" role=\"alert\"><\/div>\n<p class=\"nsrgv-hint\">Uses the Reddit user overview API and filters gallery \/ image albums<\/p>\n      <\/div>\n    <\/section>\n\n    <div class=\"nsrgv-skeleton\" id=\"nsrgv-skeleton\" aria-hidden=\"true\">\n      <div class=\"nsrgv-sk nsrgv-skeleton__block\"><\/div>\n<div class=\"nsrgv-sk nsrgv-skeleton__line nsrgv-skeleton__line--lg\"><\/div>\n<div class=\"nsrgv-sk nsrgv-skeleton__line nsrgv-skeleton__line--md\"><\/div>\n    <\/div>\n\n    <section class=\"nsrgv-result\" id=\"nsrgv-result\" aria-live=\"polite\">\n      <div class=\"nsrgv-panel\">\n        <h2 class=\"nsrgv-profile__name\" id=\"nsrgv-username\">\u2014<\/h2>\n<div class=\"nsrgv-chips\" id=\"nsrgv-chips\"><\/div>\n<div class=\"nsrgv-grid\" id=\"nsrgv-grid\"><\/div>\n<div class=\"nsrgv-empty\" id=\"nsrgv-empty\"><i class=\"fa-solid fa-images\"><\/i><p>No gallery posts found in this user's recent overview.<\/p><\/div>\n      <\/div>\n    <\/section>\n  <\/div>\n<div class=\"nsrgv-modal\" id=\"nsrgv-modal\" aria-hidden=\"true\">\n    <button type=\"button\" class=\"nsrgv-modal__close\" id=\"nsrgv-modal-close\" aria-label=\"Close\"><i class=\"fa-solid fa-xmark\"><\/i><\/button>\n    <div class=\"nsrgv-modal__dialog\">\n      <p class=\"nsrgv-modal__title\" id=\"nsrgv-modal-title\"><\/p>\n<div class=\"nsrgv-modal__stage\">\n        <button type=\"button\" class=\"nsrgv-modal__nav nsrgv-modal__nav--prev\" id=\"nsrgv-modal-prev\" aria-label=\"Previous image\"><i class=\"fa-solid fa-chevron-left\"><\/i><\/button>\n        <img decoding=\"async\" class=\"nsrgv-modal__media\" id=\"nsrgv-modal-media\" src=\"\" alt=\"Gallery image\" referrerpolicy=\"no-referrer\">\n        <button type=\"button\" class=\"nsrgv-modal__nav nsrgv-modal__nav--next\" id=\"nsrgv-modal-next\" aria-label=\"Next image\"><i class=\"fa-solid fa-chevron-right\"><\/i><\/button>\n      <\/div>\n<div class=\"nsrgv-modal__footer\">\n        <span class=\"nsrgv-modal__counter\" id=\"nsrgv-modal-counter\">1 \/ 1<\/span>\n        <button type=\"button\" class=\"nsrgv-btn nsrgv-btn--cool nsrgv-btn--sm\" id=\"nsrgv-modal-download\"><i class=\"fa-solid fa-download\"><\/i><span>Download<\/span><\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\r\n\r\n\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.1\/css\/all.min.css\">\r\n    <style>\r\n        :root {\r\n            \/* Professional Teal\/Gray Theme Palette *\/\r\n            --primary: #0d9488;\r\n            \/* Professional Teal *\/\r\n            --primary-glow: rgba(13, 148, 136, 0.3);\r\n            --accent: #0284c7;\r\n            \/* Professional Blue *\/\r\n            --success: #10b981;\r\n            --error: #ef4444;\r\n\r\n            \/* Neutrals for the new theme *\/\r\n            --white: #ffffff;\r\n            --gray-50: #f8fafc;\r\n            --gray-100: #f1f5f9;\r\n            --gray-200: #e2e8f0;\r\n            --gray-300: #cbd5e1;\r\n            --gray-400: #94a3b8;\r\n            --gray-500: #64748b;\r\n            --gray-600: #475569;\r\n            --gray-700: #334155;\r\n            --gray-800: #1e293b;\r\n            --gray-900: #0f172a;\r\n\r\n            \/* Background Colors *\/\r\n            --bg-primary: #f8fafc;\r\n            --bg-secondary: #f1f5f9;\r\n            --bg-tertiary: #e2e8f0;\r\n\r\n            \/* Glassmorphism for the new theme *\/\r\n            --glass-bg: rgba(255, 255, 255, 0.7);\r\n            --glass-border: rgba(203, 213, 225, 0.3);\r\n            --shadow-lg: 0 10px 30px -5px rgba(0, 0, 0, 0.1);\r\n            --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\r\n\r\n            \/* Modern Border Radius *\/\r\n            --radius-md: 12px;\r\n            --radius-lg: 16px;\r\n            --radius-xl: 24px;\r\n\r\n            \/* Layout *\/\r\n            --container-max-width: 1200px;\r\n            --input-height: 60px;\r\n        }\r\n\r\n        \/* Scoped reset to only affect elements inside the wrapper *\/\r\n        #reddit-downloader-app * {\r\n            margin: 0;\r\n            padding: 0;\r\n            box-sizing: border-box;\r\n        }\r\n\r\n        \/* Keyframe Animations are global and do not need scoping *\/\r\n        @keyframes fadeIn {\r\n            from {\r\n                opacity: 0;\r\n                transform: translateY(20px);\r\n            }\r\n\r\n            to {\r\n                opacity: 1;\r\n                transform: translateY(0);\r\n            }\r\n        }\r\n\r\n        @keyframes spin {\r\n            from {\r\n                transform: rotate(0deg);\r\n            }\r\n\r\n            to {\r\n                transform: rotate(360deg);\r\n            }\r\n        }\r\n\r\n        @keyframes slide-in-fwd-center {\r\n            0% {\r\n                transform: translateZ(-1400px);\r\n                opacity: 0;\r\n            }\r\n\r\n            100% {\r\n                transform: translateZ(0);\r\n                opacity: 1;\r\n            }\r\n        }\r\n\r\n        @keyframes slide-in-bottom {\r\n            0% {\r\n                transform: translateY(100px);\r\n                opacity: 0;\r\n            }\r\n\r\n            100% {\r\n                transform: translateY(0);\r\n                opacity: 1;\r\n            }\r\n        }\r\n\r\n        @keyframes slideOut {\r\n            0% {\r\n                transform: translateY(0);\r\n                opacity: 1;\r\n            }\r\n\r\n            100% {\r\n                transform: translateY(100px);\r\n                opacity: 0;\r\n            }\r\n        }\r\n\r\n        \/* Main app wrapper replaces body styling *\/\r\n        #reddit-downloader-app {\r\n            font-family: 'Inter', sans-serif;\r\n            background-color: var(--bg-primary);\r\n            color: var(--gray-800);\r\n            line-height: 1.6;\r\n            overflow-x: hidden;\r\n            min-height: 80vh;\r\n            position: relative;\r\n        }\r\n\r\n        #reddit-downloader-app::before {\r\n            content: '';\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100vh;\r\n            pointer-events: none;\r\n            background:\r\n                radial-gradient(circle at 10% 10%, var(--primary) 0%, transparent 25%),\r\n                radial-gradient(circle at 90% 80%, var(--accent) 0%, transparent 25%);\r\n            filter: blur(120px);\r\n            opacity: 0.15;\r\n            z-index: -1;\r\n        }\r\n\r\n        #reddit-downloader-app .container {\r\n            max-width: var(--container-max-width);\r\n            margin: 0 auto;\r\n            padding: clamp(2rem, 5vh, 4rem) 1.5rem;\r\n            min-height: 100vh;\r\n            display: flex;\r\n            flex-direction: column;\r\n            justify-content: center;\r\n            align-items: center;\r\n            position: relative;\r\n            z-index: 1;\r\n        }\r\n\r\n        \/* Header *\/\r\n        #reddit-downloader-app .header {\r\n            text-align: center;\r\n            margin-bottom: 3rem;\r\n            animation: fadeIn 0.8s ease-out;\r\n        }\r\n\r\n        #reddit-downloader-app .logo {\r\n            font-size: 4rem;\r\n            color: var(--primary);\r\n            margin-bottom: 1.5rem;\r\n            line-height: 1;\r\n            text-shadow: 0 0 30px var(--primary-glow);\r\n        }\r\n\r\n        #reddit-downloader-app .header h1 {\r\n            font-size: clamp(1.8rem, 5vw, 3.25rem);\r\n            font-weight: 800;\r\n            color: var(--gray-900);\r\n            margin-bottom: 1rem;\r\n            letter-spacing: -0.03em;\r\n            line-height: 1.2;\r\n        }\r\n\r\n        #reddit-downloader-app .header p {\r\n            font-size: 1.125rem;\r\n            color: var(--gray-600);\r\n            max-width: 550px;\r\n            margin: 0 auto;\r\n        }\r\n\r\n        \/* Main Card *\/\r\n        #reddit-downloader-app .main-card {\r\n            width: 100%;\r\n            background: var(--glass-bg);\r\n            border: 1px solid var(--glass-border);\r\n            border-radius: var(--radius-xl);\r\n            box-shadow: var(--shadow-lg);\r\n            backdrop-filter: blur(16px) saturate(180%);\r\n            -webkit-backdrop-filter: blur(16px) saturate(180%);\r\n            padding: 2.5rem;\r\n            animation: fadeIn 0.8s ease-out 0.2s backwards;\r\n            position: relative;\r\n        }\r\n\r\n        \/* Form *\/\r\n        #reddit-downloader-app .downloader-form {\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 1rem;\r\n            width: 100%;\r\n        }\r\n\r\n        #reddit-downloader-app .input-wrapper {\r\n            position: relative;\r\n            width: 100%;\r\n            display: flex;\r\n            align-items: center;\r\n        }\r\n\r\n        #reddit-downloader-app .url-input {\r\n            width: 100%;\r\n            height: var(--input-height);\r\n            padding: 0 4rem 0 1.5rem;\r\n            font-size: 1rem;\r\n            font-family: 'Inter', sans-serif;\r\n            border: 1px solid var(--gray-300);\r\n            border-radius: var(--radius-md);\r\n            background: var(--white);\r\n            color: var(--gray-800);\r\n            transition: border-color 0.3s, box-shadow 0.3s;\r\n        }\r\n\r\n        #reddit-downloader-app #pasteBtn {\r\n            position: absolute;\r\n            right: 1rem;\r\n            height: 44px;\r\n            width: 44px;\r\n            background: var(--gray-100);\r\n            border: 1px solid var(--gray-200);\r\n            color: var(--gray-600);\r\n            border-radius: 8px;\r\n            cursor: pointer;\r\n            transition: all 0.2s ease;\r\n            font-size: 1.1rem;\r\n        }\r\n\r\n        #reddit-downloader-app #pasteBtn:hover {\r\n            background: var(--gray-200);\r\n            color: var(--gray-800);\r\n        }\r\n\r\n        #reddit-downloader-app .url-input:focus {\r\n            outline: none;\r\n            border-color: var(--primary);\r\n            box-shadow: 0 0 0 3px var(--primary-glow);\r\n        }\r\n\r\n        #reddit-downloader-app .url-input::placeholder {\r\n            color: var(--gray-400);\r\n        }\r\n\r\n        #reddit-downloader-app .submit-btn {\r\n            background: linear-gradient(135deg, var(--primary) 0%, #0d7d73 100%);\r\n            color: var(--white);\r\n            border: none;\r\n            height: var(--input-height);\r\n            font-size: 1.125rem;\r\n            font-weight: 700;\r\n            border-radius: var(--radius-md);\r\n            cursor: pointer;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            gap: 0.75rem;\r\n            transition: all 0.3s ease;\r\n            box-shadow: var(--shadow-md);\r\n        }\r\n\r\n        #reddit-downloader-app .submit-btn:hover:not(:disabled) {\r\n            transform: translateY(-3px);\r\n            box-shadow: 0 7px 20px rgba(13, 148, 136, 0.3);\r\n        }\r\n\r\n        #reddit-downloader-app .submit-btn:active:not(:disabled) {\r\n            transform: translateY(-1px);\r\n            box-shadow: 0 4px 10px rgba(13, 148, 136, 0.2);\r\n        }\r\n\r\n        #reddit-downloader-app .submit-btn:disabled {\r\n            background: var(--gray-300);\r\n            color: var(--gray-500);\r\n            cursor: not-allowed;\r\n            box-shadow: none;\r\n            transform: none;\r\n        }\r\n\r\n        #reddit-downloader-app .submit-btn .fa-spinner {\r\n            animation: spin 1s linear infinite;\r\n        }\r\n\r\n        #reddit-downloader-app #searchAnotherBtn {\r\n            display: none;\r\n            margin-top: 1.5rem;\r\n            background: var(--accent);\r\n            color: var(--white);\r\n            border: none;\r\n            height: var(--input-height);\r\n            font-size: 1.125rem;\r\n            font-weight: 600;\r\n            border-radius: var(--radius-md);\r\n            cursor: pointer;\r\n            width: 100%;\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        #reddit-downloader-app #searchAnotherBtn:hover {\r\n            opacity: 0.9;\r\n            box-shadow: 0 7px 20px rgba(2, 132, 199, 0.3);\r\n        }\r\n\r\n        \/* Loader & Messages *\/\r\n        #reddit-downloader-app .loader {\r\n            display: none;\r\n            width: 40px;\r\n            height: 40px;\r\n            border: 4px solid rgba(13, 148, 136, 0.2);\r\n            border-top-color: var(--primary);\r\n            border-radius: 50%;\r\n            animation: spin 1s linear infinite;\r\n            margin: 2rem auto;\r\n        }\r\n\r\n        #reddit-downloader-app .error-message {\r\n            display: none;\r\n            background: rgba(239, 68, 68, 0.1);\r\n            color: var(--error);\r\n            padding: 1rem 1.5rem;\r\n            border-radius: var(--radius-md);\r\n            margin-top: 1.5rem;\r\n            border: 1px solid rgba(239, 68, 68, 0.3);\r\n            font-weight: 500;\r\n        }\r\n\r\n        \/* Results *\/\r\n        #reddit-downloader-app #result-container {\r\n            display: none;\r\n            width: 100%;\r\n            margin-top: 2rem;\r\n            animation: slide-in-fwd-center 0.7s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;\r\n        }\r\n\r\n        #reddit-downloader-app .result-card {\r\n            background: var(--glass-bg);\r\n            border: 1px solid var(--glass-border);\r\n            border-radius: var(--radius-lg);\r\n            overflow: hidden;\r\n            backdrop-filter: blur(16px) saturate(180%);\r\n            -webkit-backdrop-filter: blur(16px) saturate(180%);\r\n        }\r\n\r\n        \/* Image Result Styles *\/\r\n        #reddit-downloader-app .image-preview-container {\r\n            width: 100%;\r\n            background-color: var(--gray-100);\r\n            border-radius: var(--radius-lg) var(--radius-lg) 0 0;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            max-height: 70vh;\r\n        }\r\n\r\n        #reddit-downloader-app .result-image {\r\n            max-width: 100%;\r\n            max-height: 70vh;\r\n            object-fit: contain;\r\n            display: block;\r\n        }\r\n\r\n        #reddit-downloader-app .result-card .info {\r\n            padding: 1.5rem;\r\n        }\r\n\r\n        #reddit-downloader-app .result-card .title {\r\n            font-size: 1.375rem;\r\n            font-weight: 700;\r\n            margin-bottom: 0.25rem;\r\n            color: var(--gray-900);\r\n            line-height: 1.4;\r\n            white-space: nowrap;\r\n            overflow: hidden;\r\n            text-overflow: ellipsis;\r\n        }\r\n\r\n        #reddit-downloader-app .result-card .author {\r\n            font-size: 1rem;\r\n            color: var(--gray-600);\r\n            margin-bottom: 1.5rem;\r\n        }\r\n\r\n        #reddit-downloader-app .download-section {\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 0.75rem;\r\n        }\r\n\r\n        #reddit-downloader-app .download-button {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            background: var(--gray-100);\r\n            padding: 1rem 1.25rem;\r\n            border-radius: var(--radius-md);\r\n            border: 1px solid var(--gray-200);\r\n            width: 100%;\r\n            cursor: pointer;\r\n            text-align: left;\r\n            font-size: 1rem;\r\n            font-weight: 500;\r\n            color: var(--gray-800);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        #reddit-downloader-app .download-button:hover {\r\n            background: var(--gray-200);\r\n            border-color: var(--gray-300);\r\n            transform: translateY(-2px);\r\n        }\r\n\r\n        #reddit-downloader-app .download-button .icon-text {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 0.75rem;\r\n        }\r\n\r\n        #reddit-downloader-app .download-button .fa-download {\r\n            color: var(--primary);\r\n        }\r\n\r\n        #reddit-downloader-app .file-info {\r\n            background: var(--primary);\r\n            color: white;\r\n            padding: 0.25rem 0.6rem;\r\n            border-radius: 6px;\r\n            font-size: 0.75rem;\r\n            font-weight: 600;\r\n            text-transform: uppercase;\r\n        }\r\n\r\n        \/* Toast Notifications *\/\r\n        #reddit-downloader-app #toast-container {\r\n            position: fixed;\r\n            bottom: 1.5rem;\r\n            left: 50%;\r\n            transform: translateX(-50%);\r\n            display: flex;\r\n            flex-direction: column-reverse;\r\n            align-items: center;\r\n            gap: 1rem;\r\n            z-index: 9999;\r\n            pointer-events: none;\r\n            width: 90%;\r\n            max-width: 420px;\r\n        }\r\n\r\n        #reddit-downloader-app .toast {\r\n            color: white;\r\n            padding: 1rem 1.5rem;\r\n            border-radius: var(--radius-md);\r\n            box-shadow: var(--shadow-lg);\r\n            font-weight: 500;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 0.75rem;\r\n            pointer-events: auto;\r\n            width: 100%;\r\n            min-height: 50px;\r\n            border: 1px solid rgba(255, 255, 255, 0.2);\r\n            backdrop-filter: blur(10px);\r\n            animation: slide-in-bottom 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\r\n        }\r\n\r\n        #reddit-downloader-app .toast.progress .toast-content {\r\n            flex-grow: 1;\r\n        }\r\n\r\n        #reddit-downloader-app .toast.progress .progress-toast-bar {\r\n            width: 100%;\r\n            height: 6px;\r\n            background-color: rgba(0, 0, 0, 0.2);\r\n            border-radius: 3px;\r\n            margin-top: 0.5rem;\r\n            overflow: hidden;\r\n        }\r\n\r\n        #reddit-downloader-app .toast.progress .progress-toast-filled {\r\n            width: 0%;\r\n            height: 100%;\r\n            background-color: var(--white);\r\n            border-radius: 3px;\r\n            transition: width 0.1s linear;\r\n        }\r\n\r\n        #reddit-downloader-app .toast.progress .cancel-download-btn {\r\n            background: none;\r\n            border: none;\r\n            color: white;\r\n            font-size: 1.2rem;\r\n            cursor: pointer;\r\n            margin-left: 0.5rem;\r\n            opacity: 0.8;\r\n            transition: opacity 0.2s;\r\n        }\r\n\r\n        #reddit-downloader-app .toast.progress .cancel-download-btn:hover {\r\n            opacity: 1;\r\n        }\r\n\r\n        #reddit-downloader-app .toast.info {\r\n            background: rgba(2, 132, 199, 0.9);\r\n        }\r\n\r\n        #reddit-downloader-app .toast.success {\r\n            background: rgba(16, 185, 129, 0.9);\r\n        }\r\n\r\n        #reddit-downloader-app .toast.error {\r\n            background: rgba(239, 68, 68, 0.9);\r\n        }\r\n\r\n        \/* Responsive *\/\r\n        @media (max-width: 992px) {\r\n            #reddit-downloader-app .container {\r\n                padding: clamp(1.5rem, 4vh, 3rem) 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .logo {\r\n                font-size: 3.5rem;\r\n                margin-bottom: 1.2rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header h1 {\r\n                font-size: clamp(1.6rem, 4.5vw, 2.8rem);\r\n                margin-bottom: 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header p {\r\n                font-size: 1rem;\r\n                max-width: 500px;\r\n            }\r\n\r\n            #reddit-downloader-app .main-card {\r\n                padding: 2rem;\r\n            }\r\n\r\n            #reddit-downloader-app .url-input {\r\n                height: 55px;\r\n                padding: 0 3.5rem 0 1.25rem;\r\n            }\r\n\r\n            #reddit-downloader-app #pasteBtn {\r\n                height: 40px;\r\n                width: 40px;\r\n                font-size: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .submit-btn,\r\n            #reddit-downloader-app #searchAnotherBtn {\r\n                height: 55px;\r\n                font-size: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app #result-container {\r\n                margin-top: 1.5rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .info {\r\n                padding: 1.25rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .title {\r\n                font-size: 1.25rem;\r\n                margin-bottom: 0.2rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .author {\r\n                font-size: 0.9rem;\r\n                margin-bottom: 1.2rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-button {\r\n                padding: 0.9rem 1.1rem;\r\n                font-size: 0.95rem;\r\n            }\r\n\r\n            #reddit-downloader-app .file-info {\r\n                padding: 0.2rem 0.5rem;\r\n                font-size: 0.7rem;\r\n            }\r\n\r\n            #reddit-downloader-app #toast-container {\r\n                bottom: 1.2rem;\r\n                width: 95%;\r\n                max-width: 380px;\r\n            }\r\n\r\n            #reddit-downloader-app .toast {\r\n                padding: 0.9rem 1.2rem;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 768px) {\r\n            #reddit-downloader-app .container {\r\n                padding: clamp(1rem, 3vh, 2.5rem) 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header {\r\n                margin-bottom: 2.5rem;\r\n            }\r\n\r\n            #reddit-downloader-app .logo {\r\n                font-size: 3rem;\r\n                margin-bottom: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header h1 {\r\n                font-size: clamp(1.4rem, 4vw, 2.2rem);\r\n            }\r\n\r\n            #reddit-downloader-app .header p {\r\n                font-size: 0.95rem;\r\n                max-width: 450px;\r\n            }\r\n\r\n            #reddit-downloader-app .main-card {\r\n                padding: 1.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app .url-input {\r\n                height: 50px;\r\n                padding: 0 3rem 0 1rem;\r\n                font-size: 0.95rem;\r\n            }\r\n\r\n            #reddit-downloader-app #pasteBtn {\r\n                right: 0.8rem;\r\n                height: 36px;\r\n                width: 36px;\r\n                font-size: 0.9rem;\r\n            }\r\n\r\n            #reddit-downloader-app .submit-btn,\r\n            #reddit-downloader-app #searchAnotherBtn {\r\n                height: 50px;\r\n                font-size: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .loader {\r\n                width: 35px;\r\n                height: 35px;\r\n                margin: 1.5rem auto;\r\n            }\r\n\r\n            #reddit-downloader-app .error-message {\r\n                padding: 0.9rem 1.2rem;\r\n                margin-top: 1.2rem;\r\n                font-size: 0.95rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .title {\r\n                font-size: 1.15rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .author {\r\n                font-size: 0.85rem;\r\n                margin-bottom: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-section {\r\n                gap: 0.6rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-button {\r\n                padding: 0.8rem 1rem;\r\n                font-size: 0.9rem;\r\n            }\r\n\r\n            #reddit-downloader-app #toast-container {\r\n                bottom: 1rem;\r\n                max-width: 350px;\r\n            }\r\n\r\n            #reddit-downloader-app .toast {\r\n                padding: 0.8rem 1rem;\r\n                font-size: 0.95rem;\r\n                min-height: 45px;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 600px) {\r\n            #reddit-downloader-app .container {\r\n                padding: 1.5rem 0.7rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header {\r\n                margin-bottom: 2rem;\r\n            }\r\n\r\n            #reddit-downloader-app .logo {\r\n                font-size: 2.8rem;\r\n                margin-bottom: 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header h1 {\r\n                font-size: clamp(1.2rem, 5vw, 2rem);\r\n            }\r\n\r\n            #reddit-downloader-app .header p {\r\n                font-size: 0.9rem;\r\n                max-width: 350px;\r\n            }\r\n\r\n            #reddit-downloader-app .main-card {\r\n                padding: 1.5rem;\r\n                border-radius: var(--radius-lg);\r\n            }\r\n\r\n            #reddit-downloader-app .url-input {\r\n                height: 48px;\r\n                padding: 0 2.8rem 0 0.9rem;\r\n                font-size: 0.9rem;\r\n            }\r\n\r\n            #reddit-downloader-app #pasteBtn {\r\n                right: 0.7rem;\r\n                height: 34px;\r\n                width: 34px;\r\n                font-size: 0.85rem;\r\n                border-radius: 6px;\r\n            }\r\n\r\n            #reddit-downloader-app .submit-btn,\r\n            #reddit-downloader-app #searchAnotherBtn {\r\n                height: 48px;\r\n                font-size: 0.95rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-section {\r\n                gap: 0.5rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-button {\r\n                padding: 0.7rem 0.9rem;\r\n                font-size: 0.85rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-button .icon-text {\r\n                gap: 0.6rem;\r\n            }\r\n\r\n            #reddit-downloader-app .file-info {\r\n                padding: 0.15rem 0.45rem;\r\n                font-size: 0.65rem;\r\n            }\r\n\r\n            #reddit-downloader-app #toast-container {\r\n                bottom: 0.8rem;\r\n                max-width: 300px;\r\n            }\r\n\r\n            #reddit-downloader-app .toast {\r\n                padding: 0.7rem 0.9rem;\r\n                font-size: 0.9rem;\r\n                min-height: 40px;\r\n            }\r\n\t\t\t\t\t#reddit-downloader-app .download-button .icon-text {\r\n\tgap: 0.6rem;\r\n\tflex-direction: column;\r\n}\r\n        }\r\n\r\n        @media (max-width: 400px) {\r\n            #reddit-downloader-app .container {\r\n                padding: 1.2rem 0.5rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header {\r\n                margin-bottom: 1.5rem;\r\n            }\r\n\r\n            #reddit-downloader-app .logo {\r\n                font-size: 2.5rem;\r\n                margin-bottom: 0.7rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header h1 {\r\n                font-size: clamp(1.1rem, 6vw, 1.8rem);\r\n            }\r\n\r\n            #reddit-downloader-app .header p {\r\n                font-size: 0.85rem;\r\n                max-width: 300px;\r\n            }\r\n\r\n            #reddit-downloader-app .main-card {\r\n                padding: 1.2rem;\r\n            }\r\n\r\n            #reddit-downloader-app .url-input {\r\n                height: 45px;\r\n                padding: 0 2.5rem 0 0.8rem;\r\n                font-size: 0.85rem;\r\n            }\r\n\r\n            #reddit-downloader-app #pasteBtn {\r\n                right: 0.6rem;\r\n                height: 32px;\r\n                width: 32px;\r\n                font-size: 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app .submit-btn,\r\n            #reddit-downloader-app #searchAnotherBtn {\r\n                height: 45px;\r\n                font-size: 0.9rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .info {\r\n                padding: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .title {\r\n                font-size: 1.05rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .author {\r\n                font-size: 0.8rem;\r\n                margin-bottom: 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-button {\r\n                padding: 0.6rem 0.8rem;\r\n                font-size: 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app #toast-container {\r\n                bottom: 0.7rem;\r\n                max-width: 280px;\r\n            }\r\n\r\n            #reddit-downloader-app .toast {\r\n                padding: 0.6rem 0.8rem;\r\n                font-size: 0.85rem;\r\n                min-height: 38px;\r\n            }\r\n\t\t\t\t\t#reddit-downloader-app .download-button .icon-text {\r\n\tgap: 0.6rem;\r\n\tflex-direction: column;\r\n}\r\n        }\r\n\r\n        @media (max-width: 375px) {\r\n            #reddit-downloader-app .container {\r\n                padding: 1rem 0.4rem;\r\n            }\r\n\r\n            #reddit-downloader-app .logo {\r\n                font-size: 2.2rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header h1 {\r\n                font-size: 1.5rem;\r\n            }\r\n\r\n            #reddit-downloader-app .header p {\r\n                font-size: 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app .main-card {\r\n                padding: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .url-input {\r\n                height: 42px;\r\n                padding: 0 2.2rem 0 0.7rem;\r\n                font-size: 0.8rem;\r\n            }\r\n\r\n            #reddit-downloader-app #pasteBtn {\r\n                right: 0.5rem;\r\n                height: 30px;\r\n                width: 30px;\r\n                font-size: 0.75rem;\r\n            }\r\n\r\n            #reddit-downloader-app .submit-btn,\r\n            #reddit-downloader-app #searchAnotherBtn {\r\n                height: 42px;\r\n                font-size: 0.85rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .title {\r\n                font-size: 1rem;\r\n            }\r\n\r\n            #reddit-downloader-app .result-card .author {\r\n                font-size: 0.75rem;\r\n            }\r\n\r\n            #reddit-downloader-app .download-button {\r\n                padding: 0.5rem 0.7rem;\r\n                font-size: 0.75rem;\r\n            }\r\n\r\n            #reddit-downloader-app .file-info {\r\n                font-size: 0.6rem;\r\n            }\r\n\r\n            #reddit-downloader-app #toast-container {\r\n                max-width: 260px;\r\n            }\r\n\r\n            #reddit-downloader-app .toast {\r\n                padding: 0.5rem 0.7rem;\r\n                font-size: 0.8rem;\r\n                min-height: 35px;\r\n            }\r\n\t\t\t\t\t#reddit-downloader-app .download-button .icon-text {\r\n\tgap: 0.6rem;\r\n\tflex-direction: column;\r\n}\r\n        }\r\n    <\/style>\r\n\r\n   \r\n\t\t\t<script src=\"https:\/\/tools.xrespond.com\/api\/rate-limit-handler.js\"><\/script>\r\n\t\t\t<script src=\"https:\/\/tools.xrespond.com\/api\/js\/client-ip-detector.js\"><\/script>\r\n\r\n    <script>\r\n        document.addEventListener('DOMContentLoaded', () => {\r\n            \/\/ Main elements\r\n            const form = document.getElementById('downloaderForm');\r\n            const redditUrlInput = document.getElementById('redditUrlInput');\r\n            const pasteBtn = document.getElementById('pasteBtn');\r\n            const submitBtn = document.getElementById('submitBtn');\r\n            const loader = document.getElementById('loader');\r\n            const errorMessage = document.getElementById('errorMessage');\r\n            const resultContainer = document.getElementById('result-container');\r\n            const searchAnotherBtn = document.getElementById('searchAnotherBtn');\r\n            const toastContainer = document.getElementById('toast-container');\r\n\r\n            \/\/ Form state elements\r\n            const submitBtnText = submitBtn.querySelector('span');\r\n            const submitBtnIcon = submitBtn.querySelector('i');\r\n\r\n            \/\/ API and state variables\r\n            const apiUrl = 'https:\/\/tools.xrespond.com\/api\/social\/all\/downloader';\r\n            let currentTitle = 'reddit-image';\r\n            let downloadXHR = null; \/\/ To hold the XMLHttpRequest object for cancellation\r\n\r\n            \/\/ --- EVENT LISTENERS ---\r\n\r\n            \/\/ Form submission\r\n            form.addEventListener('submit', async (e) => {\r\n                e.preventDefault();\r\n                const redditUrl = redditUrlInput.value.trim();\r\n                if (!redditUrl) {\r\n                    showError('Please enter a Reddit URL.');\r\n                    return;\r\n                }\r\n\r\n                if (!isValidRedditUrl(redditUrl)) {\r\n                    showError('Please enter a valid Reddit URL. The URL should be from reddit.com or redd.it');\r\n                    return;\r\n                }\r\n\r\n                resetUI();\r\n                setLoadingState(true);\r\n                try {\r\n                    const formData = new FormData();\r\n                    formData.append('url', redditUrl);\r\n                    const response = await fetch(apiUrl, { method: 'POST', body: formData });\r\n                    if (!response.ok) throw new Error(`API error: ${response.statusText}`);\r\n\r\n                    const data = await response.json();\r\n                    if (data.error || !data.data.medias || data.data.medias.length === 0) {\r\n                        throw new Error(data.message || 'Could not find a downloadable image for this URL.');\r\n                    }\r\n                    displayResults(data);\r\n                } catch (error) {\r\n                    showError(error.message);\r\n                } finally {\r\n                    setLoadingState(false);\r\n                }\r\n            });\r\n\r\n            \/\/ Paste button functionality\r\n            pasteBtn.addEventListener('click', async () => {\r\n                try {\r\n                    const text = await navigator.clipboard.readText();\r\n                    redditUrlInput.value = text;\r\n                    redditUrlInput.focus();\r\n                    showToast('Pasted from clipboard!', 'info');\r\n                } catch (err) {\r\n                    showToast('Failed to read clipboard.', 'error');\r\n                    console.error('Failed to read clipboard: ', err);\r\n                }\r\n            });\r\n\r\n            \/\/ Search Another button functionality\r\n            searchAnotherBtn.addEventListener('click', () => {\r\n                resultContainer.style.display = 'none';\r\n                searchAnotherBtn.style.display = 'none';\r\n                redditUrlInput.value = '';\r\n                redditUrlInput.focus();\r\n            });\r\n\r\n            \/\/ Dynamic event listener for download buttons\r\n            resultContainer.addEventListener('click', (e) => {\r\n                const downloadBtn = e.target.closest('.download-button');\r\n                if (downloadBtn) {\r\n                    const url = downloadBtn.dataset.url;\r\n                    const extension = downloadBtn.dataset.extension;\r\n                    triggerDownloadWithProgress(url, extension);\r\n                }\r\n            });\r\n\r\n            \/\/ --- UI & STATE FUNCTIONS ---\r\n\r\n            function isValidRedditUrl(url) {\r\n                try {\r\n                    const urlObj = new URL(url);\r\n                    const hostname = urlObj.hostname.toLowerCase();\r\n                    const validRedditDomains = ['reddit.com', 'www.reddit.com', 'old.reddit.com', 'redd.it', 'www.redd.it'];\r\n                    if (!validRedditDomains.includes(hostname)) return false;\r\n                    const pathname = urlObj.pathname;\r\n                    return pathname.includes('\/r\/') || pathname.includes('\/u\/') || pathname.includes('\/comments\/') || pathname.includes('\/user\/');\r\n                } catch (error) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            function setLoadingState(isLoading) {\r\n                if (isLoading) {\r\n                    submitBtn.disabled = true;\r\n                    submitBtnIcon.className = 'fa-solid fa-spinner';\r\n                    submitBtnText.textContent = 'Processing...';\r\n                    loader.style.display = 'block';\r\n                } else {\r\n                    loader.style.display = 'none';\r\n                    submitBtn.disabled = false;\r\n                    submitBtnIcon.className = 'fa-solid fa-magnifying-glass';\r\n                    submitBtnText.textContent = 'Get Image';\r\n                }\r\n            }\r\n\r\n            function resetUI() {\r\n                errorMessage.style.display = 'none';\r\n                resultContainer.style.display = 'none';\r\n                searchAnotherBtn.style.display = 'none';\r\n            }\r\n\r\n            function showError(message) {\r\n                errorMessage.textContent = `Error: ${message}`;\r\n                errorMessage.style.display = 'block';\r\n            }\r\n\r\n            function sanitizeFilename(name) {\r\n                return name.replace(\/[\\\/\\\\?%*:|\"<>]\/g, '-').replace(\/\\s+\/g, ' ').trim().substring(0, 80) || 'download';\r\n            }\r\n\r\n            \/\/ --- RESULT DISPLAY ---\r\n\r\n            function displayResults(data) {\r\n                const { title, author, medias } = data.data;\r\n                currentTitle = title || 'reddit-image';\r\n\r\n                \/\/ Find the first available image\/gif\r\n                const imageMedia = medias.find(m => m.url && ['jpg', 'jpeg', 'png', 'gif', 'webp'].includes(m.extension));\r\n\r\n                if (!imageMedia) {\r\n                    showError(\"No downloadable image found in this post. This tool does not support videos.\");\r\n                    return;\r\n                }\r\n\r\n                const imageUrl = imageMedia.url;\r\n                const extension = imageMedia.extension || 'jpg';\r\n                const quality = imageMedia.quality || 'High Quality';\r\n\r\n                resultContainer.innerHTML = `\r\n                    <div class=\"result-card\">\r\n                        <div class=\"image-preview-container\">\r\n                             <img decoding=\"async\" src=\"${imageUrl}\" alt=\"${title || 'Reddit Image Preview'}\" class=\"result-image\">\r\n                        <\/div>\r\n                        <div class=\"info\">\r\n                            <h3 class=\"title\" title=\"${title || 'Untitled Post'}\">${title || 'Untitled Post'}<\/h3>\r\n                            <p class=\"author\">By: ${author || 'Unknown Author'}<\/p>\r\n                            <div class=\"download-section\">\r\n                                <button class=\"download-button\" data-url=\"${imageUrl}\" data-extension=\"${extension}\">\r\n                                    <span class=\"icon-text\"><i class=\"fa-solid fa-download\"><\/i> Download ${quality} Image<\/span>\r\n                                    <span class=\"file-info\">${extension.toUpperCase()}<\/span>\r\n                                <\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>`;\r\n\r\n                resultContainer.style.display = 'block';\r\n                searchAnotherBtn.style.display = 'block';\r\n            }\r\n\r\n            \/\/ --- DOWNLOAD WITH PROGRESS ---\r\n\r\n            function triggerDownloadWithProgress(url, extension) {\r\n                if (downloadXHR && downloadXHR.readyState < 4) {\r\n                    showToast('Another download is already in progress.', 'error');\r\n                    return;\r\n                }\r\n\r\n                const toastId = `toast-${Date.now()}`;\r\n                const toast = showToast(\r\n                    `<div class=\"toast-content\">\r\n                        <span>Starting download... 0%<\/span>\r\n                        <div class=\"progress-toast-bar\"><div class=\"progress-toast-filled\"><\/div><\/div>\r\n                    <\/div>\r\n                    <button class=\"cancel-download-btn\" data-toast-id=\"${toastId}\"><i class=\"fas fa-times\"><\/i><\/button>`,\r\n                    'info progress', null, toastId\r\n                );\r\n                attemptDirectDownload(url, extension, toast, toastId);\r\n            }\r\n\r\n            function attemptDirectDownload(url, extension, toast, toastId) {\r\n                downloadXHR = new XMLHttpRequest();\r\n                downloadXHR.open('GET', url, true);\r\n                downloadXHR.responseType = 'blob';\r\n\r\n                downloadXHR.onprogress = (event) => {\r\n                    if (event.lengthComputable) {\r\n                        const percentComplete = Math.round((event.loaded \/ event.total) * 100);\r\n                        const toastContent = toast.querySelector('.toast-content span');\r\n                        const toastProgress = toast.querySelector('.progress-toast-filled');\r\n                        if (toastContent) {\r\n                            const downloadedMB = (event.loaded \/ (1024 * 1024)).toFixed(1);\r\n                            const totalMB = (event.total \/ (1024 * 1024)).toFixed(1);\r\n                            toastContent.textContent = `Downloading... ${percentComplete}% (${downloadedMB}MB \/ ${totalMB}MB)`;\r\n                        }\r\n                        if (toastProgress) toastProgress.style.width = `${percentComplete}%`;\r\n                    }\r\n                };\r\n\r\n                downloadXHR.onload = () => {\r\n                    if (downloadXHR.status === 200) {\r\n                        const blob = downloadXHR.response;\r\n                        const blobUrl = URL.createObjectURL(blob);\r\n                        const a = document.createElement('a');\r\n                        a.href = blobUrl;\r\n                        a.download = `${sanitizeFilename(currentTitle)}.${extension}`;\r\n                        document.body.appendChild(a);\r\n                        a.click();\r\n                        document.body.removeChild(a);\r\n                        URL.revokeObjectURL(blobUrl);\r\n                        showToast('Download completed successfully!', 'success');\r\n                    } else {\r\n                        showToast(`Download failed: Server error ${downloadXHR.status}. Trying...`, 'error');\r\n                        attemptProxyDownload(url, extension, toast, toastId);\r\n                    }\r\n                    dismissToast(toastId);\r\n                };\r\n\r\n                downloadXHR.onerror = () => {\r\n                    showToast('Download processing...', 'info');\r\n                    attemptProxyDownload(url, extension, toast, toastId);\r\n                };\r\n                downloadXHR.onabort = () => { showToast('Download cancelled.', 'info'); dismissToast(toastId); };\r\n                downloadXHR.send();\r\n            }\r\n\r\n            function attemptProxyDownload(url, extension, toast, toastId) {\r\n                const toastContent = toast.querySelector('.toast-content span');\r\n                if (toastContent) toastContent.textContent = 'Preparing download ...';\r\n                const toastProgress = toast.querySelector('.progress-toast-filled');\r\n                if (toastProgress) toastProgress.style.width = `0%`;\r\n\r\n\r\n                \/\/ Using a generic proxy that might work for images\r\n                const proxyApiUrl = `https:\/\/tools.xrespond.com\/api\/reddit\/proxy-media-base64?url=${encodeURIComponent(url)}`;\r\n                downloadXHR = new XMLHttpRequest();\r\n                downloadXHR.open('GET', proxyApiUrl, true);\r\n                downloadXHR.responseType = 'json';\r\n\r\n                downloadXHR.onload = () => {\r\n                    if (downloadXHR.status === 200) {\r\n                        const data = downloadXHR.response;\r\n                        if (data.error || !data.base64) {\r\n                            showToast(`download failed: ${data.message || 'Could not retrieve media.'}`, 'error');\r\n                        } else {\r\n                            const blobUrl = `data:${data.contentType};base64,${data.base64}`;\r\n                            const a = document.createElement('a');\r\n                            a.href = blobUrl;\r\n                            a.download = `${sanitizeFilename(currentTitle)}.${extension}`;\r\n                            document.body.appendChild(a);\r\n                            a.click();\r\n                            document.body.removeChild(a);\r\n                            showToast('Download completed successfully!', 'success');\r\n                        }\r\n                    } else {\r\n                        showToast(`download failed: Server error ${downloadXHR.status}`, 'error');\r\n                    }\r\n                    dismissToast(toastId);\r\n                };\r\n\r\n                downloadXHR.onerror = () => { showToast('download failed: Network error.', 'error'); dismissToast(toastId); };\r\n                downloadXHR.onabort = () => { showToast('Download cancelled.', 'info'); dismissToast(toastId); };\r\n                downloadXHR.send();\r\n            }\r\n\r\n            toastContainer.addEventListener('click', e => {\r\n                const cancelBtn = e.target.closest('.cancel-download-btn');\r\n                if (cancelBtn && downloadXHR) { downloadXHR.abort(); }\r\n            });\r\n\r\n            \/\/ --- TOAST NOTIFICATIONS ---\r\n            function showToast(message, type = 'info', duration = 3500, id = null) {\r\n                const icons = { info: 'fa-circle-info', success: 'fa-circle-check', error: 'fa-circle-xmark', progress: 'fa-solid fa-download' };\r\n                const toast = document.createElement('div');\r\n                toast.className = `toast ${type}`;\r\n                if (id) toast.id = id;\r\n                const iconClass = type.includes('progress') ? icons['progress'] : icons[type];\r\n                toast.innerHTML = `<i class=\"fa-solid ${iconClass}\"><\/i> ${message}`;\r\n                toastContainer.appendChild(toast);\r\n                if (duration !== null) { setTimeout(() => dismissToast(toast), duration); }\r\n                return toast;\r\n            }\r\n\r\n            function dismissToast(toastOrId) {\r\n                const toast = typeof toastOrId === 'string' ? document.getElementById(toastOrId) : toastOrId;\r\n                if (toast) {\r\n                    toast.style.animation = 'slideOut 0.5s ease forwards';\r\n                    setTimeout(() => { if (toast.parentNode) { toast.parentNode.removeChild(toast); } }, 500);\r\n                }\r\n            }\r\n        });\r\n    <\/script>\r\n\r\n\r\n<!-- ======== Content Section Start ======== -->\r\n<!-- Reddit Gallery Viewer - 3 Content Sections + Shortcode -->\r\n\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\" \/>\r\n\r\n<style>\r\n  .rdgl-s1-root { --s1-bg: #ffffff; --s1-card-bg: #fef6f0; --s1-text: #0f172a; --s1-text-soft: #334155; --s1-text-muted: #64748b; --s1-primary: #FF4500; --s1-accent: #FF8717; width: 100%; background: var(--s1-bg); padding: 80px 20px; font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }\r\n  .rdgl-s1-container { max-width: 1200px; margin: 0 auto; }\r\n  .rdgl-s1-header { text-align: center; margin-bottom: 30px; }\r\n  .rdgl-s1-heading { font-size: clamp(1.4rem, 4vw, 2.5rem); font-weight: 800; margin-bottom: 16px; color: #0f172a; }\r\n  .rdgl-highlight { background: linear-gradient(135deg, #FF4500 0%, #FF8717 50%, #FFB000 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }\r\n  .rdgl-s1-subheading { font-size: clamp(0.8rem, 2vw, 1rem); color: var(--s1-text-muted); max-width: 700px; margin: 0 auto; line-height: 1.6; }\r\n  .rdgl-s1-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }\r\n  .rdgl-s1-card { background: var(--s1-card-bg); border-radius: 10px; padding: 32px 28px; position: relative; overflow: hidden; transition: all 0.4s ease; cursor: pointer; border: 2px solid transparent; opacity: 0; animation: rdgl-s1-fadeSlideUp 0.6s ease forwards; }\r\n  .rdgl-s1-card:nth-child(1) { animation-delay: 0.05s; }\r\n  .rdgl-s1-card:nth-child(2) { animation-delay: 0.1s; }\r\n  .rdgl-s1-card:nth-child(3) { animation-delay: 0.15s; }\r\n  .rdgl-s1-card:nth-child(4) { animation-delay: 0.2s; }\r\n  .rdgl-s1-card:nth-child(5) { animation-delay: 0.25s; }\r\n  .rdgl-s1-card:nth-child(6) { animation-delay: 0.3s; }\r\n  @keyframes rdgl-s1-fadeSlideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }\r\n  .rdgl-s1-card::before { content: \"\"; position: absolute; inset: 0; border-radius: 10px; padding: 2px; background: linear-gradient(90deg, var(--s1-primary), var(--s1-accent), var(--s1-primary)); background-size: 300% 100%; -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; opacity: 0; transition: opacity 0.3s ease; animation: rdgl-s1-borderTrace 2s linear infinite; }\r\n  .rdgl-s1-card:hover::before { opacity: 1; }\r\n  @keyframes rdgl-s1-borderTrace { 0% { background-position: 0% 50%; } 100% { background-position: 300% 50%; } }\r\n  .rdgl-s1-card:hover { transform: translateY(-6px); box-shadow: 0 20px 40px rgba(255, 69, 0, 0.15); }\r\n  .rdgl-s1-icon-wrap { width: 56px; height: 56px; background: linear-gradient(135deg, #ffffff 0%, #f1f5f9 100%); border: 2px solid #e2e8f0; border-radius: 12px; display: flex; align-items: center; justify-content: center; margin-bottom: 20px; transition: all 0.4s ease; }\r\n  .rdgl-s1-card:hover .rdgl-s1-icon-wrap { border-color: var(--s1-primary); background: linear-gradient(135deg, var(--s1-primary) 0%, var(--s1-accent) 100%); }\r\n  .rdgl-s1-icon { font-size: 24px; color: var(--s1-primary); transition: all 0.4s ease; }\r\n  .rdgl-s1-card:hover .rdgl-s1-icon { color: #ffffff; transform: rotate(15deg) scale(1.1); }\r\n  .rdgl-s1-card-title { font-size: 1.2rem; font-weight: 700; color: var(--s1-text); margin-bottom: 12px; }\r\n  .rdgl-s1-card-desc { font-size: 0.95rem; color: var(--s1-text-soft); line-height: 1.6; }\r\n\r\n  .rdgl-s2-root { --s2-bg: #fef6f0; --s2-card-bg: #ffffff; --s2-text: #0f172a; --s2-text-soft: #334155; --s2-text-muted: #64748b; --s2-primary: #FF4500; --s2-accent: #FF8717; width: 100%; background: var(--s2-bg); padding: 80px 20px; font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }\r\n  .rdgl-s2-container { max-width: 1200px; margin: 0 auto; }\r\n  .rdgl-s2-header { text-align: center; margin-bottom: 30px; }\r\n  .rdgl-s2-heading { font-size: clamp(1.4rem, 4vw, 2.5rem); font-weight: 800; margin-bottom: 16px; color: #0f172a; }\r\n  .rdgl-s2-subheading { font-size: clamp(0.8rem, 2vw, 1rem); color: var(--s2-text-muted); max-width: 700px; margin: 0 auto; line-height: 1.6; }\r\n  .rdgl-s2-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }\r\n  .rdgl-s2-card { background: var(--s2-card-bg); border-radius: 10px; padding: 32px 28px; text-align: center; position: relative; transition: all 0.4s ease; cursor: pointer; border: 1px solid #e2e8f0; opacity: 0; animation: rdgl-s2-fadeSlideUp 0.6s ease forwards; }\r\n  .rdgl-s2-card:nth-child(1) { animation-delay: 0.05s; }\r\n  .rdgl-s2-card:nth-child(2) { animation-delay: 0.1s; }\r\n  .rdgl-s2-card:nth-child(3) { animation-delay: 0.15s; }\r\n  .rdgl-s2-card:nth-child(4) { animation-delay: 0.2s; }\r\n  .rdgl-s2-card:nth-child(5) { animation-delay: 0.25s; }\r\n  .rdgl-s2-card:nth-child(6) { animation-delay: 0.3s; }\r\n  @keyframes rdgl-s2-fadeSlideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }\r\n  .rdgl-s2-card::after { content: \"\"; position: absolute; inset: 0; border-radius: 10px; box-shadow: 0 0 0 0 rgba(255, 69, 0, 0.4); opacity: 0; pointer-events: none; }\r\n  .rdgl-s2-card:hover::after { animation: rdgl-s2-pulseEcho 1.5s ease-out infinite; }\r\n  @keyframes rdgl-s2-pulseEcho { 0% { box-shadow: 0 0 0 0 rgba(255, 69, 0, 0.4); opacity: 1; } 100% { box-shadow: 0 0 0 20px rgba(255, 69, 0, 0); opacity: 0; } }\r\n  .rdgl-s2-card:hover { transform: translateY(-8px); }\r\n  .rdgl-s2-icon-wrap { width: 64px; height: 64px; margin: 0 auto 20px; background: linear-gradient(135deg, var(--s2-primary) 0%, var(--s2-accent) 100%); border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: all 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55); }\r\n  .rdgl-s2-card:hover .rdgl-s2-icon-wrap { animation: rdgl-s2-elasticBounce 0.6s ease; }\r\n  @keyframes rdgl-s2-elasticBounce { 0% { transform: scale(1); } 30% { transform: scale(0.85) translateY(5px); } 50% { transform: scale(1.15) translateY(-10px); } 70% { transform: scale(0.95) translateY(2px); } 100% { transform: scale(1) translateY(0); } }\r\n  .rdgl-s2-icon { font-size: 26px; color: #ffffff; transition: transform 0.3s ease; }\r\n  .rdgl-s2-card:hover .rdgl-s2-icon { transform: rotate(10deg); }\r\n  .rdgl-s2-card-title { font-size: 1.2rem; font-weight: 700; color: var(--s2-text); margin-bottom: 12px; }\r\n  .rdgl-s2-card-desc { font-size: 0.95rem; color: var(--s2-text-soft); line-height: 1.6; }\r\n\r\n  .rdgl-s3-root { --s3-bg: #ffffff; --s3-card-bg: #fef6f0; --s3-text: #0f172a; --s3-text-soft: #334155; --s3-text-muted: #64748b; --s3-primary: #FF4500; --s3-accent: #FF8717; width: 100%; background: var(--s3-bg); padding: 80px 20px; font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }\r\n  .rdgl-s3-container { max-width: 1200px; margin: 0 auto; }\r\n  .rdgl-s3-header { text-align: center; margin-bottom: 30px; }\r\n  .rdgl-s3-heading { font-size: clamp(1.4rem, 4vw, 2.5rem); font-weight: 800; margin-bottom: 16px; color: #0f172a; }\r\n  .rdgl-s3-subheading { font-size: clamp(0.8rem, 2vw, 1rem); color: var(--s3-text-muted); max-width: 700px; margin: 0 auto; line-height: 1.6; }\r\n  .rdgl-s3-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }\r\n  .rdgl-s3-card { background: var(--s3-card-bg); border-radius: 10px; padding: 28px; position: relative; overflow: hidden; transition: all 0.4s ease; cursor: pointer; border: 1px solid transparent; opacity: 0; animation: rdgl-s3-fadeSlideUp 0.6s ease forwards; }\r\n  .rdgl-s3-card:nth-child(1) { animation-delay: 0.05s; }\r\n  .rdgl-s3-card:nth-child(2) { animation-delay: 0.1s; }\r\n  .rdgl-s3-card:nth-child(3) { animation-delay: 0.15s; }\r\n  .rdgl-s3-card:nth-child(4) { animation-delay: 0.2s; }\r\n  .rdgl-s3-card:nth-child(5) { animation-delay: 0.25s; }\r\n  .rdgl-s3-card:nth-child(6) { animation-delay: 0.3s; }\r\n  @keyframes rdgl-s3-fadeSlideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }\r\n  .rdgl-s3-card::before { content: \"\"; position: absolute; width: 200px; height: 200px; background: radial-gradient(circle, rgba(255, 69, 0, 0.25) 0%, transparent 70%); border-radius: 50%; pointer-events: none; opacity: 0; transform: translate(-50%, -50%); transition: opacity 0.4s ease; left: var(--mouse-x, 50%); top: var(--mouse-y, 50%); }\r\n  .rdgl-s3-card:hover::before { opacity: 1; }\r\n  .rdgl-s3-card:hover { border-color: rgba(255, 69, 0, 0.3); transform: translateY(-4px); box-shadow: 0 12px 30px rgba(255, 69, 0, 0.1); }\r\n  .rdgl-s3-step-badge { position: absolute; top: 16px; right: 16px; width: 28px; height: 28px; background: linear-gradient(135deg, var(--s3-primary) 0%, var(--s3-accent) 100%); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; color: #ffffff; transition: transform 0.3s ease; }\r\n  .rdgl-s3-card:hover .rdgl-s3-step-badge { transform: scale(1.2) rotate(10deg); }\r\n  .rdgl-s3-icon-wrap { width: 52px; height: 52px; background: #ffffff; border: 2px solid #e2e8f0; border-radius: 12px; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; transition: all 0.4s ease; transform-style: preserve-3d; }\r\n  .rdgl-s3-card:hover .rdgl-s3-icon-wrap { transform: rotateY(180deg); border-color: var(--s3-primary); background: linear-gradient(135deg, var(--s3-primary) 0%, var(--s3-accent) 100%); }\r\n  .rdgl-s3-icon { font-size: 22px; color: var(--s3-primary); transition: all 0.4s ease; backface-visibility: hidden; }\r\n  .rdgl-s3-card:hover .rdgl-s3-icon { color: #ffffff; transform: rotateY(180deg); }\r\n  .rdgl-s3-card-title { font-size: 1.1rem; font-weight: 700; color: var(--s3-text); margin-bottom: 10px; position: relative; z-index: 1; }\r\n  .rdgl-s3-card-desc { font-size: 0.9rem; color: var(--s3-text-soft); line-height: 1.5; position: relative; z-index: 1; }\r\n\r\n  .rdgl-shortcode { --sc-bg: #ffffff; --sc-border: #e2e8f0; --sc-text: #0f172a; --sc-text-muted: #64748b; --sc-primary: #FF4500; --sc-accent: #FF8717; width: 100%; background: var(--sc-bg); padding: 60px 20px; font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }\r\n  .rdgl-shortcode-container { max-width: 1200px; margin: 0 auto; }\r\n  .rdgl-shortcode-inner { border: 2px dashed var(--sc-border); border-radius: 12px; padding: 40px; text-align: center; background: linear-gradient(135deg, #fafafa 0%, #ffffff 100%); transition: border-color 0.3s ease; }\r\n  .rdgl-shortcode-inner:hover { border-color: var(--sc-primary); }\r\n  .rdgl-shortcode-placeholder { display: inline-block; background: linear-gradient(135deg, var(--sc-primary) 0%, var(--sc-accent) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; font-size: clamp(1.2rem, 3vw, 1.8rem); font-weight: 800; letter-spacing: 1px; }\r\n  .rdgl-shortcode-hint { margin-top: 12px; font-size: 0.9rem; color: var(--sc-text-muted); }\r\n\r\n  @media (max-width: 1024px) { .rdgl-s1-grid, .rdgl-s2-grid, .rdgl-s3-grid { grid-template-columns: repeat(2, 1fr); gap: 20px; } }\r\n  @media (max-width: 640px) { .rdgl-s1-root, .rdgl-s2-root, .rdgl-s3-root, .rdgl-shortcode { padding: 50px 10px; } .rdgl-s1-grid, .rdgl-s2-grid, .rdgl-s3-grid { grid-template-columns: 1fr; gap: 16px; } .rdgl-s1-card, .rdgl-s2-card, .rdgl-s3-card { padding: 28px 24px; } .rdgl-shortcode-inner { padding: 24px 16px; } }\r\n<\/style>\r\n\r\n<section class=\"rdgl-shortcode\"><div class=\"rdgl-shortcode-container\"><\/div><\/section>\r\n\r\n<section class=\"rdgl-s1-root\" id=\"what-is-reddit-gallery-viewer\">\r\n  <div class=\"rdgl-s1-container\">\r\n    <div class=\"rdgl-s1-header\">\r\n      <h2 class=\"rdgl-s1-heading\">What Is a <span class=\"rdgl-highlight\">Reddit Gallery Viewer<\/span>?<\/h2>\r\n      <p class=\"rdgl-s1-subheading\">Browse, view, and download Reddit gallery posts in a grid layout<\/p>\r\n    <\/div>\r\n    <div class=\"rdgl-s1-grid\">\r\n      <article class=\"rdgl-s1-card\"><div class=\"rdgl-s1-icon-wrap\"><i class=\"fa-solid fa-th rdgl-s1-icon\"><\/i><\/div><h3 class=\"rdgl-s1-card-title\">Gallery Grid<\/h3><p class=\"rdgl-s1-card-desc\">Browse images in a clean grid layout<\/p><\/article>\r\n      <article class=\"rdgl-s1-card\"><div class=\"rdgl-s1-icon-wrap\"><i class=\"fa-solid fa-scroll rdgl-s1-icon\"><\/i><\/div><h3 class=\"rdgl-s1-card-title\">Image Scroll<\/h3><p class=\"rdgl-s1-card-desc\">Scroll through images seamlessly<\/p><\/article>\r\n      <article class=\"rdgl-s1-card\"><div class=\"rdgl-s1-icon-wrap\"><i class=\"fa-solid fa-expand rdgl-s1-icon\"><\/i><\/div><h3 class=\"rdgl-s1-card-title\">Full Screen<\/h3><p class=\"rdgl-s1-card-desc\">View images in full screen mode<\/p><\/article>\r\n      <article class=\"rdgl-s1-card\"><div class=\"rdgl-s1-icon-wrap\"><i class=\"fa-solid fa-download rdgl-s1-icon\"><\/i><\/div><h3 class=\"rdgl-s1-card-title\">Download All<\/h3><p class=\"rdgl-s1-card-desc\">Download all gallery images at once<\/p><\/article>\r\n      <article class=\"rdgl-s1-card\"><div class=\"rdgl-s1-icon-wrap\"><i class=\"fa-solid fa-align-left rdgl-s1-icon\"><\/i><\/div><h3 class=\"rdgl-s1-card-title\">Caption View<\/h3><p class=\"rdgl-s1-card-desc\">View image captions and descriptions<\/p><\/article>\r\n      <article class=\"rdgl-s1-card\"><div class=\"rdgl-s1-icon-wrap\"><i class=\"fa-solid fa-arrow-down-wide-short rdgl-s1-icon\"><\/i><\/div><h3 class=\"rdgl-s1-card-title\">Sort Options<\/h3><p class=\"rdgl-s1-card-desc\">Sort gallery images by different criteria<\/p><\/article>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<section class=\"rdgl-s2-root\" id=\"why-use-reddit-gallery-viewer\">\r\n  <div class=\"rdgl-s2-container\">\r\n    <div class=\"rdgl-s2-header\">\r\n      <h2 class=\"rdgl-s2-heading\">Why Use a <span class=\"rdgl-highlight\">Reddit Gallery Viewer<\/span>?<\/h2>\r\n      <p class=\"rdgl-s2-subheading\">Collect visual content, curate galleries, and build archives with ease<\/p>\r\n    <\/div>\r\n    <div class=\"rdgl-s2-grid\">\r\n      <article class=\"rdgl-s2-card\"><div class=\"rdgl-s2-icon-wrap\"><i class=\"fa-solid fa-images rdgl-s2-icon\"><\/i><\/div><h3 class=\"rdgl-s2-card-title\">Visual Collection<\/h3><p class=\"rdgl-s2-card-desc\">Build a visual collection from Reddit galleries<\/p><\/article>\r\n      <article class=\"rdgl-s2-card\"><div class=\"rdgl-s2-icon-wrap\"><i class=\"fa-solid fa-layer-group rdgl-s2-icon\"><\/i><\/div><h3 class=\"rdgl-s2-card-title\">Batch View<\/h3><p class=\"rdgl-s2-card-desc\">View multiple images in a single batch<\/p><\/article>\r\n      <article class=\"rdgl-s2-card\"><div class=\"rdgl-s2-icon-wrap\"><i class=\"fa-solid fa-sliders rdgl-s2-icon\"><\/i><\/div><h3 class=\"rdgl-s2-card-title\">Content Curation<\/h3><p class=\"rdgl-s2-card-desc\">Curate and organize gallery content<\/p><\/article>\r\n      <article class=\"rdgl-s2-card\"><div class=\"rdgl-s2-icon-wrap\"><i class=\"fa-solid fa-compass rdgl-s2-icon\"><\/i><\/div><h3 class=\"rdgl-s2-card-title\">Easy Navigation<\/h3><p class=\"rdgl-s2-card-desc\">Navigate through galleries effortlessly<\/p><\/article>\r\n      <article class=\"rdgl-s2-card\"><div class=\"rdgl-s2-icon-wrap\"><i class=\"fa-solid fa-eye rdgl-s2-icon\"><\/i><\/div><h3 class=\"rdgl-s2-card-title\">Quick Preview<\/h3><p class=\"rdgl-s2-card-desc\">Preview images without loading each one<\/p><\/article>\r\n      <article class=\"rdgl-s2-card\"><div class=\"rdgl-s2-icon-wrap\"><i class=\"fa-solid fa-box-archive rdgl-s2-icon\"><\/i><\/div><h3 class=\"rdgl-s2-card-title\">Archive Build<\/h3><p class=\"rdgl-s2-card-desc\">Create archives of gallery collections<\/p><\/article>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<section class=\"rdgl-s3-root\" id=\"how-to-use-reddit-gallery-viewer\">\r\n  <div class=\"rdgl-s3-container\">\r\n    <div class=\"rdgl-s3-header\">\r\n      <h3 class=\"rdgl-s3-heading\">How to Use the <span class=\"rdgl-highlight\">Reddit Gallery Viewer<\/span>?<\/h3>\r\n      <p class=\"rdgl-s3-subheading\">Browse and download Reddit galleries with this simple step-by-step process<\/p>\r\n    <\/div>\r\n    <div class=\"rdgl-s3-grid\">\r\n      <article class=\"rdgl-s3-card\"><span class=\"rdgl-s3-step-badge\">1<\/span><div class=\"rdgl-s3-icon-wrap\"><i class=\"fa-solid fa-link rdgl-s3-icon\"><\/i><\/div><h3 class=\"rdgl-s3-card-title\">Enter Gallery URL<\/h3><p class=\"rdgl-s3-card-desc\">Paste the gallery post link<\/p><\/article>\r\n      <article class=\"rdgl-s3-card\"><span class=\"rdgl-s3-step-badge\">2<\/span><div class=\"rdgl-s3-icon-wrap\"><i class=\"fa-solid fa-arrow-right-to-bracket rdgl-s3-icon\"><\/i><\/div><h3 class=\"rdgl-s3-card-title\">Load Images<\/h3><p class=\"rdgl-s3-card-desc\">Fetch all images from the gallery<\/p><\/article>\r\n      <article class=\"rdgl-s3-card\"><span class=\"rdgl-s3-step-badge\">3<\/span><div class=\"rdgl-s3-icon-wrap\"><i class=\"fa-solid fa-th rdgl-s3-icon\"><\/i><\/div><h3 class=\"rdgl-s3-card-title\">Browse Grid<\/h3><p class=\"rdgl-s3-card-desc\">Browse images in an organized grid<\/p><\/article>\r\n      <article class=\"rdgl-s3-card\"><span class=\"rdgl-s3-step-badge\">4<\/span><div class=\"rdgl-s3-icon-wrap\"><i class=\"fa-solid fa-expand rdgl-s3-icon\"><\/i><\/div><h3 class=\"rdgl-s3-card-title\">View Full Size<\/h3><p class=\"rdgl-s3-card-desc\">Open images at full resolution<\/p><\/article>\r\n      <article class=\"rdgl-s3-card\"><span class=\"rdgl-s3-step-badge\">5<\/span><div class=\"rdgl-s3-icon-wrap\"><i class=\"fa-solid fa-download rdgl-s3-icon\"><\/i><\/div><h3 class=\"rdgl-s3-card-title\">Download All<\/h3><p class=\"rdgl-s3-card-desc\">Download all images in one click<\/p><\/article>\r\n      <article class=\"rdgl-s3-card\"><span class=\"rdgl-s3-step-badge\">6<\/span><div class=\"rdgl-s3-icon-wrap\"><i class=\"fa-solid fa-floppy-disk rdgl-s3-icon\"><\/i><\/div><h3 class=\"rdgl-s3-card-title\">Save Collection<\/h3><p class=\"rdgl-s3-card-desc\">Save the gallery as a collection<\/p><\/article>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\n  (function () {\r\n    var cards = document.querySelectorAll(\".rdgl-s3-card\");\r\n    cards.forEach(function (card) {\r\n      card.addEventListener(\"mousemove\", function (e) {\r\n        var rect = card.getBoundingClientRect();\r\n        card.style.setProperty(\"--mouse-x\", ((e.clientX - rect.left) \/ rect.width) * 100 + \"%\");\r\n        card.style.setProperty(\"--mouse-y\", ((e.clientY - rect.top) \/ rect.height) * 100 + \"%\");\r\n      });\r\n    });\r\n  })();\r\n<\/script>\r\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":4,"featured_media":0,"parent":5539,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-homepage.php","meta":{"footnotes":""},"class_list":["post-5970","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/pages\/5970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/comments?post=5970"}],"version-history":[{"count":4,"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/pages\/5970\/revisions"}],"predecessor-version":[{"id":5977,"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/pages\/5970\/revisions\/5977"}],"up":[{"embeddable":true,"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/pages\/5539"}],"wp:attachment":[{"href":"https:\/\/viewari.com\/wp-json\/wp\/v2\/media?parent=5970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}