/* ASNET customer area — dashboard, services, profile. Whitespace + thin
 * separators + a handful of meaningful cards, not a wall of KPI tiles. */

.asnet-page-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--asnet-space-md);
  margin-bottom: var(--asnet-space-lg);
  flex-wrap: wrap;
}
.asnet-page-header h1 { margin-bottom: 4px; }
.asnet-page-header__hint { color: var(--asnet-text-muted); margin: 0; }

/* Dashboard hero: same .asnet-page-header row, just given a quiet bordered
   surface + one oversized, near-invisible watermark icon (no stock photos,
   no gradient/glow stack) so the greeting reads as a considered ASNET
   panel instead of bare text floating on the page background. No fake
   uptime/health/usage numbers here - only the greeting, the existing hint
   copy, and the two real routes (order, order/service). */
.asnet-hero {
  position: relative;
  overflow: hidden;
  padding: var(--asnet-space-lg);
  border: 1px solid var(--asnet-border);
  border-radius: var(--asnet-radius-md);
  background: linear-gradient(135deg, var(--asnet-surface-muted), var(--asnet-surface-elevated));
}
.asnet-hero__decor {
  position: absolute;
  top: -28px;
  right: -20px;
  width: 180px;
  height: 180px;
  color: var(--asnet-primary);
  opacity: 0.07;
  pointer-events: none;
}
.asnet-hero__decor .asnet-icon { width: 100%; height: 100%; }
.asnet-hero__intro { position: relative; }
.asnet-hero__eyebrow {
  display: inline-block;
  font-size: var(--asnet-fs-xs);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--asnet-primary);
  margin-bottom: 4px;
}
.asnet-hero__actions { position: relative; display: flex; gap: var(--asnet-space-xs); flex-wrap: wrap; }
@media (max-width: 480px) {
  .asnet-hero { padding: var(--asnet-space-md); }
  .asnet-hero__actions { width: 100%; }
  .asnet-hero__actions .asnet-btn { flex: 1 1 auto; }
  /* Dashboard globe micro-polish: at this width the hero is narrow enough
     that the 180px watermark (sized for the desktop/tablet hero already
     reviewed and accepted) reads as its own standalone icon instead of a
     background detail. Purely decorative (aria-hidden, no content), so
     dropping it here has no effect beyond this one breakpoint - desktop/
     tablet/medium composition is untouched. */
  .asnet-hero__decor { display: none; }
}

.asnet-section { margin-bottom: var(--asnet-space-lg); }
.asnet-section__head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--asnet-space-sm); margin-bottom: var(--asnet-space-sm); }
.asnet-section__head h2 { font-size: var(--asnet-fs-lg); margin: 0; }

.asnet-grid { display: grid; gap: var(--asnet-space-md); }
.asnet-grid--2 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.asnet-grid--3 { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }

/* Compact status summary row (account status, next invoice, active
   services...) - thin separators, not boxed cards, per the brief. Each
   .asnet-stat got an icon chip + optional micro action/note in this pass,
   but stays inside the same non-card bordered row, not a wall of tiles. */
.asnet-stat-row { display: flex; flex-wrap: wrap; border: 1px solid var(--asnet-border); border-radius: var(--asnet-radius-md); background: var(--asnet-surface-elevated); overflow: hidden; }
.asnet-stat {
  flex: 1 1 200px;
  display: flex;
  align-items: flex-start;
  gap: var(--asnet-space-sm);
  padding: var(--asnet-space-sm) var(--asnet-space-md);
  border-right: 1px solid var(--asnet-border);
  border-bottom: 1px solid var(--asnet-border);
}
.asnet-stat:last-child { border-right: none; }
.asnet-stat__icon {
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  border-radius: var(--asnet-radius-sm);
  background: var(--asnet-primary-soft);
  color: var(--asnet-primary);
  display: flex;
  align-items: center;
  justify-content: center;
}
.asnet-stat__icon .asnet-icon { width: 20px; height: 20px; }
.asnet-stat__body { min-width: 0; }
.asnet-stat__label { display: block; font-size: var(--asnet-fs-xs); color: var(--asnet-text-muted); text-transform: uppercase; letter-spacing: 0.03em; margin-bottom: 4px; }
.asnet-stat__value { display: block; font-size: var(--asnet-fs-xl); font-weight: 700; color: var(--asnet-ink); line-height: 1.2; }
.asnet-stat__value .asnet-badge { font-size: var(--asnet-fs-sm); vertical-align: middle; }
.asnet-stat__action { display: inline-block; margin-top: 2px; font-size: var(--asnet-fs-xs); font-weight: 600; color: var(--asnet-primary); }
.asnet-stat__action:hover { color: var(--asnet-primary-strong); text-decoration: underline; }
.asnet-stat__note { display: inline-block; margin-top: 2px; font-size: var(--asnet-fs-xs); color: var(--asnet-text-muted); }
@media (max-width: 767.98px) {
  .asnet-stat { border-right: none; }
}

/* Service / list rows */
.asnet-list { display: flex; flex-direction: column; }
.asnet-list-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--asnet-space-md);
  padding: var(--asnet-space-sm) 0;
  border-bottom: 1px solid var(--asnet-border);
  flex-wrap: wrap;
}
.asnet-list-row:last-child { border-bottom: none; }
.asnet-list-row__main { display: flex; align-items: center; gap: var(--asnet-space-sm); min-width: 0; }
.asnet-list-row__icon {
  width: 40px;
  height: 40px;
  border-radius: var(--asnet-radius-sm);
  background: var(--asnet-surface-muted);
  color: var(--asnet-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.asnet-list-row__title { font-weight: 700; color: var(--asnet-ink); margin: 0; }
.asnet-list-row__meta { font-size: var(--asnet-fs-sm); color: var(--asnet-text-muted); margin: 2px 0 0; }
.asnet-list-row__actions { display: flex; align-items: center; gap: var(--asnet-space-sm); flex-shrink: 0; margin-left: auto; }

/* Support ticket thread (support-asnet/mod_support_ticket.asnet.html.twig) */
.asnet-ticket-message--admin { border-color: var(--asnet-primary); border-width: 1.5px; }
.markdown-body { font-size: var(--asnet-fs-sm); color: var(--asnet-text); line-height: 1.6; }
.markdown-body :first-child { margin-top: 0; }
.markdown-body :last-child { margin-bottom: 0; }
.markdown-body pre { background: var(--asnet-surface-muted); padding: var(--asnet-space-sm); border-radius: var(--asnet-radius-sm); overflow-x: auto; }
.markdown-body code { background: var(--asnet-surface-muted); padding: 2px 5px; border-radius: 4px; font-size: 0.9em; }

/* Profile form sections */
.asnet-form-section { padding-bottom: var(--asnet-space-lg); margin-bottom: var(--asnet-space-lg); border-bottom: 1px solid var(--asnet-border); }
.asnet-form-section:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.asnet-form-section__title { font-size: var(--asnet-fs-lg); margin-bottom: 2px; }
.asnet-form-section__hint { color: var(--asnet-text-muted); margin-bottom: var(--asnet-space-md); }
