/* ==========================================================================
   SEATTLEKR SOCIAL NEWS
   Feed cards (.skr-feed-card), single-post engagement bar (.skr-engage),
   and social comment thread (.skr-cx__*).
   Depends on msw-joongang-style for --joongang-* tokens.
   BEM: .skr-feed-card, .skr-engage, .skr-cx
   ========================================================================== */

/* -------------------------------------------------------------------------
 * 0. Shared reset
 * ---------------------------------------------------------------------- */
.skr-feed-card *,
.skr-feed-card *::before,
.skr-feed-card *::after,
.skr-engage *,
.skr-engage *::before,
.skr-engage *::after,
.skr-cx *,
.skr-cx *::before,
.skr-cx *::after {
  box-sizing: border-box;
}

/* -------------------------------------------------------------------------
 * 1. Feed layout — single-column, responsive widths (NFR-2)
 * ---------------------------------------------------------------------- */

/* Feed wrapper produced by template-news-list.php */
.skr-feed {
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: 0;
  width: 100%;
}

/* ≤767px: full-width, 16px side padding comes from .skr-nf__wrap */
@media (min-width: 768px) {
  .skr-feed {
    max-width: 640px;
    margin-left: auto;
    margin-right: auto;
  }
}

@media (min-width: 1280px) {
  .skr-feed {
    max-width: 720px;
  }
}

/* 새 기사 divider — injected by social-infinite.js on page 1 before the
 * first card the visitor already saw on their previous visit. Vertical
 * rhythm comes from the feed's 16px column gap; no margins needed. */
.skr-feed-divider {
  display: flex;
  align-items: center;
  gap: 12px;
}

.skr-feed-divider::before,
.skr-feed-divider::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--joongang-accent, #2563eb);
  opacity: 0.3;
}

.skr-feed-divider__chip {
  flex: none;
  padding: 4px 12px;
  border: 1px solid var(--joongang-accent, #2563eb);
  border-radius: 999px;
  background: var(--joongang-accent-soft, #eaf1ff);
  color: var(--joongang-accent, #2563eb);
  font-size: 0.78rem;
  font-weight: 700;
  line-height: 1.4;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
}

/* -------------------------------------------------------------------------
 * 2. Feed card (.skr-feed-card)
 * ---------------------------------------------------------------------- */
.skr-feed-card {
  background: var(--joongang-bg, #fff);
  border: 1px solid var(--joongang-border, #e3e9f2);
  border-radius: 12px;
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: box-shadow 0.18s ease, transform 0.18s ease;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  color: var(--joongang-text, #1f2937);
}

.skr-feed-card:hover {
  box-shadow: 0 4px 18px rgba(37, 99, 235, 0.10);
}

/* Hover lift — hover-capable fine pointers only, so touch scrolling never
   leaves a card stuck mid-lift. Safe with the share popover: it's appended
   to <body>, outside the transformed card's stacking context. */
@media (hover: hover) and (pointer: fine) {
  .skr-feed-card:hover {
    transform: translateY(-2px);
  }
}

/* Breaking emphasis */
.skr-feed-card--breaking {
  border-color: #f5c2c2;
  background: #fff5f5;
}

/* Lead (first item page 1) */
.skr-feed-card--lead {
  border-color: var(--joongang-border-dark, #c7d2e6);
}

/* Category chip */
.skr-feed-card__chip {
  display: inline-block;
  font-size: 0.7rem;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: 6px;
  background: var(--joongang-accent-soft, #eaf1ff);
  color: var(--joongang-accent, #2563eb);
  border: 1px solid #cfe0ff;
  align-self: flex-start;
  line-height: 1.5;
}

.skr-feed-card__chip.is-immig {
  background: #eafaf0;
  color: #0f8a45;
  border-color: #bde7cd;
}

.skr-feed-card__chip.is-breaking {
  background: var(--joongang-breaking, #dc2626);
  color: #fff;
  border-color: var(--joongang-breaking, #dc2626);
}

.skr-feed-card__chip.is-weather {
  background: #eff6ff;
  color: #1d4ed8;
  border-color: #bfdbfe;
}

.skr-feed-card__chip.is-traffic,
.skr-feed-card__chip.is-ferry {
  background: #f5f3ff;
  color: #6d28d9;
  border-color: #ddd6fe;
}

/* Linkable topic chip → category archive. Keeps each variant's colors; the
   hover just deepens the fill so it reads as tappable. */
a.skr-feed-card__chip--link { text-decoration: none; transition: filter .12s ease; }
a.skr-feed-card__chip--link:hover,
a.skr-feed-card__chip--link:focus-visible { filter: brightness(0.94); text-decoration: none; }

/* Headline */
.skr-feed-card__title {
  font-size: 1.1rem;
  font-weight: 800;
  line-height: 1.4;
  letter-spacing: -0.3px;
  margin: 0;
  color: var(--joongang-primary, #0f1f44);
}

.skr-feed-card__title a {
  color: inherit;
  text-decoration: none;
}

.skr-feed-card__title a:hover {
  color: var(--joongang-accent, #2563eb);
}

.skr-feed-card__title a:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
  border-radius: 2px;
}

.skr-feed-card--breaking .skr-feed-card__title,
.skr-feed-card--lead .skr-feed-card__title {
  font-size: 1.3rem;
}

/* 16:9 media */
.skr-feed-card__media {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: 8px;
  overflow: hidden;
  background: var(--joongang-bg-section, #eef3fb);
}

.skr-feed-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.32s ease;
}

.skr-feed-card__media:hover img {
  transform: scale(1.04);
}

.skr-feed-card__media:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

/* Skeleton cards — shimmer placeholders social-infinite.js appends while
   the next feed page is fetching. Spans ride the card's flex column gap;
   the wave stops (static tint) under prefers-reduced-motion. */
.skr-feed-card--skeleton {
  pointer-events: none;
}

.skr-skel {
  display: block;
  border-radius: 6px;
  background: linear-gradient(90deg, #edf0f4 25%, #f7f9fb 45%, #edf0f4 65%);
  background-size: 400% 100%;
  animation: skr-skel-wave 1.4s ease-in-out infinite;
}

.skr-skel--chip {
  width: 64px;
  height: 22px;
  border-radius: 999px;
}

.skr-skel--title {
  height: 20px;
}

.skr-skel--media {
  aspect-ratio: 16 / 9;
  border-radius: 8px;
}

.skr-skel--line {
  height: 13px;
}

.skr-skel--byline {
  width: 40%;
  height: 13px;
}

.skr-skel--short {
  width: 62%;
}

@keyframes skr-skel-wave {
  0% {
    background-position: 100% 0;
  }
  100% {
    background-position: 0 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .skr-skel {
    animation: none;
  }
}

/* Excerpt — 3-line clamp */
.skr-feed-card__excerpt {
  font-size: 0.9rem;
  color: var(--joongang-text-tertiary, #6b7280);
  line-height: 1.6;
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Byline */
.skr-feed-card__byline {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  font-size: 0.8rem;
  color: var(--joongang-text-tertiary, #6b7280);
}

.skr-feed-card__sep {
  color: var(--joongang-border-dark, #c7d2e6);
}

/* Author name links to the author archive (author.php). Inherits the byline
   color; underlines on hover/focus so the rest of the byline stays quiet. */
a.skr-feed-card__author {
  color: inherit;
  text-decoration: none;
  font-weight: 600;
}
a.skr-feed-card__author:hover,
a.skr-feed-card__author:focus-visible {
  color: var(--joongang-accent, #2563eb);
  text-decoration: underline;
}

/* 읽음 (already-read) state — social-share.js §12 adds .is-read to cards whose
   post id is in localStorage.skrRecentViewed (written by single.php on open).
   Visited-link language: muted title + faded thumb + a trailing 읽음 pill, so a
   feed reader sees at a glance what they've been through. Purely client-side. */
.skr-feed-card.is-read .skr-feed-card__title a {
  color: var(--joongang-text-tertiary, #6b7280);
}
.skr-feed-card.is-read .skr-feed-card__title a:hover {
  color: var(--joongang-accent, #2563eb);
}
.skr-feed-card.is-read .skr-feed-card__media img {
  opacity: 0.62;
}
.skr-feed-card__readmark {
  display: inline-flex;
  align-items: center;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--joongang-bg-section, #eef3fb);
  color: var(--joongang-text-tertiary, #6b7280);
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1.5;
}

/* 내 댓글 (you-commented) state — social-share.js §13 adds .is-commented to
   cards whose post id is in localStorage.skrCommented (written by
   social-comment.js on a successful submit). A stronger participation signal
   than 읽음, so it takes the accent color and replaces the 읽음 pill. */
.skr-feed-card__cmtmark {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--joongang-accent-soft, #eaf1ff);
  color: var(--joongang-accent, #2563eb);
  font-size: 0.72rem;
  font-weight: 800;
  line-height: 1.5;
}
.skr-feed-card__cmtmark svg {
  width: 11px;
  height: 11px;
}

/* Compact byline avatar (24px) — mirrors the comment avatar's hue language.
   .no-avatar (server or JS-added) swaps the img for the initial circle. */
.skr-feed-card__avatar {
  flex-shrink: 0;
  position: relative;
  width: 24px;
  height: 24px;
}

.skr-feed-card__avatar-img {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}

.skr-feed-card__initial {
  display: none;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--joongang-accent, #2563eb);
  color: #fff;
  font-size: 0.72rem;
  font-weight: 700;
  align-items: center;
  justify-content: center;
  position: absolute;
  inset: 0;
}

.skr-feed-card__avatar.skr-av-h1 .skr-feed-card__initial { background: #7c3aed; }
.skr-feed-card__avatar.skr-av-h2 .skr-feed-card__initial { background: #0d9488; }
.skr-feed-card__avatar.skr-av-h3 .skr-feed-card__initial { background: #b45309; }
.skr-feed-card__avatar.skr-av-h4 .skr-feed-card__initial { background: #db2777; }
.skr-feed-card__avatar.skr-av-h5 .skr-feed-card__initial { background: #059669; }
.skr-feed-card__avatar.skr-av-h6 .skr-feed-card__initial { background: #4f46e5; }
.skr-feed-card__avatar.skr-av-h7 .skr-feed-card__initial { background: #0891b2; }

.skr-feed-card__avatar.no-avatar .skr-feed-card__avatar-img {
  display: none;
}

.skr-feed-card__avatar.no-avatar .skr-feed-card__initial {
  display: flex;
}

/* Reading-time chip never breaks mid-phrase ("3분 읽기"). */
.skr-feed-card__read {
  white-space: nowrap;
}

/* Engagement bar on card — wraps as a safety net on very narrow phones. */
.skr-feed-card__engage {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding-top: 4px;
  border-top: 1px solid var(--joongang-border, #e3e9f2);
  margin-top: 2px;
}

/* Like count on cards. Base rule covers both variants: the read-only
   span (surfaces without the like_toggle arg) and the live button
   (news list / bookmarks) — only the button gets cursor/hover below. */
.skr-feed-card__like {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-height: 44px;
  padding: 8px 10px;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* Live 공감 toggle variant — element-qualified so the read-only span
   never advertises interactivity it doesn't have. */
button.skr-feed-card__like {
  background: none;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  transition: color 0.15s, background 0.15s, transform 0.12s ease;
  font-family: inherit;
}

button.skr-feed-card__like:hover {
  color: var(--joongang-accent, #2563eb);
  background: var(--joongang-accent-soft, #eaf1ff);
}

button.skr-feed-card__like:active {
  transform: scale(0.96);
}

button.skr-feed-card__like:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

.skr-feed-card__cmt,
.skr-feed-card__share,
.skr-feed-card__bm {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-height: 44px;
  padding: 8px 10px;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
  background: none;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  text-decoration: none;
  transition: color 0.15s, background 0.15s, transform 0.12s ease;
  font-family: inherit;
}

.skr-feed-card__cmt:hover,
.skr-feed-card__share:hover,
.skr-feed-card__bm:hover {
  color: var(--joongang-accent, #2563eb);
  background: var(--joongang-accent-soft, #eaf1ff);
}

.skr-feed-card__cmt:active,
.skr-feed-card__share:active,
.skr-feed-card__bm:active {
  transform: scale(0.96);
}

.skr-feed-card__cmt:focus-visible,
.skr-feed-card__share:focus-visible,
.skr-feed-card__bm:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

/* Read-only view count, pushed to the right edge of the engage row. */
.skr-feed-card__views {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-left: auto;
  padding: 8px 0 8px 10px;
  font-size: 0.82rem;
  font-weight: 500;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* Labels never wrap inside a control — the row wraps instead. */
.skr-feed-card__like,
.skr-feed-card__cmt,
.skr-feed-card__share,
.skr-feed-card__bm,
.skr-feed-card__views {
  white-space: nowrap;
}

/* Compact card engage row on narrow phones: 공유/북마크 go icon-only
   (mirrors the ≤480px single-post .skr-engage pattern; aria-labels and
   all counts stay). */
@media (max-width: 480px) {
  .skr-feed-card__engage {
    gap: 6px;
  }

  .skr-feed-card__share span,
  .skr-feed-card__bm span {
    display: none;
  }
}

/* Card bookmark toggle (bookmarks page): active = accent + filled icon. */
.skr-feed-card__bm.is-bookmarked {
  color: var(--joongang-accent, #2563eb);
}

.skr-feed-card__bm.is-bookmarked svg {
  fill: currentColor;
}

/* Card like toggle: liked = accent + filled heart (card-flat, no chip
   background — mirrors the card bookmark, not the engage-bar chip). */
.skr-feed-card__like.is-liked {
  color: var(--joongang-accent, #2563eb);
}

.skr-feed-card__like.is-liked svg {
  fill: currentColor;
}

/* Un-bookmarked card dims in place — undoable until reload. */
.skr-feed-card.is-unbookmarked {
  opacity: 0.45;
  transition: opacity 0.15s;
}

/* -------------------------------------------------------------------------
 * 3. Single-post engagement bar (.skr-engage)
 * ---------------------------------------------------------------------- */
.skr-engage {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding: 10px 0 14px;
  border-bottom: 1px solid var(--joongang-border, #e3e9f2);
  margin-bottom: 20px;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
}

.skr-engage__like,
.skr-engage__cmt,
.skr-engage__share,
.skr-engage__bm {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  min-height: 44px;
  padding: 8px 14px;
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--joongang-text-secondary, #4b5563);
  background: var(--joongang-bg-section, #eef3fb);
  border: 1px solid var(--joongang-border, #e3e9f2);
  border-radius: 8px;
  cursor: pointer;
  text-decoration: none;
  transition: color 0.15s, background 0.15s, border-color 0.15s, transform 0.12s ease;
  font-family: inherit;
}

.skr-engage__like:hover,
.skr-engage__cmt:hover,
.skr-engage__share:hover,
.skr-engage__bm:hover {
  color: var(--joongang-accent, #2563eb);
  background: var(--joongang-accent-soft, #eaf1ff);
  border-color: var(--joongang-accent, #2563eb);
}

.skr-engage__like:active,
.skr-engage__cmt:active,
.skr-engage__share:active,
.skr-engage__bm:active {
  transform: scale(0.96);
}

.skr-engage__like:focus-visible,
.skr-engage__cmt:focus-visible,
.skr-engage__share:focus-visible,
.skr-engage__bm:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

/* Liked state — accent text + filled heart. */
.skr-engage__like.is-liked {
  color: var(--joongang-accent, #2563eb);
  border-color: var(--joongang-accent, #2563eb);
  background: var(--joongang-accent-soft, #eaf1ff);
}

.skr-engage__like.is-liked svg {
  fill: currentColor;
}

/* Bookmarked state — accent text + filled bookmark. */
.skr-engage__bm.is-bookmarked {
  color: var(--joongang-accent, #2563eb);
  border-color: var(--joongang-accent, #2563eb);
  background: var(--joongang-accent-soft, #eaf1ff);
}

.skr-engage__bm.is-bookmarked svg {
  fill: currentColor;
}

/* One-shot pop on like/bookmark toggle-ON. social-like.js re-adds .skr-pop
   (remove → force reflow → add) on every fill so the same animation instance
   restarts; server-rendered .is-liked/.is-bookmarked never pop on page load
   because the class only ever comes from that JS path. */
@keyframes skr-pop {
  0%   { transform: scale(1); }
  40%  { transform: scale(1.35); }
  70%  { transform: scale(0.9); }
  100% { transform: scale(1); }
}

.skr-engage__like.skr-pop svg,
.skr-engage__bm.skr-pop svg,
.skr-feed-card__bm.skr-pop svg,
.skr-feed-card__like.skr-pop svg {
  animation: skr-pop 0.35s ease;
}

.skr-cx__like.skr-pop .skr-cx__like-n {
  display: inline-block;
  animation: skr-pop 0.35s ease;
}

/* In-flight (fetch pending) — brief, prevents double-fire. */
.skr-engage__like:disabled,
.skr-engage__bm:disabled {
  opacity: 0.65;
  cursor: default;
}

/* Read-only view count on the single-post engage bar. */
.skr-engage__views {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  margin-left: auto;
  font-size: 0.85rem;
  font-weight: 500;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* Compact engage bar on narrow phones so all items fit on one line. */
@media (max-width: 480px) {
  .skr-engage {
    gap: 5px;
  }

  .skr-engage__like,
  .skr-engage__cmt,
  .skr-engage__share,
  .skr-engage__bm {
    gap: 5px;
    padding: 8px;
    font-size: 0.82rem;
  }

  .skr-engage__views {
    font-size: 0.8rem;
  }

  /* Icon + count only (Twitter-style): every control keeps its aria-label. */
  .skr-engage__t,
  .skr-engage__views-label,
  .skr-engage__bm-label {
    display: none;
  }
}

/* Sticky floating engage bar on mobile (<768px — where .nav-bottom shows).
   sticky keeps the bar in flow: it floats above the bottom tab bar while
   the article is read, then docks into its natural spot before the
   comments. z-index sits below .nav-bottom (1000) and the newsletter CTA
   (9990). */
@media (max-width: 767px) {
  .skr-engage {
    position: sticky;
    bottom: calc(64px + env(safe-area-inset-bottom, 0px) + 10px);
    z-index: 90;
    background: var(--joongang-bg, #fff);
    border: 1px solid var(--joongang-border, #e3e9f2);
    border-radius: 14px;
    padding: 8px;
    box-shadow: 0 4px 18px rgba(15, 31, 68, 0.14);
  }

  /* While the dismissible newsletter CTA holds the same spot, keep the bar
     inline. It toggles via the [hidden] attribute; browsers without :has()
     just show the CTA overlapping the floating bar until dismissed. */
  body:has(.msw-sticky-cta:not([hidden])) .skr-engage {
    position: static;
  }
}

/* Landscape phones — .nav-bottom compacts to 48px. */
@media (max-width: 767px) and (max-height: 600px) and (orientation: landscape) {
  .skr-engage {
    bottom: calc(48px + env(safe-area-inset-bottom, 0px) + 10px);
  }
}

/* -------------------------------------------------------------------------
 * 4. Comment thread (.skr-cx)
 * ---------------------------------------------------------------------- */
.skr-cx {
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  color: var(--joongang-text, #1f2937);
  margin-top: 32px;
}

/* Title row: h2 + logged-in 내 댓글 shortcut (iter. 53). The pending banner
 * inserts after this row, never inside the flex container. */
.skr-cx__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin: 0 0 16px;
}

.skr-cx__title {
  font-size: 1.15rem;
  font-weight: 800;
  color: var(--joongang-primary, #0f1f44);
  margin: 0 0 16px;
  display: flex;
  align-items: center;
  gap: 8px;
}

.skr-cx__head .skr-cx__title {
  margin-bottom: 0;
}

.skr-cx__count {
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* Scoped .skr-cx .skr-cx__mine past single.php's content-link rules
 * (iter-17 precedent). */
.skr-cx .skr-cx__mine {
  flex: none;
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--joongang-accent, #2563eb);
  text-decoration: none;
  white-space: nowrap;
}

.skr-cx .skr-cx__mine:hover,
.skr-cx .skr-cx__mine:focus {
  color: #1d4ed8;
  text-decoration: underline;
}

.skr-cx .skr-cx__mine:focus-visible {
  outline: 2px solid var(--joongang-primary, #0f1f44);
  outline-offset: 2px;
}

/* --- 베스트 댓글 strip (iter. 55) ----------------------------------- */

.skr-cx__best {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin: 0 0 14px;
}

/* Double-class scoping past single.php's content-link rules (iter-17
 * precedent — these excerpt cards are <a> elements inside the article). */
.skr-cx .skr-cx__best-item {
  display: block;
  padding: 11px 14px;
  background: var(--joongang-accent-soft, #eaf1ff);
  border: 1px solid transparent;
  border-left: 3px solid var(--joongang-accent, #2563eb);
  border-radius: 10px;
  color: inherit;
  text-decoration: none;
}

.skr-cx .skr-cx__best-item:hover,
.skr-cx .skr-cx__best-item:focus {
  border-color: var(--joongang-accent, #2563eb);
  color: inherit;
  text-decoration: none;
}

.skr-cx .skr-cx__best-item:focus-visible {
  outline: 2px solid var(--joongang-primary, #0f1f44);
  outline-offset: 2px;
}

.skr-cx__best-top {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
}

.skr-cx__best-badge {
  flex: none;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--joongang-accent, #2563eb);
  color: #fff;
  font-size: 0.66rem;
  font-weight: 800;
  letter-spacing: 0.4px;
}

.skr-cx__best-author {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--joongang-primary, #0f1f44);
}

.skr-cx__best-likes {
  flex: none;
  margin-left: auto;
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--joongang-accent, #2563eb);
}

.skr-cx__best-text {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  font-size: 0.9rem;
  line-height: 1.5;
  color: var(--joongang-text-secondary, #4b5563);
}

/* AJAX submit error box */
.skr-cx__error {
  background: #fef2f2;
  border: 1px solid #fecaca;
  border-radius: 8px;
  padding: 10px 14px;
  font-size: 0.87rem;
  color: #b91c1c;
  margin: 0 0 12px;
}

/* Own-pending banner */
.skr-cx__pending {
  background: #fffbeb;
  border: 1px solid #fcd34d;
  border-radius: 8px;
  padding: 10px 14px;
  font-size: 0.87rem;
  color: #92400e;
  margin-bottom: 16px;
}

/* Comment list */
/* Sort control (JS-injected by social-comment.js when ≥2 top-level comments). */
.skr-cx__sort {
  display: flex;
  gap: 6px;
  margin: 0 0 12px;
}

.skr-cx__sort-btn {
  min-height: 40px;
  padding: 6px 16px;
  font-family: inherit;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
  background: none;
  border: 1px solid transparent;
  border-radius: 999px;
  cursor: pointer;
  transition: color 0.15s, background 0.15s, border-color 0.15s;
}

.skr-cx__sort-btn:hover {
  color: var(--joongang-accent, #2563eb);
  background: none;
}

/* :hover/:focus/:active palette pins (here and on the other comment-UI
   buttons): GeneratePress's customizer inline CSS paints button:hover,
   button:focus and button:active white-on-black site-wide; these keep
   each button's own palette — hover pins must set background too, a
   color-only pin leaves GP's dark background showing through. The
   :focus-visible rules still draw the keyboard ring. */
.skr-cx__sort-btn:focus,
.skr-cx__sort-btn:active {
  color: var(--joongang-accent, #2563eb);
  background: none;
}

.skr-cx__sort-btn:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

.skr-cx__sort-btn.is-active {
  color: var(--joongang-accent, #2563eb);
  background: var(--joongang-accent-soft, #eaf1ff);
  border-color: var(--joongang-accent, #2563eb);
}

.skr-cx__list {
  list-style: none;
  margin: 0 0 24px;
  padding: 0;
}

/* Single comment item.
   flex-wrap + full-width .children: the walker nests the replies <ol>
   INSIDE this flex li — without wrapping it becomes a third column and
   crushes the content (1-char-per-line at 375px). */
.skr-cx__c {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  padding: 14px 0;
  border-bottom: 1px solid var(--joongang-border, #e3e9f2);
}

.skr-cx__c:last-child {
  border-bottom: none;
}

/* Threaded children indent — full row below the parent comment */
.skr-cx__list .children {
  list-style: none;
  flex-basis: 100%;
  min-width: 0;
  padding-left: 52px;
  margin: 0;
  position: relative;
}

/* Thread connector — vertical guide from the parent comment down its
   replies. left 21px centers the 2px line under the 44px avatar (the
   ol's left edge aligns with the avatar's at every depth). top -12px
   bridges the flex row gap up to the parent row's bottom edge. */
.skr-cx__list .children::before {
  content: '';
  position: absolute;
  top: -12px;
  bottom: 6px;
  left: 21px;
  width: 2px;
  border-radius: 1px;
  background: var(--joongang-border, #e3e9f2);
  pointer-events: none;
}

@media (max-width: 767px) {
  .skr-cx__list .children {
    padding-left: 28px;
  }
}

/* Reply folding — social-comment.js collapses reply groups of ≥2 behind
   a "답글 N개 보기" toggle it injects before the ol. */
.skr-cx__list ol.children.is-folded {
  display: none;
}

/* The toggle is a flex item inside the parent li: flex-basis 100% gives
   it its own row; margin-left matches the replies' indent so the dash
   sits where the fold begins. Double-class scope + explicit background
   pins beat GP's white-on-black button:hover/:focus/:active paint. */
.skr-cx .skr-cx__fold {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-basis: 100%;
  min-height: 32px;
  margin: 2px 0 0 52px;
  padding: 4px 0;
  font-family: inherit;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
  background: none;
  border: 0;
  cursor: pointer;
  transition: color 0.15s;
}

.skr-cx .skr-cx__fold::before {
  content: '';
  width: 24px;
  height: 1px;
  background: var(--joongang-border-dark, #c7d2e6);
}

.skr-cx .skr-cx__fold:hover,
.skr-cx .skr-cx__fold:focus,
.skr-cx .skr-cx__fold:active {
  color: var(--joongang-accent, #2563eb);
  background: none;
}

.skr-cx .skr-cx__fold:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

@media (max-width: 767px) {
  .skr-cx .skr-cx__fold {
    margin-left: 28px;
  }
}

/* Depth 2 */
.skr-cx__list .depth-2 {
  background: var(--joongang-bg-section, #eef3fb);
  border-radius: 8px;
  padding: 10px 12px;
  margin: 6px 0;
  border-bottom: none;
}

/* Depth 3 */
.skr-cx__list .depth-3 {
  background: #f8fafc;
  border-radius: 8px;
  padding: 10px 12px;
  margin: 6px 0;
  border-bottom: none;
}

/* Deep-link / just-posted flash — answers "where did my comment land?"
   after an AJAX insert (the active sort can move it) and marks the
   target of a #comment-N permalink (:target also covers the no-JS
   redirect). Tints the comment's own __content block, NOT the li:
   nested .children live inside the li and would inherit the tint. */
@keyframes skr-cx-flash {
  0%, 40% { background-color: rgba(37, 99, 235, 0.13); }
  100%    { background-color: transparent; }
}

.skr-cx__c:target > .skr-cx__content,
.skr-cx__c.is-flashed > .skr-cx__content {
  border-radius: 8px;
  animation: skr-cx-flash 2.4s ease-out 1;
}

@media (prefers-reduced-motion: reduce) {
  .skr-cx__c:target > .skr-cx__content,
  .skr-cx__c.is-flashed > .skr-cx__content {
    animation: none;
    background-color: rgba(37, 99, 235, 0.13);
  }
}

/* Avatar */
.skr-cx__avatar {
  flex-shrink: 0;
  position: relative;
  width: 44px;
  height: 44px;
}

.skr-cx__avatar-img {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}

/* Initial circle shown when avatar fails to load (.no-avatar added by JS) */
.skr-cx__initial {
  display: none;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--joongang-accent, #2563eb);
  color: #fff;
  font-size: 1.1rem;
  font-weight: 700;
  align-items: center;
  justify-content: center;
  position: absolute;
  inset: 0;
}

/* Identity hues — deterministic per commenter (PHP hashes user id/email
   into .skr-av-h0-7), so each author keeps one recognizable color across
   threads. h0 = the accent base above; the rest are 600/700-weight tones
   that sit comfortably next to it, all legible under the white initial. */
.skr-cx__avatar.skr-av-h1 .skr-cx__initial { background: #7c3aed; }
.skr-cx__avatar.skr-av-h2 .skr-cx__initial { background: #0d9488; }
.skr-cx__avatar.skr-av-h3 .skr-cx__initial { background: #b45309; }
.skr-cx__avatar.skr-av-h4 .skr-cx__initial { background: #db2777; }
.skr-cx__avatar.skr-av-h5 .skr-cx__initial { background: #059669; }
.skr-cx__avatar.skr-av-h6 .skr-cx__initial { background: #4f46e5; }
.skr-cx__avatar.skr-av-h7 .skr-cx__initial { background: #0891b2; }

.skr-cx__avatar.no-avatar .skr-cx__avatar-img {
  display: none;
}

.skr-cx__avatar.no-avatar .skr-cx__initial {
  display: flex;
}

/* Comment content */
.skr-cx__content {
  flex: 1;
  min-width: 0;
}

.skr-cx__meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 6px;
}

.skr-cx__name {
  font-weight: 700;
  font-size: 0.9rem;
  color: var(--joongang-primary, #0f1f44);
}

.skr-cx__time {
  font-size: 0.78rem;
  color: var(--joongang-text-tertiary, #6b7280);
}

.skr-cx__pendingtag {
  font-size: 0.72rem;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 4px;
  background: #fef3c7;
  color: #92400e;
  border: 1px solid #fcd34d;
}

/* Article author's own comments get an accent 작성자 chip. */
.skr-cx__authortag {
  font-size: 0.72rem;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 4px;
  background: var(--joongang-accent-soft, #eaf1ff);
  color: var(--joongang-accent, #2563eb);
  border: 1px solid var(--joongang-border-dark, #c7d2e6);
}

/* Viewer's own comments — 내 댓글 chip, the outlined twin of the filled
   작성자 chip (same border so they read as siblings). Viewer-relative,
   so it only ever renders on logged-in views, which bypass the page
   cache. */
.skr-cx__minetag {
  font-size: 0.72rem;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 4px;
  background: #fff;
  color: var(--joongang-accent, #2563eb);
  border: 1px solid var(--joongang-border-dark, #c7d2e6);
}

/* In-thread twin of the strip's BEST pill (iter. 58) — marks the
   featured comment at its real li so a strip click lands on a badged
   card, not an unmarked lookalike. */
.skr-cx__besttag {
  flex: none;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--joongang-accent, #2563eb);
  color: #fff;
  font-size: 0.66rem;
  font-weight: 800;
  letter-spacing: 0.4px;
}

/* Unseen-comment marker — injected by social-comment.js for returning
   visitors. Solid accent so it reads as an alert, unlike the outlined
   작성자 identity chip. */
.skr-cx__newtag {
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  padding: 2px 7px;
  border-radius: 4px;
  background: var(--joongang-accent, #2563eb);
  color: #fff;
}

.skr-cx__body {
  font-size: 0.92rem;
  line-height: 1.65;
  color: var(--joongang-text, #1f2937);
  margin-bottom: 6px;
}

.skr-cx__body p {
  margin: 0 0 4px;
}

/* Labels must never break mid-word (CJK wraps per character when a flex
   item is squeezed) — overflow wraps whole items to a new line instead.
   Row-gap 0: the 44px tap-target min-heights already space wrapped lines. */
.skr-cx__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0 16px;
  font-size: 0.8rem;
  white-space: nowrap;
}

/* Per-comment 공감 — text button matching the reply link's tap target. */
.skr-cx__like {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  min-height: 44px;
  padding: 4px 0;
  background: none;
  border: none;
  cursor: pointer;
  font-family: inherit;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
}

.skr-cx__like:hover,
.skr-cx__like.is-liked {
  color: var(--joongang-accent, #2563eb);
  background: none;
}

.skr-cx__like:focus,
.skr-cx__like:active {
  color: var(--joongang-accent, #2563eb);
  background: none;
}

.skr-cx__like:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
  border-radius: 2px;
}

.skr-cx__like-n {
  font-weight: 700;
}

.skr-cx__actions .comment-reply-link {
  color: var(--joongang-text-tertiary, #6b7280);
  text-decoration: none;
  font-weight: 600;
  padding: 4px 0;
  display: inline-block;
  min-height: 44px;
  line-height: 44px;
}

.skr-cx__actions .comment-reply-link:hover {
  color: var(--joongang-accent, #2563eb);
}

.skr-cx__actions .comment-reply-link:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
  border-radius: 2px;
}

/* Own-comment 삭제 + others' 댓글 신고 (iter. 60) — cautionary actions
   read red on hover/focus. */
.skr-cx__del,
.skr-cx__report {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 4px 0;
  background: none;
  border: none;
  cursor: pointer;
  font-family: inherit;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
}

.skr-cx__del:hover,
.skr-cx__report:hover {
  color: #b91c1c;
  background: none;
}

.skr-cx__del:focus,
.skr-cx__del:active,
.skr-cx__report:focus,
.skr-cx__report:active {
  color: #b91c1c;
  background: none;
}

.skr-cx__del:focus-visible,
.skr-cx__report:focus-visible {
  outline: 2px solid #b91c1c;
  outline-offset: 2px;
  border-radius: 2px;
}

/* 신고됨 — one-way done state; last in the family so it out-cascades the
   equal-specificity hover/focus red on the disabled button. */
.skr-cx__report:disabled,
.skr-cx__report.is-reported {
  opacity: 0.55;
  cursor: default;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* Own-comment 수정 + 댓글 링크 복사 — neutral text buttons, accent on
   hover like 답글. */
.skr-cx__edit,
.skr-cx__linkcopy {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 4px 0;
  background: none;
  border: none;
  cursor: pointer;
  font-family: inherit;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #6b7280);
}

.skr-cx__edit:hover,
.skr-cx__linkcopy:hover {
  color: var(--joongang-accent, #2563eb);
  background: none;
}

.skr-cx__edit:focus,
.skr-cx__edit:active,
.skr-cx__linkcopy:focus,
.skr-cx__linkcopy:active {
  color: var(--joongang-accent, #2563eb);
  background: none;
}

.skr-cx__edit:focus-visible,
.skr-cx__linkcopy:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
  border-radius: 2px;
}

.skr-cx__edit:disabled {
  opacity: 0.5;
  cursor: default;
}

/* Copied feedback — accent 복사됨 label for 1.6s. */
.skr-cx__linkcopy.is-copied {
  color: var(--joongang-accent, #2563eb);
}

/* Inline edit form — the textarea reuses .skr-cx__ta (composer look). */
.skr-cx__editform {
  margin: 6px 0 2px;
}

.skr-cx__edit-ta {
  min-height: 76px;
  font-size: 0.9rem;
}

.skr-cx__edit-row {
  display: flex;
  gap: 8px;
  margin-top: 8px;
}

.skr-cx__edit-save,
.skr-cx__edit-cancel {
  display: inline-flex;
  align-items: center;
  min-height: 36px;
  padding: 6px 16px;
  border-radius: 8px;
  cursor: pointer;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  font-size: 0.82rem;
  font-weight: 700;
  transition: background 0.15s, color 0.15s;
}

.skr-cx__edit-save {
  background: var(--joongang-accent, #2563eb);
  border: 1px solid var(--joongang-accent, #2563eb);
  color: #fff;
}

.skr-cx__edit-save:hover:not(:disabled) {
  background: var(--joongang-accent-dark, #1d4ed8);
}

.skr-cx__edit-save:focus,
.skr-cx__edit-save:active {
  background: var(--joongang-accent, #2563eb);
  color: #fff;
}

.skr-cx__edit-save:focus-visible,
.skr-cx__edit-cancel:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

.skr-cx__edit-save:disabled,
.skr-cx__edit-cancel:disabled {
  opacity: 0.6;
  cursor: default;
}

.skr-cx__edit-cancel {
  background: #fff;
  border: 1px solid var(--joongang-border, #e3e9f2);
  color: var(--joongang-text-tertiary, #6b7280);
}

.skr-cx__edit-cancel:hover:not(:disabled) {
  color: var(--joongang-accent, #2563eb);
  border-color: var(--joongang-border-dark, #c7d2e6);
  background: #fff;
}

.skr-cx__edit-cancel:focus,
.skr-cx__edit-cancel:active {
  background: #fff;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* (수정됨) — quiet meta marker after the timestamp. */
.skr-cx__editedtag {
  font-size: 0.72rem;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* Empty state */
/* Zero-comments empty state — an invitation card in the section tint.
   social-comment.js replaceWith()es it when the first comment lands,
   so it must stay purely presentational (no state, no handlers). */
.skr-cx__empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  margin: 0 0 24px;
  padding: 28px 16px;
  text-align: center;
  background: var(--joongang-bg-section, #eef3fb);
  border-radius: 10px;
}

.skr-cx__empty-ico {
  color: var(--joongang-accent, #2563eb);
  opacity: 0.55;
}

/* Double-class scope: single.php's `.skr-art__comments p` (b1 c1) styles
   comment-body paragraphs and would out-specify a bare class here. */
.skr-cx .skr-cx__empty-title {
  margin: 2px 0 0;
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--joongang-text, #1f2937);
}

.skr-cx .skr-cx__empty-sub {
  margin: 0;
  font-size: 0.85rem;
  color: var(--joongang-text-tertiary, #6b7280);
}

/* -------------------------------------------------------------------------
 * 5. Comment form
 * ---------------------------------------------------------------------- */

/* Logged-out login CTA */
.skr-cx__login {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  background: var(--joongang-bg-section, #eef3fb);
  border: 1px solid var(--joongang-border, #e3e9f2);
  border-radius: 12px;
  padding: 26px 20px;
  text-align: center;
}

.skr-cx__login svg {
  color: var(--joongang-accent, #2563eb);
}

.skr-cx__login-msg {
  margin: 0;
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--joongang-text, #1f2937);
}

/* Scoped (.skr-cx + class) like .skr-cx__submit: single-article content
   link rules otherwise out-specify a lone class and paint the label
   accent-on-accent (invisible). */
.skr-cx .skr-cx__login-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  margin-top: 6px;
  padding: 10px 26px;
  background: var(--joongang-accent, #2563eb);
  color: #fff;
  border-radius: 8px;
  font-size: 0.9rem;
  font-weight: 700;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  text-decoration: none;
  transition: background 0.15s;
}

.skr-cx .skr-cx__login-btn:hover,
.skr-cx .skr-cx__login-btn:focus {
  background: var(--joongang-accent-dark, #1d4ed8);
  color: #fff;
}

.skr-cx .skr-cx__login-btn:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 3px;
}

.skr-cx .skr-cx__login-join {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-size: 0.84rem;
  color: var(--joongang-text-tertiary, #6b7280);
  text-decoration: none;
}

.skr-cx .skr-cx__login-join:hover {
  color: var(--joongang-accent, #2563eb);
  text-decoration: underline;
}

.skr-cx .skr-cx__login-join:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
  border-radius: 2px;
}

/* Composer textarea */
.skr-cx__ta {
  width: 100%;
  border: 1px solid var(--joongang-border, #e3e9f2);
  border-radius: 10px;
  padding: 12px 14px;
  font-size: 0.92rem;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  color: var(--joongang-text, #1f2937);
  background: #fff;
  resize: vertical;
  transition: border-color 0.15s, box-shadow 0.15s;
  line-height: 1.6;
}

.skr-cx__ta:focus {
  outline: none;
  border-color: var(--joongang-accent, #2563eb);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}

/* Character counter — JS-injected after the textarea from 800 chars. */
.skr-cx__charcount {
  display: block;
  margin-top: 4px;
  text-align: right;
  font-size: 0.75rem;
  color: var(--joongang-text-tertiary, #6b7280);
  font-variant-numeric: tabular-nums;
}

.skr-cx__charcount.is-near {
  color: #b91c1c;
  font-weight: 600;
}

/* Submit button.
   Scoped selector (.skr-cx + class) so it out-specifies GeneratePress's
   customizer inline rule on input[type="submit"] (red button palette). */
.skr-cx .skr-cx__submit {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 10px 22px;
  background: var(--joongang-accent, #2563eb);
  color: #fff;
  border: none;
  border-radius: 8px;
  font-size: 0.92rem;
  font-weight: 700;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  cursor: pointer;
  transition: background 0.15s;
}

.skr-cx .skr-cx__submit:hover,
.skr-cx .skr-cx__submit:focus {
  background: var(--joongang-accent-dark, #1d4ed8);
  color: #fff;
}

.skr-cx .skr-cx__submit:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 3px;
}

/* Reusable inline loading spinner. Appended after any element tagged
   .skr-cx__spin.is-loading. Used on the AJAX comment submit's
   .form-submit wrapper (the <input> can't host a pseudo-element) and on
   the logout link, which navigates away on click. currentColor keeps it
   readable against whichever context it lands in. */
.skr-cx__spin.is-loading::after {
  content: '';
  display: inline-block;
  width: 0.85em;
  height: 0.85em;
  margin-left: 0.45em;
  vertical-align: -0.15em;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  animation: skr-cx-spin 0.6s linear infinite;
}

@keyframes skr-cx-spin {
  to {
    transform: rotate(360deg);
  }
}

@media (prefers-reduced-motion: reduce) {
  .skr-cx__spin.is-loading::after {
    animation-duration: 1.6s;
  }
}

/* Honeypot (skr_cx_hp) — off-screen, not display:none: naive bots skip
   display:none fields but still fill off-screen ones. tabindex=-1 +
   aria-hidden on the markup keep it out of keyboard/SR flow. */
.skr-cx__hp {
  position: absolute !important;
  left: -9999px !important;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* WordPress core comment form wrappers */
#respond {
  margin-top: 24px;
}

#respond .comment-reply-title {
  font-size: 1rem;
  font-weight: 700;
  color: var(--joongang-primary, #0f1f44);
  margin: 0 0 12px;
}

#respond .comment-form p {
  margin: 0 0 12px;
}

#respond .comment-form-comment {
  margin-bottom: 12px;
}

/* Reply mode (iter. 56) — comment-reply.js docks #respond into the thread
   <ol> right below the target comment's li (after its whole reply block).
   Descendant selector: matches the docked position at any depth (outer ol
   or a nested ol.children), never the at-rest position after the list.
   Accent-soft card + left bar attach the composer to the thread above
   (베스트-card family), because mid-list the bare form reads as a random
   orphan between threads. */
.skr-cx__list #respond {
  margin: 14px 0 20px;
  padding: 12px 14px 14px;
  background: var(--joongang-accent-soft, #eaf1ff);
  border-left: 3px solid var(--joongang-accent, #2563eb);
  border-radius: 10px;
}

/* Reply-column indent for top-level targets only (direct child of the
   outer ol) — inside ol.children the 52px padding already indents. */
.skr-cx__list > #respond {
  margin-left: 52px;
}

/* Docked header row: ~님에게 답글 쓰기 left, 답글 취소 chip right. */
.skr-cx__list #respond .comment-reply-title {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 0.92rem;
  margin-bottom: 10px;
}

.skr-cx__list #respond .comment-reply-title small {
  margin-left: auto;
  line-height: 1;
  flex: none;
}

/* A docked reply is a quick action — the logged-in-as boilerplate
   (profile/logout/required-note) stays on the at-rest form only. */
.skr-cx__list #respond .logged-in-as {
  display: none;
}

@media (max-width: 767px) {
  .skr-cx__list > #respond {
    margin-left: 28px;
  }
}

/* Cancel reply link — bordered chip (core hides it inline at rest).
   ID specificity beats single.php's content-link paint. */
#cancel-comment-reply-link {
  display: inline-block;
  padding: 4px 12px;
  border: 1px solid var(--joongang-border-dark, #c7d2e6);
  border-radius: 999px;
  background: #fff;
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--joongang-text-tertiary, #6b7280);
  margin-left: 10px;
  text-decoration: none;
  white-space: nowrap;
}

#cancel-comment-reply-link:hover,
#cancel-comment-reply-link:focus {
  color: var(--joongang-accent, #2563eb);
  border-color: var(--joongang-accent, #2563eb);
  background: #fff;
  text-decoration: none;
}

#cancel-comment-reply-link:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

/* Composer identity row (iter. 57) — compact avatar + name + logout
   replacing core's wordy logged-in-as sentence. 32px overrides shrink
   the shared 44px avatar family; hue classes come along for free. */
.skr-cx__me {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 12px;
}

.skr-cx__me .skr-cx__avatar {
  width: 32px;
  height: 32px;
}

.skr-cx__me .skr-cx__avatar-img {
  width: 32px;
  height: 32px;
}

.skr-cx__me .skr-cx__initial {
  width: 32px;
  height: 32px;
  font-size: 0.85rem;
}

.skr-cx__me-name {
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--joongang-primary, #0f1f44);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Double-class beats the content-link paint (iter. 17 pattern). */
.skr-cx .skr-cx__me-out {
  flex: none;
  margin-left: auto;
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--joongang-text-tertiary, #8a94a6);
  text-decoration: none;
  white-space: nowrap;
}

.skr-cx .skr-cx__me-out:hover,
.skr-cx .skr-cx__me-out:focus {
  color: var(--joongang-accent, #2563eb);
  text-decoration: underline;
}

.skr-cx .skr-cx__me-out:focus-visible {
  outline: 2px solid var(--joongang-primary, #0f1f44);
  outline-offset: 2px;
  border-radius: 4px;
}

/* Emptiness-gated 댓글 등록 (iter. 59) — also dims during AJAX flight,
   which reused the same disabled state before this rule existed. The
   defaults filter renames core's .submit to .skr-cx__submit; ID scope
   pins the accent background against any hover repaint. */
#respond .skr-cx__submit:disabled {
  opacity: 0.45;
  cursor: not-allowed;
  background: var(--joongang-accent, #2563eb);
}

/* Share toast (mirrors single.php toast pattern) */
.skr-share-toast {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%) translateY(10px);
  background: #1f2937;
  color: #fff;
  padding: 10px 20px;
  border-radius: 8px;
  font-size: 0.88rem;
  font-weight: 600;
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s ease, transform 0.2s ease;
  z-index: 9999;
  white-space: nowrap;
}

.skr-share-toast.is-visible {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* 북마크 저장 toast (js/social-like.js) — share-toast pill plus a tappable
   보기 link. Only the link re-enables pointer-events (children may override a
   parent's none), so the rest of the pill never blocks taps on the mobile
   bottom nav it briefly overlays. Padding + negative margin grow the tap
   target to ~44px without shifting the visual layout. */
.skr-bm-toast.is-visible .skr-bm-toast__go {
  pointer-events: auto;
}

.skr-bm-toast .skr-bm-toast__go {
  color: #93c5fd;
  font-weight: 700;
  margin: 0 -8px 0 4px;
  padding: 12px 8px;
  text-decoration: none;
}

.skr-bm-toast .skr-bm-toast__go:hover,
.skr-bm-toast .skr-bm-toast__go:focus {
  color: #bfdbfe;
  text-decoration: underline;
}

/* Share menu — desktop / no-native-sheet share path (js/social-share.js) */
.skr-share-menu {
  position: absolute;
  z-index: 6000;
  min-width: 200px;
  padding: 6px;
  background: #fff;
  border: 1px solid var(--joongang-border, #e3e9f2);
  border-radius: 12px;
  box-shadow: 0 10px 30px rgba(15, 31, 68, 0.14);
}

.skr-share-menu[hidden] {
  display: none;
}

.skr-share-menu__item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  min-height: 44px;
  padding: 8px 14px;
  border: 0;
  border-radius: 8px;
  background: none;
  color: var(--joongang-primary, #0f1f44);
  font-family: 'Noto Sans KR', 'Segoe UI', sans-serif;
  font-size: 0.9rem;
  font-weight: 500;
  text-decoration: none;
  text-align: left;
  white-space: nowrap;
  cursor: pointer;
}

.skr-share-menu__item:hover,
.skr-share-menu__item:focus-visible {
  background: #f2f6fc;
  color: var(--joongang-accent, #2563eb);
}

.skr-share-menu__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  color: #fff;
  font-size: 0.72rem;
  font-weight: 700;
}

.skr-share-menu__badge--naver { background: #03c75a; }
.skr-share-menu__badge--band  { background: #1ec800; }
.skr-share-menu__badge--fb    { background: #1877f2; }
.skr-share-menu__badge--x     { background: #0f1419; }
.skr-share-menu__badge--link  { background: #64748b; }

/* -------------------------------------------------------------------------
 * Article reading-progress bar — social-share.js appends it on singles
 * whose body runs past ~1.5 viewports. scaleX-driven with no transition:
 * the reader's own scroll position IS the animation.
 * ---------------------------------------------------------------------- */
.skr-progress {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 6000;
  width: 100%;
  height: 3px;
  background: var(--joongang-accent, #2563eb);
  transform: scaleX(0);
  transform-origin: 0 50%;
  pointer-events: none;
}

/* Logged-in views: sit under the WP admin bar (32px; 46px ≤782px). Below
   600px core makes the admin bar position:absolute — it scrolls away with
   the page — so the bar returns to the viewport top there or it would
   float 46px down over article text mid-scroll. */
body.admin-bar .skr-progress {
  top: 32px;
}

@media (max-width: 782px) {
  body.admin-bar .skr-progress {
    top: 46px;
  }
}

@media (max-width: 600px) {
  body.admin-bar .skr-progress {
    top: 0;
  }
}

/* -------------------------------------------------------------------------
 * Floating 맨 위로 — injected by js/social-infinite.js on the feed (the
 * infinite feed makes pages long) and js/social-share.js on singles
 * (article + comment thread scrolls deepest of all). One class, one
 * design. visibility (not display/hidden) so the fade can transition and
 * the hidden button stays out of the tab order.
 * ---------------------------------------------------------------------- */
.skr-totop {
  position: fixed;
  right: 16px;
  bottom: 24px;
  z-index: 5000;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  padding: 0;
  color: var(--joongang-accent, #2563eb);
  background: var(--joongang-bg, #fff);
  border: 1px solid var(--joongang-border-dark, #c7d2e6);
  border-radius: 50%;
  box-shadow: 0 4px 14px rgba(15, 31, 68, 0.16);
  cursor: pointer;
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px);
  transition: opacity 0.18s ease, visibility 0.18s, transform 0.18s ease;
}

.skr-totop.is-on {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

/* Palette pins first, accent hover second — GP's customizer paints
   button:hover/:focus white-on-black otherwise, and the later hover
   rule must still win over the focus pin while both apply. */
.skr-totop:focus,
.skr-totop:active {
  color: var(--joongang-accent, #2563eb);
  background: var(--joongang-bg, #fff);
}

.skr-totop:hover {
  color: #fff;
  background: var(--joongang-accent, #2563eb);
  border-color: var(--joongang-accent, #2563eb);
}

.skr-totop:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

/* Clear the fixed 64px bottom nav band on phones, plus breathing room. */
@media (max-width: 767px) {
  .skr-totop {
    bottom: 76px;
  }
}

/* -------------------------------------------------------------------------
 * 이어 읽기 pill — social-share.js shows it top-center on singles holding a
 * fresh saved reading position (skrReadPos:<id>). Top placement is
 * deliberate: the bottom edge already belongs to the sticky engage bar
 * (<768px), the share toast and the nav band. Same admin-bar offset dance
 * as .skr-progress above.
 * ---------------------------------------------------------------------- */
.skr-readpos {
  position: fixed;
  top: 14px;
  left: 50%;
  z-index: 8500;
  display: flex;
  align-items: center;
  gap: 6px;
  opacity: 0;
  visibility: hidden;
  transform: translateX(-50%) translateY(-8px);
  transition: opacity 0.22s ease, visibility 0.22s, transform 0.22s ease;
  font-family: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
}

.skr-readpos.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translateX(-50%) translateY(0);
}

.skr-readpos__go {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 9px 16px;
  font-size: 0.84rem;
  font-weight: 700;
  line-height: 1;
  color: #fff;
  background: var(--joongang-accent, #2563eb);
  border: none;
  border-radius: 999px;
  box-shadow: 0 6px 18px rgba(37, 99, 235, 0.35);
  cursor: pointer;
}

/* GP's customizer paints button:hover/:focus white-on-black — pin both. */
.skr-readpos__go:hover,
.skr-readpos__go:focus,
.skr-readpos__go:active {
  color: #fff;
  background: #1d4ed8;
}

.skr-readpos__x {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  padding: 0;
  color: var(--joongang-text-tertiary, #6b7280);
  background: var(--joongang-bg, #fff);
  border: 1px solid var(--joongang-border-dark, #c7d2e6);
  border-radius: 50%;
  box-shadow: 0 4px 12px rgba(15, 31, 68, 0.14);
  cursor: pointer;
}

.skr-readpos__x:hover,
.skr-readpos__x:focus,
.skr-readpos__x:active {
  color: var(--joongang-primary, #0f1f44);
  background: var(--joongang-bg, #fff);
}

.skr-readpos__go:focus-visible,
.skr-readpos__x:focus-visible {
  outline: 2px solid var(--joongang-accent, #2563eb);
  outline-offset: 2px;
}

/* Unlike .skr-progress there is NO ≤600px reset here: the pill lives only
   for ~12s at page load (scroll 0), where the absolute admin bar still covers
   the top 46px — a 14px pill would spend its whole life behind it (z 99999). */
body.admin-bar .skr-readpos {
  top: 46px;
}

@media (max-width: 782px) {
  body.admin-bar .skr-readpos {
    top: 60px;
  }
}

/* -------------------------------------------------------------------------
 * Article image lightbox — unlinked .skr-art__body imgs open full-size
 * (social-share.js §10). Any click inside closes it.
 * ---------------------------------------------------------------------- */
.skr-art__body.skr-lb-ready img {
  cursor: zoom-in;
}

/* Linked images keep their link meaning (and cursor). */
.skr-art__body.skr-lb-ready a img {
  cursor: pointer;
}

html.skr-lb-lock {
  overflow: hidden;
}

.skr-lightbox {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 9000; /* above the readpos pill (8500), under the toast (9999) */
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  /* 0.98, not 0.92 — at lower alphas the mobile nav band and the article
     headline ghosted through legibly enough to compete with the image
     (375 eyeball caught it twice: 0.92, then still faintly at 0.96). */
  background: rgba(15, 31, 68, 0.98);
  opacity: 0;
  transition: opacity 0.2s ease;
  cursor: zoom-out;
}

.skr-lightbox.is-visible {
  opacity: 1;
}

.skr-lightbox__img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  border-radius: 6px;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
}

.skr-lightbox__x {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 44px;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.35);
  border-radius: 50%;
  background: rgba(15, 31, 68, 0.55);
  color: #fff;
  cursor: pointer;
}

/* Explicit pins — GP's customizer paints button:hover/:focus white-on-black. */
.skr-lightbox__x:hover,
.skr-lightbox__x:focus {
  background: rgba(255, 255, 255, 0.18);
  color: #fff;
  border-color: rgba(255, 255, 255, 0.6);
}

.skr-lightbox__x:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 2px;
}

/* Admin-bar offsets mirror .skr-progress (not the .skr-readpos exception):
   the lightbox opens mid-article, far past the ≤600px absolute bar that
   scrolls away with the page, so ≤600px returns to the 16px default. */
body.admin-bar .skr-lightbox__x {
  top: 48px;
}

@media (max-width: 782px) {
  body.admin-bar .skr-lightbox__x {
    top: 62px;
  }
}

@media (max-width: 600px) {
  body.admin-bar .skr-lightbox__x {
    top: 16px;
  }
}

/* -------------------------------------------------------------------------
 * 6. Reduced motion
 * ---------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .skr-feed-card,
  .skr-feed-card__media img,
  .skr-engage__like,
  .skr-engage__cmt,
  .skr-engage__share,
  .skr-engage__bm,
  .skr-cx__sort-btn,
  .skr-cx__ta,
  .skr-cx__submit,
  .skr-share-toast,
  .skr-totop,
  .skr-readpos,
  .skr-lightbox {
    transition: none !important;
  }

  .skr-totop {
    transform: none !important;
  }

  /* Keep the horizontal centering, drop only the slide. */
  .skr-readpos {
    transform: translateX(-50%) !important;
  }

  .skr-feed-card:hover,
  .skr-engage__like:active,
  .skr-engage__cmt:active,
  .skr-engage__share:active,
  .skr-engage__bm:active,
  .skr-feed-card__cmt:active,
  .skr-feed-card__share:active,
  .skr-feed-card__bm:active,
  .skr-feed-card__like:active {
    transform: none !important;
  }

  .skr-engage__like.skr-pop svg,
  .skr-engage__bm.skr-pop svg,
  .skr-feed-card__bm.skr-pop svg,
  .skr-feed-card__like.skr-pop svg,
  .skr-cx__like.skr-pop .skr-cx__like-n {
    animation: none !important;
  }
}
