/*
 * PARTIBRICKS™ Schema Visualizer — Stylesheet
 * Version: 2.0.0 — Editorial Edition
 * Mount at: wp-content/themes/generatepress-child/partibricks-schema-visualizer.css
 *
 * Drop-in replacement for v1.x. Same mount point: <div id="pb-schema-visualizer">
 *
 * Required Google Fonts (add to <head> or theme functions.php):
 *   Cormorant Garamond (400–700, italic) · Sora (300–700) ·
 *   JetBrains Mono (400, 500) · Noto Sans TC (300–700)
 */

#pb-schema-visualizer,
#pb-schema-visualizer * { box-sizing: border-box; }

#pb-schema-visualizer {
  --pb-paper:      #f7f3ea;
  --pb-paper-2:    #f1ece0;
  --pb-paper-edge: #e6dfd0;
  --pb-ink:        #1c1815;
  --pb-ink-2:      #4a4239;
  --pb-ink-3:      #847866;
  --pb-ink-4:      #b6ab97;
  --pb-rule:       #d8cfbc;

  font-family: "Sora", "Noto Sans TC", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  font-size: 14px;
  line-height: 1.5;
  color: var(--pb-ink);
  background: transparent;
  -webkit-font-smoothing: antialiased;
}

/* ── Topbar ──────────────────────────────────────────────────────────────── */
#pb-schema-visualizer .pb-sv-topbar {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 28px;
  padding-bottom: 14px;
  border-bottom: 1px dashed var(--pb-rule);
}
#pb-schema-visualizer .pb-sv-topbar-label {
  font-family: "JetBrains Mono", monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--pb-ink-3);
}
#pb-schema-visualizer .pb-sv-filters {
  display: flex; gap: 4px; flex-wrap: wrap;
}
#pb-schema-visualizer .pb-sv-filter {
  font-family: inherit;
  font-size: 12px;
  padding: 6px 12px;
  border: none;
  background: transparent;
  color: var(--pb-ink-2);
  cursor: pointer;
  border-radius: 999px;
  transition: all 0.18s;
  font-weight: 400;
  line-height: 1.4;
}
#pb-schema-visualizer .pb-sv-filter:hover { color: var(--pb-ink); }
#pb-schema-visualizer .pb-sv-filter.pb-active {
  background: var(--pb-ink);
  color: var(--pb-paper);
}
#pb-schema-visualizer .pb-sv-filter.pb-active[data-color] {
  background: attr(data-color color);
}

#pb-schema-visualizer .pb-sv-search {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--pb-rule);
  border-radius: 999px;
  padding: 5px 12px;
  transition: border-color 0.18s;
  background: transparent;
}
#pb-schema-visualizer .pb-sv-search:focus-within { border-color: var(--pb-ink-2); }
#pb-schema-visualizer .pb-sv-search input {
  border: none; background: transparent; outline: none;
  font-family: inherit; font-size: 12px;
  color: var(--pb-ink);
  width: 150px;
}
#pb-schema-visualizer .pb-sv-search input::placeholder { color: var(--pb-ink-4); }
#pb-schema-visualizer .pb-sv-search svg { color: var(--pb-ink-3); }

/* ── Level Group ─────────────────────────────────────────────────────────── */
#pb-schema-visualizer .pb-sv-level-group { margin-bottom: 44px; }
#pb-schema-visualizer .pb-sv-level-group:last-child { margin-bottom: 0; }

#pb-schema-visualizer .pb-sv-level-header {
  display: grid;
  grid-template-columns: 90px 1fr auto;
  align-items: baseline;
  gap: 22px;
  margin-bottom: 18px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--pb-rule);
  position: relative;
}
#pb-schema-visualizer .pb-sv-level-header::after {
  content: "";
  position: absolute;
  left: 0; bottom: -1px;
  width: 90px;
  height: 2px;
  background: var(--pb-lv-border, var(--pb-ink));
}
#pb-schema-visualizer .pb-sv-level-num {
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-style: italic;
  font-weight: 500;
  font-size: 52px;
  line-height: 0.9;
  color: var(--pb-lv-border, var(--pb-ink));
}
#pb-schema-visualizer .pb-sv-level-title {
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-weight: 500;
  font-size: 22px;
  letter-spacing: 0.02em;
  margin: 0;
}
#pb-schema-visualizer .pb-sv-level-subtitle {
  font-family: "Noto Sans TC", sans-serif;
  font-size: 11.5px;
  color: var(--pb-ink-3);
  margin-top: 2px;
}
#pb-schema-visualizer .pb-sv-level-count {
  font-family: "JetBrains Mono", monospace;
  font-size: 10px;
  color: var(--pb-ink-3);
  letter-spacing: 0.1em;
}

/* ── Grid ────────────────────────────────────────────────────────────────── */
#pb-schema-visualizer .pb-sv-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(285px, 1fr));
  gap: 14px;
}

/* ── Card ────────────────────────────────────────────────────────────────── */
#pb-schema-visualizer .pb-sv-card {
  position: relative;
  background: var(--pb-paper-2);
  border: 1px solid var(--pb-paper-edge);
  border-radius: 4px;
  padding: 18px 18px 16px;
  cursor: pointer;
  transition: transform 0.18s cubic-bezier(.2,.7,.2,1),
              box-shadow 0.18s,
              border-color 0.18s;
  overflow: hidden;
}
#pb-schema-visualizer .pb-sv-card::before {
  content: "";
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: var(--pb-lv-border, var(--pb-ink));
  opacity: 0.75;
}
#pb-schema-visualizer .pb-sv-card:hover {
  transform: translateY(-2px);
  border-color: var(--pb-lv-border);
  box-shadow: 0 1px 0 var(--pb-paper-edge),
              0 10px 28px -12px rgba(60, 40, 20, 0.22);
}
#pb-schema-visualizer .pb-sv-card.pb-selected {
  border-color: var(--pb-lv-border);
  background: var(--pb-lv-bg);
}
#pb-schema-visualizer .pb-sv-card.pb-selected::before { width: 5px; opacity: 1; }

#pb-schema-visualizer .pb-sv-card-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 10px;
  margin-bottom: 10px;
}
#pb-schema-visualizer .pb-sv-card-name {
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-weight: 500;
  font-size: 21px;
  line-height: 1.05;
  letter-spacing: -0.005em;
  color: var(--pb-ink);
  margin: 0;
}
#pb-schema-visualizer .pb-sv-card-cn {
  font-family: "Noto Sans TC", sans-serif;
  font-size: 11.5px;
  color: var(--pb-ink-3);
  letter-spacing: 0.04em;
  margin-top: 4px;
  font-weight: 400;
}
#pb-schema-visualizer .pb-sv-lvtag {
  font-family: "JetBrains Mono", monospace;
  font-size: 9.5px;
  letter-spacing: 0.12em;
  color: var(--pb-lv-text);
  background: var(--pb-lv-bg);
  padding: 3px 7px;
  border-radius: 3px;
  white-space: nowrap;
  flex-shrink: 0;
  text-transform: uppercase;
  font-weight: 500;
  align-self: flex-start;
}

/* Bass viz */
#pb-schema-visualizer .pb-sv-bass-wrap {
  margin: 14px 0 10px;
  background: var(--pb-paper);
  border-radius: 3px;
  padding: 20px 4px 6px;
  position: relative;
  overflow: hidden;
}
#pb-schema-visualizer .pb-sv-bass-wrap::before {
  content: "BASS";
  position: absolute;
  top: 6px; left: 8px;
  font-family: "JetBrains Mono", monospace;
  font-size: 8px;
  letter-spacing: 0.18em;
  color: var(--pb-ink-4);
}
#pb-schema-visualizer .pb-sv-bass-svg {
  position: relative;
  height: 50px;
  width: 100%;
}
#pb-schema-visualizer .pb-sv-bass-svg svg {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
}
#pb-schema-visualizer .pb-sv-bass-svg .pb-bp-curve {
  fill: none;
  stroke: var(--pb-lv-border);
  stroke-width: 1.4;
  stroke-linecap: round;
  opacity: 0.6;
  stroke-dasharray: 4 3;
}
#pb-schema-visualizer .pb-sv-bass-svg .pb-bp-line {
  fill: none;
  stroke: var(--pb-lv-border);
  stroke-width: 1.6;
  stroke-linecap: round;
  opacity: 0.7;
}
#pb-schema-visualizer .pb-sv-bass-node {
  position: absolute;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--pb-paper);
  border: 1.5px solid var(--pb-lv-border);
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-weight: 600;
  color: var(--pb-lv-text);
  line-height: 1;
  transform: translate(-50%, -50%);
  z-index: 2;
  box-shadow: 0 1px 0 rgba(0,0,0,0.03);
}

#pb-schema-visualizer .pb-sv-card-desc {
  font-family: "Noto Sans TC", sans-serif;
  font-size: 12.5px;
  color: var(--pb-ink-2);
  line-height: 1.55;
  margin: 0;
  font-weight: 300;
}
#pb-schema-visualizer .pb-sv-card-foot {
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px dotted var(--pb-paper-edge);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
  font-family: "JetBrains Mono", monospace;
  font-size: 9.5px;
  color: var(--pb-ink-3);
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
#pb-schema-visualizer .pb-sv-card-foot .pb-sv-arrow {
  color: var(--pb-lv-border);
  font-size: 12px;
  transition: transform 0.2s;
}
#pb-schema-visualizer .pb-sv-card:hover .pb-sv-arrow { transform: translateX(3px); }

/* ── Detail Drawer ───────────────────────────────────────────────────────── */
#pb-schema-visualizer .pb-sv-scrim {
  position: fixed; inset: 0;
  background: rgba(28, 24, 21, 0.4);
  backdrop-filter: blur(2px);
  z-index: 99990;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.22s;
}
#pb-schema-visualizer .pb-sv-scrim.pb-open { opacity: 1; pointer-events: auto; }

#pb-schema-visualizer .pb-sv-detail {
  position: fixed;
  top: 0; right: 0; bottom: 0;
  width: min(620px, 100vw);
  background: var(--pb-paper);
  z-index: 99991;
  transform: translateX(110%);
  transition: transform 0.32s cubic-bezier(.4,.0,.2,1);
  overflow-y: auto;
  box-shadow: -24px 0 60px -20px rgba(28, 24, 21, 0.3);
  border-left: 1px solid var(--pb-paper-edge);
}
#pb-schema-visualizer .pb-sv-detail.pb-open { transform: translateX(0); }
#pb-schema-visualizer .pb-sv-detail-inner { padding: 32px 36px 60px; }

#pb-schema-visualizer .pb-sv-detail-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--pb-rule);
}
#pb-schema-visualizer .pb-sv-detail-close {
  border: none;
  background: transparent;
  cursor: pointer;
  color: var(--pb-ink-3);
  font-size: 18px;
  width: 32px; height: 32px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  transition: background 0.15s, color 0.15s;
}
#pb-schema-visualizer .pb-sv-detail-close:hover {
  background: var(--pb-paper-2);
  color: var(--pb-ink);
}
#pb-schema-visualizer .pb-sv-detail-eyebrow {
  font-family: "JetBrains Mono", monospace;
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--pb-lv-text);
  background: var(--pb-lv-bg);
  padding: 3px 8px;
  border-radius: 3px;
  display: inline-block;
  margin-bottom: 12px;
  font-weight: 500;
}
#pb-schema-visualizer .pb-sv-detail-title {
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-weight: 500;
  font-size: 38px;
  line-height: 1;
  margin: 0;
  letter-spacing: -0.01em;
}
#pb-schema-visualizer .pb-sv-detail-cn {
  font-family: "Noto Sans TC", sans-serif;
  font-size: 14px;
  color: var(--pb-ink-3);
  margin-top: 6px;
  letter-spacing: 0.06em;
}

#pb-schema-visualizer .pb-sv-detail-bass-block {
  margin: 24px 0 8px;
  padding: 16px 18px 12px;
  background: var(--pb-paper-2);
  border-radius: 4px;
  border-left: 3px solid var(--pb-lv-border);
}
#pb-schema-visualizer .pb-sv-detail-bass-block .pb-b-label {
  font-family: "JetBrains Mono", monospace;
  font-size: 9.5px;
  letter-spacing: 0.18em;
  color: var(--pb-ink-3);
  text-transform: uppercase;
  margin-bottom: 6px;
}
#pb-schema-visualizer .pb-sv-detail-bass-block .pb-sv-bass-svg { height: 70px; }
#pb-schema-visualizer .pb-sv-detail-bass-block .pb-b-func {
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-style: italic;
  font-size: 16px;
  color: var(--pb-ink);
  margin-top: 4px;
}

#pb-schema-visualizer .pb-sv-detail-desc {
  font-family: "Noto Sans TC", sans-serif;
  font-size: 14.5px;
  line-height: 1.75;
  color: var(--pb-ink-2);
  margin: 22px 0;
  border-left: 2px solid var(--pb-rule);
  padding-left: 16px;
  font-weight: 300;
}

#pb-schema-visualizer .pb-sv-info-section { margin-top: 28px; }
#pb-schema-visualizer .pb-sv-info-section h3 {
  font-family: "JetBrains Mono", monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  color: var(--pb-ink-3);
  text-transform: uppercase;
  margin: 0 0 10px;
  display: flex; align-items: center; gap: 10px;
  font-weight: 500;
}
#pb-schema-visualizer .pb-sv-info-section h3::after {
  content: ""; flex: 1; height: 1px; background: var(--pb-rule);
}

#pb-schema-visualizer .pb-sv-info-pair {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
#pb-schema-visualizer .pb-sv-info-card {
  background: var(--pb-paper-2);
  border-radius: 3px;
  padding: 14px 16px;
}
#pb-schema-visualizer .pb-sv-info-card.pb-full { grid-column: 1 / -1; }
#pb-schema-visualizer .pb-sv-info-card .pb-k {
  font-family: "JetBrains Mono", monospace;
  font-size: 9px;
  letter-spacing: 0.2em;
  color: var(--pb-ink-4);
  text-transform: uppercase;
  margin-bottom: 6px;
}
#pb-schema-visualizer .pb-sv-info-card .pb-v {
  font-family: "Noto Sans TC", sans-serif;
  font-size: 13px;
  color: var(--pb-ink);
  line-height: 1.55;
  font-weight: 300;
}

/* Stars */
#pb-schema-visualizer .pb-sv-stars {
  margin: 4px 0 0; padding: 0; list-style: none;
}
#pb-schema-visualizer .pb-sv-star-item {
  display: grid;
  grid-template-columns: 38px 1fr;
  gap: 14px;
  padding: 12px 14px;
  background: var(--pb-paper-2);
  border-radius: 3px;
  margin-bottom: 6px;
  font-family: "Noto Sans TC", sans-serif;
  font-size: 13px;
  color: var(--pb-ink-2);
  line-height: 1.55;
  font-weight: 300;
  border-left: 2px solid transparent;
  transition: border-color 0.2s;
}
#pb-schema-visualizer .pb-sv-star-item:hover { border-left-color: var(--pb-lv-border); }
#pb-schema-visualizer .pb-sv-star-num {
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-weight: 500;
  font-style: italic;
  font-size: 18px;
  color: var(--pb-lv-border);
  line-height: 1;
  align-self: center;
}

/* Task IDs */
#pb-schema-visualizer .pb-sv-ids {
  display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px;
}
#pb-schema-visualizer .pb-sv-id-badge {
  font-family: "JetBrains Mono", monospace;
  font-size: 10px;
  padding: 4px 9px;
  border: 1px solid var(--pb-rule);
  border-radius: 3px;
  color: var(--pb-ink-2);
  background: var(--pb-paper);
  letter-spacing: 0.04em;
  display: inline-block;
}

#pb-schema-visualizer .pb-sv-empty {
  padding: 60px 0;
  text-align: center;
  color: var(--pb-ink-3);
  font-family: "Cormorant Garamond", "Georgia", serif;
  font-style: italic;
  font-size: 18px;
}

/* Card entry animation */
@keyframes pbCardIn {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}
#pb-schema-visualizer .pb-sv-card {
  animation: pbCardIn 0.42s cubic-bezier(.2,.7,.2,1) backwards;
}
#pb-schema-visualizer .pb-sv-card:nth-child(1) { animation-delay: 0ms; }
#pb-schema-visualizer .pb-sv-card:nth-child(2) { animation-delay: 40ms; }
#pb-schema-visualizer .pb-sv-card:nth-child(3) { animation-delay: 80ms; }
#pb-schema-visualizer .pb-sv-card:nth-child(4) { animation-delay: 120ms; }
#pb-schema-visualizer .pb-sv-card:nth-child(5) { animation-delay: 160ms; }
#pb-schema-visualizer .pb-sv-card:nth-child(n+6) { animation-delay: 200ms; }

/* Responsive */
@media (max-width: 640px) {
  #pb-schema-visualizer .pb-sv-grid { grid-template-columns: 1fr; }
  #pb-schema-visualizer .pb-sv-level-header { grid-template-columns: 56px 1fr; }
  #pb-schema-visualizer .pb-sv-level-count { grid-column: 2; margin-top: 4px; }
  #pb-schema-visualizer .pb-sv-level-num { font-size: 38px; }
  #pb-schema-visualizer .pb-sv-detail-title { font-size: 30px; }
  #pb-schema-visualizer .pb-sv-detail-inner { padding: 24px 22px 60px; }
  #pb-schema-visualizer .pb-sv-info-pair { grid-template-columns: 1fr; }
  #pb-schema-visualizer .pb-sv-search { margin-left: 0; width: 100%; }
}
