/* =====================================================================
   minimal.css — "Minimal Mono" direction (06)
   Loaded LAST (after polish.css). A restraint layer: quiets the loud
   hero effects and re-frames the hero in a precise, monospace, sparse
   language. Additive + fully reversible — remove this link and restore
   the fx.js <script> to revert.
   ===================================================================== */

/* ---- 1. Quiet the hero backdrop; the dot-grid canvas replaces it ---- */
.hero { position: relative; }
.hero::before { display: none !important; }        /* polish.css aurora */
.hero-bg-grid { display: none !important; }        /* CSS line grid */
.hero-particles { display: none !important; }      /* old particle network */

.hero-dotgrid {
  position: absolute; inset: 0; z-index: 0; display: block; pointer-events: none;
  -webkit-mask-image: radial-gradient(ellipse 88% 80% at 50% 46%, #000 64%, transparent 100%);
          mask-image: radial-gradient(ellipse 88% 80% at 50% 46%, #000 64%, transparent 100%);
}

/* ---- 2. Global restraint: drop the blurry cursor-glow blob ---- */
.cursor-glow { display: none !important; }

/* ---- 3. Hero name + photo: left as the ORIGINAL design (reverted per
   request) — original font/shimmer on the name, original glow + spinning
   ring + halo on the photo. Only the backdrop + buttons below are minimal. ---- */

/* ---- 4. Hero buttons: square, mono, understated (scoped to hero) ---- */
.hero .btn {
  font-family: var(--font-mono);
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-radius: 3px;
  padding: 0.78rem 1.35rem;
  border: 1px solid var(--border);
  box-shadow: none !important;
  transition: color .2s ease, border-color .2s ease, background .2s ease, transform .2s ease;
}
.hero .btn:hover { transform: translateY(-1px); }
.hero .btn-primary {
  background: rgba(var(--cyan-rgb), 0.10);
  border-color: rgba(var(--cyan-rgb), 0.5);
  color: var(--cyan);
}
.hero .btn-primary:hover {
  background: rgba(var(--cyan-rgb), 0.17);
  border-color: var(--cyan);
  color: var(--cyan);
}
.hero .btn-outline,
.hero .btn-glow {
  background: transparent;
  color: var(--text);
  border-color: var(--border);
}
.hero .btn-outline:hover,
.hero .btn-glow:hover {
  background: rgba(var(--cyan-rgb), 0.06);
  border-color: var(--cyan);
  color: var(--cyan);
}

/* ---- 5. Primary buttons: drop the expanding hover-ripple (animations.css),
   leave a normal lift+shadow hover ---- */
.btn-primary::before { display: none !important; }

/* ---- 7. Hero socials: subtle, no glow ---- */
.hero-socials a:hover {
  border-color: var(--cyan);
  box-shadow: none !important;
  transform: translateY(-2px);
}

@media (prefers-reduced-motion: reduce) {
  .hero-name .gradient-text { animation: none !important; }
}


/* ---- pub-card + blog-card interactions ---- */
/* summary sits directly under the title (title no longer eats the space); tags pinned to the bottom */
.pub-title-v2 { flex: none !important; }
.pub-card-body .pub-tags-v2 { margin-top: auto; }
/* whole card clickable via a stretched link; tag links sit above it and stay individually clickable */
.pub-card-v2, .blog-card-v2 { position: relative; }
.pub-card-v2 .card-link, .blog-card-v2 .card-link { position: absolute; inset: 0; z-index: 1; border-radius: inherit; }
.pub-tags-v2 a.blog-tag, .blog-tags-v2 a.blog-tag { position: relative; z-index: 2; text-decoration: none; cursor: pointer; }


/* ---- card content type sizing (bigger + compact, no mid-card gap) ---- */
.pub-card-body .pub-tags-v2 { margin-top: 0; }
.pub-title-v2 { font-size: 1.08rem !important; line-height: 1.34; margin-bottom: .5rem; }
.pub-excerpt { font-size: .9rem !important; line-height: 1.55; -webkit-line-clamp: 3; margin-bottom: .8rem; }
.pub-meta-v2 { font-size: .78rem; }


/* ---- one-line tag rows on cards (no wrapping; soft fade on overflow) ---- */
.pub-tags-v2, .blog-tags-v2 {
  flex-wrap: nowrap !important;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, #000 91%, transparent);
          mask-image: linear-gradient(90deg, #000 91%, transparent);
}
.pub-tags-v2 > *, .blog-tags-v2 > * { flex: 0 0 auto; white-space: nowrap; }

/* summary tiny-but-readable */
.pub-excerpt { font-size: .84rem !important; line-height: 1.5; }

/* nav-cta: outline / ghost style (Get in Touch) */
.nav-cta {
  background: transparent !important;
  color: var(--cyan) !important;
  border: 1px solid rgba(var(--cyan-rgb), 0.55) !important;
  box-shadow: none !important;
}
.nav-cta:hover {
  background: rgba(var(--cyan-rgb), 0.10) !important;
  border-color: var(--cyan) !important;
  opacity: 1 !important;
}
.nav-cta::before { display: none !important; }
