/* ═══════════════ PORTFÓLIO: intro ═══════════════ */
.portfolio-hero {
  position: relative;
  padding-top: calc(var(--section-py) + 60px);
  padding-bottom: 56px;
  overflow: hidden;
}

.portfolio-hero-glow {
  position: absolute;
  top: -320px;
  left: 50%;
  width: 900px;
  height: 900px;
  translate: -50% 0;
  background: conic-gradient(from 0deg, rgba(0,200,150,.16), transparent 30%, transparent 60%, rgba(0,200,150,.12), transparent 90%);
  filter: blur(80px);
  animation: portfolio-glow-spin 22s linear infinite;
  pointer-events: none;
  z-index: 0;
}
@keyframes portfolio-glow-spin {
  to { transform: rotate(360deg); }
}

.portfolio-hero .container { position: relative; z-index: 1; }

.portfolio-stats {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 36px;
  margin-top: 40px;
}
.portfolio-stat { display: flex; flex-direction: column; align-items: center; }
.portfolio-stat strong {
  font-family: var(--font-display);
  font-size: 1.9rem;
  color: var(--green);
  font-weight: 800;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
}
.portfolio-stat span { font-size: 0.85rem; color: var(--text-mute); margin-top: 4px; }

.portfolio-hero-cta { text-align: center; margin-top: 30px; }

/* ─── Ticker de segmentos ─── */
.portfolio-marquee {
  margin-top: 52px;
  padding-block: 16px;
  border-top: 1px solid var(--border-soft);
  border-bottom: 1px solid var(--border-soft);
  overflow: hidden;
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.portfolio-marquee-track {
  display: flex;
  width: max-content;
  gap: 14px;
  animation: portfolio-marquee 30s linear infinite;
}
.portfolio-marquee:hover .portfolio-marquee-track { animation-play-state: paused; }
.portfolio-marquee-track span {
  font-family: var(--font-display);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-mute);
  white-space: nowrap;
}
.portfolio-marquee-track span.bullet { color: var(--green); }
@keyframes portfolio-marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* ═══════════════ FILTROS ═══════════════ */
.portfolio-filters {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
  margin-bottom: 48px;
}
.portfolio-filter {
  padding: 10px 20px;
  border-radius: var(--r-pill);
  border: 1px solid var(--border);
  background: transparent;
  color: var(--text-dim);
  font-family: var(--font-display);
  font-size: 0.86rem;
  font-weight: 600;
  transition: all .25s var(--ease);
}
.portfolio-filter:hover { border-color: var(--green); color: var(--ink); }
.portfolio-filter.is-active {
  background: var(--green);
  border-color: var(--green);
  color: #000;
  box-shadow: var(--shadow-green);
}

/* ═══════════════ GRID DE CASES (bento) ═══════════════ */
.portfolio-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 28px;
  perspective: 1400px;
}

.portfolio-card {
  position: relative;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  overflow: hidden;
  transform-style: preserve-3d;
  will-change: transform;
  transition: transform .35s cubic-bezier(0.22, 1, 0.36, 1), border-color .3s var(--ease), box-shadow .3s var(--ease), opacity .3s var(--ease);
}
.portfolio-card:hover {
  border-color: var(--green);
  box-shadow: 0 30px 70px -24px rgba(0,0,0,.75), 0 0 0 1px rgba(0,200,150,.35), 0 0 46px -10px rgba(0,200,150,.4);
}

.portfolio-card.is-filtered {
  opacity: 0;
  transform: scale(.92) !important;
  pointer-events: none;
}

.portfolio-card--featured { grid-column: span 2; }
.portfolio-card--featured .portfolio-card-media { aspect-ratio: 21 / 9; }

.portfolio-featured-badge {
  position: absolute;
  top: 14px;
  right: 14px;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 6px 14px 6px 10px;
  border-radius: var(--r-pill);
  background: rgba(7, 8, 8, 0.75);
  backdrop-filter: blur(6px);
  border: 1px solid var(--border);
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--ink);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.portfolio-featured-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--green);
  animation: portfolio-pulse 1.8s ease-in-out infinite;
}
@keyframes portfolio-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(0,200,150,.55); }
  50% { box-shadow: 0 0 0 6px rgba(0,200,150,0); }
}

.portfolio-card-media {
  display: block;
  width: 100%;
  position: relative;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--bg-elev);
  text-align: left;
}
.portfolio-card-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .6s var(--ease);
}
.portfolio-card:hover .portfolio-card-media img { transform: scale(1.08); }

.portfolio-card-media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(320px circle at var(--mx, 50%) var(--my, 50%), rgba(255,255,255,.28), transparent 55%);
  opacity: 0;
  transition: opacity .4s var(--ease);
  mix-blend-mode: overlay;
  pointer-events: none;
}
.portfolio-card:hover .portfolio-card-media::after { opacity: 1; }

/* ─── Dica de clique: prévia ao vivo ─── */
.portfolio-card-hover-hint {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  background: rgba(7, 8, 8, 0.55);
  backdrop-filter: blur(2px);
  color: var(--ink);
  font-family: var(--font-display);
  font-size: 0.92rem;
  font-weight: 600;
  opacity: 0;
  transform: scale(.97);
  transition: opacity .3s var(--ease), transform .3s var(--ease);
  pointer-events: none;
}
.portfolio-card-hover-hint svg {
  width: 20px;
  height: 20px;
  color: var(--green);
  transition: transform .3s var(--ease);
}
.portfolio-card:hover .portfolio-card-hover-hint { opacity: 1; transform: scale(1); }
.portfolio-card:hover .portfolio-card-hover-hint svg { transform: translateX(4px); }

.portfolio-card-tag {
  position: absolute;
  z-index: 3;
  top: 14px;
  left: 14px;
  padding: 6px 14px;
  border-radius: var(--r-pill);
  background: rgba(7, 8, 8, 0.75);
  backdrop-filter: blur(6px);
  border: 1px solid var(--border);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--green);
  text-transform: uppercase;
}

.portfolio-card-logo {
  position: absolute;
  z-index: 3;
  bottom: -22px;
  left: 22px;
  width: 52px;
  height: 52px;
  border-radius: var(--r-md);
  background: var(--surface);
  border: 1px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 8px;
  box-shadow: var(--shadow-sm);
}
.portfolio-card-logo img { width: 100%; height: 100%; object-fit: contain; }

.portfolio-card-body {
  padding: 34px 22px 24px;
}
.portfolio-card-body h3 { margin-bottom: 8px; }
.portfolio-card-body p {
  font-size: 0.95rem;
  color: var(--text-dim);
  margin-bottom: 16px;
}

.portfolio-card-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.portfolio-card-chips span {
  font-size: 0.75rem;
  color: var(--text-mute);
  border: 1px solid var(--border);
  border-radius: var(--r-pill);
  padding: 4px 12px;
}

.portfolio-note {
  margin-top: 44px;
  text-align: center;
  font-size: 0.9rem;
  color: var(--text-mute);
}

/* ─── [hidden] precisa vencer o display:grid/flex dos próprios blocos ─── */
.portfolio-grid[hidden],
.portfolio-cta-break[hidden],
.portfolio-more[hidden] { display: none; }

/* ═══════════════ CHAMADA PARA AÇÃO NO MEIO ═══════════════ */
.portfolio-cta-break {
  margin-top: 40px;
  padding: 44px 32px;
  border-radius: var(--r-lg);
  text-align: center;
  background: var(--grad-hero), var(--bg-card);
  border: 1px solid var(--border);
}
.portfolio-cta-break-inner { max-width: 560px; margin-inline: auto; }
.portfolio-cta-break-inner h3 { font-size: clamp(1.3rem, 2.6vw, 1.7rem); margin-bottom: 10px; }
.portfolio-cta-break-inner p { color: var(--text-dim); margin-bottom: 26px; }

/* ═══════════════ ESTEIRA: MAIS SITES ═══════════════ */
.portfolio-more { margin-top: 48px; }
.portfolio-more-label {
  text-align: center;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-bottom: 18px;
}
.portfolio-more-track-wrap {
  overflow: hidden;
  mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
}
.portfolio-more-track {
  display: flex;
  width: max-content;
  gap: 26px;
  align-items: flex-start;
  animation: portfolio-more-scroll 48s linear infinite;
}
.portfolio-more-track-wrap:hover .portfolio-more-track { animation-play-state: paused; }
@keyframes portfolio-more-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* Cartão em estilo "janela de navegador" mini, ecoando o chrome do modal de prévia */
.portfolio-more-card {
  position: relative;
  flex: 0 0 auto;
  width: 475px;
  padding-top: 34px;
  border-radius: var(--r-lg);
  overflow: hidden;
  border: 1px solid var(--border);
  background: var(--surface);
  box-shadow: 0 26px 54px -22px rgba(0,0,0,.65);
  transition: border-color .25s var(--ease), transform .25s var(--ease), box-shadow .25s var(--ease);
}
.portfolio-more-card::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 34px;
  z-index: 2;
  background-color: var(--bg-elev);
  border-bottom: 1px solid var(--border-soft);
  background-image:
    radial-gradient(circle 4.5px at 18px 17px, #ff5f57 100%, transparent 101%),
    radial-gradient(circle 4.5px at 34px 17px, #febc2e 100%, transparent 101%),
    radial-gradient(circle 4.5px at 50px 17px, #28c840 100%, transparent 101%);
}
.portfolio-more-card:hover {
  border-color: var(--green);
  transform: translateY(-6px);
  box-shadow: 0 30px 60px -20px rgba(0,0,0,.7), 0 0 0 1px rgba(0,200,150,.3);
}

.portfolio-more-card img {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  transition: transform .5s var(--ease);
}
.portfolio-more-card:hover img { transform: scale(1.06); }

.portfolio-more-card span {
  display: block;
  padding: 14px 18px;
  background: var(--surface);
  color: var(--ink);
  font-family: var(--font-display);
  font-size: 1.02rem;
  font-weight: 600;
  text-align: left;
}

@media (max-width: 640px) {
  .portfolio-cta-break { padding: 32px 22px; }
  .portfolio-more-card { width: 320px; padding-top: 28px; }
  .portfolio-more-card::before { height: 28px; }
  .portfolio-more-card span { padding: 12px 14px; font-size: 0.92rem; }
}

@media (prefers-reduced-motion: reduce) {
  .portfolio-more-track { animation: none; }
}

@media (max-width: 980px) {
  .portfolio-grid { grid-template-columns: repeat(2, 1fr); }
  .portfolio-card--featured { grid-column: span 2; }
}
@media (max-width: 640px) {
  .portfolio-grid { grid-template-columns: 1fr; perspective: none; }
  .portfolio-card--featured { grid-column: span 1; }
  .portfolio-card--featured .portfolio-card-media { aspect-ratio: 4 / 3; }
  .portfolio-filters { gap: 8px; }
  .portfolio-filter { padding: 8px 16px; font-size: 0.8rem; }
}

@media (max-width: 560px) {
  .portfolio-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 8px;
  }
  .portfolio-stat strong { font-size: 1.3rem; }
  .portfolio-stat span { font-size: 0.68rem; line-height: 1.2; margin-top: 2px; }
  .portfolio-hero-cta { margin-top: 24px; }
  .portfolio-hero-cta .btn { width: 100%; max-width: 320px; }
}

@media (prefers-reduced-motion: reduce) {
  .portfolio-hero-glow,
  .portfolio-marquee-track,
  .portfolio-featured-dot { animation: none; }
  .portfolio-card { transition: border-color .3s, box-shadow .3s, opacity .3s; transform: none !important; }
}

/* ═══════════════ MODAL: PRÉVIA DO SITE ═══════════════ */
body.preview-modal-lock { overflow: hidden; }

.preview-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 28px;
  opacity: 0;
  pointer-events: none;
  transition: opacity .3s var(--ease);
}
.preview-modal.is-open { opacity: 1; pointer-events: auto; }

.preview-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(7, 8, 8, 0.86);
  backdrop-filter: blur(8px);
}

.preview-modal-window {
  position: relative;
  z-index: 1;
  width: min(1120px, 100%);
  height: min(760px, 100%);
  display: flex;
  flex-direction: column;
  background: var(--bg-elev);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  box-shadow: 0 60px 120px -30px rgba(0,0,0,.8), 0 0 0 1px rgba(0,200,150,.15);
  overflow: hidden;
  transform: scale(.95) translateY(16px);
  opacity: 0;
  transition: transform .35s var(--ease), opacity .35s var(--ease);
}
.preview-modal.is-open .preview-modal-window { transform: scale(1) translateY(0); opacity: 1; }
.preview-modal-window:focus { outline: none; }

.preview-modal-chrome {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 14px 16px;
  background: var(--surface);
  border-bottom: 1px solid var(--border);
  flex: 0 0 auto;
}

.preview-modal-dots { display: flex; gap: 7px; }
.preview-modal-dots span { width: 11px; height: 11px; border-radius: 50%; }
.preview-modal-dots span:nth-child(1) { background: #ff5f57; }
.preview-modal-dots span:nth-child(2) { background: #febc2e; }
.preview-modal-dots span:nth-child(3) { background: #28c840; }

.preview-modal-address {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  padding: 8px 14px;
  border-radius: var(--r-pill);
  background: var(--bg-card);
  border: 1px solid var(--border);
  color: var(--text-dim);
}
.preview-modal-address svg { width: 14px; height: 14px; color: var(--green); flex-shrink: 0; }
.preview-modal-address span {
  font-family: "SFMono-Regular", Consolas, monospace;
  font-size: 0.82rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.preview-modal-actions { display: flex; align-items: center; gap: 6px; flex: 0 0 auto; }
.preview-modal-viewport,
.preview-modal-close {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: var(--r-sm);
  border: 1px solid var(--border);
  color: var(--text-dim);
  transition: all .2s var(--ease);
}
.preview-modal-viewport svg,
.preview-modal-close svg { width: 17px; height: 17px; }
.preview-modal-viewport:hover,
.preview-modal-close:hover { border-color: var(--green); color: var(--ink); }
.preview-modal-viewport.is-active { background: var(--green); border-color: var(--green); color: #000; }
.preview-modal-close { margin-left: 4px; }
.preview-modal-close:hover { border-color: #ff5f57; color: #ff5f57; }

.preview-modal-body {
  position: relative;
  flex: 1;
  min-height: 0;
  background: var(--bg-card);
  overflow: auto;
}
.preview-modal-frame {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  background: #fff;
  transition: width .35s var(--ease);
}

.preview-modal-window.is-mobile-view .preview-modal-body {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding-block: 20px;
}
.preview-modal-window.is-mobile-view .preview-modal-frame {
  width: 390px;
  height: 100%;
  flex: 0 0 auto;
  border-radius: 22px;
  border: 8px solid #111;
  box-shadow: var(--shadow-card);
}

.preview-modal-loading {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  background: var(--bg-elev);
  color: var(--text-dim);
  font-size: 0.92rem;
  transition: opacity .3s var(--ease);
}
.preview-modal-loading.is-hidden { opacity: 0; pointer-events: none; }
.preview-modal-spinner {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 3px solid var(--border);
  border-top-color: var(--green);
  animation: preview-spin .8s linear infinite;
}
@keyframes preview-spin { to { transform: rotate(360deg); } }

.preview-modal-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 20px;
  background: var(--surface);
  border-top: 1px solid var(--border);
  flex: 0 0 auto;
}
.preview-modal-footer p { font-size: 0.82rem; color: var(--text-mute); max-width: 60ch; }
.preview-modal-footer .btn {
  padding: 9px 18px;
  font-size: 0.85rem;
  white-space: nowrap;
}

@media (max-width: 760px) {
  .preview-modal { padding: 0; }
  .preview-modal-window { width: 100%; height: 100%; border-radius: 0; }
  .preview-modal-address span { display: none; }
  .preview-modal-footer { flex-direction: column; align-items: flex-start; }
  .preview-modal-window.is-mobile-view .preview-modal-frame { width: 100%; border: 0; border-radius: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .preview-modal,
  .preview-modal-window,
  .preview-modal-spinner { transition: none; animation-duration: .01ms; }
}
