/* =========================================================
   NuovaMente — student-home.css
   Home do aluno

   Direção visual:
   - Tipografia mais contrastante
   - Blocos mais neutros e profissionais
   - Cores principais concentradas no fundo da página e em pequenos acentos
   - Bloco "Ciao / Hoje para você" continua sendo o bloco principal
   - Mantida a opacidade 1 do elemento visual do bloco principal
   ========================================================= */


/* =========================================================
   0. Fundo geral da página
   ========================================================= */

body {
  background:
    radial-gradient(circle at 14% 8%, rgba(54, 146, 155, .13), transparent 30%),
    radial-gradient(circle at 92% 16%, rgba(92, 107, 175, .12), transparent 34%),
    linear-gradient(135deg, rgba(248, 250, 252, 1), rgba(241, 245, 249, 1));
}


/* =========================================================
   1. Estrutura principal
   ========================================================= */

.nm-student-home {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-areas:
    "today"
    "news"
    "quick"
    "footer";
  gap: 16px;
}

/*
  No PHP atual, Hoje e Novidades estão dentro de .nm-home-top-grid,
  enquanto Acesso rápido está fora.

  display: contents permite que Hoje, Novidades e Acesso rápido
  participem do mesmo grid.
*/
.nm-home-top-grid {
  display: contents;
}

.nm-today-card {
  grid-area: today;
}

.nm-ai-news {
  grid-area: news;
}

.nm-quick-access {
  grid-area: quick;
}

.nm-home-footer {
  grid-area: footer;
}


/* =========================================================
   2. Desktop / web
   ========================================================= */

@media (min-width: 924px) {
  .nm-student-home {
    grid-template-columns: minmax(0, 1.75fr) minmax(280px, 0.25fr);
    grid-template-areas:
      "today today"
      "news quick"
      "footer footer";
    gap: 18px;
    align-items: stretch;
  }

  .nm-ai-news,
  .nm-quick-access {
    min-width: 0;
    height: 100%;
    align-self: stretch;
    display: flex;
    flex-direction: column;
  }
}


/* =========================================================
   3. Blocos base
   ========================================================= */

.nm-home-section {
  width: 100%;
  border-radius: 24px;

  background: rgba(255, 255, 255, .90);
  border: 1px solid rgba(226, 232, 240, .88);
  box-shadow:
    0 18px 44px rgba(15, 23, 42, .055),
    inset 0 1px 0 rgba(255, 255, 255, .72);

  backdrop-filter: blur(var(--blur, 9px));
  -webkit-backdrop-filter: blur(var(--blur, 9px));
  overflow: hidden;
}

.nm-home-kicker {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: fit-content;
  min-height: 26px;
  padding: 3px 11px;
  border-radius: 999px;

  background: rgba(54, 146, 155, .09);
  border: 1px solid rgba(54, 146, 155, .16);
  color: var(--primary-color, #36929b);

  font-size: .78rem;
  font-weight: 900;
  letter-spacing: .055em;
  text-transform: uppercase;
  transition: opacity .35s ease, transform .35s ease, color .35s ease, background .35s ease, border-color .35s ease;
}

.nm-section-head {
  padding: 18px 20px 8px;
}

.nm-section-head--compact {
  padding-bottom: 8px;
}

.nm-section-head h3,
.nm-section-head h2,
.nm-today-card h1,
.nm-today-card h2 {
  font-family: var(--font-title);
  color: var(--text-primary);
}

.nm-section-head h3 {
  margin: 8px 0 2px;
  font-size: clamp(1.38rem, 2.2vw, 1.95rem);
  line-height: 1;
  font-weight: 900;
  letter-spacing: -.02em;
  color: color-mix(in srgb, var(--text-primary) 92%, #111827 8%);
}

.nm-section-head p {
  margin: 0;
  color: var(--text-secondary);
  font-size: .98rem;
  line-height: 1.45;
}


/* =========================================================
   4. Hoje para você — bloco principal
   ========================================================= */

.nm-today-card {
  position: relative;
  isolation: isolate;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 160px;
  align-items: center;
  gap: 18px;
  padding: clamp(22px, 3vw, 32px);

  background:
    radial-gradient(circle at 92% 10%, rgba(92, 107, 175, .16), transparent 32%),
    radial-gradient(circle at 10% 15%, rgba(54, 146, 155, .14), transparent 30%),
    linear-gradient(135deg, rgba(255, 255, 255, .96), rgba(255, 255, 255, .84));

  border-color: rgba(54, 146, 155, .14);

  box-shadow:
    0 20px 46px rgba(15, 23, 42, .065),
    0 12px 28px rgba(54, 146, 155, .045),
    inset 0 1px 0 rgba(255, 255, 255, .70);

  transition:
    background .65s ease,
    border-color .65s ease,
    box-shadow .65s ease,
    transform .45s ease;
}

.nm-today-card::before,
.nm-today-card::after {
  content: "";
  position: absolute;
  inset: -20%;
  pointer-events: none;
  opacity: 0;
  z-index: 0;
  transition: opacity .55s ease;
}

.nm-today-card::before {
  background:
    radial-gradient(circle at 18% 22%, rgba(54, 146, 155, .22), transparent 28%),
    radial-gradient(circle at 82% 18%, rgba(92, 107, 175, .20), transparent 30%),
    radial-gradient(circle at 74% 70%, rgba(54, 146, 155, .14), transparent 24%),
    linear-gradient(120deg, rgba(255,255,255,0) 0%, rgba(255,255,255,.18) 48%, rgba(255,255,255,0) 100%);
  filter: blur(18px);
  transform: scale(1) translate3d(0, 0, 0);
}

.nm-today-card::after {
  inset: -8%;
  background: linear-gradient(
    115deg,
    rgba(255,255,255,0) 0%,
    rgba(255,255,255,.18) 22%,
    rgba(54,146,155,.08) 45%,
    rgba(92,107,175,.10) 62%,
    rgba(255,255,255,0) 100%
  );
  filter: blur(14px);
  transform: translateX(-16%) rotate(5deg);
}

.nm-today-card__content {
  position: relative;
  z-index: 2;
  min-width: 0;
}

.nm-home-title {
  margin: 10px 0 0;
  font-size: clamp(2.25rem, 4vw, 3.55rem);
  line-height: .92;
  font-weight: 900;
  letter-spacing: -.035em;
  color: color-mix(in srgb, var(--text-primary) 92%, #0f172a 8%) !important;
}

.nm-today-card h2 {
  margin: 8px 0 12px;
  font-size: clamp(1.76rem, 3vw, 2.38rem);
  line-height: .98;
  font-weight: 900;
  letter-spacing: -.025em;
  color: var(--primary-color, #36929b);
  transition: color .4s ease, opacity .35s ease, transform .35s ease;
}

.nm-today-card__text {
  max-width: 760px;
  margin: 0;
  color: color-mix(in srgb, var(--text-secondary) 86%, #0f172a 14%);
  font-size: clamp(1rem, 1.55vw, 1.15rem);
  line-height: 1.5;
  transition: color .4s ease, opacity .35s ease, transform .35s ease;
}

.nm-today-card__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 18px;
}

.nm-today-card__actions .btn {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: opacity .35s ease, transform .35s ease, box-shadow .35s ease;
}

.nm-today-card__visual {
  position: relative;
  z-index: 2;
  width: 126px;
  height: 126px;
  pointer-events: none;
  opacity: 1;
  justify-self: center;
}

.nm-today-card__visual .material-symbols-rounded {
  position: relative;
  z-index: 2;
  font-size: 52px;
  color: #fff;
  width: 96px;
  height: 96px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 30px;

  background: linear-gradient(
    135deg,
    var(--primary-color, #36929b),
    color-mix(in srgb, var(--accent-color, #5c6baf) 84%, white 16%)
  );

  box-shadow:
    0 18px 34px rgba(54, 146, 155, .16),
    inset 0 1px 0 rgba(255, 255, 255, .20);

  transition:
    transform .45s ease,
    box-shadow .45s ease,
    filter .45s ease;
}

.nm-orb {
  position: absolute;
  border-radius: 999px;
}

.nm-orb--main {
  width: 126px;
  height: 126px;
  background: rgba(54, 146, 155, .09);
  transition: opacity .4s ease, transform .4s ease;
}

.nm-orb--small {
  right: 10px;
  top: 16px;
  width: 48px;
  height: 48px;
  background: rgba(92, 107, 175, .09);
  transition: opacity .4s ease, transform .4s ease;
}


/* =========================================================
   5. Estado premium de carregamento
   ========================================================= */

.nm-today-card.is-loading {
  background:
    radial-gradient(circle at 90% 10%, rgba(92, 107, 175, .22), transparent 34%),
    radial-gradient(circle at 12% 18%, rgba(54, 146, 155, .20), transparent 32%),
    linear-gradient(115deg, rgba(255,255,255,.96), rgba(247,250,252,.90));
}

.nm-today-card.is-loading::before {
  opacity: 1;
  animation: nmTodayPremiumBg 5.6s ease-in-out infinite;
}

.nm-today-card.is-loading::after {
  opacity: .78;
  animation: nmTodayPremiumSweep 4.8s ease-in-out infinite;
}

.nm-today-card.is-loading .nm-today-card__visual .material-symbols-rounded {
  animation: nmTodayIconGlow 2.2s ease-in-out infinite;
}

.nm-today-card.is-loading .nm-orb--main {
  animation: nmTodayOrbPulse 2.5s ease-in-out infinite;
}

.nm-today-card.is-loading .nm-orb--small {
  animation: nmTodayOrbPulse 2.8s ease-in-out infinite reverse;
}

.nm-today-card.is-loading #todayBadge {
  background: rgba(54, 146, 155, .11);
  border-color: rgba(54, 146, 155, .22);
}

.nm-today-card.is-loading #todayCta {
  box-shadow:
    0 10px 24px rgba(54, 146, 155, .10),
    inset 0 1px 0 rgba(255,255,255,.20);
}

.nm-today-card.is-ready::before,
.nm-today-card.is-ready::after {
  opacity: 0;
}

@keyframes nmTodayPremiumBg {
  0%, 100% {
    transform: scale(1) translate3d(0, 0, 0);
    filter: blur(18px);
  }
  25% {
    transform: scale(1.03) translate3d(1.5%, -1%, 0);
    filter: blur(22px);
  }
  50% {
    transform: scale(1.05) translate3d(-1%, 1.5%, 0);
    filter: blur(24px);
  }
  75% {
    transform: scale(1.02) translate3d(1%, 1%, 0);
    filter: blur(20px);
  }
}

@keyframes nmTodayPremiumSweep {
  0% {
    transform: translateX(-22%) rotate(5deg);
    opacity: .18;
  }
  50% {
    transform: translateX(10%) rotate(5deg);
    opacity: .62;
  }
  100% {
    transform: translateX(28%) rotate(5deg);
    opacity: .12;
  }
}

@keyframes nmTodayIconGlow {
  0%, 100% {
    box-shadow:
      0 18px 34px rgba(54, 146, 155, .16),
      0 0 0 rgba(54,146,155,0),
      0 0 0 rgba(92,107,175,0),
      inset 0 1px 0 rgba(255,255,255,.20);
    transform: scale(1) translateY(0);
    filter: saturate(1);
  }

  50% {
    box-shadow:
      0 22px 44px rgba(54, 146, 155, .24),
      0 0 34px rgba(54,146,155,.20),
      0 0 18px rgba(92,107,175,.16),
      inset 0 1px 0 rgba(255,255,255,.28);
    transform: scale(1.035) translateY(-2px);
    filter: saturate(1.08);
  }
}

@keyframes nmTodayOrbPulse {
  0%, 100% {
    opacity: .34;
    transform: scale(.95);
  }

  50% {
    opacity: .78;
    transform: scale(1.10);
  }
}


/* =========================================================
   6. Novidades / IA
   Bloco neutro: as imagens fazem o papel visual principal
   ========================================================= */

.nm-ai-news {
  position: relative;
  padding-bottom: 16px;

  background:
    linear-gradient(135deg, rgba(255, 255, 255, .92), rgba(255, 255, 255, .86));

  border: 1px solid rgba(226, 232, 240, .88);

  box-shadow:
    0 16px 38px rgba(15, 23, 42, .052),
    inset 0 1px 0 rgba(255, 255, 255, .68);
}

.nm-ai-news::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;

  background:
    radial-gradient(circle at 92% 10%, rgba(92, 107, 175, .055), transparent 30%),
    radial-gradient(circle at 8% 18%, rgba(54, 146, 155, .050), transparent 28%);

  opacity: 1;
}

.nm-ai-news::after {
  content: "";
  position: absolute;
  left: 22px;
  right: 22px;
  top: 0;
  height: 2px;
  border-radius: 999px;

  background: linear-gradient(
    90deg,
    rgba(54, 146, 155, .42),
    rgba(92, 107, 175, .32)
  );
  opacity: 0;
  box-shadow: none;
}

.nm-ai-news .nm-home-kicker {
  background: rgba(54, 146, 155, .07);
  border-color: rgba(54, 146, 155, .14);
  color: var(--primary-color, #36929b);
  box-shadow: none;
}

.nm-ai-news .nm-section-head {
  position: relative;
  z-index: 2;
  flex: 0 0 auto;
}

.nm-ai-news .nm-section-head h3 {
  margin-top: 10px;
  font-size: clamp(1.48rem, 2.25vw, 1.98rem);
  font-weight: 900;
  letter-spacing: -.025em;
  color: color-mix(in srgb, var(--text-primary) 92%, #111827 8%);
}

.nm-ai-news .nm-section-head p {
  max-width: 760px;
  color: var(--text-secondary);
  font-size: clamp(.96rem, 1.45vw, 1.04rem);
}

/* Lista das imagens dos módulos */
.nm-ai-image-list {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: 1fr;
  gap: 12px;
  padding: 10px 20px 4px;
  align-items: start;
  flex: 1 1 auto;
}

/* Desktop: duas imagens lado a lado, dividindo o espaço disponível */
@media (min-width: 1024px) {
  .nm-ai-image-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: center;
  }
}

.nm-ai-image-card {
  display: block;
  overflow: hidden;
  border-radius: 13px;

  background: rgba(255, 255, 255, .94);
  border: 1px solid rgba(226, 232, 240, .86);

  box-shadow:
    0 10px 24px rgba(15, 23, 42, .07),
    0 0 0 1px rgba(255, 255, 255, .06) inset;

  text-decoration: none;
  transition:
    transform .22s ease,
    box-shadow .22s ease,
    border-color .22s ease;
}

.nm-ai-image-card:hover,
.nm-ai-image-card:focus {
  text-decoration: none;
  transform: translateY(-2px);

  border-color: rgba(54, 146, 155, .20);

  box-shadow:
    0 16px 32px rgba(15, 23, 42, .10),
    0 0 0 1px rgba(54, 146, 155, .045) inset;
}

.nm-ai-image-card:active {
  transform: translateY(0) scale(.995);
}

.nm-ai-image-card img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1562 / 677;
  object-fit: cover;

  /*
    Mantidos como você pediu.
    Observação técnica: em CSS, filtros separados se sobrescrevem.
    Mantive a estrutura atual para preservar o comportamento visual atual.
  */
  filter: brightness(1.2);
  filter: contrast(95%);
  filter: saturate(100%);
  opacity: 0.95;
}


/* =========================================================
   7. Acesso rápido minimalista
   ========================================================= */

.nm-quick-access {
  padding-bottom: 16px;

  background:
    linear-gradient(135deg, rgba(255, 255, 255, .90), rgba(255, 255, 255, .84));

  border-color: rgba(226, 232, 240, .88);
}

@media (min-width: 1024px) {
  .nm-quick-access {
    display: flex;
    flex-direction: column;
  }

  .nm-quick-access .nm-section-head {
    flex: 0 0 auto;
  }

  .quick-access__head {
    flex: 0 0 auto;
  }
}

.nm-quick-access .nm-section-head {
  padding-bottom: 10px;
}

.nm-quick-access .quick-access__sub {
  display: none !important;
}

/* Esconde todos os tópicos internos */
.nm-quick-access .qa-level-grid,
.nm-quick-access .qa-chips-slot,
.nm-quick-access .qa-level__chips {
  display: none !important;
}

/* A1 / A2 / B1 em coluna */
.nm-quick-access .quick-access__head {
  display: grid !important;
  grid-template-columns: 1fr !important;
  gap: 10px !important;
  padding: 4px 20px 18px !important;
  justify-items: stretch;
}

/*
  Botão externo neutro.
  O botão colorido interno vira o acento visual de 5%.
*/
.nm-quick-access .qa-level__top {
  width: 100%;
  min-height: 62px;
  padding: 7px;
  border-radius: 22px;
  justify-content: center;
  text-decoration: none !important;

  background: rgba(255, 255, 255, .72);
  border: 1px solid rgba(226, 232, 240, .92);

  box-shadow:
    0 8px 20px rgba(15, 23, 42, .045),
    inset 0 1px 0 rgba(255, 255, 255, .54);

  transition:
    transform .22s ease,
    border-color .22s ease,
    box-shadow .22s ease;
}

.nm-quick-access .qa-level__top:hover,
.nm-quick-access .qa-level__top:focus {
  transform: translateY(-1px);

  border-color: rgba(54, 146, 155, .20);

  box-shadow:
    0 12px 26px rgba(15, 23, 42, .065),
    inset 0 1px 0 rgba(255, 255, 255, .62);
}

/* Cápsula colorida interna */
.nm-quick-access .qa-level__badge {
  font-size: 0 !important;
  width: 100%;
  height: 46px;
  padding: 0 12px;
  border-radius: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 0;

  font-weight: 900;
  color: #fff;
  line-height: 1;
  white-space: nowrap;

  background:
    linear-gradient(
      135deg,
      var(--primary-color, #36929b),
      color-mix(in srgb, var(--accent-color, #5c6baf) 78%, white 22%)
    );

  box-shadow:
    0 8px 18px rgba(54, 146, 155, .12),
    inset 0 1px 0 rgba(255, 255, 255, .20);
}

/* Recria somente A1 / A2 / B1 */
.nm-quick-access .quick-access__head .qa-level__top:nth-child(1) .qa-level__badge::after {
  content: "A1";
}

.nm-quick-access .quick-access__head .qa-level__top:nth-child(2) .qa-level__badge::after {
  content: "A2";
}

.nm-quick-access .quick-access__head .qa-level__top:nth-child(3) .qa-level__badge::after {
  content: "B1";
}

.nm-quick-access .qa-level__badge::after {
  font-size: 1.32rem;
  font-weight: 900;
  letter-spacing: .06em;
  line-height: 1;
}


/* =========================================================
   8. Footer
   ========================================================= */

.nm-home-footer {
  padding-top: 22px !important;
  font-size: 10pt;
  background: transparent !important;
  box-shadow: none !important;
}

.nm-home-footer .muted {
  opacity: .3;
}


/* =========================================================
   9. Ajustes intermediários
   ========================================================= */

@media (max-width: 1180px) and (min-width: 1024px) {
  .nm-home-title {
    font-size: clamp(2rem, 4vw, 3rem);
  }

  .nm-today-card h2 {
    font-size: clamp(1.65rem, 2.8vw, 2.15rem);
  }
}


/* =========================================================
   10. Tablet estreito / mobile
   ========================================================= */

@media (max-width: 923px) {
  .nm-student-home {
    grid-template-columns: 1fr;
    grid-template-areas:
      "today"
      "news"
      "quick"
      "footer";
    gap: 14px;
  }

  .nm-home-top-grid {
    display: contents;
  }

  .nm-today-card {
    grid-template-columns: 1fr;
    min-height: auto;
  }

  .nm-today-card__visual {
    display: none;
  }

  .nm-ai-image-list {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 768px) {
  .nm-home-section {
    border-radius: 20px;
  }

  .nm-today-card {
    padding: 20px;
  }

  .nm-section-head {
    padding: 18px 14px 4px;
  }

  .nm-ai-news::after {
    left: 16px;
    right: 16px;
  }

  .nm-ai-image-list {
    padding: 12px 14px 2px;
    gap: 12px;
  }

  .nm-quick-access .quick-access__head {
    grid-template-columns: 1fr !important;
    gap: 9px !important;
    padding: 4px 14px 16px !important;
    justify-items: center;
  }

  .nm-quick-access .qa-level__top {
    width: min(82%, 360px);
    min-height: 58px;
    padding: 6px;
    border-radius: 20px;
  }

  .nm-quick-access .qa-level__badge {
    height: 42px;
    border-radius: 16px;
  }

  .nm-quick-access .qa-level__badge::after {
    font-size: 1.22rem;
  }
}

@media (max-width: 480px) {
  .nm-today-card__actions .btn {
    width: 100%;
  }

  .nm-ai-news .nm-section-head h3 {
    font-size: 1.92rem;
  }
}

@media (max-width: 420px) {
  .nm-quick-access .qa-level__top {
    width: min(88%, 330px);
  }
}


/* =========================================================
   11. Dark mode
   ========================================================= */

@media (prefers-color-scheme: dark) {
  body {
    background:
      radial-gradient(circle at 14% 8%, rgba(54, 146, 155, .12), transparent 30%),
      radial-gradient(circle at 92% 16%, rgba(92, 107, 175, .12), transparent 34%),
      linear-gradient(135deg, rgba(13, 17, 23, 1), rgba(17, 24, 39, 1));
  }

  .nm-home-section {
    background: rgba(24, 28, 35, .82);
    border-color: rgba(255, 255, 255, .08);

    box-shadow:
      0 18px 42px rgba(0, 0, 0, .32),
      inset 0 1px 0 rgba(255, 255, 255, .035);
  }

  .nm-today-card {
    background:
      radial-gradient(circle at 92% 10%, rgba(92, 107, 175, .16), transparent 32%),
      radial-gradient(circle at 10% 15%, rgba(54, 146, 155, .14), transparent 30%),
      linear-gradient(135deg, rgba(24, 28, 35, .88), rgba(31, 35, 42, .74));
  }

  .nm-today-card.is-loading {
    background:
      radial-gradient(circle at 90% 10%, rgba(92, 107, 175, .26), transparent 34%),
      radial-gradient(circle at 12% 18%, rgba(54, 146, 155, .22), transparent 32%),
      linear-gradient(135deg, rgba(24, 28, 35, .90), rgba(31, 35, 42, .78));
  }

  .nm-today-card::before {
    background:
      radial-gradient(circle at 18% 22%, rgba(54, 146, 155, .24), transparent 28%),
      radial-gradient(circle at 82% 18%, rgba(92, 107, 175, .24), transparent 30%),
      radial-gradient(circle at 74% 70%, rgba(54, 146, 155, .16), transparent 24%),
      linear-gradient(120deg, rgba(255,255,255,0) 0%, rgba(255,255,255,.08) 48%, rgba(255,255,255,0) 100%);
  }

  .nm-today-card::after {
    background: linear-gradient(
      115deg,
      rgba(255,255,255,0) 0%,
      rgba(255,255,255,.08) 22%,
      rgba(54,146,155,.10) 45%,
      rgba(92,107,175,.12) 62%,
      rgba(255,255,255,0) 100%
    );
  }

  .nm-ai-news {
    background:
      radial-gradient(circle at 92% 10%, rgba(92, 107, 175, .075), transparent 32%),
      radial-gradient(circle at 10% 15%, rgba(54, 146, 155, .075), transparent 30%),
      linear-gradient(135deg, rgba(24, 28, 35, .82), rgba(31, 35, 42, .72));

    border-color: rgba(255, 255, 255, .08);

    box-shadow:
      0 18px 42px rgba(0, 0, 0, .30),
      inset 0 1px 0 rgba(255, 255, 255, .035);
  }

  .nm-ai-news .nm-home-kicker {
    background: rgba(54, 146, 155, .10);
    border-color: rgba(54, 146, 155, .18);
  }

  .nm-ai-news .nm-section-head p {
    color: rgba(235, 237, 244, .82);
  }

  .nm-ai-image-card {
    background: rgba(10, 13, 25, .88);
    border-color: rgba(255, 255, 255, .08);

    box-shadow:
      0 14px 30px rgba(0, 0, 0, .26),
      0 0 0 1px rgba(255, 255, 255, .025) inset;
  }

  .nm-quick-access {
    background:
      linear-gradient(135deg, rgba(24, 28, 35, .80), rgba(31, 35, 42, .70));
  }

  .nm-quick-access .qa-level__top {
    background: rgba(255, 255, 255, .045);
    border-color: rgba(255, 255, 255, .08);

    box-shadow:
      0 10px 22px rgba(0, 0, 0, .18),
      inset 0 1px 0 rgba(255, 255, 255, .04);
  }
}

@media (prefers-reduced-motion: reduce) {
  .nm-today-card,
  .nm-today-card::before,
  .nm-today-card::after,
  .nm-today-card__visual .material-symbols-rounded,
  .nm-orb--main,
  .nm-orb--small,
  .nm-home-kicker,
  .nm-today-card h2,
  .nm-today-card__text,
  .nm-today-card__actions .btn {
    animation: none !important;
    transition: none !important;
  }
}


/* =========================================================
   PATCH — Loading premium do bloco Ciao / Hoje
   Fundo animado durante carregamento + fundo final discreto
   Cole no FINAL de student-home.css
   ========================================================= */

/* Estado final permanente: premium, neutro e com pouquíssima cor */
.nm-today-card {
  transition:
    background 2200mx ease,
    box-shadow 2200mx ease,
    border-color 2200mx ease;
}

/* Camadas visuais do card */
.nm-today-card::before,
.nm-today-card::after {
  content: "";
  position: absolute;
  pointer-events: none;
  z-index: 0;
  opacity: 0;
  transition:
    opacity 2200mx ease,
    transform 2200mx ease,
    filter 2200mx ease;
}

/* Camada de cor difusa */
.nm-today-card::before {
  inset: -28%;
  background:
    radial-gradient(circle at 18% 28%, rgba(54, 146, 155, .24), transparent 28%),
    radial-gradient(circle at 82% 18%, rgba(92, 107, 175, .22), transparent 30%),
    radial-gradient(circle at 72% 76%, rgba(54, 146, 155, .14), transparent 26%);
  filter: blur(22px);
}

/* Camada de onda luminosa */
.nm-today-card::after {
  inset: -18%;
  background:
    linear-gradient(
      115deg,
      rgba(255,255,255,0) 0%,
      rgba(255,255,255,.18) 24%,
      rgba(54,146,155,.11) 46%,
      rgba(92,107,175,.13) 62%,
      rgba(255,255,255,0) 100%
    );
  filter: blur(16px);
  transform: translateX(-26%) rotate(5deg);
}

/* Conteúdo sempre acima das camadas */
.nm-today-card__content,
.nm-today-card__visual {
  position: relative;
  z-index: 2;
}

/* =========================================================
   Durante o carregamento
   ========================================================= */

.nm-today-card.is-loading {
  background:
    radial-gradient(circle at 92% 10%, rgba(92,107,175,.22), transparent 34%),
    radial-gradient(circle at 12% 18%, rgba(54,146,155,.20), transparent 32%),
    linear-gradient(135deg, rgba(255,255,255,.97), rgba(247,250,252,.90));

  border-color: rgba(54,146,155,.18);

  box-shadow:
    0 22px 50px rgba(15,23,42,.075),
    0 14px 32px rgba(54,146,155,.075),
    inset 0 1px 0 rgba(255,255,255,.75);
}

/* Fundo vivo enquanto carrega */
.nm-today-card.is-loading::before {
  opacity: 1;
  animation: nmTodayPremiumBackground 4.8s ease-in-out infinite;
}

/* Onda luminosa enquanto carrega */
.nm-today-card.is-loading::after {
  opacity: .75;
  animation: nmTodayLightWave 3.8s ease-in-out infinite;
}

/* Ícone direito mais vivo durante carregamento */
.nm-today-card.is-loading .nm-today-card__visual .material-symbols-rounded {
  animation: nmTodayIconPremiumGlow 2.1s ease-in-out infinite;
}

/* Orbs respirando */
.nm-today-card.is-loading .nm-orb--main {
  animation: nmTodayOrbBreath 2.4s ease-in-out infinite;
}

.nm-today-card.is-loading .nm-orb--small {
  animation: nmTodayOrbBreath 2.7s ease-in-out infinite reverse;
}

/* Texto do loading com leve presença */
.nm-today-card.is-loading #todayTitle,
.nm-today-card.is-loading #todayAdviceText {
  animation: nmTodayTextBreath 2.2s ease-in-out infinite;
}

/* =========================================================
   Depois que termina
   ========================================================= */

.nm-today-card.is-ready {
  background:
    radial-gradient(circle at 92% 10%, rgba(92,107,175,.13), transparent 34%),
    radial-gradient(circle at 10% 15%, rgba(54,146,155,.11), transparent 32%),
    linear-gradient(135deg, rgba(255,255,255,.96), rgba(255,255,255,.86));

  border-color: rgba(54,146,155,.13);

  box-shadow:
    0 18px 42px rgba(15,23,42,.060),
    0 10px 24px rgba(54,146,155,.040),
    inset 0 1px 0 rgba(255,255,255,.72);
}

/* No estado final, sobra só uma presença mínima */
.nm-today-card.is-ready::before {
  opacity: .18;
  filter: blur(26px);
  transform: scale(1.02);
}

.nm-today-card.is-ready::after {
  opacity: 0;
}

/* Ícone final: parado, mas ainda bonito */
.nm-today-card.is-ready .nm-today-card__visual .material-symbols-rounded {
  animation: none;
  transform: scale(1);
  filter: saturate(1);
  box-shadow:
    0 18px 34px rgba(54,146,155,.16),
    inset 0 1px 0 rgba(255,255,255,.20);
}

.nm-today-card.is-ready .nm-orb--main,
.nm-today-card.is-ready .nm-orb--small {
  animation: none;
}

/* =========================================================
   Keyframes
   ========================================================= */

@keyframes nmTodayPremiumBackground {
  0%, 100% {
    transform: scale(1) translate3d(0, 0, 0);
    filter: blur(22px);
  }

  25% {
    transform: scale(1.035) translate3d(1.5%, -1%, 0);
    filter: blur(24px);
  }

  50% {
    transform: scale(1.06) translate3d(-1%, 1.5%, 0);
    filter: blur(27px);
  }

  75% {
    transform: scale(1.025) translate3d(1%, 1%, 0);
    filter: blur(24px);
  }
}

@keyframes nmTodayLightWave {
  0% {
    transform: translateX(-30%) rotate(5deg);
    opacity: .12;
  }

  42% {
    opacity: .72;
  }

  68% {
    transform: translateX(12%) rotate(5deg);
    opacity: .58;
  }

  100% {
    transform: translateX(34%) rotate(5deg);
    opacity: .10;
  }
}

@keyframes nmTodayIconPremiumGlow {
  0%, 100% {
    transform: scale(1) translateY(0);
    filter: saturate(1);
    box-shadow:
      0 18px 34px rgba(54,146,155,.16),
      0 0 0 rgba(54,146,155,0),
      0 0 0 rgba(92,107,175,0),
      inset 0 1px 0 rgba(255,255,255,.20);
  }

  50% {
    transform: scale(1.035) translateY(-2px);
    filter: saturate(1.08);
    box-shadow:
      0 22px 44px rgba(54,146,155,.24),
      0 0 34px rgba(54,146,155,.20),
      0 0 18px rgba(92,107,175,.16),
      inset 0 1px 0 rgba(255,255,255,.28);
  }
}

@keyframes nmTodayOrbBreath {
  0%, 100% {
    opacity: .32;
    transform: scale(.96);
  }

  50% {
    opacity: .78;
    transform: scale(1.10);
  }
}

@keyframes nmTodayTextBreath {
  0%, 100% {
    opacity: .86;
  }

  50% {
    opacity: 1;
  }
}

/* =========================================================
   Dark mode
   ========================================================= */

@media (prefers-color-scheme: dark) {
  .nm-today-card.is-loading {
    background:
      radial-gradient(circle at 92% 10%, rgba(92,107,175,.26), transparent 34%),
      radial-gradient(circle at 12% 18%, rgba(54,146,155,.22), transparent 32%),
      linear-gradient(135deg, rgba(24,28,35,.92), rgba(31,35,42,.78));
  }

  .nm-today-card.is-ready {
    background:
      radial-gradient(circle at 92% 10%, rgba(92,107,175,.14), transparent 34%),
      radial-gradient(circle at 10% 15%, rgba(54,146,155,.12), transparent 32%),
      linear-gradient(135deg, rgba(24,28,35,.88), rgba(31,35,42,.74));
  }

  .nm-today-card::after {
    background:
      linear-gradient(
        115deg,
        rgba(255,255,255,0) 0%,
        rgba(255,255,255,.08) 24%,
        rgba(54,146,155,.10) 46%,
        rgba(92,107,175,.12) 62%,
        rgba(255,255,255,0) 100%
      );
  }
}

/* =========================================================
   Acessibilidade: reduz animações quando o usuário prefere
   ========================================================= */

@media (prefers-reduced-motion: reduce) {
  .nm-today-card,
  .nm-today-card::before,
  .nm-today-card::after,
  .nm-today-card__visual .material-symbols-rounded,
  .nm-orb--main,
  .nm-orb--small,
  .nm-today-card.is-loading #todayTitle,
  .nm-today-card.is-loading #todayAdviceText {
    animation: none !important;
    transition: none !important;
  }
}

/* =========================================================
   PATCH — Skeleton premium no texto de carregamento
   Troca a frase de carregamento por 2 linhas skeleton
   Cole no FINAL de student-home.css
   ========================================================= */

/* Enquanto carrega, escondemos visualmente o texto real */
.nm-today-card.is-loading #todayAdviceText {
  position: relative;
  width: min(100%, 620px);
  min-height: 58px;
  color: transparent !important;
  font-size: 0 !important;
  line-height: 0 !important;
  overflow: hidden;
}

/* Linha skeleton 1 */
.nm-today-card.is-loading #todayAdviceText::before,
/* Linha skeleton 2 */
.nm-today-card.is-loading #todayAdviceText::after {
  content: "";
  position: absolute;
  left: 0;
  height: 18px;
  border-radius: 999px;
  overflow: hidden;

  /* cor base parecida com texto secundário, mas mais suave */
  background:
    linear-gradient(
      90deg,
      rgba(107, 114, 128, .18) 0%,
      rgba(107, 114, 128, .18) 38%,
      rgba(255, 255, 255, .55) 50%,
      rgba(107, 114, 128, .18) 62%,
      rgba(107, 114, 128, .18) 100%
    );

  background-size: 240% 100%;
  animation: nmTodaySkeletonShine 1.55s ease-in-out infinite;
}

/* Primeira linha maior */
.nm-today-card.is-loading #todayAdviceText::before {
  top: 8px;
  width: min(92%, 720px);
}

/* Segunda linha menor */
.nm-today-card.is-loading #todayAdviceText::after {
  top: 36px;
  width: min(68%, 530px);
  animation-delay: .12s;
}

/* Brilho da esquerda para a direita */
@keyframes nmTodaySkeletonShine {
  0% {
    background-position: 120% 0;
    opacity: .62;
  }

  45% {
    opacity: .95;
  }

  100% {
    background-position: -120% 0;
    opacity: .62;
  }
}

/* Dark mode: skeleton mais adequado ao fundo escuro */
@media (prefers-color-scheme: dark) {
  .nm-today-card.is-loading #todayAdviceText::before,
  .nm-today-card.is-loading #todayAdviceText::after {
    background:
      linear-gradient(
        90deg,
        rgba(235, 237, 244, .16) 0%,
        rgba(235, 237, 244, .16) 38%,
        rgba(255, 255, 255, .34) 50%,
        rgba(235, 237, 244, .16) 62%,
        rgba(235, 237, 244, .16) 100%
      );

    background-size: 240% 100%;
  }
}

/* Mobile: skeleton um pouco mais compacto */
@media (max-width: 480px) {
  .nm-today-card.is-loading #todayAdviceText {
    min-height: 52px;
  }

  .nm-today-card.is-loading #todayAdviceText::before,
  .nm-today-card.is-loading #todayAdviceText::after {
    height: 12px;
  }

  .nm-today-card.is-loading #todayAdviceText::before {
    top: 7px;
    width: 94%;
  }

  .nm-today-card.is-loading #todayAdviceText::after {
    top: 31px;
    width: 72%;
  }
}

/* Respeita acessibilidade: sem animação se o usuário preferir menos movimento */
@media (prefers-reduced-motion: reduce) {
  .nm-today-card.is-loading #todayAdviceText::before,
  .nm-today-card.is-loading #todayAdviceText::after {
    animation: none !important;
    background-position: 0 0 !important;
  }
}



/* =========================================================
   PATCH — Loading premium mais expressivo no mobile
   Fundo e ícone mais animados + transição final mais suave
   Cole no FINAL de student-home.css
   ========================================================= */

/* Transição longa e suave entre carregando e resultado final */
.nm-today-card {
  transition:
    background 2200ms cubic-bezier(.22, 1, .36, 1),
    box-shadow 2200ms cubic-bezier(.22, 1, .36, 1),
    border-color 2200ms cubic-bezier(.22, 1, .36, 1);
}

.nm-today-card::before,
.nm-today-card::after {
  transition:
    opacity 2200ms cubic-bezier(.22, 1, .36, 1),
    transform 2200ms cubic-bezier(.22, 1, .36, 1),
    filter 2200ms cubic-bezier(.22, 1, .36, 1);
}

.nm-today-card__visual .material-symbols-rounded,
.nm-orb--main,
.nm-orb--small {
  transition:
    transform 2200ms cubic-bezier(.22, 1, .36, 1),
    opacity 2200ms cubic-bezier(.22, 1, .36, 1),
    box-shadow 2200ms cubic-bezier(.22, 1, .36, 1),
    filter 2200ms cubic-bezier(.22, 1, .36, 1);
}

/* =========================================================
   Mobile: carregamento mais vivo
   ========================================================= */

@media (max-width: 768px) {
  .nm-today-card.is-loading {
    background:
      radial-gradient(circle at 88% 10%, rgba(92, 107, 175, .34), transparent 36%),
      radial-gradient(circle at 12% 18%, rgba(54, 146, 155, .30), transparent 34%),
      radial-gradient(circle at 72% 78%, rgba(54, 146, 155, .18), transparent 32%),
      linear-gradient(135deg, rgba(255,255,255,.97), rgba(244,248,250,.88));
    border-color: rgba(54,146,155,.22);
    box-shadow:
      0 22px 48px rgba(15,23,42,.085),
      0 18px 42px rgba(54,146,155,.12),
      inset 0 1px 0 rgba(255,255,255,.78);
  }

  /* Camada de cor maior e mais perceptível no mobile */
  .nm-today-card.is-loading::before {
    opacity: 1;
    animation: nmMobilePremiumBg 5.2s ease-in-out infinite;
  }

  /* Onda luminosa mais lenta e elegante */
  .nm-today-card.is-loading::after {
    opacity: .86;
    animation: nmMobileLightSweep 4.6s ease-in-out infinite;
  }

  /*
    No seu CSS anterior, o visual era escondido no mobile.
    Aqui ele volta apenas durante o loading para reforçar a sensação premium.
  */
  .nm-today-card.is-loading .nm-today-card__visual {
    display: block;
    position: absolute;
    right: 22px;
    bottom: 22px;
    width: 92px;
    height: 92px;
    opacity: .72;
  }

  .nm-today-card.is-loading .nm-today-card__visual .material-symbols-rounded {
    width: 72px;
    height: 72px;
    border-radius: 24px;
    font-size: 40px;
    animation: nmMobileIconCreate 2.35s ease-in-out infinite;
  }

  .nm-today-card.is-loading .nm-orb--main {
    width: 94px;
    height: 94px;
    animation: nmMobileOrbCreate 2.6s ease-in-out infinite;
  }

  .nm-today-card.is-loading .nm-orb--small {
    width: 36px;
    height: 36px;
    right: 8px;
    top: 10px;
    animation: nmMobileOrbCreate 2.9s ease-in-out infinite reverse;
  }

  /*
    Quando a recomendação final aparece, o ícone some suavemente
    para não poluir o card no estado final mobile.
  */
  .nm-today-card.is-ready .nm-today-card__visual {
    opacity: 0;
    transform: scale(.92) translateY(8px);
    transition:
      opacity 2200ms cubic-bezier(.22, 1, .36, 1),
      transform 2200ms cubic-bezier(.22, 1, .36, 1);
  }
}

/* =========================================================
   Mobile dark mode
   ========================================================= */

@media (max-width: 768px) and (prefers-color-scheme: dark) {
  .nm-today-card.is-loading {
    background:
      radial-gradient(circle at 88% 10%, rgba(92, 107, 175, .34), transparent 36%),
      radial-gradient(circle at 12% 18%, rgba(54, 146, 155, .28), transparent 34%),
      radial-gradient(circle at 72% 78%, rgba(54, 146, 155, .16), transparent 32%),
      linear-gradient(135deg, rgba(24,28,35,.94), rgba(31,35,42,.80));
    border-color: rgba(54,146,155,.20);
    box-shadow:
      0 22px 48px rgba(0,0,0,.34),
      0 16px 42px rgba(54,146,155,.08),
      inset 0 1px 0 rgba(255,255,255,.055);
  }
}

/* =========================================================
   Keyframes mobile
   ========================================================= */

@keyframes nmMobilePremiumBg {
  0%, 100% {
    transform: scale(1) translate3d(0, 0, 0);
    filter: blur(20px);
    opacity: .78;
  }

  25% {
    transform: scale(1.05) translate3d(2%, -1%, 0);
    filter: blur(24px);
    opacity: 1;
  }

  50% {
    transform: scale(1.08) translate3d(-1%, 2%, 0);
    filter: blur(28px);
    opacity: .92;
  }

  75% {
    transform: scale(1.04) translate3d(1%, 1%, 0);
    filter: blur(23px);
    opacity: 1;
  }
}

@keyframes nmMobileLightSweep {
  0% {
    transform: translateX(-34%) rotate(6deg);
    opacity: .10;
  }

  36% {
    opacity: .72;
  }

  62% {
    transform: translateX(8%) rotate(6deg);
    opacity: .84;
  }

  100% {
    transform: translateX(38%) rotate(6deg);
    opacity: .08;
  }
}

@keyframes nmMobileIconCreate {
  0%, 100% {
    transform: scale(1) translateY(0) rotate(0deg);
    filter: saturate(1);
    box-shadow:
      0 18px 34px rgba(54,146,155,.16),
      0 0 0 rgba(54,146,155,0),
      inset 0 1px 0 rgba(255,255,255,.20);
  }

  42% {
    transform: scale(1.045) translateY(-3px) rotate(-1deg);
    filter: saturate(1.12);
    box-shadow:
      0 22px 44px rgba(54,146,155,.24),
      0 0 32px rgba(54,146,155,.24),
      0 0 18px rgba(92,107,175,.18),
      inset 0 1px 0 rgba(255,255,255,.28);
  }

  68% {
    transform: scale(1.025) translateY(-1px) rotate(1deg);
  }
}

@keyframes nmMobileOrbCreate {
  0%, 100% {
    opacity: .28;
    transform: scale(.92);
  }

  50% {
    opacity: .78;
    transform: scale(1.16);
  }
}

/* =========================================================
   Acessibilidade
   ========================================================= */

@media (prefers-reduced-motion: reduce) {
  .nm-today-card,
  .nm-today-card::before,
  .nm-today-card::after,
  .nm-today-card__visual,
  .nm-today-card__visual .material-symbols-rounded,
  .nm-orb--main,
  .nm-orb--small {
    animation: none !important;
    transition: none !important;
  }
}



/* =========================================================
   PATCH — esconder elemento visual da direita no mobile
   mesmo durante o loading
   Cole no FINAL de student-home.css
   ========================================================= */

@media (max-width: 768px) {
  .nm-today-card .nm-today-card__visual,
  .nm-today-card.is-loading .nm-today-card__visual,
  .nm-today-card.is-ready .nm-today-card__visual {
    display: none !important;
    opacity: 0 !important;
    visibility: hidden !important;
    pointer-events: none !important;
  }
}

/* =========================================================
   PATCH — Glow permanente no "Novo" do bloco Novidades
   ========================================================= */

.nm-ai-news .nm-home-kicker {
  position: relative;
  box-shadow:
    0 0 0 1px rgba(54, 146, 155, .10),
    0 0 14px rgba(54, 146, 155, .22),
    0 0 26px rgba(92, 107, 175, .12);
  animation: nmNewsKickerGlow 2.8s ease-in-out infinite;
}

@keyframes nmNewsKickerGlow {
  0%, 100% {
    box-shadow:
      0 0 0 1px rgba(54, 146, 155, .10),
      0 0 12px rgba(54, 146, 155, .18),
      0 0 22px rgba(92, 107, 175, .10);
  }

  50% {
    box-shadow:
      0 0 0 1px rgba(54, 146, 155, .18),
      0 0 18px rgba(54, 146, 155, .32),
      0 0 34px rgba(92, 107, 175, .18);
  }
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
  .nm-ai-news .nm-home-kicker {
    box-shadow:
      0 0 0 1px rgba(54, 146, 155, .16),
      0 0 16px rgba(54, 146, 155, .28),
      0 0 30px rgba(92, 107, 175, .18);
  }
}

/* Acessibilidade */
@media (prefers-reduced-motion: reduce) {
  .nm-ai-news .nm-home-kicker {
    animation: none !important;
  }
}