/* ============================================================================
   Image2 Studio — Redesign Overlay
   Loads AFTER the original Tailwind build. Token-driven, .dark adaptive.
   All motion 150–250ms. Excalidraw subtree (.excalidraw) is never targeted.
   ============================================================================ */

/* ---------------------------------------------------------------- 0. tokens */

:root {
  --stx-accent: var(--color-accent);
  --stx-accent-hover: var(--color-accent-hover);
  --stx-accent-soft: color-mix(in srgb, var(--color-accent) 12%, transparent);
  --stx-accent-softer: color-mix(in srgb, var(--color-accent) 7%, transparent);
  --stx-accent-ring: color-mix(in srgb, var(--color-accent) 35%, transparent);
  --stx-shadow-card: 0 1px 2px rgba(16, 18, 27, 0.04), 0 10px 32px rgba(16, 18, 27, 0.07);
  --stx-shadow-card-hover: 0 4px 10px rgba(16, 18, 27, 0.06), 0 24px 56px rgba(16, 18, 27, 0.14);
  --stx-shadow-pop: 0 12px 40px rgba(16, 18, 27, 0.16);
  --stx-fast: 150ms ease;
  --stx-med: 200ms ease;
  --stx-slow: 250ms ease;
}

html.dark,
body.dark {
  --stx-accent-soft: color-mix(in srgb, var(--color-accent) 20%, transparent);
  --stx-accent-softer: color-mix(in srgb, var(--color-accent) 12%, transparent);
  --stx-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.35), 0 10px 32px rgba(0, 0, 0, 0.35);
  --stx-shadow-card-hover: 0 4px 12px rgba(0, 0, 0, 0.45), 0 24px 56px rgba(0, 0, 0, 0.5);
  --stx-shadow-pop: 0 12px 40px rgba(0, 0, 0, 0.55);
}

/* ---------------------------------------------------------------- 1. global */

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

::selection {
  background: color-mix(in srgb, var(--color-accent) 22%, transparent);
  color: var(--color-text-primary);
}

:focus-visible {
  outline: 2px solid var(--stx-accent-ring);
  outline-offset: 2px;
  border-radius: 6px;
}

/* thin, translucent scrollbars (Excalidraw keeps its own) */
:not(.excalidraw):not(.excalidraw *)::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}
:not(.excalidraw):not(.excalidraw *)::-webkit-scrollbar-track {
  background: transparent;
}
:not(.excalidraw):not(.excalidraw *)::-webkit-scrollbar-thumb {
  background: color-mix(in srgb, var(--color-text-tertiary) 32%, transparent);
  border-radius: 999px;
  border: 2px solid transparent;
  background-clip: padding-box;
}
:not(.excalidraw):not(.excalidraw *)::-webkit-scrollbar-thumb:hover {
  background: color-mix(in srgb, var(--color-text-tertiary) 55%, transparent);
  border: 2px solid transparent;
  background-clip: padding-box;
}
* {
  scrollbar-width: thin;
  scrollbar-color: color-mix(in srgb, var(--color-text-tertiary) 32%, transparent) transparent;
}

/* ---------------------------------------------------------- 2. sidebar nav */

/* desktop rail */
aside nav[aria-label] button {
  border-radius: 10px !important;
  transition: background-color var(--stx-med), color var(--stx-med), box-shadow var(--stx-med);
}
aside nav[aria-label] button:hover {
  background-color: var(--color-bg-tertiary) !important;
  color: var(--color-text-primary) !important;
}
/* active item: accent tint + accent text + 3px left indicator */
aside nav[aria-label] button.bg-active-bg,
aside nav[aria-label] button.bg-active-bg:hover {
  background-color: var(--stx-accent-soft) !important;
  color: var(--color-accent) !important;
  box-shadow: inset 3px 0 0 var(--color-accent);
}
/* group breathing room between nav sections */
aside nav[aria-label] {
  gap: 6px !important;
  padding-top: 14px !important;
  padding-bottom: 14px !important;
}

/* mobile bottom tab bar */
nav.fixed.bottom-0 button {
  border-radius: 10px;
  transition: background-color var(--stx-med), color var(--stx-med);
}
nav.fixed.bottom-0 button.text-accent {
  background: var(--stx-accent-soft);
}

/* ------------------------------------------------- 3. apps — template wall */

/* unify the hard-coded beige palette into the token system (4 core rules) */
.bg-\[\#f5f1ea\] {
  background-color: var(--color-bg-primary) !important;
}
.text-\[\#1f1b16\] {
  color: var(--color-text-primary) !important;
}
.dark .bg-\[\#f5f1ea\] {
  background-color: var(--color-bg-primary) !important;
}
.dark .text-\[\#1f1b16\] {
  color: var(--color-text-primary) !important;
}
/* dark-variant arbitrary classes carried by the same elements */
.dark .dark\:bg-\[\#080807\] {
  background-color: var(--color-bg-primary) !important;
}
.dark .dark\:text-\[\#f7f0e6\] {
  color: var(--color-text-primary) !important;
}
/* sticky nav translucent beige → translucent token bg */
.bg-\[\#f5f1ea\]\/94 {
  background-color: color-mix(in srgb, var(--color-bg-primary) 94%, transparent) !important;
}
.dark .dark\:bg-\[\#080807\]\/94 {
  background-color: color-mix(in srgb, var(--color-bg-primary) 94%, transparent) !important;
}
[data-testid="template-sticky-nav"] {
  border-bottom-color: var(--color-border-secondary) !important;
}
/* template card figure placeholder + caption meta colors */
figure.bg-\[\#e6ded2\] {
  background-color: var(--color-bg-tertiary) !important;
}
.text-\[\#8b7d6f\] {
  color: var(--color-text-tertiary) !important;
}

/* search box → pill */
[data-testid="template-search-box"] {
  border-radius: 999px;
}
[data-testid="template-search-input"] {
  height: 46px !important;
  border: 1px solid var(--color-border-primary) !important;
  border-radius: 999px !important;
  background-color: var(--color-bg-secondary) !important;
  padding-left: 2.75rem !important;
  padding-right: 1.25rem !important;
  color: var(--color-text-primary) !important;
  box-shadow: var(--stx-shadow-card);
  transition: border-color var(--stx-med), box-shadow var(--stx-med), background-color var(--stx-med);
}
[data-testid="template-search-input"]:focus {
  border-color: var(--color-accent) !important;
  box-shadow: 0 0 0 4px var(--stx-accent-soft), var(--stx-shadow-card);
  background-color: var(--color-bg-primary) !important;
}
[data-testid="template-search-input"]::placeholder {
  color: var(--color-text-tertiary) !important;
}

/* category chips */
.template-category-marquee button {
  border-radius: 999px !important;
  border-color: var(--color-border-primary) !important;
  background-color: var(--color-bg-secondary) !important;
  color: var(--color-text-secondary) !important;
  box-shadow: none !important;
  transition: background-color var(--stx-fast), color var(--stx-fast),
    border-color var(--stx-fast), transform var(--stx-fast);
}
.template-category-marquee button:hover {
  border-color: var(--color-border-secondary) !important;
  background-color: var(--color-bg-tertiary) !important;
  color: var(--color-text-primary) !important;
}
/* active chip → solid accent */
.template-category-marquee button.bg-sky-100,
.template-category-marquee button.bg-cyan-200 {
  background-color: var(--color-accent) !important;
  border-color: var(--color-accent) !important;
  color: #ffffff !important;
}
/* new-image CTA */
[data-testid="apps-start-creating"] {
  background-color: var(--color-accent) !important;
  color: #ffffff !important;
  border-radius: 999px !important;
  box-shadow: 0 8px 22px color-mix(in srgb, var(--color-accent) 32%, transparent);
  transition: background-color var(--stx-fast), transform var(--stx-fast), box-shadow var(--stx-fast);
}
[data-testid="apps-start-creating"]:hover {
  background-color: var(--stx-accent-hover) !important;
  transform: translateY(1px);
  box-shadow: 0 4px 14px color-mix(in srgb, var(--color-accent) 28%, transparent);
}

/* ------------------------- true waterfall (masonry) template wall --------
   The bundle renders a fixed-aspect grid (mobile) / columns with fake,
   index-based aspect crops (desktop). Override both: CSS columns on every
   breakpoint and natural image aspect ratios, so tall/wide template
   thumbnails keep their real shape and the wall flows like a waterfall. */
[data-testid="template-showcase-grid"] {
  display: block !important;
  columns: 2;
  column-gap: 12px;
}
@media (min-width: 768px) {
  [data-testid="template-showcase-grid"] { column-gap: 1.5rem; }
}
@media (min-width: 1024px) {
  [data-testid="template-showcase-grid"] { columns: 3; }
}
@media (min-width: 1536px) {
  [data-testid="template-showcase-grid"] { columns: 4; }
}
[data-testid="template-showcase-grid"] > button {
  display: block;
  break-inside: avoid;
  -webkit-column-break-inside: avoid;
  margin-bottom: 14px !important;
}
@media (min-width: 768px) {
  [data-testid="template-showcase-grid"] > button { margin-bottom: 1.5rem !important; }
}
/* natural thumbnail ratio: drop the forced aspect crop when a real image exists */
[data-testid="template-showcase-grid"] [data-template-id] figure > div:has(> img) {
  aspect-ratio: auto !important;
}
[data-testid="template-showcase-grid"] [data-template-id] figure > div > img {
  display: block;
  height: auto !important;
  width: 100%;
}

/* 模板卡片上的常显信息（比例 / 是否需要参考图）
   改由属性 + 伪元素渲染：脚本只 setAttribute，不再往 React 的子树里插节点。 */
[data-template-id][data-stx-ratio] figure::before {
  content: attr(data-stx-ratio);
  position: absolute;
  top: 10px;
  left: 10px;
  z-index: 2;
  padding: 4px 9px;
  border-radius: 999px;
  font-size: 10px;
  font-weight: 700;
  line-height: 1;
  color: #fff;
  background: rgba(15, 13, 10, 0.55);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  pointer-events: none;
}
[data-template-id][data-stx-ref] figure::after {
  content: "参考图";
  position: absolute;
  top: 10px;
  left: 58px;
  z-index: 2;
  padding: 4px 9px;
  border-radius: 999px;
  font-size: 10px;
  font-weight: 700;
  line-height: 1;
  color: #fff;
  background: color-mix(in srgb, var(--color-accent, #4f46e5) 82%, #000 8%);
  pointer-events: none;
}
[data-template-id][data-stx-ref]:not([data-stx-ratio]) figure::after {
  left: 10px;
}
/* 分类浏览的紧凑卡片上不显示这些标签，避免遮住小图 */
[data-stx-density="compact"] [data-template-id] figure::before,
[data-stx-density="compact"] [data-template-id] figure::after {
  content: none;
}

/* ------------------------------------------------------------ 4. chat view */

/* message column rhythm */
.mx-auto.max-w-3xl.gap-5 {
  gap: 1.5rem;
}

/* user bubble — solid accent, right aligned, 75% cap */
.mx-auto.max-w-3xl.gap-5 > .justify-end > div:first-child {
  max-width: 75% !important;
  background-color: var(--color-accent) !important;
  color: #ffffff !important;
  border-radius: 18px !important;
  border-bottom-right-radius: 6px !important;
  padding: 12px 16px !important;
  box-shadow: 0 6px 20px color-mix(in srgb, var(--color-accent) 22%, transparent);
}
.mx-auto.max-w-3xl.gap-5 > .justify-end > div:first-child p,
.mx-auto.max-w-3xl.gap-5 > .justify-end > div:first-child li,
.mx-auto.max-w-3xl.gap-5 > .justify-end > div:first-child .whitespace-pre-wrap {
  color: #ffffff !important;
}
.mx-auto.max-w-3xl.gap-5 > .justify-end > div:first-child pre {
  background: rgba(255, 255, 255, 0.14) !important;
  color: #ffffff !important;
}

/* assistant / system bubble — secondary surface + border */
.mx-auto.max-w-3xl.gap-5 > .justify-start > div:first-child {
  max-width: 75% !important;
  background-color: var(--color-bg-secondary);
  border: 1px solid var(--color-border-secondary);
  border-radius: 18px !important;
  border-bottom-left-radius: 6px !important;
  padding: 12px 16px !important;
  box-shadow: var(--stx-shadow-card);
}
.mx-auto.max-w-3xl.gap-5 > .justify-start > div:first-child img {
  border-radius: 12px;
}

/* message meta (time / status / usage) */
.mx-auto.max-w-3xl.gap-5 p.text-xs {
  color: var(--color-text-tertiary);
}
.mx-auto.max-w-3xl.gap-5 > .justify-end p.text-xs {
  color: rgba(255, 255, 255, 0.72) !important;
}

/* "generating" pill — breathing */
@keyframes stx-breathe {
  0%, 100% { opacity: 1; box-shadow: 0 0 0 0 var(--stx-accent-soft); }
  50% { opacity: 0.72; box-shadow: 0 0 0 6px transparent; }
}
.mx-auto.max-w-3xl.gap-5 .justify-start .rounded-full.bg-bg-secondary {
  animation: stx-breathe 1.8s ease-in-out infinite;
}

/* composer → floating card */
div[style*="--chat-input-height"] {
  background-color: transparent !important;
}
div[style*="--chat-input-height"] > .mx-auto.max-w-3xl {
  background-color: var(--color-bg-secondary);
  border: 1px solid var(--color-border-primary);
  border-radius: 20px;
  box-shadow: var(--stx-shadow-pop);
  padding: 10px 14px 12px;
  transition: border-color var(--stx-med), box-shadow var(--stx-med);
}
div[style*="--chat-input-height"] > .mx-auto.max-w-3xl:focus-within {
  border-color: var(--color-accent);
  box-shadow: 0 0 0 4px var(--stx-accent-soft), var(--stx-shadow-pop);
}
div[style*="--chat-input-height"] textarea {
  border-radius: 12px !important;
}

/* sessions panel */
aside.bg-bg-secondary {
  background-color: var(--color-bg-secondary);
}
aside.bg-bg-secondary .group.rounded-lg {
  border-radius: 10px !important;
  transition: background-color var(--stx-fast), color var(--stx-fast);
}
aside.bg-bg-secondary .group.rounded-lg:hover {
  background-color: var(--color-bg-tertiary) !important;
}
aside.bg-bg-secondary .group.rounded-lg.bg-accent\/10 {
  background-color: var(--stx-accent-soft) !important;
  color: var(--color-accent) !important;
  box-shadow: inset 3px 0 0 var(--color-accent);
}
aside.bg-bg-secondary > .p-3 button {
  border-radius: 10px !important;
}

/* ----------------------------------------------------------- 5. custom view */

/* AI panel → modular card */
[data-testid="custom-ai-panel"] {
  border-radius: 18px !important;
  border-color: var(--color-border-secondary) !important;
  background-color: var(--color-bg-secondary) !important;
  box-shadow: var(--stx-shadow-card) !important;
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
}
/* parameter sections → sub cards */
[data-testid="custom-ai-prompt-section"],
[data-testid="custom-integrated-records"] {
  background-color: var(--color-bg-primary);
  border: 1px solid var(--color-border-secondary) !important;
  border-radius: 16px;
  margin: 10px 12px;
  padding: 16px !important;
}
[data-testid="custom-integrated-records"] {
  border-top: 1px solid var(--color-border-secondary) !important;
}
/* record shelf cards */
[data-testid="custom-integrated-records"] button {
  border-radius: 12px !important;
  transition: transform var(--stx-fast), border-color var(--stx-fast), background-color var(--stx-fast);
}
[data-testid="custom-integrated-records"] button:hover {
  transform: translateY(-1px);
}
/* primary generate button — solid accent, larger radius */
[data-testid="custom-ai-panel"] button.bg-accent {
  border-radius: 14px !important;
  box-shadow: 0 10px 26px color-mix(in srgb, var(--color-accent) 30%, transparent) !important;
  transition: background-color var(--stx-fast), transform var(--stx-fast), box-shadow var(--stx-fast);
}
[data-testid="custom-ai-panel"] button.bg-accent:hover {
  background-color: var(--stx-accent-hover) !important;
  transform: translateY(1px);
  box-shadow: 0 5px 16px color-mix(in srgb, var(--color-accent) 26%, transparent) !important;
}
[data-testid="custom-ai-panel"] button.bg-accent:hover:not(.bg-rose-500) {
  scale: none;
}
/* keep small tool buttons quiet */
[data-testid="custom-ai-prompt-section"] .grid button {
  border-radius: 10px !important;
}

/* --------------------------------------------------------------- 6. recents */

.grid.xl\:grid-cols-4 > .group.overflow-hidden {
  border-radius: 16px !important;
  border-color: var(--color-border-secondary) !important;
  box-shadow: var(--stx-shadow-card);
  transition: border-color var(--stx-med), box-shadow var(--stx-med), transform var(--stx-med);
}
.grid.xl\:grid-cols-4 > .group.overflow-hidden:hover {
  border-color: var(--color-border-primary) !important;
  box-shadow: var(--stx-shadow-card-hover);
  transform: translateY(-2px);
}
.grid.xl\:grid-cols-4 > .group.overflow-hidden img {
  transition: transform 400ms ease;
}
.grid.xl\:grid-cols-4 > .group.overflow-hidden:hover img {
  transform: scale(1.03);
}

/* --------------------------------------------------------- 7. global buttons */

button.bg-accent:not(.excalidraw *):hover {
  background-color: var(--stx-accent-hover);
}
button:not(.excalidraw *):disabled,
button:not(.excalidraw *):disabled:hover {
  opacity: 0.5;
  cursor: not-allowed;
  transform: none !important;
}

/* ============================================================================
   stx runtime components (injected by redesign.js)
   ============================================================================ */

/* ------------------------------------------------------------- toasts */

.stx-toast-stack {
  position: fixed;
  top: 18px;
  right: 18px;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: 10px;
  pointer-events: none;
  max-width: min(360px, calc(100vw - 36px));
}
.stx-toast {
  pointer-events: auto;
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px 16px;
  border-radius: 14px;
  border: 1px solid var(--color-border-primary);
  background: var(--color-bg-secondary);
  color: var(--color-text-primary);
  font-size: 13px;
  line-height: 1.5;
  box-shadow: var(--stx-shadow-pop);
  animation: stx-toast-in 220ms ease;
  transition: opacity 250ms ease, transform 250ms ease;
}
.stx-toast::before {
  content: "";
  flex: 0 0 auto;
  width: 8px;
  height: 8px;
  margin-top: 5px;
  border-radius: 50%;
  background: var(--color-accent);
}
.stx-toast--success::before { background: var(--color-success); }
.stx-toast--error::before { background: var(--color-error); }
.stx-toast--leaving {
  opacity: 0;
  transform: translateY(-6px);
}
@keyframes stx-toast-in {
  from { opacity: 0; transform: translateY(-8px) scale(0.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ------------------------------------------------------- template favorite */

[data-template-id] figure {
  position: relative;
}
.stx-fav-btn {
  position: absolute;
  top: 10px;
  right: 10px;
  z-index: 5;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: 999px;
  background: color-mix(in srgb, #0b0b10 38%, transparent);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  color: #ffffff;
  cursor: pointer;
  opacity: 0;
  transform: scale(0.9);
  transition: opacity var(--stx-fast), transform var(--stx-fast),
    background-color var(--stx-fast), color var(--stx-fast), border-color var(--stx-fast);
}
[data-template-id]:hover .stx-fav-btn,
.stx-fav-btn.is-fav,
.stx-fav-btn:focus-visible {
  opacity: 1;
  transform: scale(1);
}
.stx-fav-btn:hover {
  transform: scale(1.08) !important;
  background: color-mix(in srgb, #0b0b10 55%, transparent);
}
.stx-fav-btn svg {
  width: 16px;
  height: 16px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.stx-fav-btn.is-fav {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #ffffff;
}
.stx-fav-btn.is-fav svg {
  fill: currentColor;
}
.stx-fav-btn.stx-fav-pulse {
  animation: stx-fav-pop 320ms ease;
}
@keyframes stx-fav-pop {
  0% { transform: scale(1); }
  40% { transform: scale(1.28); }
  100% { transform: scale(1); }
}

/* favorites filter chip (sits inside .template-category-marquee) */
.stx-fav-chip.is-active {
  background-color: var(--color-accent) !important;
  border-color: var(--color-accent) !important;
  color: #ffffff !important;
}
/* favorites filter hides non-faved cards */
[data-testid="template-showcase-grid"].stx-fav-filter [data-template-id]:not(.stx-faved) {
  display: none !important;
}
.stx-fav-empty {
  margin: 24px auto 40px;
  max-width: 420px;
  padding: 28px 24px;
  border: 1px dashed var(--color-border-primary);
  border-radius: 18px;
  background: var(--color-bg-secondary);
  color: var(--color-text-secondary);
  text-align: center;
  font-size: 14px;
  line-height: 1.7;
}
.stx-fav-empty strong {
  display: block;
  margin-bottom: 4px;
  color: var(--color-text-primary);
  font-size: 15px;
}

/* -------------------------------------------- inspiration / welcome banner */

.stx-inspire {
  position: relative;
  margin: 14px auto 4px;
  max-width: 1800px;
  width: calc(100% - 32px);
  border: 1px solid var(--color-border-secondary);
  border-radius: 18px;
  background: linear-gradient(120deg, var(--stx-accent-softer), var(--color-bg-secondary) 55%);
  box-shadow: var(--stx-shadow-card);
  padding: 14px 18px;
  display: flex;
  align-items: center;
  gap: 16px;
  animation: stx-rise 260ms ease;
}
@media (min-width: 768px) {
  .stx-inspire { width: calc(100% - 64px); }
}
@keyframes stx-rise {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
.stx-inspire__body {
  min-width: 0;
  flex: 1 1 auto;
}
.stx-inspire__welcome {
  margin: 0 0 2px;
  font-size: 12px;
  color: var(--color-text-secondary);
}
.stx-inspire__title {
  margin: 0;
  font-size: 14px;
  font-weight: 650;
  color: var(--color-text-primary);
  display: flex;
  align-items: center;
  gap: 8px;
}
.stx-inspire__title .stx-inspire__spark {
  color: var(--color-accent);
}
.stx-inspire__prompt {
  margin: 3px 0 0;
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--color-text-secondary);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.stx-inspire__actions {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 8px;
}
.stx-inspire__btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 34px;
  padding: 0 14px;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--color-border-primary);
  background: var(--color-bg-primary);
  color: var(--color-text-primary);
  transition: background-color var(--stx-fast), color var(--stx-fast),
    border-color var(--stx-fast), transform var(--stx-fast);
}
.stx-inspire__btn:hover {
  background: var(--color-bg-tertiary);
  transform: translateY(-1px);
}
.stx-inspire__btn--primary {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #ffffff;
}
.stx-inspire__btn--primary:hover {
  background: var(--stx-accent-hover);
}
.stx-inspire__close {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: var(--color-text-tertiary);
  cursor: pointer;
  transition: background-color var(--stx-fast), color var(--stx-fast);
}
.stx-inspire__close:hover {
  background: var(--color-bg-tertiary);
  color: var(--color-text-primary);
}
@media (max-width: 640px) {
  .stx-inspire {
    flex-wrap: wrap;
    gap: 10px;
  }
  .stx-inspire__actions {
    width: 100%;
  }
}

/* --------------------------------------------------------- onboarding tasks */

.stx-checklist {
  position: fixed;
  right: 18px;
  bottom: 18px;
  z-index: 30;
  width: 300px;
  max-width: calc(100vw - 36px);
  border: 1px solid var(--color-border-primary);
  border-radius: 18px;
  background: var(--color-bg-secondary);
  box-shadow: var(--stx-shadow-pop);
  padding: 16px;
  animation: stx-rise 260ms ease;
  transition: opacity var(--stx-slow), transform var(--stx-slow);
}
@media (max-width: 767px) {
  .stx-checklist { bottom: 76px; }
}
.stx-checklist__head {
  display: flex;
  align-items: center;
  gap: 12px;
}
.stx-checklist__ring {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
}
.stx-checklist__ring circle {
  fill: none;
  stroke-width: 4;
}
.stx-checklist__ring .stx-checklist__ring-bg {
  stroke: var(--color-border-secondary);
}
.stx-checklist__ring .stx-checklist__ring-fg {
  stroke: var(--color-accent);
  stroke-linecap: round;
  transform: rotate(-90deg);
  transform-origin: center;
  transition: stroke-dashoffset 400ms ease;
}
.stx-checklist__ring text {
  fill: var(--color-text-primary);
  font-size: 10px;
  font-weight: 700;
}
.stx-checklist__title {
  margin: 0;
  font-size: 14px;
  font-weight: 650;
  color: var(--color-text-primary);
}
.stx-checklist__sub {
  margin: 2px 0 0;
  font-size: 11.5px;
  color: var(--color-text-tertiary);
}
.stx-checklist__list {
  list-style: none;
  margin: 12px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.stx-checklist__item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 10px;
  font-size: 12.5px;
  color: var(--color-text-primary);
  transition: background-color var(--stx-fast);
}
.stx-checklist__item--clickable {
  cursor: pointer;
}
.stx-checklist__item--clickable:hover {
  background: var(--color-bg-tertiary);
}
.stx-checklist__item--done {
  color: var(--color-text-tertiary);
  text-decoration: line-through;
  text-decoration-color: color-mix(in srgb, var(--color-text-tertiary) 55%, transparent);
}
.stx-checklist__tick {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1.5px solid var(--color-border-primary);
  color: transparent;
  font-size: 11px;
}
.stx-checklist__item--done .stx-checklist__tick {
  background: var(--color-success);
  border-color: var(--color-success);
  color: #ffffff;
}
.stx-checklist__cheer {
  margin: 12px 0 0;
  padding: 10px 12px;
  border-radius: 12px;
  background: var(--stx-accent-soft);
  color: var(--color-accent);
  font-size: 13px;
  font-weight: 600;
  text-align: center;
}
.stx-checklist__iconbtn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: var(--color-text-tertiary);
  cursor: pointer;
  transition: background-color var(--stx-fast), color var(--stx-fast);
}
.stx-checklist__iconbtn:hover {
  background: var(--color-bg-tertiary);
  color: var(--color-text-primary);
}
/* collapsed FAB */
.stx-checklist-fab {
  position: fixed;
  right: 18px;
  bottom: 18px;
  z-index: 30;
  width: 48px;
  height: 48px;
  border: 1px solid var(--color-border-primary);
  border-radius: 999px;
  background: var(--color-bg-secondary);
  color: var(--color-accent);
  font-size: 20px;
  cursor: pointer;
  box-shadow: var(--stx-shadow-pop);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: transform var(--stx-fast), background-color var(--stx-fast);
  animation: stx-rise 260ms ease;
}
@media (max-width: 767px) {
  .stx-checklist-fab { bottom: 76px; }
}
.stx-checklist-fab:hover {
  transform: scale(1.06);
  background: var(--color-bg-tertiary);
}

/* ------------------------------------------------------- chat empty suggest */

.stx-suggest-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
  margin-top: 20px;
  max-width: 560px;
  animation: stx-rise 260ms ease;
}
.stx-suggest-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 100%;
  padding: 8px 14px;
  border-radius: 999px;
  border: 1px solid var(--color-border-primary);
  background: var(--color-bg-secondary);
  color: var(--color-text-secondary);
  font-size: 12.5px;
  line-height: 1.4;
  cursor: pointer;
  transition: border-color var(--stx-fast), color var(--stx-fast),
    background-color var(--stx-fast), transform var(--stx-fast);
}
.stx-suggest-chip:hover {
  border-color: var(--color-accent);
  color: var(--color-accent);
  background: var(--stx-accent-softer);
  transform: translateY(-1px);
}

/* ------------------------------------------------------------- misc states */

.stx-hidden {
  display: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .stx-toast,
  .stx-inspire,
  .stx-checklist,
  .stx-checklist-fab,
  .stx-suggest-row,
  [data-template-id] figure,
  .grid.xl\:grid-cols-4 > .group.overflow-hidden img {
    animation: none !important;
    transition: none !important;
  }
}

/* ============================================================================
   首页「分类浏览」：左分类 + 右瀑布流
   分类原本是顶部一条横向跑马灯，要找某一类得横向翻。切到分类浏览后，
   整个画廊变成两栏：左边是搜索 + 竖排分类，右边是瀑布流本身。
   ============================================================================ */

[data-stx-layout="compact"] {
  display: grid;
  grid-template-columns: 236px minmax(0, 1fr);
  align-items: start;
}

/* 左栏：搜索 + 分类，自己吸顶滚动 */
[data-stx-layout="compact"] > [data-testid="template-sticky-nav"] {
  grid-column: 1;
  position: sticky;
  top: 0;
  max-height: 100vh;
  overflow-y: auto;
  padding: 14px 12px 20px;
  border-bottom: 0 !important;
  border-right: 1px solid var(--color-border-secondary);
}
/* 拆掉顶部那套两列栅格，改成上下堆叠 */
[data-stx-layout="compact"] > [data-testid="template-sticky-nav"] > div {
  display: block !important;
  max-width: none !important;
}
[data-stx-layout="compact"] [data-testid="template-search-input"] {
  height: 40px !important;
  font-size: 13px;
}

/* 分类：横向跑马灯 → 竖排列表 */
[data-stx-layout="compact"] [data-testid="template-category-nav"] {
  overflow: visible !important;
  margin-top: 12px;
  padding-bottom: 0 !important;
}
[data-stx-layout="compact"] .template-category-marquee {
  display: block !important;
  width: auto !important;
  padding-right: 0 !important;
}
/* 跑马灯是同一组分类渲染两遍做无缝滚动，竖排时只留一份 */
[data-stx-layout="compact"] .template-category-marquee > [aria-hidden="true"] {
  display: none !important;
}
[data-stx-layout="compact"] .template-category-marquee > div {
  display: flex !important;
  flex-direction: column;
  align-items: stretch !important;
  gap: 3px;
  width: auto !important;
  padding-right: 0 !important;
  grid-auto-flow: row !important;
}
[data-stx-layout="compact"] .template-category-marquee button {
  width: 100%;
  justify-content: flex-start;
  text-align: left;
  border-radius: 9px !important;
  padding-top: 7px !important;
  padding-bottom: 7px !important;
  font-size: 12px;
}
/* 「新建」CTA 在竖排里单独拉开一点 */
[data-stx-layout="compact"] [data-testid="apps-start-creating"] {
  margin-top: 10px;
}

/* 右栏：瀑布流本体 */
[data-stx-layout="compact"] > section:last-of-type {
  grid-column: 2;
  padding-top: 14px !important;
  padding-bottom: 40px !important;
}

/* 窄栏里少放几列，卡片才不会挤 */
[data-stx-density="compact"] {
  columns: 2;
  column-gap: 14px;
}
@media (min-width: 1280px) {
  [data-stx-density="compact"] {
    columns: 3;
  }
}
@media (min-width: 1800px) {
  [data-stx-density="compact"] {
    columns: 4;
  }
}

@media (max-width: 900px) {
  [data-stx-layout="compact"] {
    grid-template-columns: minmax(0, 1fr);
  }
  [data-stx-layout="compact"] > [data-testid="template-sticky-nav"] {
    position: static;
    max-height: none;
    border-right: 0;
    border-bottom: 1px solid var(--color-border-secondary) !important;
  }
  [data-stx-layout="compact"] .template-category-marquee > div {
    flex-direction: row;
    flex-wrap: wrap;
  }
  [data-stx-layout="compact"] .template-category-marquee button {
    width: auto;
  }
  [data-stx-layout="compact"] > section:last-of-type {
    grid-column: 1;
  }
  [data-stx-density="compact"] {
    columns: 2;
  }
}

/* ============================================================================
   分类浏览 v2
   1) 跑马灯的横向滚动动画（基础样式里的 42s linear infinite）在竖排下
      仍在跑，所以列表一直在飘、左边还被切掉。这里彻底停掉。
   2) 之前每个分类都是一模一样的胶囊，二十多个堆在一起没有任何层级，
      只有选中项是紫色。改成真正的导航列表：分区标题、左侧指示条、
      悬停与选中状态分明。
   ============================================================================ */

/* ---------- 1. 停止流动 ---------- */

[data-stx-layout="compact"] .template-category-marquee,
[data-stx-layout="compact"] .template-category-marquee > * {
  animation: none !important;
  transform: none !important;
  transition: none !important;
}

/* ---------- 2. 列表层级 ---------- */

[data-stx-layout="compact"] [data-testid="template-category-nav"] {
  margin-top: 14px;
}
/* 分区标题 */
[data-stx-layout="compact"] [data-testid="template-category-nav"]::before {
  content: "分类";
  display: block;
  padding: 0 10px 6px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-text-tertiary);
}

[data-stx-layout="compact"] .template-category-marquee > div {
  gap: 1px;
}

/* 分类项：行式导航，不再是胶囊 */
[data-stx-layout="compact"] .template-category-marquee button {
  position: relative;
  width: 100%;
  justify-content: flex-start;
  text-align: left;
  border: 0 !important;
  border-radius: 8px !important;
  background: transparent !important;
  color: var(--color-text-secondary) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  padding: 8px 10px 8px 22px !important;
  box-shadow: none !important;
  transition: background-color var(--stx-fast), color var(--stx-fast) !important;
}
/* 左侧指示条：默认透明，悬停变淡，选中变实 */
[data-stx-layout="compact"] .template-category-marquee button::before {
  content: "";
  position: absolute;
  left: 8px;
  top: 50%;
  transform: translateY(-50%);
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--color-text-tertiary);
  opacity: 0.35;
  transition: all var(--stx-fast);
}
[data-stx-layout="compact"] .template-category-marquee button:hover {
  background: var(--color-bg-tertiary) !important;
  color: var(--color-text-primary) !important;
}
[data-stx-layout="compact"] .template-category-marquee button:hover::before {
  opacity: 0.7;
}

/* 选中：淡色底 + 强调色文字 + 左侧竖条（不再是整块紫色） */
[data-stx-layout="compact"] .template-category-marquee button.bg-sky-100,
[data-stx-layout="compact"] .template-category-marquee button.bg-cyan-200 {
  background: var(--stx-accent-soft) !important;
  color: var(--color-accent) !important;
  font-weight: 650 !important;
}
[data-stx-layout="compact"] .template-category-marquee button.bg-sky-100::before,
[data-stx-layout="compact"] .template-category-marquee button.bg-cyan-200::before {
  width: 3px;
  height: 16px;
  border-radius: 999px;
  background: var(--color-accent);
  opacity: 1;
}

/* 「全部」单独成一组，和具体分类之间留一条分隔 */
[data-stx-layout="compact"] .template-category-marquee > div > button:first-child {
  font-weight: 650 !important;
  margin-bottom: 4px;
  padding-bottom: 10px !important;
  border-bottom: 1px solid var(--color-border-secondary) !important;
  border-radius: 0 !important;
}

/* 「仅参考图」「已收藏」这类筛选和分类不是一回事，压到底部并区分开 */
[data-stx-layout="compact"] [data-testid="template-reference-toggle"] {
  margin-top: 10px;
  border-top: 1px solid var(--color-border-secondary) !important;
  border-radius: 0 !important;
  padding-top: 10px !important;
}
[data-stx-layout="compact"] .stx-fav-chip {
  width: 100%;
  justify-content: flex-start;
  text-align: left;
}

/* 新建按钮回到实心强调色，和分类明确区分 */
[data-stx-layout="compact"] [data-testid="apps-start-creating"] {
  width: 100%;
  justify-content: center;
  margin-top: 12px;
  padding: 9px 14px !important;
  border-radius: 10px !important;
}

/* 计数与视图切换：靠左对齐，别浮在中间 */
[data-stx-layout="compact"] [data-stx="tpl-toolbar"] {
  flex-wrap: wrap;
  gap: 6px;
}
[data-stx-layout="compact"] [data-stx="tpl-count"] {
  width: 100%;
  margin-right: 0;
}

/* ---------------- 参考图：独立成条，不再挤在工具栏里 ----------------
   之前上传按钮和已选参考图在同一行 flex 里，一旦带图，工具栏就被文件名
   和 ✕ 撑得很乱。现在按钮留在工具栏，缩略图单独一条放在输入框上方。 */

[data-stx="ref-strip"]:empty {
  display: none;
}
[data-stx="ref-strip"] {
  gap: 8px;
}
[data-stx="ref-chip"] {
  position: relative;
  width: 56px;
  height: 56px;
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid var(--color-border-primary);
  background: var(--color-bg-secondary);
  flex-shrink: 0;
}
[data-stx="ref-chip"] img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* 删除按钮浮在缩略图角上，不占横向空间 */
[data-stx="ref-chip-x"] {
  position: absolute;
  top: 2px;
  right: 2px;
  width: 18px;
  height: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 999px;
  background: rgba(15, 13, 10, 0.62);
  color: #fff;
  cursor: pointer;
  opacity: 0;
  transition: opacity 140ms ease;
  backdrop-filter: blur(4px);
}
[data-stx="ref-chip"]:hover [data-stx="ref-chip-x"],
[data-stx="ref-chip-x"]:focus-visible {
  opacity: 1;
}
/* 触屏没有 hover，常驻显示 */
@media (hover: none) {
  [data-stx="ref-chip-x"] {
    opacity: 1;
  }
}
