/* ═══ Buttons ═══════════════════════════════════════════ */
.pg-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: 8px;
  padding: 10px 18px;
  font-family: var(--pg-font-sans);
  font-size: .9rem; font-weight: 500;
  border-radius: 999px;
  border: 1px solid var(--pg-border-strong);
  background: var(--pg-surface);
  color: var(--pg-ink);
  cursor: pointer;
  transition: transform 140ms ease, box-shadow 140ms ease, background 140ms ease, color 140ms ease;
  text-decoration: none;
}
.pg-btn:hover { transform: translateY(-1px); box-shadow: var(--pg-shadow-md); text-decoration: none; }
.pg-btn:active { transform: translateY(0); box-shadow: var(--pg-shadow-sm); }
.pg-btn--primary {
  background: var(--pg-petrol); color: #fffbf0; border-color: var(--pg-petrol-deep);
}
.pg-btn--primary:hover { background: var(--pg-petrol-deep); color: #fffbf0; }
.pg-btn--brass {
  background: var(--pg-brass); color: #fffbf0; border-color: #a16f28;
}
.pg-btn--brass:hover { background: var(--pg-copper); }
.pg-btn--ghost { background: transparent; border-color: transparent; }
.pg-btn--ghost:hover { background: var(--pg-paper); }
.pg-btn--danger { color: var(--pg-rust); border-color: rgb(155 61 47 / .3); }
.pg-btn--danger:hover { background: rgb(155 61 47 / .08); }
.pg-btn--sm { padding: 6px 12px; font-size: .8rem; }

/* ═══ Cards ═════════════════════════════════════════════ */
.pg-card {
  background: var(--pg-surface-2);
  border: 1px solid var(--pg-border);
  border-radius: var(--pg-radius-lg);
  padding: 1.5rem;
  box-shadow: var(--pg-shadow-sm);
  transition: box-shadow 180ms ease, transform 180ms ease;
}
.pg-card:hover { box-shadow: var(--pg-shadow-md); }
.pg-card--flat { box-shadow: none; background: var(--pg-surface); }
.pg-card h3 { margin: 0 0 .5rem 0; }

.pg-card-head {
  display: flex; justify-content: space-between; align-items: baseline;
  padding-bottom: .75rem; margin-bottom: 1rem;
  border-bottom: 1px solid var(--pg-border);
}
.pg-card-head h3 { margin: 0; }

/* ═══ Stat ═══════════════════════════════════════════════ */
.pg-stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 1rem;
  margin-bottom: 2rem;
}
.pg-stat {
  background: var(--pg-surface-2);
  border: 1px solid var(--pg-border);
  border-radius: var(--pg-radius);
  padding: 1.25rem 1.25rem 1rem;
  position: relative; overflow: hidden;
}
.pg-stat::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px;
  background: linear-gradient(90deg, var(--pg-brass) 0%, var(--pg-petrol) 100%);
  opacity: 0.75;
}
.pg-stat-label {
  font-family: var(--pg-font-mono);
  font-size: .7rem; text-transform: uppercase; letter-spacing: 0.15em;
  color: var(--pg-ink-mute); margin-bottom: .4rem;
}
.pg-stat-value {
  font-family: var(--pg-font-serif);
  font-size: 2rem; font-weight: 500; color: var(--pg-petrol-deep);
  line-height: 1;
}
.pg-stat-delta {
  margin-top: .3rem; font-size: .8rem; color: var(--pg-ink-mute);
}

/* ═══ Forms ═════════════════════════════════════════════ */
.pg-field { margin-bottom: 1.25rem; }
.pg-label {
  display: block;
  font-family: var(--pg-font-mono);
  font-size: .7rem; text-transform: uppercase; letter-spacing: 0.15em;
  color: var(--pg-ink-mute); margin-bottom: .45rem;
}
.pg-input, .pg-textarea, .pg-select {
  width: 100%;
  padding: 10px 14px;
  background: #fff;
  border: 1px solid var(--pg-border-strong);
  border-radius: var(--pg-radius);
  color: var(--pg-ink);
  font-family: var(--pg-font-sans);
  font-size: .95rem;
  transition: border-color 140ms ease, box-shadow 140ms ease;
}
.pg-input:focus, .pg-textarea:focus, .pg-select:focus {
  outline: none;
  border-color: var(--pg-petrol);
  box-shadow: 0 0 0 3px rgb(15 61 62 / .10);
}
.pg-textarea { min-height: 110px; font-family: var(--pg-font-mono); font-size: .85rem; }
.pg-hint { color: var(--pg-ink-mute); font-size: .8rem; margin-top: .4rem; }
.pg-error {
  background: rgb(155 61 47 / .08);
  border: 1px solid rgb(155 61 47 / .3);
  color: var(--pg-rust);
  padding: .7rem 1rem;
  border-radius: var(--pg-radius);
  font-size: .9rem;
  margin-bottom: 1rem;
}

/* ═══ Chip / Tag ═══════════════════════════════════════════ */
.pg-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px;
  font-family: var(--pg-font-mono);
  font-size: .72rem;
  text-transform: uppercase; letter-spacing: 0.08em;
  border-radius: 999px;
  background: var(--pg-paper);
  color: var(--pg-ink-soft);
  border: 1px solid var(--pg-border);
}
.pg-chip--brass { background: var(--pg-brass-pale); color: var(--pg-copper); border-color: rgb(194 139 63 / .35); }
.pg-chip--petrol { background: rgb(15 61 62 / .08); color: var(--pg-petrol-deep); border-color: rgb(15 61 62 / .25); }
.pg-chip--sage { background: rgb(109 138 99 / .12); color: #466240; border-color: rgb(109 138 99 / .3); }
.pg-chip--rust { background: rgb(155 61 47 / .1); color: var(--pg-rust); border-color: rgb(155 61 47 / .25); }
.pg-chip--ink { background: var(--pg-ink); color: var(--pg-ivory); border-color: var(--pg-ink); }
.pg-chip-dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: currentColor; display: inline-block;
  box-shadow: 0 0 0 2px rgb(255 255 255 / 0.5);
}

/* ═══ Table ═════════════════════════════════════════════ */
.pg-table-wrap { overflow-x: auto; border: 1px solid var(--pg-border); border-radius: var(--pg-radius-lg); background: var(--pg-surface-2); }
.pg-table {
  width: 100%;
  border-collapse: collapse;
  font-size: .92rem;
}
.pg-table th, .pg-table td {
  text-align: left;
  padding: 12px 18px;
  border-bottom: 1px solid var(--pg-border);
  vertical-align: middle;
}
.pg-table th {
  font-family: var(--pg-font-mono);
  font-size: .7rem; text-transform: uppercase; letter-spacing: 0.14em;
  color: var(--pg-ink-mute); font-weight: 500;
  background: var(--pg-paper);
}
.pg-table tr:last-child td { border-bottom: 0; }
.pg-table tr:hover td { background: var(--pg-paper); }

/* ═══ Progress ═════════════════════════════════════════════ */
.pg-progress {
  height: 6px; border-radius: 3px; overflow: hidden;
  background: var(--pg-linen); border: 1px solid var(--pg-border);
}
.pg-progress-bar {
  height: 100%;
  background: linear-gradient(90deg, var(--pg-petrol) 0%, var(--pg-brass) 100%);
  transition: width 400ms ease;
}

/* ═══ Challenge gallery ═══════════════════════════════════ */
.pg-gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 1.25rem;
}
.pg-gallery-card {
  background: var(--pg-surface-2);
  border: 1px solid var(--pg-border);
  border-radius: var(--pg-radius-lg);
  overflow: hidden;
  transition: transform 200ms ease, box-shadow 200ms ease;
  display: flex; flex-direction: column;
}
.pg-gallery-card:hover { transform: translateY(-3px); box-shadow: var(--pg-shadow-md); text-decoration: none; }
.pg-gallery-img {
  aspect-ratio: 16 / 10;
  background: var(--pg-paper) center/cover no-repeat;
  border-bottom: 1px solid var(--pg-border);
}
.pg-gallery-body { padding: 1rem 1.1rem; }
.pg-gallery-title {
  font-family: var(--pg-font-serif);
  font-size: 1rem; color: var(--pg-petrol-deep);
  margin: 0 0 .4rem 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pg-gallery-meta {
  font-size: .8rem; color: var(--pg-ink-mute);
  display: flex; justify-content: space-between; gap: 8px;
}

/* ═══ Live GPU dashboard ═══════════════════════════════════ */
.pg-gpu-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 1.25rem; }
.pg-gpu-card {
  background: var(--pg-surface-2);
  border: 1px solid var(--pg-border);
  border-radius: var(--pg-radius-lg);
  padding: 1.25rem;
  position: relative;
  transition: box-shadow 160ms ease, border-color 160ms ease;
}
.pg-gpu-card--online { border-color: rgb(109 138 99 / .45); }
.pg-gpu-card--offline { border-color: rgb(155 61 47 / .35); }
.pg-gpu-card h4 {
  margin: 0 0 .25rem 0;
  font-family: var(--pg-font-serif); font-size: 1.1rem;
  color: var(--pg-petrol-deep);
}
.pg-gpu-meta { font-family: var(--pg-font-mono); font-size: .75rem; color: var(--pg-ink-mute); margin-bottom: .9rem; }

.pg-gauge {
  margin-top: .6rem;
}
.pg-gauge-row { display: flex; justify-content: space-between; font-size: .82rem; margin-bottom: 4px; }
.pg-gauge-label { font-family: var(--pg-font-mono); font-size: .7rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--pg-ink-mute); }
.pg-gauge-val { font-family: var(--pg-font-serif); color: var(--pg-petrol-deep); font-weight: 500; }
.pg-gauge-track { height: 5px; border-radius: 3px; background: var(--pg-linen); overflow: hidden; border: 1px solid var(--pg-border); }
.pg-gauge-fill { height: 100%; transition: width 400ms ease; background: linear-gradient(90deg, var(--pg-sage) 0%, var(--pg-brass) 60%, var(--pg-rust) 100%); }

.pg-gpu-footer { display: flex; justify-content: space-between; font-size: .8rem; color: var(--pg-ink-mute); margin-top: 1rem; padding-top: .85rem; border-top: 1px solid var(--pg-border); }

.pg-spark {
  margin-top: .75rem;
  height: 48px;
  background: rgba(15,61,62,0.03);
  border-radius: 6px;
  border: 1px solid var(--pg-border);
  position: relative;
}

/* ═══ Section rule ═══════════════════════════════════════ */
.pg-section { margin: 3rem 0; }
.pg-section-head {
  display: flex; align-items: baseline; justify-content: space-between;
  border-bottom: 1px solid var(--pg-border);
  padding-bottom: .75rem;
  margin-bottom: 1.5rem;
}
.pg-section-head h2 { margin: 0; }

/* ═══ Filter pills ═══════════════════════════════════════ */
.pg-filter-row { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 1.5rem; }
.pg-filter-pill {
  padding: 6px 14px;
  font-size: .82rem;
  font-family: var(--pg-font-mono);
  text-transform: lowercase;
  letter-spacing: 0.02em;
  color: var(--pg-ink-soft);
  background: var(--pg-surface);
  border: 1px solid var(--pg-border-strong);
  border-radius: 999px;
}
.pg-filter-pill:hover { background: var(--pg-paper); text-decoration: none; }
.pg-filter-pill--active {
  background: var(--pg-petrol); color: #fffbf0; border-color: var(--pg-petrol-deep);
}
.pg-filter-pill--active:hover { background: var(--pg-petrol-deep); color: #fffbf0; }

/* ═══ Auth ═════════════════════════════════════════════ */
.pg-auth-panel {
  max-width: 480px; margin: 4rem auto;
  padding: 2.5rem;
  background: var(--pg-surface-2);
  border: 1px solid var(--pg-border);
  border-radius: var(--pg-radius-lg);
  box-shadow: var(--pg-shadow-md);
}
.pg-auth-panel h1 { margin: 0 0 .5rem 0; font-size: 2rem; }
.pg-auth-panel .pg-lede { margin-bottom: 2rem; }

/* ═══ Leaderboard badges ═════════════════════════════════ */
.pg-rank {
  font-family: var(--pg-font-serif);
  font-size: 1.1rem; font-weight: 500;
  width: 28px; height: 28px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--pg-paper); color: var(--pg-ink-soft);
  border: 1px solid var(--pg-border);
}
.pg-rank--gold { background: linear-gradient(135deg, #e6c275, #c28b3f); color: #fffbf0; border-color: #a16f28; }
.pg-rank--silver { background: linear-gradient(135deg, #dadada, #a8a8a8); color: #fffbf0; border-color: #808080; }
.pg-rank--bronze { background: linear-gradient(135deg, #c48e6a, #934e31); color: #fffbf0; border-color: #6a3a25; }

/* ═══ Bounding box overlay (challenge detail) ═══════════════ */
.pg-bbox-wrap { position: relative; display: inline-block; border-radius: var(--pg-radius-lg); overflow: hidden; border: 1px solid var(--pg-border); }
.pg-bbox-wrap img { display: block; max-width: 100%; height: auto; }
.pg-bbox-canvas { position: absolute; top: 0; left: 0; pointer-events: none; }

/* ═══ Landing ════════════════════════════════════════════ */
.pg-landing-hero {
  padding: 4rem 0 5rem;
  border-bottom: 1px solid var(--pg-border);
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
  gap: 4rem;
  align-items: center;
}
@media (max-width: 900px) { .pg-landing-hero { grid-template-columns: 1fr; gap: 2rem; } }
.pg-landing-hero h1 { font-size: clamp(2.6rem, 5vw, 4.25rem); }
.pg-landing-hero h1 em { color: var(--pg-brass); }
.pg-landing-cta { display: flex; gap: 10px; margin-top: 1.5rem; flex-wrap: wrap; }
.pg-landing-aside {
  background: var(--pg-surface-2); border: 1px solid var(--pg-border);
  border-radius: var(--pg-radius-xl); padding: 2rem;
  box-shadow: var(--pg-shadow-lg);
  position: relative; overflow: hidden;
}
.pg-landing-aside::before {
  content: ""; position: absolute; top: 0; right: 0; width: 140px; height: 140px;
  background: radial-gradient(circle at center, var(--pg-brass-pale) 0%, transparent 70%);
  opacity: .8; pointer-events: none;
}
.pg-feature-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 1.5rem;
  margin-top: 3rem;
}
.pg-feature-item {
  padding: 1.5rem 1.25rem;
  border-top: 2px solid var(--pg-petrol);
}
.pg-feature-item:nth-child(2n) { border-top-color: var(--pg-brass); }
.pg-feature-item:nth-child(3n) { border-top-color: var(--pg-sage); }
.pg-feature-item:nth-child(4n) { border-top-color: var(--pg-copper); }
.pg-feature-item h3 { margin: .2rem 0 .5rem; font-size: 1.15rem; }
.pg-feature-item p { margin: 0; color: var(--pg-ink-soft); font-size: .92rem; line-height: 1.55; }
.pg-feature-item .pg-feature-num {
  font-family: var(--pg-font-mono);
  font-size: .7rem; letter-spacing: 0.2em; color: var(--pg-brass);
}

/* ═══ Utility ═════════════════════════════════════════════ */
.pg-row { display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; }
.pg-gap-sm { gap: .5rem; }
.pg-muted { color: var(--pg-ink-mute); }
.pg-small { font-size: .85rem; }
.pg-kbd {
  display: inline-block; padding: 1px 6px; border-radius: 4px; border: 1px solid var(--pg-border-strong);
  background: #fff; font-family: var(--pg-font-mono); font-size: .8em; color: var(--pg-ink-soft);
}
