.books-intro {
  max-width: 720px;
  margin: -10px auto 34px;
  text-align: center;
  color: var(--txt-dim, #9aa4bb);
  font-size: 1rem;
  line-height: 1.7;
}

.books-grid {
  display: grid;
  /* 220px, not the 290px the style.css catch-all used to force: 290 is a
     landscape card width and it stretched portrait covers into billboards. */
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--ss-card-gap, 26px);
  margin-top: 1.5rem;
  /* stretch, not start: covers are portrait but blurbs are not all the same
     length, and ragged card bottoms in a row read as a broken grid */
  align-items: stretch;
}

.book-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  background: rgba(13, 18, 30, .55);
  border: 1px solid rgba(255, 109, 0, .16);
  border-radius: var(--ss-card-radius, 16px);
  overflow: hidden;
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  transition: transform .28s cubic-bezier(.2, .7, .3, 1), border-color .28s, box-shadow .28s;
}
.book-card:hover {
  transform: translateY(-6px);
  border-color: rgba(255, 109, 0, .55);
  box-shadow: 0 18px 44px -18px rgba(255, 109, 0, .55);
}
/* a book with no link is not clickable, so it must not pretend to be */
.book-card.no-link { cursor: default; }
.book-card.no-link:hover { transform: none; }

.book-cover-wrap { position: relative; }

.book-cover {
  aspect-ratio: 2 / 3;
  background-size: cover;
  background-position: center;
  background-color: #0a0e18;
  display: grid;
  place-items: center;
  padding: 18px;
}
/* the placeholder is what a book looks like before its real cover is uploaded —
   it has to read as a designed cover, not as a broken image */
.book-cover.no-img { position: relative; }
.book-cover.no-img::after {
  content: '';
  position: absolute;
  inset: 0;
  background:
    repeating-linear-gradient(115deg, rgba(255, 255, 255, .05) 0 1px, transparent 1px 9px),
    linear-gradient(180deg, transparent 55%, rgba(0, 0, 0, .45));
  pointer-events: none;
}
/* the spine — a thin lit edge on the left, which is what sells "this is a book" */
.book-cover.no-img::before {
  content: '';
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 9px;
  background: linear-gradient(90deg, rgba(0, 0, 0, .55), rgba(255, 255, 255, .1));
}
.book-ph {
  position: relative;
  z-index: 1;
  font-family: 'Space Grotesk', 'Noto Sans Thai', sans-serif;
  font-weight: 700;
  font-size: 1.02rem;
  line-height: 1.35;
  text-align: center;
  color: #fff;
  text-shadow: 0 2px 12px rgba(0, 0, 0, .6);
  /* long titles must not spill past the cover */
  display: -webkit-box;
  -webkit-line-clamp: 6;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.book-badge {
  position: absolute;
  top: 10px; left: 10px;
  z-index: 2;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .04em;
  color: #160a00;
  background: linear-gradient(135deg, var(--neon, #ff6d00), var(--neon-2, #ffd700));
  box-shadow: 0 4px 14px -4px rgba(255, 109, 0, .8);
}

.book-info { padding: 16px 16px 18px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.book-info h3 {
  margin: 0;
  font-size: 1.02rem;
  line-height: 1.35;
  font-family: 'Space Grotesk', 'Noto Sans Thai', sans-serif;
}
.book-meta { margin: 0; font-size: .78rem; color: var(--txt-dim, #8d97ad); line-height: 1.5; }
.book-desc {
  margin: 0;
  font-size: .86rem;
  line-height: 1.6;
  color: var(--txt-dim, #9aa4bb);
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.book-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.book-go {
  /* auto keeps the call-to-action pinned to the card's bottom edge once the
     cards stretch to a common height */
  margin-top: auto;
  padding-top: 4px;
  font-size: .84rem;
  font-weight: 600;
  color: var(--neon, #ff6d00);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.book-card:hover .book-go { color: var(--neon-2, #ffd700); }
.book-go i { font-size: .78rem; transition: transform .25s; }
.book-card:hover .book-go i { transform: translate(2px, -2px); }

.books-empty {
  grid-column: 1 / -1;
  text-align: center;
  padding: 46px 20px;
  color: var(--txt-dim, #8d97ad);
  border: 1px dashed rgba(255, 109, 0, .28);
  border-radius: 16px;
}

/* ---------- light theme ---------- */
body[data-theme="light"] .book-card {
  background: rgba(255, 255, 255, .78);
  border-color: rgba(255, 109, 0, .22);
  box-shadow: 0 8px 26px -18px rgba(20, 30, 60, .5);
}
body[data-theme="light"] .book-card:hover {
  border-color: rgba(255, 109, 0, .6);
  box-shadow: 0 18px 40px -20px rgba(255, 109, 0, .5);
}
body[data-theme="light"] .book-meta,
body[data-theme="light"] .book-desc,
body[data-theme="light"] .books-intro { color: #5a6478; }
body[data-theme="light"] .books-empty { color: #5a6478; border-color: rgba(255, 109, 0, .35); }

/* ---------- narrow screens ---------- */
@media (max-width: 900px) {
  .books-grid { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 16px; }
  .book-info { padding: 13px 13px 15px; }
  .book-info h3 { font-size: .95rem; }
  .book-desc { -webkit-line-clamp: 2; }
}
@media (max-width: 420px) {
  .books-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .book-ph { font-size: .82rem; -webkit-line-clamp: 5; }
  .book-desc { display: none; }
}

.nav-user { position: relative; flex: 0 0 auto; }

.nav-user-btn {
  display: flex; align-items: center; gap: 8px;
  padding: 4px 10px 4px 4px;
  border-radius: 999px;
  border: 1px solid rgba(255, 109, 0, .32);
  background: rgba(255, 109, 0, .08);
  color: inherit; font: inherit; font-size: .86rem; font-weight: 600;
  cursor: pointer; white-space: nowrap; line-height: 1;
  transition: background .2s ease, border-color .2s ease, transform .2s ease;
}
.nav-user-btn:hover { background: rgba(255, 109, 0, .16); border-color: rgba(255, 109, 0, .55); }
.nav-user-btn:active { transform: translateY(1px); }
.nav-user-btn:focus-visible { outline: 2px solid #ff8c1a; outline-offset: 2px; }

.nav-user-av, .nu-av-lg {
  display: grid; place-items: center;
  border-radius: 50%; color: #fff;
  font-weight: 800; letter-spacing: .5px;
  text-shadow: 0 1px 2px rgba(0, 0, 0, .35);
  flex: 0 0 auto;
}
.nav-user-av { width: 28px; height: 28px; font-size: .72rem;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, .18) inset, 0 2px 6px rgba(255, 109, 0, .3); }
.nu-av-lg { width: 42px; height: 42px; font-size: .95rem;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, .2) inset, 0 4px 12px rgba(255, 109, 0, .32); }

.nav-user-nm { max-width: 130px; overflow: hidden; text-overflow: ellipsis; }
.nav-user-cv { font-size: .62rem; opacity: .6; transition: transform .22s ease; }
.nav-user.open .nav-user-cv { transform: rotate(180deg); }

.nav-user-pop {
  position: absolute; top: calc(100% + 12px); right: 0;
  min-width: 244px; padding: 8px;
  border-radius: 16px;
  background: rgba(10, 14, 24, .92);
  border: 1px solid rgba(255, 255, 255, .12);
  box-shadow: 0 18px 48px rgba(0, 0, 0, .5), 0 0 0 1px rgba(255, 109, 0, .1);
  backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
  opacity: 0; visibility: hidden; transform: translateY(-8px) scale(.97);
  transform-origin: top right;
  transition: opacity .18s ease, transform .18s ease, visibility .18s;
  z-index: 1200;
}
.nav-user.open .nav-user-pop { opacity: 1; visibility: visible; transform: none; }

.nu-head {
  display: flex; align-items: center; gap: 11px;
  padding: 10px 10px 12px;
  border-bottom: 1px solid rgba(255, 255, 255, .09);
  margin-bottom: 6px;
}
.nu-id { min-width: 0; }
.nu-id b { display: block; font-size: .9rem; font-weight: 700; color: #f4f6fb;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nu-id small { display: block; font-size: .74rem; color: rgba(244, 246, 251, .55);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 165px; }

.nu-row {
  display: flex; align-items: center; gap: 11px;
  width: 100%; padding: 10px 11px;
  border: 0; border-radius: 10px;
  background: transparent; color: #e6e9f2;
  font: inherit; font-size: .87rem; text-align: left; text-decoration: none;
  cursor: pointer; transition: background .16s ease, color .16s ease;
}
.nu-row i { width: 16px; text-align: center; font-size: .85rem; opacity: .8; }
.nu-row:hover { background: rgba(255, 255, 255, .07); }
.nu-row.acc:hover { color: #ff8c1a; }
.nu-row.acc:hover i { opacity: 1; color: #ff8c1a; }
.nu-row.dan { color: #ff6b6b; }
.nu-row.dan:hover { background: rgba(244, 67, 54, .14); }
.nu-row:focus-visible { outline: 2px solid #ff8c1a; outline-offset: -2px; }
.nu-sep { height: 1px; margin: 6px 4px; background: rgba(255, 255, 255, .09); }

[data-theme="light"] .nav-user-btn { border-color: rgba(255, 109, 0, .35); background: rgba(255, 109, 0, .07); color: #111827; }
[data-theme="light"] .nav-user-pop { background: rgba(255, 255, 255, .96); border-color: rgba(17, 24, 39, .1);
  box-shadow: 0 18px 48px rgba(17, 24, 39, .16); }
[data-theme="light"] .nu-head { border-bottom-color: rgba(17, 24, 39, .1); }
[data-theme="light"] .nu-id b { color: #111827; }
[data-theme="light"] .nu-id small { color: rgba(17, 24, 39, .55); }
[data-theme="light"] .nu-row { color: #1f2937; }
[data-theme="light"] .nu-row:hover { background: rgba(17, 24, 39, .06); }
[data-theme="light"] .nu-sep { background: rgba(17, 24, 39, .1); }


/* SSRobotics portal: shared theme, layout and responsive components.
   Replaces the legacy fix/theme/responsive stack on the main portal. */
:root {
  --portal-bg: #0c0d10;
  --portal-surface: #14161b;
  --portal-elevated: #1b1e24;
  --portal-text: #f4f4f2;
  --portal-muted: #a6abb5;
  --portal-line: #2a2d34;
  --portal-accent: #ff8a3c;
  --portal-gutter: clamp(20px, 4.5vw, 72px);
  --portal-max: 1280px;
  --ss-safe-b: env(safe-area-inset-bottom, 0px);
}
body[data-theme="light"] {
  --portal-bg: #f6f7f9; --portal-surface: #fff; --portal-elevated: #eef0f3;
  --portal-text: #15181e; --portal-muted: #5a626f; --portal-line: #d9dde3;
  --portal-accent: #b94b0b;
}
html { scroll-padding-top: 96px; -webkit-text-size-adjust: 100%; }
body.portal {
  background: var(--portal-bg) !important; color: var(--portal-text) !important;
  font-family: 'Outfit', 'Noto Sans Thai', sans-serif; line-height: 1.6;
  overflow-x: clip; cursor: auto !important;
  --bg-color: var(--portal-bg); --card: var(--portal-surface); --card-bg: var(--portal-surface);
  --text-color: var(--portal-text); --text-primary: var(--portal-text); --txt: var(--portal-text);
  --txt-dim: var(--portal-muted); --text-secondary: var(--portal-muted);
  --glass-bg: var(--portal-surface); --glass-border: var(--portal-line);
}
.portal *, .portal *::before, .portal *::after { box-sizing: border-box; min-width: 0; }
.portal img, .portal video, .portal canvas, .portal svg { max-width: 100%; }
.portal button, .portal input, .portal textarea, .portal select { font: inherit; }
.portal h1, .portal h2, .portal h3, .portal h4 { font-family: 'Space Grotesk','Noto Sans Thai',sans-serif; }
.portal a:focus-visible, .portal button:focus-visible, .portal input:focus-visible {
  outline: 2px solid var(--portal-accent); outline-offset: 4px;
}
.portal .container, .portal .cg-container { width: 100%; max-width: var(--portal-max); padding-inline: var(--portal-gutter); margin-inline: auto; }
.portal::before, .portal::after, .portal .cg-ambient, .portal .cyber-energy-bg,
.portal .custom-cursor, .portal .custom-cursor-glow, .portal .cursor-trail-dot,
.portal #particle-canvas, .portal .cg-spotlight, .portal #hud-dashboard,
.portal #back-to-top, .portal #scroll-progress, .portal #ss-top { display: none !important; }
.portal .flashlight-zone { mask-image: none; -webkit-mask-image: none; }
.portal [data-aos] { opacity: 1 !important; transform: none !important; }
.portal .glass { background: var(--portal-surface); border: 1px solid var(--portal-line); box-shadow: none; backdrop-filter: none; }
.portal #scroll-progress-bar { position: fixed; top: 0; left: 0; height: 2px; background: var(--portal-accent); z-index: 1300; }
.portal .skip-link { background: var(--portal-accent) !important; color: #101114 !important; }

/* Navigation is a bounded row; the drawer takes over before links get cramped. */
.portal .navbar {
  position: sticky; top: 0; left: 0; transform: none; width: 100%; max-width: none;
  min-height: 86px; margin: 0; padding: 16px var(--portal-gutter); gap: 28px;
  display: flex; flex-flow: row nowrap; justify-content: space-between; align-items: center;
  border: 0; border-bottom: 1px solid var(--portal-line); border-radius: 0;
  background: var(--portal-bg); box-shadow: none; z-index: 1100;
}
.portal .nav-logo { flex: 0 1 188px; display: flex; align-items: center; }
.portal .nav-logo img { width: 188px; height: auto; max-height: 42px; margin: 0; object-fit: contain; }
.portal .nav-links { display: flex; flex-flow: row nowrap; align-items: center; gap: clamp(12px,1.45vw,22px); padding: 0; margin: 0 0 0 auto; }
.portal .nav-links li { flex: 0 0 auto; }
.portal .nav-links a { font-size: .875rem; font-weight: 500; white-space: nowrap; color: var(--portal-muted); }
.portal .nav-links a:hover, .portal .nav-links a.nav-active { color: var(--portal-text); }
.portal .nav-links a::after { display: none; }
.portal .nav-actions { display: flex; flex: 0 0 auto; align-items: center; gap: 8px; margin: 0; }
.portal .nav-actions .btn { min-height: 40px; padding: 8px 11px; font-size: .875rem; margin: 0; }
.portal #theme-toggle { width: 40px; padding: 0; color: var(--portal-text); background: transparent; }
.portal #lang-toggle { border: 1px solid var(--portal-line); background: transparent; color: var(--portal-text); }
.portal #nav-login-btn { border: 1px solid var(--portal-line); background: var(--portal-surface); color: var(--portal-text); display: inline-flex; gap: 7px; align-items: center; }
.portal #nav-admin-item, .portal #nav-logout-btn { display: none !important; }
.portal .hamburger { display: none; flex: 0 0 44px; width: 44px; height: 44px; margin: 0; padding: 10px; border: 1px solid var(--portal-line); border-radius: 10px; }
.portal .hamburger span { background: var(--portal-text); width: 22px; }
.portal .mobile-drawer { position: fixed; top: 0; right: 0; width: min(340px,90vw); height: 100dvh; z-index: 1250; padding: 84px 24px 24px; background: var(--portal-surface); border-left: 1px solid var(--portal-line); visibility: hidden; transform: translateX(100%); transition: transform .2s,visibility .2s; overflow-y: auto; }
.portal .mobile-drawer.open { visibility: visible; transform: translateX(0); }
.portal .mobile-drawer a { display: flex; align-items: center; gap: 14px; min-height: 48px; color: var(--portal-text); border-radius: 10px; }
.portal .mobile-drawer-close { position: absolute; top: 20px; right: 20px; width: 44px; height: 44px; color: var(--portal-text); }
.portal .drawer-overlay { z-index: 1200; background: rgba(0,0,0,.65); }

/* Shared hero and optional case-study model stage. */
.portal #home.hero-section.spa-section.spa-active {
  display: block !important; min-height: 0 !important; height: auto; padding: 0; overflow: visible;
  background: transparent !important; position: relative;
}
.hero-grid { display: grid; grid-template-columns: 1.08fr 1fr; gap: clamp(32px,5vw,76px); align-items: center; padding-block: 64px 48px; margin: 0; }
.portal [hidden] { display: none !important; }
.portal #home .hero-content { width: auto; max-width: none; padding: 0; margin: 0; text-align: left; transform: none; }
.portal .hero-badge { display: inline-flex; align-items: center; padding: 0; margin: 0 0 24px; background: none; border: none; border-radius: 0; color: var(--portal-accent); font-size: .75rem; font-weight: 600; letter-spacing: .15em; text-transform: uppercase; box-shadow: none; }
.portal .hero-badge::before { content: ''; width: 7px; height: 7px; margin-right: 10px; background: var(--portal-accent); border-radius: 50%; animation: none; }
.portal #home .hero-title { text-align: left; font-size: clamp(3.1rem,5.9vw,5.1rem) !important; line-height: 1.08 !important; letter-spacing: -.055em; font-weight: 600; margin: 0 0 28px; color: var(--portal-text); text-shadow: none; background: none; -webkit-text-fill-color: currentColor; animation: none; }
.portal #home .hero-title .highlight { color: var(--portal-accent) !important; background: none; -webkit-text-fill-color: currentColor; animation: none; }
.portal #home .hero-text { max-width: 490px; margin: 0 0 32px; font-size: 1.0625rem !important; line-height: 1.85; color: var(--portal-muted); }
.portal .hero-buttons { display: flex; gap: 12px; flex-wrap: wrap; margin: 0; justify-content: flex-start; }
.portal .btn { display: inline-flex; align-items: center; justify-content: center; gap: 12px; min-height: 48px; padding: 12px 22px; border-radius: 10px; font-size: .9375rem; font-weight: 600; text-decoration: none; letter-spacing: 0; transition: background .2s,border-color .2s; }
.portal .primary-btn { color: #17110c; background: #ff8a3c; border: 1px solid #ff8a3c; box-shadow: none; }
.portal .primary-btn:hover { background: #ff9b59; box-shadow: none; transform: none; }
.portal .secondary-btn { color: var(--portal-text); background: transparent; border: 1px solid var(--portal-line); box-shadow: none; }
.portal .secondary-btn:hover { background: var(--portal-elevated); border-color: var(--portal-muted); transform: none; }
.hero-note { display: flex; align-items: center; gap: 9px; margin: 27px 0 0; font-size: .8125rem; color: var(--portal-muted); }
.hero-note i { color: var(--portal-accent); }
.hero-showcase { position: relative; width: 100%; border: 1px solid var(--portal-line); border-radius: 20px; overflow: hidden; background: radial-gradient(ellipse at 50% 48%,#33251d 0%,#17191e 60%,#14161a 100%); color: #f4f4f2; }
.showcase-heading { position: relative; z-index: 2; display: flex; justify-content: space-between; gap: 12px; padding: 23px 24px 0; font-size: .6875rem; letter-spacing: .13em; }
.showcase-heading strong { color: #d1d2d6; font-weight: 500; }
.showcase-heading span { color: #ffab75; }
.robot-stage { height: 365px; position: relative; isolation: isolate; overflow: hidden; }
.robot-stage::before { content: ''; position: absolute; inset: 0; background-image: linear-gradient(#ffffff05 1px,transparent 1px),linear-gradient(90deg,#ffffff05 1px,transparent 1px); background-size: 40px 40px; mask-image: radial-gradient(ellipse,#000,transparent 75%); }
.robot-stage canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; z-index: 1; touch-action: pan-y; cursor: grab; }
.robot-stage canvas:active { cursor: grabbing; }
.model-fallback { position: absolute; inset: 12px 22px; width: calc(100% - 44px); height: calc(100% - 24px); object-fit: cover; object-position: 72% 50%; border-radius: 12px; opacity: .7; }
.robot-stage.model-ready .model-fallback { display: none; }
.model-controls { display: flex; justify-content: center; gap: 7px; position: relative; z-index: 2; }
.model-controls button { display: grid; place-items: center; width: 36px; height: 36px; border: 1px solid #ffffff22; color: #ddd; background: #ffffff08; border-radius: 8px; font-size: .8125rem; cursor: pointer; }
.model-controls button:hover { background: #ffffff18; }
.showcase-caption { display: flex; justify-content: space-between; align-items: end; gap: 12px; padding: 18px 24px 22px; }
.showcase-caption strong { font-size: 1.125rem; font-family: 'Space Grotesk',sans-serif; font-weight: 500; }
.showcase-caption p { color: #a5a7af; font-size: .75rem; margin: 3px 0 0; }
.showcase-caption a { display: grid; place-items: center; width: 38px; height: 38px; border: 1px solid #ffffff26; border-radius: 50%; color: #ffab75; }
.portal .hero-stats { display: grid; grid-template-columns: repeat(4,1fr); gap: 0; border-top: 1px solid var(--portal-line); border-bottom: 1px solid var(--portal-line); margin: 0; padding: 25px 0; }
.portal .hero-stat-item { display: flex; flex-flow: row wrap; align-items: center; justify-content: center; gap: 10px; min-width: 0; margin: 0; padding: 6px 16px; background: none; border: none; border-right: 1px solid var(--portal-line); border-radius: 0; box-shadow: none; }
.portal .hero-stat-item:last-child { border-right: 0; }
.portal .hero-stat-number { font-size: 1.75rem; line-height: 1.1; color: var(--portal-text); font-weight: 500; text-shadow: none; }
.portal .hero-stat-label { font-size: .8125rem; color: var(--portal-muted); letter-spacing: 0; text-transform: none; }
.home-paths { padding-block: 48px 64px; }
.home-paths-heading { display: flex; justify-content: space-between; align-items: baseline; gap: 20px; margin-bottom: 22px; }
.home-paths-heading h2 { font-size: 1.5rem; font-weight: 500; margin: 0; letter-spacing: -.035em; }
.home-paths-heading p { font-size: .875rem; color: var(--portal-muted); margin: 0; }
.path-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 16px; }
.path-card { display: flex; align-items: flex-start; gap: 18px; padding: 24px; border: 1px solid var(--portal-line); border-radius: 12px; text-decoration: none; color: var(--portal-text); background: var(--portal-surface); transition: border-color .2s,background .2s; }
.path-card:hover { border-color: var(--portal-accent); background: var(--portal-elevated); }
.path-card > i:first-child { color: var(--portal-accent); font-size: 1.125rem; margin-top: 4px; }
.path-card > i:last-child { margin: 5px 0 0 auto; color: var(--portal-muted); font-size: .75rem; }
.path-card h3 { font-size: 1rem; margin: 0 0 6px; font-weight: 500; }
.path-card p { font-size: .875rem; line-height: 1.6; color: var(--portal-muted); margin: 0; }
.stack-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 24px; padding-top: 32px; color: var(--portal-muted); font-size: .8125rem; }
.stack-strip > span { font-size: .6875rem; letter-spacing: .12em; margin-right: auto; }
.stack-strip strong { font-weight: 500; }

/* Content pages share readable cards and a clear heading hierarchy. */
.portal section.spa-section:not(#home) { padding: 60px 0 72px !important; min-height: 65vh; background: transparent !important; }
.portal .section-title { display: block; text-align: left; margin: 0 0 28px; padding: 0; font-size: clamp(2rem,3.8vw,3.1rem) !important; line-height: 1.25; font-weight: 500; letter-spacing: -.04em; color: var(--portal-text); background: none; -webkit-text-fill-color: currentColor; text-shadow: none; }
.portal .section-title::before, .portal .section-title::after, .portal .section-num, .portal .cg-section-num { display: none !important; }
.portal .category-tabs { display: flex; flex-wrap: wrap; justify-content: flex-start; gap: 8px; margin-bottom: 28px; }
.portal .tab-btn { min-height: 42px; padding: 9px 16px; border: 1px solid var(--portal-line); color: var(--portal-muted); border-radius: 8px; background: transparent; font-size: .875rem; box-shadow: none; transition: background .2s; }
.portal .tab-btn.active, .portal .tab-btn:hover { color: var(--portal-text); background: var(--portal-elevated); border-color: var(--portal-muted); box-shadow: none; }
.portal .tab-btn.active { color: var(--portal-accent); border-color: var(--portal-accent); }
.portal .projects-grid, .portal #knowledge-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 24px; align-items: stretch; }
.portal .project-card { display: flex; flex-direction: column; padding: 0; background: var(--portal-surface) !important; border: 1px solid var(--portal-line); border-radius: 14px; overflow: hidden; transform: none !important; box-shadow: none !important; backdrop-filter: none !important; transition: border-color .2s; }
.portal .project-card:hover { border-color: var(--portal-muted); transform: none !important; box-shadow: none !important; }
.portal .project-card::before, .portal .project-card::after, .portal .js-tilt-glare { display: none !important; }
.portal .project-card.hidden, .portal .ss-page-hidden { display: none !important; }
.portal .project-image { width: 100%; height: auto !important; aspect-ratio: 16/9; background-position: center; background-size: cover; border-radius: 0 !important; margin: 0; border-bottom: 1px solid var(--portal-line); filter: none !important; }
.portal .project-image img { display: block; width: 100%; height: 100%; object-fit: cover; }
.portal .book-card.hidden, .portal .ss-news-item.hidden { display: none !important; }
.portal-search-row { display: flex; align-items: center; gap: 16px; margin: 0 0 24px; }
.portal-search-wrap { position: relative; width: min(100%,420px); }
.portal-search-wrap i { position: absolute; left: 15px; top: 15px; color: var(--portal-muted); font-size: .9375rem; }
.portal .portal-search { width: 100%; min-height: 46px; padding: 10px 16px 10px 42px; color: var(--portal-text); background: var(--portal-surface); border: 1px solid var(--portal-line); border-radius: 10px; font-size: 1rem; }
.portal-search::placeholder { color: var(--portal-muted); }
.portal-result { color: var(--portal-muted); font-size: .875rem; white-space: nowrap; }
.portal-empty { padding: 48px 24px; text-align: center; color: var(--portal-muted); background: var(--portal-surface); border: 1px dashed var(--portal-line); border-radius: 12px; }
.portal .ss-news-list { display: flex; flex-direction: column; gap: 18px; }
.portal .ss-news-item { display: grid; grid-template-columns: 200px minmax(0,1fr); gap: 26px; padding: 24px; background: var(--portal-surface); border: 1px solid var(--portal-line); border-radius: 14px; color: var(--portal-text); text-decoration: none; }
.portal .ss-news-item:hover { border-color: var(--portal-muted); }
.portal .ss-news-thumb { width: 100%; height: 150px; background-size: cover; background-position: center; border-radius: 8px; align-self: start; }
.portal .ss-news-thumb.no-img { display: grid; place-items: center; background: var(--portal-elevated); color: var(--portal-accent); font-size: 2rem; }
.portal .ss-news-meta { display: flex; flex-wrap: wrap; gap: 10px; color: var(--portal-muted); font-size: .75rem; margin-bottom: 10px; }
.portal .ss-news-item h3 { color: var(--portal-text); font-size: 1.125rem; line-height: 1.55; margin: 0 0 10px; }
.portal .ss-news-item p { color: var(--portal-muted); font-size: .9375rem; line-height: 1.8; margin: 0 0 14px; }
.portal .ss-news-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.portal .ss-news-go { display: inline-flex; gap: 10px; margin-top: 14px; color: var(--portal-accent); font-size: .875rem; }
.portal .project-content { display: flex; flex-direction: column; flex: 1; padding: 23px; }
.portal .project-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; }
.portal .tag { font-size: .625rem; padding: 3px 7px; font-weight: 600; letter-spacing: .045em; border-radius: 4px; background: var(--portal-elevated); color: var(--portal-accent); border: 1px solid var(--portal-line); box-shadow: none; }
.portal .project-content h3 { font-size: 1.125rem; line-height: 1.5; font-weight: 500; letter-spacing: -.02em; margin: 0 0 12px; color: var(--portal-text); }
.portal .project-content p { font-size: .9375rem; line-height: 1.8; color: var(--portal-muted); margin: 0 0 24px; }
.portal .project-btn { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 40px; padding: 13px 0 0; margin-top: auto; color: var(--portal-text); border: 0; border-top: 1px solid var(--portal-line); border-radius: 0 !important; background: none; font-size: .875rem; box-shadow: none; }
.portal .project-btn:hover { color: var(--portal-accent); background: none; transform: none; }
.portal .ss-more-wrap { display: flex; justify-content: center; margin: 32px 0 0; }
.portal .ss-more { padding: 12px 24px; border: 1px solid var(--portal-line); border-radius: 10px; background: var(--portal-surface); color: var(--portal-text); cursor: pointer; }
.portal .ss-more.is-off { display: none; }
.portal .matrix-container { gap: 0; }
.portal .matrix-header { text-align: left; margin: 0; }
.portal .matrix-grid { display: grid; grid-template-columns: 1fr 1.1fr; gap: 28px; margin: 0; }
.portal .matrix-bio-card, .portal .matrix-skills-card { grid-column: auto; grid-row: auto; border: 1px solid var(--portal-line); border-radius: 16px; background: var(--portal-surface); padding: 30px; }
.portal .matrix-card-title { color: var(--portal-text); border: 0; border-left: 2px solid var(--portal-accent); border-radius: 0; padding: 0 0 0 12px; margin: 0 0 28px; background: transparent; font-family: inherit; font-size: 1rem; }
.portal .skill-label { color: var(--portal-text); }
.portal .skill-percent { color: var(--portal-accent); }
.portal .skill-fill { background: var(--portal-accent); box-shadow: none; }
.portal .bio-role { color: var(--portal-accent); }
.portal .bio-hud-container { width: 160px; height: 160px; margin: 0 auto 20px; }
.portal .hud-ring { display: none; }
.portal .bio-avatar { width: 160px; height: 160px; border: 2px solid var(--portal-line); box-shadow: none; border-radius: 50%; object-fit: cover; }
.portal .bio-info { text-align: center; }
.portal .bio-desc { color: var(--portal-muted); line-height: 1.8; }
.portal .bio-tags { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin: 18px 0; }
.portal .bio-tags span { border: 1px solid var(--portal-line); padding: 4px 9px; font-size: .75rem; border-radius: 5px; }
.portal .tech-grid, .portal .tech-stack-grid { gap: 18px; }
.portal .tech-badge { animation: none !important; background: var(--portal-surface); border: 1px solid var(--portal-line); }
.portal .books-intro { text-align: left; margin: -8px 0 32px; }
.portal .book-card { background: var(--portal-surface); border-color: var(--portal-line); box-shadow: none; }
.portal .book-info h3 { color: var(--portal-text); }
.portal .book-meta, .portal .book-desc { color: var(--portal-muted); }

/* Footer and the always-available, compact assistant. */
.portal .site-footer { background: var(--portal-surface); margin: 0; border-top: 1px solid var(--portal-line); padding: 0; }
.portal .cg-footer-grid { width: 100%; max-width: var(--portal-max); margin: auto; padding: 48px var(--portal-gutter) 32px; display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 40px; text-align: left; }
.portal .cg-footer-brand img { width: 170px; height: auto; max-height: 50px; object-fit: contain; margin-bottom: 12px; }
.portal .cg-footer-brand p { color: var(--portal-muted); font-size: .875rem; line-height: 1.8; max-width: 300px; }
.portal .cg-footer-col { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.portal .cg-footer-col h4 { color: var(--portal-text); font-weight: 500; font-size: .875rem; margin: 0 0 8px; text-transform: none; }
.portal .cg-footer-col a { color: var(--portal-muted); font-size: .8125rem; }
.portal .cg-footer-col a:hover { color: var(--portal-accent); }
.portal .cg-footer-social { display: flex; gap: 16px; margin-top: 18px; color: var(--portal-muted); }
.portal .sponsors-list { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; }
.portal .sponsor-logo { width: auto; max-width: 80px; height: 36px; object-fit: contain; }
.portal .cg-footer-bottom { display: flex; flex-wrap: wrap; gap: 12px; justify-content: space-between; margin: auto; max-width: var(--portal-max); padding: 20px var(--portal-gutter) 28px; border-top: 1px solid var(--portal-line); color: var(--portal-muted); font-size: .75rem; }
.portal .cg-footer-bottom p { margin: 0; }
.portal .chatbot-widget { display: block !important; position: fixed; right: 24px; bottom: calc(24px + var(--ss-safe-b)); z-index: 1150; }
.portal #chatbot-toggle { display: flex !important; align-items: center; justify-content: center; gap: 9px; width: auto; height: 48px; padding: 0 18px; border: 1px solid #ffa466; border-radius: 12px; background: #ff8a3c; color: #1a1008; box-shadow: 0 4px 20px #0003; font-size: .875rem; font-weight: 600; }
.portal #chatbot-toggle .pulse-ring, .portal #chatbot-toggle::before, .portal #chatbot-toggle::after { display: none; }
.portal #chat-window { display: flex; position: absolute; bottom: 64px; right: 0; width: 390px; height: min(570px,75dvh); max-height: calc(100dvh - 170px); margin: 0; border: 1px solid var(--portal-line); border-radius: 16px; background: var(--portal-surface); box-shadow: 0 12px 64px #0006; overflow: hidden; }
.portal #chat-window.hidden { display: none; }
.portal .chat-header { padding: 18px; background: var(--portal-elevated); border-bottom: 1px solid var(--portal-line); color: var(--portal-text); }
.portal .header-title h1 { font-size: 1rem; line-height: 1.4; color: var(--portal-text); }
.portal .status-indicator { font-size: .75rem; color: var(--portal-muted); }
.portal .header-avatar { width: 36px; height: 36px; }
.portal .chat-log { flex: 1; min-height: 0; overflow-y: auto; padding: 18px; }
.portal .message { font-size: .9375rem; line-height: 1.75; overflow-wrap: anywhere; max-width: 100%; }
.portal .message.bot { color: var(--portal-text); background: var(--portal-elevated); }
.portal .message.user { color: #20150c; background: #ffac74; }
.portal .chat-input { display: flex; gap: 8px; align-items: center; background: var(--portal-surface); padding: 12px; border-top: 1px solid var(--portal-line); }
.portal #user-input { color: var(--portal-text) !important; min-width: 0; font-size: 1rem; }
.portal .icon-btn { color: var(--portal-muted); width: 40px; height: 40px; flex: 0 0 40px; }
.portal .modal-container { max-height: 90dvh; overflow-y: auto; background: var(--portal-surface); color: var(--portal-text); }
.portal .modal-container input { color: var(--portal-text); background: var(--portal-bg); border-color: var(--portal-line); }
.portal #ss-widgets { display: none !important; }

@media (max-width: 1199px) {
  .portal .navbar { gap: 16px; }
  .portal .nav-links { display: none; }
  .portal .hamburger { display: flex; }
  .hero-grid { gap: 32px; }
  .portal .cg-footer-grid { grid-template-columns: 1.3fr 1fr 1fr; gap: 28px; }
  .portal .cg-footer-sponsors { grid-column: 1/-1; }
}
@media (max-width: 800px) {
  .hero-grid { grid-template-columns: 1fr; padding-top: 44px; gap: 36px; }
  .portal #home .hero-title { font-size: clamp(3.1rem,9vw,4.8rem) !important; }
  .portal #home .hero-text { max-width: 600px; }
  .hero-showcase { max-width: 600px; margin-inline: auto; }
  .portal .projects-grid, .portal #knowledge-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .path-grid { grid-template-columns: 1fr; }
  .path-card { padding: 22px; }
  .portal .matrix-grid { grid-template-columns: 1fr; }
  .portal .category-tabs { flex-wrap: nowrap; overflow-x: auto; padding: 2px 0 10px; scrollbar-width: none; }
  .portal .category-tabs::-webkit-scrollbar { display: none; }
  .portal .category-tabs .tab-btn { flex: 0 0 auto; white-space: nowrap; }
  .portal .hero-stat-item { flex-direction: column; gap: 7px; padding-inline: 8px; }
  .portal .hero-stat-label { font-size: .75rem; }
}
@media (max-width: 540px) {
  .portal .ss-news-item { grid-template-columns: 1fr; padding: 20px; gap: 18px; }
  .portal .ss-news-thumb { height: 170px; }
  .portal-search-row { flex-wrap: wrap; gap: 8px; }
  .portal .navbar { min-height: 72px; padding: 12px 16px; gap: 10px; }
  .portal .nav-logo { flex: 1 1 128px; max-width: 144px; }
  .portal .nav-logo img { width: 100%; }
  .portal .nav-actions { gap: 5px; }
  .portal .nav-actions .btn { min-height: 40px; padding: 7px 9px; }
  .portal #theme-toggle { width: 34px; }
  .portal #nav-login-btn { display: none !important; }
  .portal .nav-user-nm, .portal .nav-user-cv { display: none; }
  .portal .nav-user-btn { padding: 4px; }
  .portal .hamburger { flex-basis: 40px; width: 40px; height: 40px; padding: 8px; }
  .portal #home .hero-title { font-size: clamp(2.7rem,10.5vw,3.6rem) !important; margin-bottom: 22px; }
  .portal .hero-badge { font-size: .625rem; letter-spacing: .1em; margin-bottom: 21px; }
  .portal #home .hero-text { font-size: 1rem !important; margin-bottom: 26px; }
  .portal .hero-buttons { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .portal .hero-buttons .btn { padding: 12px 9px; font-size: .8125rem; gap: 7px; }
  .hero-note { font-size: .75rem; margin-top: 22px; }
  .hero-grid { padding-top: 34px; padding-bottom: 32px; }
  .robot-stage { height: 295px; }
  .showcase-heading { padding: 20px 18px 0; font-size: .625rem; }
  .showcase-caption { padding: 16px 18px 20px; }
  .portal .hero-stats { grid-template-columns: repeat(2,1fr); padding: 4px 0; }
  .portal .hero-stat-item { flex-direction: row; padding: 18px 8px; }
  .portal .hero-stat-item:nth-child(2) { border-right: 0; }
  .portal .hero-stat-item:nth-child(-n+2) { border-bottom: 1px solid var(--portal-line); }
  .portal .hero-stat-number { font-size: 1.5rem; }
  .home-paths { padding-block: 32px 40px; }
  .home-paths-heading { display: block; }
  .home-paths-heading h2 { margin-bottom: 7px; }
  .stack-strip { gap: 14px 22px; padding-top: 24px; }
  .stack-strip > span { flex-basis: 100%; }
  .portal section.spa-section:not(#home) { padding-block: 36px 48px !important; }
  .portal .projects-grid, .portal #knowledge-grid { grid-template-columns: 1fr; }
  .portal .section-title { margin-bottom: 24px; }
  .portal .project-content { padding: 22px; }
  .portal .cg-footer-grid { grid-template-columns: 1fr 1fr; padding-block: 34px; gap: 28px; }
  .portal .cg-footer-brand { grid-column: 1/-1; }
  .portal .cg-footer-bottom { padding-bottom: 90px; font-size: .6875rem; }
  .portal .chatbot-widget { right: 16px; bottom: calc(16px + var(--ss-safe-b)); }
  .portal #chat-window { position: fixed; width: auto; left: 12px; right: 12px; bottom: calc(78px + var(--ss-safe-b)); height: 68dvh; max-height: calc(100dvh - 110px); }
  .portal .matrix-bio-card, .portal .matrix-skills-card { padding: 22px; }
}
@media (prefers-reduced-motion: reduce) {
  .portal *, .portal *::before, .portal *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}
@media print {
  .portal .navbar, .portal .chatbot-widget, .portal .model-controls { display: none !important; }
  .portal { --portal-bg: #fff; --portal-text: #000; --portal-muted: #333; }
}

/* Learning hub: editorial photography, readable resources, and clear study paths. */
.hub-hero { grid-template-columns: 1.03fr 1fr; gap: 44px; padding-block: 64px 56px; }
.portal #home .hero-title { font-size: clamp(2.8rem,4.8vw,4.3rem) !important; line-height: 1.15 !important; letter-spacing: -.045em; }
.portal #home .hero-text { max-width: 530px; font-size: 1.04rem !important; margin-bottom: 28px; }
.portal .hero-badge { font-size: .67rem; letter-spacing: .11em; margin-bottom: 25px; }
.hub-home-search { display: flex; align-items: center; gap: 13px; padding: 7px 7px 7px 17px; border: 1px solid var(--portal-line); background: var(--portal-surface); border-radius: 12px; width: 100%; }
.hub-home-search > i { color: var(--portal-muted); font-size: .95rem; }
.hub-home-search input { width: 100%; min-width: 0; background: transparent; color: var(--portal-text); border: none; outline: none; padding: 9px 0; font-size: .9rem; }
.hub-home-search:focus-within { border-color: var(--portal-accent); outline: 2px solid #ff8a3c24; }
.hub-home-search button { width: 40px; height: 40px; flex-shrink: 0; border: none; border-radius: 8px; background: var(--portal-accent); color: #201208; cursor: pointer; }
.hub-quick-links { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 17px; margin-top: 17px; font-size: .75rem; }
.hub-quick-links > span { color: var(--portal-muted); }
.hub-quick-links a { color: var(--portal-text); text-decoration: none; }
.hub-quick-links a:hover { color: var(--portal-accent); }
.hub-photo-mosaic { display: grid; grid-template-columns: 1.12fr 1fr; grid-template-rows: 220px 180px auto; gap: 12px; }
.hub-photo-mosaic > a { display: block; position: relative; min-width: 0; border-radius: 14px; overflow: hidden; background: #e9eceb; color: white; text-decoration: none; isolation: isolate; }
.hub-photo-mosaic img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .35s; }
.hub-photo-mosaic a:hover img { transform: scale(1.035); }
.hub-photo-mosaic .hub-mosaic-main { grid-row: span 2; }
.hub-mosaic-main img { object-position: 50% 35%; }
.hub-photo-caption { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; padding: 20px; background: linear-gradient(transparent 35%,#080c148c 73%,#080c14d9); }
.hub-photo-caption small { font-size: .53rem; letter-spacing: .1em; opacity: .9; }
.hub-photo-caption strong { font-family: 'Space Grotesk',sans-serif; font-size: 1.6rem; font-weight: 500; line-height: 1.3; margin-top: 4px; }
.hub-photo-caption > span { font-size: .59rem; letter-spacing: .12em; margin-top: 9px; color: #cbdbe4; }
.hub-mosaic-g1 .hub-photo-caption { color: #171b20; background: linear-gradient(transparent 45%,#ffffffc9 84%); padding: 13px 16px; }
.hub-mosaic-g1 img { object-fit: contain; object-position: center top; padding-bottom: 32px; background: white; }
.hub-mosaic-g1 .hub-photo-caption strong { font-size: 1.3rem; }
.hub-mosaic-arms .hub-photo-caption { padding: 14px; }
.hub-mosaic-arms .hub-photo-caption strong { font-size: .98rem; }
.hub-mosaic-note { grid-column: 1/-1; color: var(--portal-muted); font-size: .7rem; text-align: right; padding-top: 2px; }
.hub-home-section { padding-block: 50px; }
.hub-section-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: 26px; }
.hub-eyebrow { display: block; font-size: .65rem; letter-spacing: .16em; font-weight: 500; color: var(--portal-accent); margin-bottom: 11px; }
.hub-section-heading h2, .hub-open-note h2, .hub-case-study h2 { color: var(--portal-text); font-weight: 500; font-size: clamp(1.5rem,2.5vw,2.1rem); line-height: 1.4; letter-spacing: -.03em; margin: 0 0 10px; }
.hub-section-heading h2, .hub-case-study h2, .hub-path-intro h2 { text-align: left; }
.hub-section-heading p, .hub-case-study p { color: var(--portal-muted); margin: 0; line-height: 1.85; font-size: .92rem; max-width: 720px; }
.hub-text-link { display: inline-flex; gap: 12px; align-items: center; color: var(--portal-accent); font-size: .85rem; text-decoration: none; white-space: nowrap; padding-bottom: 6px; }
.hub-topic-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 14px; }
.hub-topic { position: relative; display: block; padding: 23px 48px 23px 22px; background: var(--portal-surface); border: 1px solid var(--portal-line); border-radius: 12px; text-decoration: none; transition: background .2s,border-color .2s; }
.hub-topic:hover { border-color: var(--portal-accent); background: var(--portal-elevated); }
.hub-topic > i { display: block; color: var(--portal-accent); font-size: 1.18rem; margin-bottom: 20px; }
.hub-topic h3 { color: var(--portal-text); font-size: 1rem; font-weight: 500; margin: 0 0 8px; line-height: 1.5; }
.hub-topic p { color: var(--portal-muted); font-size: .79rem; margin: 0; line-height: 1.7; }
.hub-topic-arrow { position: absolute; right: 20px; top: 22px; color: var(--portal-muted); }
.hub-featured-section { border-top: 1px solid var(--portal-line); border-bottom: 1px solid var(--portal-line); }
.hub-resource-grid, .hub-robot-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 22px; align-items: stretch; }
.hub-resource, .hub-robot { display: flex; flex-direction: column; background: var(--portal-surface); border: 1px solid var(--portal-line); border-radius: 14px; overflow: hidden; min-width: 0; }
.hub-resource:hover, .hub-robot:hover { border-color: var(--portal-muted); }
.hub-resource-image { position: relative; height: 190px; background: #e6e9eb; overflow: hidden; }
.hub-resource-image img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hub-resource-image img.contain { object-fit: contain; padding: 22px 9px; background: #fff; }
.hub-kind { position: absolute; left: 14px; top: 14px; background: #101318e8; color: #fff; font-size: .64rem; font-weight: 500; border: 1px solid #ffffff30; padding: 4px 9px; border-radius: 5px; }
.hub-resource-body { display: flex; flex-direction: column; flex: 1; padding: 20px; }
.hub-meta { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; color: var(--portal-muted); font-size: .64rem; line-height: 1.65; margin-bottom: 11px; }
.hub-meta > span:last-child { flex-shrink: 0; color: var(--portal-accent); }
.hub-resource h3 { color: var(--portal-text); font-size: 1.1rem; font-weight: 500; line-height: 1.5; margin: 0 0 12px; }
.hub-summary { color: var(--portal-muted); font-size: .87rem; line-height: 1.8; margin: 0 0 18px; }
.hub-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; margin-bottom: 15px; }
.hub-tags > span { font-size: .62rem; color: var(--portal-muted); background: var(--portal-elevated); border: 1px solid var(--portal-line); padding: 3px 7px; border-radius: 4px; }
.hub-prerequisite { color: var(--portal-muted); font-size: .72rem; line-height: 1.75; margin: 0 0 15px; }
.hub-prerequisite > span:first-child { color: var(--portal-text); }
.hub-resource-links { display: flex; justify-content: space-between; gap: 14px; align-items: center; border-top: 1px solid var(--portal-line); padding-top: 15px; }
.hub-resource-links a { display: inline-flex; align-items: center; gap: 9px; color: var(--portal-accent); font-size: .8rem; text-decoration: none; }
.hub-resource-links i { font-size: .67rem; }
.hub-resource-links .hub-code { color: var(--portal-muted); font-size: .7rem; }
.hub-credit { display: inline-flex; align-items: center; align-self: flex-start; gap: 6px; margin-top: 15px; color: var(--portal-muted); font-size: .59rem; line-height: 1.7; text-decoration: none; }
.hub-credit:hover { text-decoration: underline; }
.hub-credit i { font-size: .52rem; }
.hub-path-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 24px; }
.hub-path-preview { display: flex; gap: 15px; color: var(--portal-text); text-decoration: none; padding-top: 22px; border-top: 1px solid var(--portal-line); }
.hub-path-number { color: var(--portal-accent); font-family: 'Space Grotesk',sans-serif; font-size: .85rem; }
.hub-path-preview h3 { font-size: 1.02rem; font-weight: 500; margin: 0 0 10px; }
.hub-path-preview p { font-size: .85rem; line-height: 1.8; color: var(--portal-muted); margin: 0 0 16px; }
.hub-path-more { font-size: .78rem; color: var(--portal-accent); }
.hub-open-note { text-align: center; border-top: 1px solid var(--portal-line); padding: 55px 20px 65px; }
.hub-open-note p { font-size: .9rem; color: var(--portal-muted); max-width: 640px; line-height: 1.85; margin: 14px auto 0; }
.hub-library-tools { display: grid; grid-template-columns: minmax(0,1fr) 280px; gap: 20px; margin: 30px 0 20px; }
.hub-library-tools label { display: flex; flex-direction: column; gap: 9px; font-size: .8rem; color: var(--portal-muted); }
.hub-library-tools input, .hub-library-tools select { width: 100%; min-width: 0; height: 48px; font: inherit; font-size: .92rem; color: var(--portal-text); border: 1px solid var(--portal-line); background: var(--portal-surface); border-radius: 9px; padding: 0 15px; }
.hub-filter-row { display: flex; flex-wrap: wrap; gap: 8px; }
.hub-filter { font: inherit; font-size: .82rem; padding: 9px 18px; min-height: 42px; color: var(--portal-muted); background: transparent; border: 1px solid var(--portal-line); border-radius: 7px; cursor: pointer; }
.hub-filter.active { background: var(--portal-accent); color: #211106; border-color: var(--portal-accent); }
.hub-result-row { display: flex; align-items: center; justify-content: space-between; gap: 15px; min-height: 63px; color: var(--portal-muted); font-size: .79rem; }
.hub-result-row p { margin: 0; }
.hub-result-row button { border: none; color: var(--portal-accent); background: transparent; font: inherit; padding: 10px 0 10px 12px; cursor: pointer; }
.hub-archive { margin-top: 44px; border-top: 1px solid var(--portal-line); padding-top: 28px; }
.hub-archive h2 { color: var(--portal-text); font-size: 1.1rem; font-weight: 500; margin: 0 0 18px; }
.hub-archive > div { display: flex; flex-wrap: wrap; gap: 12px 25px; }
.hub-archive a { color: var(--portal-accent); font-size: .85rem; text-decoration: none; }
.hub-robot-image { height: 270px; position: relative; background: #eff0ef; }
.hub-robot-image img { display: block; width: 100%; height: 100%; object-fit: cover; }
.hub-robot-image img.contain { object-fit: contain; padding: 20px; background: white; }
.hub-robot-image > span { position: absolute; left: 15px; top: 15px; font-size: .56rem; letter-spacing: .08em; background: #14191ce8; color: white; padding: 5px 9px; border-radius: 4px; }
.hub-robot-body { display: flex; flex-direction: column; flex: 1; padding: 23px; }
.hub-robot h2 { margin: 0 0 10px; font-size: 1.4rem; font-weight: 500; color: var(--portal-text); text-align: left; }
.hub-robot p { margin: 0 0 20px; font-size: .9rem; line-height: 1.8; color: var(--portal-muted); }
.hub-robot .hub-resource-links { margin-top: auto; }
.hub-case-study { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; align-items: center; padding-top: 60px; margin-top: 55px; border-top: 1px solid var(--portal-line); }
.hub-case-study .btn { margin-top: 24px; }
.hub-learning-path { display: grid; grid-template-columns: .85fr 1.15fr; gap: 40px; padding: 34px; border: 1px solid var(--portal-line); border-radius: 14px; background: var(--portal-surface); margin-top: 24px; }
.hub-path-intro h2 { font-size: 1.45rem; font-weight: 500; margin: 14px 0; color: var(--portal-text); }
.hub-path-intro p { color: var(--portal-muted); font-size: .9rem; line-height: 1.8; margin-bottom: 18px; }
.hub-path-intro .hub-outcome { border-left: 2px solid var(--portal-accent); padding-left: 14px; font-size: .8rem; }
.hub-steps { margin: 0; padding-left: 24px; }
.hub-steps li { color: var(--portal-accent); padding: 0 0 23px 7px; margin-bottom: 23px; border-bottom: 1px solid var(--portal-line); }
.hub-steps li:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.hub-steps h3 { color: var(--portal-text); font-size: .98rem; font-weight: 500; line-height: 1.6; margin: 0 0 7px; }
.hub-steps p { color: var(--portal-muted); font-size: .81rem; line-height: 1.75; margin-bottom: 12px; }
.hub-steps a { display: inline-flex; gap: 10px; color: var(--portal-accent); font-size: .8rem; text-decoration: none; }
.hub-about-intro { color: var(--portal-muted); font-size: 1.05rem; line-height: 1.9; max-width: 800px; margin-bottom: 30px; }
.portal :is(.hub-topic,.hub-path-preview,.hub-filter,.hub-home-search button,a,select,input):focus-visible { outline: 2px solid var(--portal-accent); outline-offset: 4px; }
@media (max-width: 1050px) {
 .hub-hero { gap: 28px; }
 .hub-photo-mosaic { grid-template-rows: 190px 170px auto; }
 .hub-resource-grid,.hub-robot-grid { gap: 16px; }
 .hub-resource-body { padding: 17px; }
 .hub-meta { flex-wrap: wrap; gap: 3px 12px; }
}
@media (max-width: 850px) {
 .hub-hero { grid-template-columns: 1fr; padding-top: 38px; }
 .portal #home .hero-content { max-width: 660px; }
 .portal #home .hero-title { font-size: clamp(2.8rem,7vw,4.2rem) !important; }
 .portal #home .hero-text { max-width: 630px; }
 .hub-photo-mosaic { grid-template-columns: 1.1fr 1fr; grid-template-rows: 215px 175px auto; }
 .hub-mosaic-main img { object-position: 50% 27%; }
 .hub-topic-grid,.hub-resource-grid,.hub-robot-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
 .hub-path-grid { grid-template-columns: 1fr; }
 .hub-path-preview { padding-top: 20px; }
 .hub-library-tools { grid-template-columns: 1fr 220px; }
 .hub-case-study,.hub-learning-path { grid-template-columns: 1fr; gap: 25px; }
 .hub-case-study .hero-showcase { max-width: 560px; }
 .hub-learning-path { padding: 27px; }
 .hub-section-heading { align-items: flex-start; }
}
@media (max-width: 540px) {
 .hub-hero { padding-block: 32px 30px; gap: 30px; }
 .portal #home .hero-title { font-size: clamp(2.25rem,9.5vw,3.1rem) !important; }
 .portal #home .hero-text { font-size: .95rem !important; }
 .portal .hero-badge { font-size: .56rem; letter-spacing: .07em; }
 .hub-home-search { gap: 9px; padding-left: 12px; }
 .hub-home-search input { font-size: .8rem; }
 .hub-photo-mosaic { grid-template-rows: 163px 139px auto; gap: 9px; }
 .hub-photo-caption { padding: 15px; }
 .hub-photo-caption small { font-size: .47rem; }
 .hub-mosaic-arms .hub-photo-caption { padding: 10px; }
 .hub-mosaic-arms .hub-photo-caption strong { font-size: .73rem; }
 .hub-mosaic-note { font-size: .61rem; }
 .hub-home-section { padding-block: 32px; }
 .hub-section-heading { flex-direction: column; gap: 8px; margin-bottom: 22px; }
 .hub-section-heading p { font-size: .84rem; }
 .hub-topic-grid { gap: 10px; }
 .hub-topic { padding: 17px 14px; }
 .hub-topic h3 { font-size: .87rem; }
 .hub-topic p { font-size: .72rem; }
 .hub-topic-arrow { right: 13px; top: 16px; }
 .hub-resource-grid,.hub-robot-grid { grid-template-columns: 1fr; gap: 20px; }
 .hub-resource-image { height: 210px; }
 .hub-resource-body { padding: 20px; }
 .hub-resource h3 { font-size: 1.12rem; }
 .hub-library-tools { grid-template-columns: 1fr; gap: 15px; }
 .hub-filter { padding: 8px 13px; font-size: .77rem; }
 .hub-robot-image { height: 290px; }
 .hub-learning-path { padding: 22px 18px; }
 .hub-open-note { padding: 40px 0; }
 .hub-case-study { padding-top: 35px; margin-top: 35px; }
}
@media (prefers-reduced-motion: reduce) {
 .hub-photo-mosaic img { transition: none; }
 .hub-photo-mosaic a:hover img { transform: none; }
}

/* UX refinement: a reading-first library with a robot spotlight and local reading list. */
body.portal { --portal-bg:#101215; --portal-surface:#191c20; --portal-elevated:#23272c; --portal-muted:#b1b6bc; --portal-line:#30353b; --portal-text:#f4f3ef; --portal-accent:#f6a461; }
body.portal[data-theme="light"] { --portal-bg:#f6f5f0; --portal-surface:#fff; --portal-elevated:#eeeee8; --portal-muted:#606760; --portal-line:#dddfd7; --portal-text:#202921; --portal-accent:#a44917; }
.portal .navbar { min-height:78px; padding-block:13px; background:var(--portal-bg); }
.portal .nav-logo img,.portal .cg-footer-logo { filter:brightness(1.65); }
.portal[data-theme="light"] .nav-logo img,.portal[data-theme="light"] .cg-footer-logo { filter:none; }
.portal .nav-links { gap:5px; }
.portal .nav-links a { display:block; padding:8px 11px; border-radius:7px; font-size:.83rem; text-decoration:none; }
.portal .nav-links a.nav-active { background:var(--portal-elevated); color:var(--portal-text); }
.portal #scroll-progress-bar { height:2px; opacity:.6; box-shadow:none; }
.portal #home .hub-hero { grid-template-columns:1fr 1fr; gap:64px; padding-block:62px 42px; align-items:center; position:relative; }
.portal #home .hero-badge { color:var(--portal-accent); font-size:.7rem; letter-spacing:.13em; margin:0 0 22px; }
.portal #home .hero-badge::before { width:6px; height:6px; box-shadow:0 0 0 4px #f6a46115; margin-right:14px; }
.portal #home .hero-title { font-size:clamp(2.8rem,4.3vw,4.05rem) !important; letter-spacing:-.048em; font-weight:600; line-height:1.15 !important; margin-bottom:25px; }
.portal #home .hero-text { max-width:490px; color:var(--portal-muted); line-height:1.95; margin-bottom:30px; font-size:1.02rem !important; }
.hub-hero-actions { display:flex; align-items:center; flex-wrap:wrap; gap:16px 25px; }
.portal .hub-hero-actions .primary-btn { border-radius:9px; background:#f6a461; border-color:#f6a461; color:#29180b; padding:13px 20px; font-size:.88rem; font-weight:600; box-shadow:0 5px 18px #00000015; }
.portal .hub-hero-actions .primary-btn:hover { background:#ffb878; border-color:#ffb878; }
.hub-hero-secondary { display:inline-flex; gap:10px; color:var(--portal-text); text-decoration:none; font-size:.85rem; }
.hub-hero-secondary i { font-size:.7rem; }
.hub-hero-footnote { display:flex; align-items:center; gap:13px; margin-top:28px; color:var(--portal-muted); font-size:.68rem; line-height:1.7; }
.hub-mini-icons { display:flex; flex-shrink:0; padding-left:0; }
.hub-mini-icons i { display:grid; place-items:center; width:28px; height:28px; border:2px solid var(--portal-bg); border-radius:50%; color:var(--portal-text); background:var(--portal-elevated); font-size:.69rem; margin-left:-5px; }
.hub-mini-icons i:first-child { margin-left:0; }
.hub-spotlight { border:1px solid var(--portal-line); border-radius:20px; padding:12px; background:var(--portal-surface); box-shadow:0 20px 70px #00000020; }
.hub-spotlight-top { display:flex; justify-content:space-between; align-items:center; gap:15px; padding:6px 6px 16px; font-size:.58rem; letter-spacing:.13em; color:var(--portal-muted); }
.hub-spotlight-top i { font-size:.42rem; color:#a8c6ab; margin-right:7px; }
.hub-spotlight-top > span:last-child { font-family:'Space Grotesk',sans-serif; letter-spacing:.06em; }
.hub-spotlight-stage { position:relative; height:320px; overflow:hidden; border-radius:11px; isolation:isolate; background:#132c2d; }
.hub-spotlight-stage > img { display:block; height:100%; width:100%; object-fit:cover; object-position:50% 30%; }
.hub-spotlight-stage.is-light { background:white; }
.hub-spotlight-stage.is-light > img { object-fit:contain; padding:12px 0 48px; }
.hub-spotlight-caption { position:absolute; inset:0; display:flex; flex-direction:column; justify-content:flex-end; padding:24px; color:white; background:linear-gradient(0deg,#091b23eb,transparent 75%); }
.hub-spotlight-caption > span:first-child { font-size:.53rem; letter-spacing:.16em; margin-bottom:5px; color:#dbe6e7; }
.hub-spotlight-caption > span:last-child { font-size:.56rem; letter-spacing:.12em; color:#dbe6e7; }
.hub-spotlight-caption > div { display:flex; align-items:center; justify-content:space-between; gap:20px; margin:0 0 8px; }
.hub-spotlight-caption h2 { text-align:left; color:inherit; font-size:2.1rem; font-weight:500; margin:0; line-height:1.25; }
.hub-spotlight-open { display:grid; place-items:center; width:37px; height:37px; background:#ffffff15; border:1px solid #ffffff60; border-radius:50%; color:white; text-decoration:none; font-size:.8rem; }
.hub-spotlight-stage.is-light .hub-spotlight-caption { background:linear-gradient(0deg,#e4e9e6ed,transparent 60%); color:#203228; }
.hub-spotlight-stage.is-light .hub-spotlight-caption > span { color:#43564c; }
.hub-spotlight-stage.is-light .hub-spotlight-open { color:#203228; border-color:#8ca496; }
.hub-gallery-tabs { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:6px; padding-top:12px; }
.hub-gallery-tabs button { display:flex; align-items:center; gap:9px; padding:8px; background:transparent; border:1px solid transparent; border-radius:9px; color:var(--portal-muted); text-align:left; cursor:pointer; }
.hub-gallery-tabs button.active { border-color:var(--portal-line); background:var(--portal-elevated); color:var(--portal-text); }
.hub-gallery-tabs img { width:35px; height:38px; object-fit:cover; border-radius:5px; }
.hub-gallery-tabs span { font-size:.72rem; font-weight:500; }
.hub-gallery-tabs small { display:block; font-size:.43rem; letter-spacing:.06em; font-weight:400; margin-top:3px; color:var(--portal-muted); }
.hub-discovery-bar { display:grid; grid-template-columns:.85fr 1.15fr; align-items:center; gap:30px; background:var(--portal-surface); border:1px solid var(--portal-line); border-radius:13px; padding:20px 23px; }
.hub-discovery-label { display:flex; align-items:center; gap:16px; }
.hub-discovery-label > i { display:grid; place-items:center; width:42px; height:42px; border:1px solid var(--portal-line); border-radius:10px; color:var(--portal-accent); font-size:1rem; }
.hub-discovery-label strong { display:block; color:var(--portal-text); font-size:.93rem; font-weight:500; }
.hub-discovery-label div > span { display:block; color:var(--portal-muted); font-size:.73rem; margin-top:4px; }
.hub-discovery-bar .hub-home-search { background:var(--portal-bg); padding:5px 5px 5px 17px; border-radius:8px; }
.hub-home-search input { padding:9px 0; font-size:.86rem; }
.hub-home-search button { width:39px; height:39px; background:#f6a461; border-radius:5px; }
.hub-search-shortcut { flex-shrink:0; display:grid; place-items:center; width:24px; height:25px; color:var(--portal-muted); border:1px solid var(--portal-line); border-radius:4px; font-size:.72rem; font-family:inherit; }
.hub-quick-links { margin:14px 3px 28px; gap:10px; font-size:.7rem; }
.hub-quick-links > span { margin-right:7px; }
.hub-quick-links a,.hub-quick-links button { display:inline-flex; align-items:center; gap:7px; min-height:32px; padding:5px 10px; color:var(--portal-muted); border:1px solid transparent; border-radius:6px; background:transparent; text-decoration:none; font:inherit; cursor:pointer; }
.hub-quick-links a:hover,.hub-quick-links button:hover { color:var(--portal-text); border-color:var(--portal-line); background:var(--portal-surface); }
.hub-quick-links button { margin-left:auto; }
[data-saved-count] { display:inline-grid; place-items:center; min-width:21px; height:20px; background:var(--portal-elevated); border-radius:4px; color:var(--portal-text); padding-inline:4px; font-size:.65rem; }
.portal .hero-stats { padding-block:20px; border-top:0; }
.portal .hero-stat-number { font-size:1.55rem; color:var(--portal-text) !important; }
.portal .hero-stat-label { font-size:.73rem; }
.hub-home-section { padding-block:48px; }
.hub-section-heading { margin-bottom:27px; gap:20px; }
.hub-eyebrow { font-size:.6rem; letter-spacing:.16em; margin-bottom:12px; color:var(--portal-accent); }
.hub-section-heading h2,.hub-open-note h2 { font-size:clamp(1.6rem,2.4vw,2rem); line-height:1.5; font-weight:500; letter-spacing:-.03em; margin-bottom:8px; }
.hub-section-heading p { font-size:.85rem; color:var(--portal-muted); }
.hub-topic-grid { gap:15px; }
.hub-topic { --topic-accent:#f1b57c; display:flex; flex-direction:column; padding:23px; border-radius:13px; background:var(--portal-surface); }
.hub-topic-kinematics { --topic-accent:#93c5a7; }
.hub-topic-manipulation { --topic-accent:#a6bced; }
.hub-topic-ai { --topic-accent:#c5a8dc; }
.hub-topic-simulation { --topic-accent:#94c9d1; }
.hub-topic-navigation { --topic-accent:#d6c990; }
.portal[data-theme="light"] .hub-topic { --topic-accent:#996032; }
.portal[data-theme="light"] .hub-topic-kinematics { --topic-accent:#387354; }
.portal[data-theme="light"] .hub-topic-manipulation { --topic-accent:#4a69a2; }
.portal[data-theme="light"] .hub-topic-ai { --topic-accent:#825596; }
.portal[data-theme="light"] .hub-topic-simulation { --topic-accent:#38787b; }
.portal[data-theme="light"] .hub-topic-navigation { --topic-accent:#84722c; }
.hub-topic:hover { border-color:var(--topic-accent); transform:translateY(-3px); background:var(--portal-surface); }
.hub-topic-top { display:flex; justify-content:space-between; align-items:center; margin-bottom:23px; }
.hub-topic-top i { display:grid; place-items:center; width:41px; height:41px; border-radius:10px; color:var(--topic-accent); background:var(--portal-elevated); font-size:1.05rem; }
.hub-topic-index { font-size:.65rem; font-family:'Space Grotesk',sans-serif; color:var(--portal-muted); opacity:.7; }
.hub-topic h3 { font-size:1.03rem; margin-bottom:6px; }
.hub-topic p { font-size:.77rem; line-height:1.8; margin-bottom:22px; }
.hub-topic-bottom { display:flex; justify-content:space-between; align-items:center; margin-top:auto; color:var(--topic-accent); border-top:1px solid var(--portal-line); padding-top:13px; font-size:.69rem; }
.hub-resource-grid { gap:24px; }
.hub-resource { transition:border-color .2s,box-shadow .2s; }
.hub-resource:hover { box-shadow:0 12px 28px #00000015; border-color:var(--portal-muted); }
.hub-resource-image { height:190px; background:var(--portal-elevated); }
.hub-resource-image img.contain { object-fit:contain; padding:13px; }
.hub-kind { padding:4px 8px; font-size:.69rem; border-radius:5px; background:#18211eed; color:#dce6e0; border:1px solid #ffffff28; }
.hub-resource[data-kind="paper"] .hub-kind { background:#242039ed; color:#e4dcee; }
.hub-resource[data-kind="github"] .hub-kind { background:#1d2a39ed; color:#d4e4ee; }
.hub-resource-body { padding:21px; }
.hub-meta { font-size:.75rem; margin-bottom:12px; flex-wrap:wrap; }
.hub-meta > span:last-child { font-size:.69rem; border-radius:4px; background:var(--portal-elevated); color:var(--portal-muted); padding:2px 6px; }
.hub-resource h3 { margin:0 0 12px; }
.hub-preview-title { padding:0; border:0; font:inherit; line-height:1.55; color:var(--portal-text); background:none; text-align:left; cursor:pointer; }
.hub-preview-title:hover { color:var(--portal-accent); }
.hub-summary { font-size:.84rem; line-height:1.85; display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden; margin-bottom:20px; }
.hub-tags { gap:5px; margin-bottom:20px; }
.hub-tags > span { font-size:.7rem; padding:3px 6px; border:0; border-radius:3px; color:var(--portal-muted); }
.hub-save { display:grid; place-items:center; width:42px; height:42px; padding:0; color:#26342d; background:#ffffffed; border:1px solid #ffffff80; border-radius:8px; cursor:pointer; font-size:.88rem; }
.hub-resource-image > .hub-save { position:absolute; top:12px; right:12px; }
.hub-save.is-saved { color:#8b4618; background:#ffdfbd; border-color:#ffbf79; }
.hub-save:hover { background:#ffdfbd; color:#8b4618; }
.hub-preview-link { display:inline-flex; align-items:center; justify-content:space-between; gap:22px; background:transparent; color:var(--portal-text); font:inherit; font-size:.79rem; border:0; padding:3px 0; cursor:pointer; }
.hub-preview-link:hover { color:var(--portal-accent); }
.hub-preview-link i { font-size:.7rem; }
.hub-resource-links .hub-source-link { color:var(--portal-muted); font-size:.75rem; gap:7px; }
.hub-credit { font-size:.66rem; opacity:.9; margin-top:13px; }
.hub-path-grid { gap:22px; }
.hub-path-preview { display:block; overflow:hidden; border:1px solid var(--portal-line); border-radius:14px; padding:0; background:var(--portal-surface); transition:border-color .2s; }
.hub-path-preview:hover { border-color:var(--portal-accent); }
.hub-path-cover { position:relative; height:165px; overflow:hidden; background:var(--portal-elevated); }
.hub-path-cover img { display:block; width:100%; height:100%; object-fit:cover; object-position:center 34%; }
.hub-path-cover .hub-path-number { position:absolute; left:15px; top:15px; background:#101b1cd9; color:#f6f4ef; border:1px solid #ffffff33; border-radius:4px; padding:4px 8px; font-size:.57rem; letter-spacing:.13em; }
.hub-path-preview-body { padding:21px; }
.hub-path-label { display:block; color:var(--portal-muted); font-size:.64rem; margin-bottom:12px; }
.hub-path-preview h3 { font-size:1.07rem; line-height:1.5; margin-bottom:10px; }
.hub-path-preview p { font-size:.83rem; margin-bottom:22px; }
.hub-path-more { display:flex; justify-content:space-between; align-items:center; font-size:.76rem; border-top:1px solid var(--portal-line); padding-top:15px; }
.hub-path-more i { font-size:.72rem; }
.hub-open-note { background:var(--portal-surface); border:1px solid var(--portal-line); border-radius:15px; margin:0 0 55px; padding:42px 26px; }
.hub-open-note p { font-size:.85rem; }
.hub-library-panel { padding:23px; border:1px solid var(--portal-line); border-radius:13px; background:var(--portal-surface); }
.hub-library-tools { grid-template-columns:minmax(0,1fr) 235px 160px; margin:0 0 20px; gap:16px; }
.hub-library-tools input,.hub-library-tools select { background:var(--portal-bg); border-color:var(--portal-line); font-size:.84rem; height:44px; border-radius:7px; }
.hub-library-tools label { font-size:.73rem; gap:8px; }
.hub-library-filterline { display:flex; gap:15px; justify-content:space-between; align-items:center; border-top:1px solid var(--portal-line); padding-top:19px; }
.hub-filter-row { gap:5px; }
.hub-filter { font-size:.74rem; padding:8px 12px; min-height:36px; border-color:transparent; border-radius:6px; }
.hub-filter.active { background:#f6a461; color:#24170e; border-color:#f6a461; }
.hub-saved-filter { display:inline-flex; align-items:center; gap:8px; font:inherit; font-size:.74rem; min-height:36px; background:transparent; border:1px solid var(--portal-line); border-radius:6px; padding:7px 10px; color:var(--portal-text); cursor:pointer; }
.hub-saved-filter.active { border-color:var(--portal-accent); color:var(--portal-accent); }
.hub-saved-note { color:var(--portal-muted); font-size:.78rem; margin:20px 0 0; }
.hub-result-row { min-height:67px; font-size:.77rem; }
.hub-robot { border-radius:16px; }
.hub-robot-image { height:280px; }
.hub-robot-body { padding:24px; }
.hub-learning-path { scroll-margin-top:100px; border-radius:15px; }
.hub-learning-path:focus { outline:2px solid var(--portal-accent); outline-offset:5px; }
.hub-detail { width:min(760px,calc(100vw - 32px)); max-width:none; max-height:88dvh; margin:auto; padding:0; border:1px solid var(--portal-line); border-radius:18px; background:var(--portal-surface); color:var(--portal-text); overflow:hidden; box-shadow:0 24px 100px #00000070; }
.hub-detail::backdrop { background:#070c11b8; backdrop-filter:blur(5px); }
#hub-detail-content { overflow:auto; max-height:88dvh; overscroll-behavior:contain; }
.hub-detail-close { position:absolute; top:13px; right:13px; z-index:3; display:grid; place-items:center; width:38px; height:38px; border:1px solid #ffffff80; border-radius:50%; background:#fffffff2; color:#18221c; cursor:pointer; }
.hub-detail-image { position:relative; height:245px; background:#e6ede7; }
.hub-detail-image img { display:block; width:100%; height:100%; object-fit:cover; }
.hub-detail-image img.contain { object-fit:contain; padding:20px; background:white; }
.hub-detail-image img[src$="kinematics.svg"] { object-fit:contain; background:#e9f0e9; }
.hub-detail-body { padding:30px; }
.hub-detail-body h2 { text-align:left; color:var(--portal-text); font-size:1.7rem; font-weight:500; line-height:1.5; margin:16px 0; letter-spacing:-.02em; }
.hub-detail-summary { color:var(--portal-muted); font-size:.98rem; line-height:1.9; margin:0 0 20px; }
.hub-detail-prerequisite { display:flex; gap:17px; padding:20px; margin:24px 0; background:var(--portal-elevated); border:1px solid var(--portal-line); border-radius:10px; }
.hub-detail-prerequisite > i { color:var(--portal-accent); padding-top:4px; }
.hub-detail-prerequisite h3 { font-size:.88rem; color:var(--portal-text); margin:0 0 6px; }
.hub-detail-prerequisite p { color:var(--portal-muted); font-size:.85rem; margin:0; line-height:1.7; }
.hub-detail-actions { display:flex; align-items:center; flex-wrap:wrap; gap:12px; }
.hub-detail-actions .primary-btn { background:#f6a461; color:#261709; border-color:#f6a461; font-size:.88rem; }
.hub-detail-actions .hub-save { width:48px; height:48px; background:var(--portal-elevated); border-color:var(--portal-line); color:var(--portal-text); }
.hub-detail-actions .hub-save.is-saved { color:var(--portal-accent); border-color:var(--portal-accent); }
.hub-detail-actions .hub-code { display:flex; gap:8px; color:var(--portal-text); font-size:.82rem; text-decoration:none; margin-left:8px; }
.hub-detail-note { color:var(--portal-muted); font-size:.72rem; margin:16px 0 0; }
.hub-dialog-open { overflow:hidden !important; }
.hub-notice { position:fixed; left:50%; bottom:28px; transform:translateX(-50%); z-index:1800; max-width:calc(100% - 32px); padding:13px 21px; border:1px solid var(--portal-line); border-radius:10px; color:var(--portal-text); background:var(--portal-elevated); box-shadow:0 8px 30px #00000030; font-size:.85rem; text-align:center; }
.portal .site-footer { border-top:1px solid var(--portal-line); background:var(--portal-bg); }
.portal .cg-footer-grid { display:grid; grid-template-columns:1.5fr 1fr 1fr 1fr; gap:35px; padding-block:40px 28px; }
.portal .cg-footer-brand { grid-column:auto; }
.portal .cg-footer-tagline { max-width:270px; font-size:.81rem; line-height:1.85; }
.portal .cg-footer-col a { color:var(--portal-muted); font-size:.78rem; text-decoration:none; display:inline-block; padding-block:3px; }
.portal .cg-footer-col a:hover { color:var(--portal-accent); }
.portal .cg-footer-col h4 { font-size:.83rem; font-weight:500; margin-bottom:16px; color:var(--portal-text); }
.portal .cg-footer-social { display:flex; gap:13px; margin-top:18px; }
.portal .cg-footer-social a { color:var(--portal-muted); font-size:1rem; }
.portal .cg-footer-social a:hover { color:var(--portal-accent); }
.portal .cg-footer-sponsors { display:flex; grid-column:1/-1; flex-wrap:wrap; align-items:center; gap:24px; border-top:1px solid var(--portal-line); padding-top:24px; }
.portal .cg-footer-sponsors h4 { margin:0; color:var(--portal-muted); font-size:.7rem; }
.portal .cg-footer-bottom { padding-top:16px; font-size:.69rem; }
.portal .chatbot-toggle-btn { background:var(--portal-elevated) !important; color:var(--portal-text) !important; border:1px solid var(--portal-line) !important; box-shadow:0 6px 24px #00000020 !important; border-radius:12px !important; }
.portal .chatbot-toggle-btn i { color:var(--portal-accent); }
@media(min-width:1500px) { .portal .navbar { padding-inline:max(var(--portal-gutter),calc((100vw - 1280px)/2 + 55px)); } }
@media(max-width:1100px) {
 .portal #home .hub-hero { gap:30px; }
 .portal #home .hero-title { font-size:clamp(2.4rem,4.4vw,3.4rem) !important; }
 .hub-hero-actions { align-items:flex-start; gap:18px; }
 .hub-hero-secondary { font-size:.8rem; }
 .hub-gallery-tabs button { gap:6px; padding:6px; }
 .hub-gallery-tabs img { width:28px; height:32px; }
 .hub-gallery-tabs span { font-size:.63rem; }
 .hub-gallery-tabs small { font-size:.38rem; }
 .hub-library-tools { grid-template-columns:minmax(0,1fr) 210px 140px; }
}
@media(max-width:850px) {
 .portal #home .hub-hero { grid-template-columns:1fr; gap:30px; padding-top:36px; }
 .portal #home .hero-title { font-size:clamp(2.9rem,7.3vw,4rem) !important; }
 .portal #home .hero-text { max-width:630px; }
 .hub-hero-footnote { margin-top:23px; }
 .hub-spotlight-stage { height:365px; }
 .hub-gallery-tabs img { width:38px; height:38px; }
 .hub-gallery-tabs span { font-size:.76rem; }
 .hub-gallery-tabs small { font-size:.49rem; }
 .hub-discovery-bar { grid-template-columns:1fr; gap:17px; }
 .hub-discovery-label > i { display:none; }
 .hub-discovery-label div { display:flex; justify-content:space-between; gap:15px; width:100%; align-items:baseline; }
 .hub-path-grid { grid-template-columns:1fr; }
 .hub-path-preview { display:grid; grid-template-columns:.8fr 1.2fr; }
 .hub-path-cover { height:100%; min-height:200px; }
 .hub-library-tools { grid-template-columns:1fr 1fr; }
 .hub-library-tools .hub-search-label { grid-column:1/-1; }
 .hub-library-filterline { flex-wrap:wrap; }
 .portal .cg-footer-grid { grid-template-columns:1fr 1fr 1fr; gap:26px; }
 .portal .cg-footer-brand { grid-column:1/-1; }
 .portal .cg-footer-tagline { max-width:420px; }
}
@media(max-width:540px) {
 .portal .navbar { min-height:70px; padding-block:12px; }
 .portal #home .hub-hero { padding-block:31px 28px; }
 .portal #home .hero-title { font-size:clamp(2.35rem,10.2vw,3.2rem) !important; line-height:1.18 !important; margin-bottom:20px; }
 .portal #home .hero-badge { font-size:.6rem; letter-spacing:.08em; margin-bottom:20px; }
 .portal #home .hero-text { font-size:.95rem !important; line-height:1.95; margin-bottom:24px; }
 .portal .hub-hero-actions .primary-btn { width:100%; justify-content:space-between; padding:13px 18px; font-size:.87rem; }
 .hub-hero-actions { gap:17px; }
 .hub-hero-secondary { font-size:.82rem; }
 .hub-hero-footnote { margin-top:20px; font-size:.65rem; }
 .hub-spotlight { padding:9px; border-radius:15px; }
 .hub-spotlight-top { padding:5px 5px 13px; font-size:.5rem; }
 .hub-spotlight-stage { height:300px; }
 .hub-spotlight-caption { padding:19px; }
 .hub-spotlight-caption h2 { font-size:1.85rem; }
 .hub-gallery-tabs { gap:3px; padding-top:8px; }
 .hub-gallery-tabs button { padding:7px 5px; gap:6px; }
 .hub-gallery-tabs img { width:27px; height:32px; }
 .hub-gallery-tabs span { font-size:.63rem; }
 .hub-gallery-tabs small { font-size:.35rem; }
 .hub-discovery-bar { padding:17px; gap:13px; }
 .hub-discovery-label div { display:block; }
 .hub-discovery-label strong { font-size:.87rem; }
 .hub-discovery-label div > span { font-size:.7rem; }
 .hub-discovery-bar .hub-home-search { padding-left:10px; }
 .hub-discovery-bar .hub-home-search input { font-size:1rem; }
 .hub-search-shortcut { display:none; }
 .hub-quick-links { gap:4px 8px; margin-block:12px 20px; }
 .hub-quick-links > span { display:none; }
 .hub-quick-links a { padding-inline:6px; }
 .hub-quick-links button { margin-left:0; flex-basis:100%; padding-left:6px; margin-top:4px; }
 .portal .hero-stats { padding:0; }
 .portal .hero-stat-number { font-size:1.38rem; }
 .portal .hero-stat-label { font-size:.68rem; }
 .hub-home-section { padding-block:34px; }
 .hub-section-heading h2 { font-size:1.55rem; }
 .hub-section-heading p { font-size:.8rem; }
 .hub-topic { padding:17px 15px; border-radius:11px; }
 .hub-topic-top { margin-bottom:17px; }
 .hub-topic-top i { width:34px; height:34px; font-size:.88rem; }
 .hub-topic h3 { font-size:.85rem; line-height:1.6; }
 .hub-topic p { font-size:.7rem; line-height:1.8; margin-bottom:17px; }
 .hub-topic-bottom { font-size:.63rem; padding-top:11px; }
 .hub-resource-image { height:210px; }
 .hub-resource-body { padding:21px; }
 .hub-resource h3 { font-size:1.13rem; }
 .hub-summary { font-size:.86rem; }
 .hub-meta { font-size:.75rem; }
 .hub-resource-image > .hub-save { width:44px; height:44px; }
 .hub-path-preview { display:block; }
 .hub-path-cover { height:170px; min-height:0; }
 .hub-path-preview-body { padding:22px; }
 .hub-open-note { padding:30px 21px; margin-bottom:36px; }
 .hub-open-note h2 { font-size:1.35rem; }
 .hub-open-note p { font-size:.8rem; }
 .hub-library-panel { padding:16px; }
 .hub-library-tools { gap:14px 10px; }
 .hub-library-tools input,.hub-library-tools select { padding-inline:10px; font-size:1rem; }
 .hub-filter-row { gap:5px 3px; }
 .hub-filter { padding:8px 10px; font-size:.71rem; }
 .hub-saved-filter { font-size:.73rem; }
 .hub-detail { width:calc(100vw - 20px); border-radius:14px; max-height:90dvh; }
 #hub-detail-content { max-height:90dvh; }
 .hub-detail-image { height:180px; }
 .hub-detail-body { padding:23px 20px; }
 .hub-detail-body h2 { font-size:1.27rem; }
 .hub-detail-summary { font-size:.89rem; }
 .hub-detail-prerequisite { padding:15px; gap:12px; }
 .hub-detail-actions .primary-btn { font-size:.8rem; padding-inline:14px; flex:1; }
 .hub-detail-actions .hub-code { margin-left:0; flex-basis:100%; }
 .hub-detail-note { font-size:.75rem; }
 .hub-notice { bottom:87px; font-size:.77rem; width:max-content; max-width:calc(100% - 30px); }
 .portal .cg-footer-grid { grid-template-columns:1fr 1fr; gap:28px 18px; }
 .portal .cg-footer-brand { grid-column:1/-1; }
 .portal .cg-footer-sponsors { gap:15px; }
 .portal .cg-footer-sponsors h4 { flex-basis:100%; }
 .portal .chatbot-toggle-btn { padding:12px 14px; }
}
@media(prefers-reduced-motion:reduce) {
 .hub-topic:hover { transform:none; }
 .hub-topic,.hub-resource,.hub-path-preview { transition:none; }
}

/* Knowledge-source logos retain their original colors on a shared light canvas. */
.portal .cg-footer-sponsors { display:block; width:100%; padding-top:32px; margin-top:5px; }
.portal .cg-footer-sponsors h4 { font-size:1.08rem; color:var(--portal-text); line-height:1.6; margin:0 0 8px; }
.portal .sponsors-note { color:var(--portal-muted); font-size:.81rem; line-height:1.8; margin:0 0 24px; max-width:720px; }
.portal .sponsors-list { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:16px; width:100%; align-items:stretch; }
.portal .sponsors-list .sponsor-card { display:flex; flex-direction:column; gap:11px; align-items:center; padding:0 0 8px; min-width:0; text-align:center; text-decoration:none; color:var(--portal-muted); background:transparent; border:0; border-radius:0; box-shadow:none; }
.portal .sponsor-mark { width:100%; height:88px; display:flex; align-items:center; justify-content:center; padding:16px 20px; border:1px solid #e4e7e3; border-radius:10px; background:#fff; transition:border-color .2s; overflow:hidden; }
.portal .sponsor-card:hover .sponsor-mark { border-color:var(--portal-accent); }
.portal .sponsor-card:hover .sponsor-name { color:var(--portal-text); }
.portal .sponsor-card:focus-visible { outline:2px solid var(--portal-accent); outline-offset:5px; border-radius:10px; }
.portal .sponsors-list .sponsor-logo { width:auto; max-width:100%; height:50px; max-height:56px; object-fit:contain; filter:none; opacity:1; margin:0; }
.portal .sponsors-list .sponsor-logo[src$="boston-dynamics.svg"] { width:100%; height:auto !important; max-height:none; }
.portal .sponsor-name { font-size:.73rem; line-height:1.6; }
.portal .sponsor-mark.logo-unavailable::after { content:'↗'; color:#526059; font-size:1.25rem; }
.portal .sponsor-filters { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:0 0 25px; }
.portal .sponsor-filter { display:inline-flex; align-items:center; gap:9px; min-height:40px; padding:8px 12px; font:inherit; font-size:.78rem; background:var(--portal-surface); border:1px solid var(--portal-line); border-radius:7px; color:var(--portal-muted); cursor:pointer; }
.portal .sponsor-filter[aria-pressed="true"] { color:var(--portal-accent); border-color:var(--portal-accent); background:var(--portal-elevated); }
.portal .sponsor-filter-count { font-size:.68rem; color:var(--portal-muted); background:var(--portal-bg); padding:1px 5px; border-radius:4px; }
.hub-load-row { display:flex; flex-direction:column; align-items:center; gap:14px; padding:32px 0 10px; }
.hub-load-row p { color:var(--portal-muted); font-size:.78rem; margin:0; }
.hub-load-row button { display:inline-flex; align-items:center; gap:18px; cursor:pointer; }
.hub-resource[data-image-kind="logo"] .hub-resource-image img { padding:38px; background:#fff; }
@media(min-width:1200px) { .portal .sponsors-list { grid-template-columns:repeat(6,minmax(0,1fr)); } }
@media(max-width:850px) {
 .portal .sponsors-list { grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px 12px; }
}
@media(max-width:540px) {
 .portal .cg-footer-sponsors { padding-top:25px; }
 .portal .cg-footer-sponsors h4 { font-size:1rem; }
 .portal .sponsors-note { font-size:.78rem; margin-bottom:20px; }
 .portal .sponsors-list { grid-template-columns:repeat(2,minmax(0,1fr)); gap:17px 12px; }
 .portal .sponsor-mark { height:78px; padding:14px; }
 .portal .sponsors-list .sponsor-logo { max-height:48px; }
 .portal .sponsor-name { font-size:.69rem; }
}
/* Interactive robot laboratory */
#robot-lab { padding-top: 118px; padding-bottom: 60px; }
.lab-back { display:inline-flex; gap:9px; color:var(--text-secondary,#a9a39c); font-size:13px; margin-bottom:27px; text-decoration:none; }
.lab-heading { display:flex; align-items:center; justify-content:space-between; gap:24px; margin-bottom:32px; }
.lab-heading h2 { font-size:clamp(30px,4vw,49px); letter-spacing:-1.5px; line-height:1.2; margin:12px 0; }
.lab-heading p { color:var(--text-secondary,#aaa59e); font-size:15px; line-height:1.8; max-width:680px; }
.lab-live { display:flex; gap:8px; align-items:center; white-space:nowrap; font:10px 'JetBrains Mono',monospace; letter-spacing:1px; color:#a8bda4; border:1px solid #45503d; border-radius:30px; padding:10px 14px; }
.lab-live>span { width:6px;height:6px;background:#a8bda4;border-radius:50%; }
.lab-model-tabs { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin-bottom:18px; }
.lab-model-tabs button { border:1px solid #383633; background:#222221; border-radius:13px; padding:18px; display:flex; align-items:center; gap:15px; text-align:left; color:#e7e3dc; cursor:pointer; transition:background .2s,border-color .2s; }
.lab-model-tabs button[aria-pressed=true] { border-color:#ef9b5f; background:#30281f; }
.lab-tab-number { font:13px monospace; color:#8c857b; }
.lab-model-tabs strong { display:block; font-size:16px; font-weight:600; }
.lab-model-tabs small { display:block; margin-top:5px; font:9px monospace; letter-spacing:.8px; color:#aba298; }
.lab-model-tabs i { margin-left:auto; font-size:11px; color:#c39067; }
.lab-workbench { display:grid; grid-template-columns:minmax(0,1fr) 340px; border:1px solid #3a3732; border-radius:20px; overflow:hidden; background:#22221f; }
.lab-view { position:relative; min-width:0; background:radial-gradient(ellipse at 50% 42%,#eeece7 0,#d9d6cf 58%,#c9c5bc 100%); color:#373831; isolation:isolate; }
.lab-stage-top { display:flex; align-items:center; justify-content:space-between; padding:28px 30px 0; position:absolute; inset:0 0 auto; z-index:2; pointer-events:none; }
.lab-overline { font:9px monospace; letter-spacing:1.5px; color:#76796f; }
.lab-stage-top h3 { font-size:25px;letter-spacing:-.6px;margin:7px 0; color:#383a32; }
.lab-model-number { align-self:flex-start; color:#808279; font:11px monospace; padding-top:3px; }
.lab-canvas { height:620px; width:100%; position:relative; }
.lab-canvas canvas { width:100%;height:100%;display:block;cursor:grab;touch-action:none; }
.lab-canvas canvas:active { cursor:grabbing; }
.lab-hotspots { position:absolute;inset:0;pointer-events:none;overflow:hidden; }
.lab-hotspot { position:absolute;transform:translate(-50%,-50%);width:30px;height:30px;border:1px solid #716b5c;border-radius:50%;background:#f8f5e9e8;color:#544c3e;font:10px monospace;box-shadow:0 2px 8px #0002;pointer-events:auto;cursor:pointer; }
.lab-hotspot[aria-pressed=true] { background:#fcad6b;color:#332014;border-color:#8a451e;z-index:2;box-shadow:0 0 0 5px #ed904833; }
.lab-view-tools { display:flex; gap:6px; align-items:center; position:absolute;bottom:51px;left:24px;right:24px;z-index:3; }
.lab-view-tools>span { flex:1; }
.lab-view-tools button { height:38px;min-width:38px;display:flex;align-items:center;justify-content:center;gap:8px;border:1px solid #b3afa4;background:#f7f4eced;border-radius:8px;padding:0 11px;color:#48473e;font-size:11px;cursor:pointer; }
.lab-view-tools button[aria-pressed=true] { background:#f7c293;border-color:#b87d4e; }
.lab-hint { position:absolute;bottom:17px;left:24px;right:24px;margin:0;font-size:11px;color:#686a60;text-align:center;pointer-events:none; }
.lab-inspector { padding:27px 25px; border-left:1px solid #3a3732; }
.lab-inspector h3 { font-size:22px;letter-spacing:-.5px;margin:10px 0 7px; color:#f0eae2; }
.lab-inspector-title p { font-size:12px;color:#aaa297;line-height:1.6; }
.lab-part-list { display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:20px; }
.lab-part-list button { display:flex;align-items:center;gap:8px;padding:10px 8px;border:1px solid #474239;background:transparent;color:#c6beb2;font-size:12px;text-align:left;border-radius:7px;cursor:pointer; }
.lab-part-list button>span { color:#a18d77;font:10px monospace; }
.lab-part-list button[aria-pressed=true] { border-color:#c8844d;background:#423325;color:#ffcb9e; }
.lab-selected { margin:23px 0 18px;padding-top:20px;border-top:1px solid #403b33;min-height:182px; }
.lab-selected>span { color:#af9676;font:9px monospace;letter-spacing:1.2px; }
.lab-selected h4 { font-size:22px;line-height:1.3;margin:10px 0;color:#f4ece1; }
.lab-selected p { font-size:13px;line-height:1.85;color:#bdb4a7;margin:0 0 12px; }
.lab-selected>div { font-size:11px;color:#e2b88a;line-height:1.8; }
.lab-options { border-top:1px solid #403b33;padding-top:10px; }
.lab-options button { display:flex;align-items:center;gap:9px;width:100%;border:0;background:transparent;color:#c8bfb3;text-align:left;font-size:12px;padding:12px 0;cursor:pointer; }
.lab-switch { margin-left:auto;width:27px;height:16px;border-radius:12px;background:#514b40;position:relative;flex:none; }
.lab-switch:after { content:'';position:absolute;left:3px;top:3px;width:10px;height:10px;background:#b9afa0;border-radius:50%; }
[aria-pressed=true]>.lab-switch { background:#c98349; }
[aria-pressed=true]>.lab-switch:after { left:14px;background:#fff1db; }
#robot-lab button:disabled { opacity:.38;cursor:default; }
#robot-lab button:focus-visible,#robot-lab a:focus-visible,.lab-canvas canvas:focus-visible { outline:3px solid #e58d49;outline-offset:3px; }
.lab-status { position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:17px;background:#e3e0d7f0;z-index:4;padding:30px;text-align:center;color:#56544a;font-size:13px; }
.lab-status[hidden],.lab-hotspot[hidden] { display:none; }
.lab-loader { width:27px;height:27px;border:2px solid #bfb7a9;border-top-color:#9a5c2e;border-radius:50%;animation:lab-spin 1s linear infinite; }
.is-error .lab-loader { display:none; }
#lab-retry { padding:10px 16px;border:1px solid #a59680;border-radius:7px;background:#fdfaf2;color:#595043;cursor:pointer; }
.lab-source { display:flex;justify-content:space-between;gap:25px;padding:18px 5px;font-size:11px;line-height:1.8;color:#969083; }
.lab-source p { max-width:780px;margin:0; }
.lab-source a { color:#c8a07b;white-space:nowrap; }
.lab-next { margin:40px 0 0;padding:30px 0;border-top:1px solid #38342e; }
.lab-next h3 { font-size:25px;line-height:1.4;margin:13px 0 18px; }
.hub-lab-invite { display:flex;justify-content:space-between;gap:24px;align-items:center;margin:0 0 30px;padding:26px 28px;border:1px solid #785331;border-radius:15px;background:linear-gradient(120deg,#35291e,#242421); }
.hub-lab-invite h3 { font-size:23px;margin:7px 0;color:#f4eadd; }
.hub-lab-invite p { color:#b6a998;font-size:13px;line-height:1.7; }
.hub-lab-invite a { flex:none;white-space:nowrap; }
body[data-theme=light] .lab-model-tabs button { background:#eeebe3;color:#49483e;border-color:#d2cbbc; }
body[data-theme=light] .lab-model-tabs button[aria-pressed=true] { border-color:#ae6d32;background:#f8ead8; }
body[data-theme=light] .lab-model-tabs small { color:#7a7064; }
body[data-theme=light] .lab-live { color:#66735a;border-color:#b6beac; }
body[data-theme=light] .lab-heading p,body[data-theme=light] .lab-back { color:#766f62; }
body[data-theme=light] .hub-lab-invite { background:linear-gradient(120deg,#f3e5d0,#ebe8df);border-color:#d2b38b; }
body[data-theme=light] .hub-lab-invite h3 { color:#473e2f; }
body[data-theme=light] .hub-lab-invite p { color:#7e6d59; }
body[data-theme=light] .lab-source { color:#7e7262; }
body[data-theme=light] .lab-source a { color:#966437; }
body[data-theme=light] .lab-next { border-color:#d2cbbc; }
@keyframes lab-spin { to { transform:rotate(360deg); } }
@media(max-width:1050px) { .lab-workbench { grid-template-columns:minmax(0,1fr) 300px; }.lab-inspector{padding:24px 18px;}.lab-live{display:none;} }
@media(max-width:760px) { #robot-lab{padding-top:95px;}.lab-heading{margin-bottom:24px;}.lab-workbench{grid-template-columns:1fr;}.lab-canvas{height:510px;}.lab-inspector{border-left:0;border-top:1px solid #3a3732;padding:26px;}.lab-selected{min-height:0;}.lab-model-tabs{gap:6px;}.lab-model-tabs button{padding:13px 9px;gap:5px;}.lab-model-tabs strong{font-size:12px;}.lab-model-tabs small{font-size:8px;letter-spacing:0;}.lab-tab-number,.lab-model-tabs i{display:none;}.lab-source{flex-direction:column;gap:8px;}.lab-stage-top{padding:23px 23px 0;}.hub-lab-invite{align-items:flex-start;flex-direction:column;}.lab-heading h2{letter-spacing:-.7px;} }
@media(max-width:420px) { .lab-canvas{height:450px;}.lab-view-tools{left:14px;right:14px;}.lab-view-tools button{padding:0 8px;gap:5px;font-size:10px;}.lab-hint{font-size:9px;left:10px;right:10px;}.lab-hotspot{width:27px;height:27px;font-size:9px;} }
@media(prefers-reduced-motion:reduce) { .lab-loader { animation:none; } }

#robot-lab .lab-heading h2, #robot-lab .lab-next h3 { color:#eee8df; }
body[data-theme=light] #robot-lab .lab-heading h2,body[data-theme=light] #robot-lab .lab-next h3 { color:#36382f; }
#robot-lab .lab-stage-top h3 { color:#383a32; }

/* Real book covers, with a consistent shelf and uncropped portrait art. */
.portal .book-cover.is-photo { aspect-ratio:auto;height:282px;padding:26px 20px;background:radial-gradient(ellipse at 50% 25%,#e4dfd2,#c6c0b1);position:relative; }
.portal .book-cover.is-photo>img { display:block;width:100%;height:230px;object-fit:contain;filter:drop-shadow(5px 9px 7px #28211955); }
.portal .book-spread { width:156px;height:230px;position:relative;overflow:hidden;box-shadow:5px 9px 14px #28211944;display:block;max-width:100%; }
.portal .book-spread img { position:absolute;right:0;top:0;height:100%;width:auto;max-width:none;object-fit:unset; }
.portal .book-cover.is-online { background:#e4e1d5;display:flex;flex-direction:column;justify-content:center;gap:12px; }
.portal .book-cover.is-online>img { height:158px;filter:none; }
.portal .book-online-label { color:#565448;font-size:12px;font-weight:600;text-align:center;line-height:1.7; }
.book-cover-fallback { display:none;color:#544b3d;text-align:center;font-size:17px;line-height:1.5; }
.book-cover.image-unavailable img,.book-cover.image-unavailable .book-spread { display:none; }
.book-cover.image-unavailable .book-cover-fallback { display:block; }
.portal .book-badge { background:#efb777;box-shadow:none;font-size:10px;top:12px;left:12px;padding:4px 9px; }
.portal .book-info { padding:20px;gap:11px; }
.portal .book-info h3 { font-size:16px;line-height:1.5; }
.portal .books-intro { max-width:780px; }
.books-image-note { color:var(--portal-muted);font-size:11px;text-align:center;line-height:1.8;margin:18px 0 0; }
@media(max-width:540px) { .portal .book-cover.is-photo{height:220px;padding:22px 13px;}.portal .book-cover.is-photo>img{height:176px;}.portal .book-spread{height:176px;width:119px;}.portal .book-info{padding:14px;gap:9px;}.portal .book-info h3{font-size:13px;}.portal .book-meta{font-size:11px;}.portal .book-cover.is-online>img{height:122px;}.portal .book-online-label{font-size:10px;} }

.lab-mobile-chooser { display:none; }
@media(max-width:760px) { .lab-mobile-chooser{display:flex;align-items:center;gap:10px;justify-content:space-between;color:var(--portal-muted);font-size:12px;margin-bottom:16px;}.lab-mobile-chooser select{min-width:150px;max-width:60%;padding:10px 12px;border-radius:8px;border:1px solid var(--portal-line);background:var(--portal-surface);color:var(--portal-text);font:inherit;} }

.portal:has(#robot-lab.spa-active) #chatbot-toggle{width:42px;height:42px;padding:0;border-radius:50%;}
.portal:has(#robot-lab.spa-active) #chatbot-toggle .lang{display:none;}

@media(max-width:760px) { .lab-view-tools { right:60px; } }

/* Learning center: editorial reading, connected discovery and hands-on labs. */
/* SSRobotic: a direct connection to the community's Facebook page. */
.ss-community { display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;padding:40px;margin:10px 0 48px;border:1px solid var(--portal-line);border-radius:20px;background:var(--portal-surface); }
.ss-community-copy { min-width:0; }.ss-community-copy>.hub-eyebrow { font-size:9px;letter-spacing:1.2px; }
.portal .ss-community h2 { text-align:left;font-size:clamp(30px,3.4vw,43px);font-weight:600;line-height:1.35;letter-spacing:-1px;color:var(--portal-text);margin:20px 0; }
.ss-community-copy>p { max-width:390px;font-size:14px;line-height:1.9;color:var(--portal-muted); }
.ss-page-identity { display:flex;gap:13px;align-items:center;margin:27px 0; }.ss-facebook-mark { width:44px;height:44px;display:grid;place-items:center;flex-shrink:0;border-radius:12px;background:#1767d0;color:white;font-size:23px; }.ss-page-identity strong { display:block;font-size:18px;font-weight:600;color:var(--portal-text); }.ss-page-identity div>span { display:block;font-size:10px;color:var(--portal-muted);margin-top:4px; }
.ss-community-actions { display:flex;gap:10px;flex-wrap:wrap; }.ss-community-actions>a { display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:13px 16px;border-radius:9px;font-size:12px;font-weight:500;line-height:1.5;text-decoration:none;min-height:44px;transition:background .2s,border-color .2s; }
.ss-community-actions .ss-page-button { background:#1767d0;color:#fff;border:1px solid #1767d0; }.ss-community-actions .ss-page-button:hover { background:#0e56b7;border-color:#0e56b7; }.ss-community-actions .ss-message-button { color:var(--portal-text);border:1px solid var(--portal-line);background:var(--portal-bg); }.ss-community-actions .ss-message-button:hover { border-color:var(--portal-accent); }.ss-community-actions>a:focus-visible,.ss-community-post>a:focus-visible { outline:3px solid var(--portal-accent);outline-offset:4px; }
.ss-community-post { min-width:0;background:var(--portal-bg);border:1px solid var(--portal-line);border-radius:13px;overflow:hidden; }.ss-community-post>a { display:block;text-decoration:none;color:var(--portal-text); }.ss-community-image { aspect-ratio:1.25;background:#fff;overflow:hidden; }.ss-community-image img { display:block;width:100%;height:100%;object-fit:contain; }.ss-community-post-body { padding:23px 24px 18px; }.ss-community-kicker { font-size:9px;letter-spacing:1px;color:var(--portal-muted); }.portal .ss-community-post h3 { color:var(--portal-text);font-size:19px;line-height:1.6;letter-spacing:-.3px;margin:11px 0;text-align:left; }.ss-community-post-body p { color:var(--portal-muted);font-size:12px;line-height:1.8;margin:0; }.ss-community-read { display:flex;justify-content:space-between;gap:10px;color:var(--portal-accent);font-size:12px;margin-top:18px; }.ss-community-post>a:hover .ss-community-read>span:first-child { text-decoration:underline;text-underline-offset:4px; }.ss-community-credit { margin:0;padding:0 24px 17px;color:var(--portal-muted);font-size:9px; }
.ss-page-contact { display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;padding:24px;margin:24px 0;border:1px solid var(--portal-line);border-radius:12px;background:var(--portal-surface); }.ss-page-contact>strong { color:var(--portal-text);font-size:16px;font-weight:500; }
@media(max-width:760px) { .ss-community{grid-template-columns:1fr;gap:28px;padding:25px;margin-bottom:34px;}.ss-community h2{font-size:33px;}.ss-community-copy>p{max-width:none;}.ss-community-post-body{padding:21px;}.ss-community-credit{padding-inline:21px;}.ss-page-contact{padding:20px;}.ss-community-actions>a{padding:12px 13px;} }
@media(max-width:380px) { .ss-community{padding:20px;}.ss-community-actions{display:grid;grid-template-columns:1fr;width:100%;}.portal .ss-community h2{font-size:29px;}.ss-community-post-body{padding:17px;}.portal .ss-community-post h3{font-size:17px;} }
@media(prefers-reduced-motion:reduce) { .ss-community-actions>a{transition:none;} }
.lc-heading { max-width:800px;margin:0 0 38px; }
.portal .lc-heading h1,.portal .lc-lesson-body h2,.portal .lc-note-body h2,.portal .lc-robot-hero h1,.portal .lc-subheading,.portal .ml-stage-head h2,.portal .ml-panel h2,.portal .ml-challenge h2,.portal .ml-math h2 { text-align:left!important; }
.portal .lc-heading h1,.portal .lc-lesson-body h2,.portal .lc-note-body h2,.portal .lc-robot-hero h1,.portal .lc-subheading,.portal .lc-related h2,.portal .lc-result h3,.portal .lc-path h3,.portal .lc-course-resume h3,.portal .lc-comparison th,.portal .lc-stats strong,.portal .lc-backup h2,.portal .ml-challenge h2 { color:var(--portal-text); }
.portal .ml-panel h2 { color:#edede3; }
.lc-result a,.lc-note-card a,.lc-launch a,.lc-nav-icon,.lc-robot-actions a,.ml-lessons a { text-decoration:none; }
.lc-result h3 a:hover { text-decoration:underline; }
.lc-comparison a,.lc-path-step a,.lc-completed-list a,.lc-references a,.lc-complete>a,.lc-course-resume a,.lc-motion-invite a,.ml-source a,.lc-state>a:not(.btn) { color:var(--portal-accent);text-decoration:none;text-underline-offset:4px; }
.lc-comparison a:hover,.lc-path-step a:hover,.lc-completed-list a:hover,.lc-references a:hover,.lc-complete>a:hover,.lc-course-resume a:hover,.lc-motion-invite a:hover,.ml-source a:hover { text-decoration:underline; }
.lc-heading h1 { font-size:clamp(32px,4.2vw,58px);line-height:1.18;letter-spacing:-1.8px;margin:16px 0 20px;font-weight:700; }
.lc-heading p { color:var(--portal-muted);font-size:16px;line-height:1.9;max-width:690px; }
.lc-nav-icon { width:36px;height:38px;display:inline-flex;align-items:center;justify-content:center;color:var(--portal-text);border-radius:10px;border:1px solid var(--portal-line);flex-shrink:0; }
.lc-nav-icon:hover { color:var(--portal-accent);background:var(--portal-elevated); }
.lc-launch { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:28px auto 60px;padding:0!important;border:1px solid var(--portal-line);border-radius:15px;overflow:hidden; }
.lc-launch a { display:flex;flex-direction:column;gap:13px;padding:30px 26px;color:var(--portal-text);background:var(--portal-surface);border-right:1px solid var(--portal-line);transition:background .2s; }
.lc-launch a:last-child { border-right:0; }.lc-launch a:hover { background:var(--portal-elevated); }
.lc-launch span,.lc-meta { font-size:10px;letter-spacing:.7px;text-transform:uppercase;color:var(--portal-muted); }
.lc-launch strong { font-size:21px;line-height:1.55;font-weight:600; }.lc-launch small { color:var(--portal-muted);font-size:12px;line-height:1.8; }
.lc-searchbox { display:flex;align-items:center;gap:17px;border:1px solid var(--portal-line);border-radius:14px;background:var(--portal-surface);padding:14px 16px 14px 24px;box-shadow:0 8px 28px #00000005; }
.lc-searchbox i { color:var(--portal-accent); }.lc-searchbox input { flex:1;min-width:0;border:0;background:transparent;color:var(--portal-text);font:inherit;font-size:18px;outline:none; }.lc-searchbox:focus-within { outline:2px solid var(--portal-accent);outline-offset:3px; }
.lc-searchbox button { padding:12px 25px;background:var(--portal-text);color:var(--portal-bg);border:0;border-radius:8px;font:inherit;cursor:pointer; }
.lc-search-tools { display:flex;align-items:flex-start;gap:24px;justify-content:space-between;margin:24px 0 18px; }
.lc-filters { display:flex;flex-wrap:wrap;gap:7px; }.lc-filters button { padding:9px 13px;border:1px solid var(--portal-line);border-radius:7px;background:transparent;color:var(--portal-muted);font:inherit;font-size:12px;cursor:pointer; }.lc-filters button[aria-pressed=true] { background:var(--portal-text);color:var(--portal-bg);border-color:var(--portal-text); }
.lc-topic { font-size:11px;color:var(--portal-muted);min-width:180px;display:grid;gap:5px; }.lc-topic select,.lc-compare-picks select { width:100%;padding:10px;border:1px solid var(--portal-line);border-radius:8px;background:var(--portal-surface);color:var(--portal-text);font:inherit;font-size:12px; }
.lc-result-bar { display:flex;justify-content:space-between;align-items:center;padding:14px 0;border-bottom:1px solid var(--portal-line);font-size:12px;color:var(--portal-muted); }.lc-plain { border:0;background:none;color:var(--portal-accent);font:inherit;cursor:pointer; }
.lc-results { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 30px; }
.lc-result { display:flex;gap:19px;position:relative;min-width:0;padding:25px 0;border-bottom:1px solid var(--portal-line); }
.lc-result-image { width:110px;height:132px;border-radius:7px;background:var(--portal-elevated);flex:0 0 110px;overflow:hidden;display:flex;align-items:center;justify-content:center; }
.lc-result-image img { width:100%;height:100%;object-fit:cover; }.lc-result-image.is-book img { object-fit:contain;padding:10px;filter:drop-shadow(2px 4px 3px #0003); }.lc-result-image>span { font-size:38px;color:var(--portal-accent); }
.lc-result-main { flex:1;min-width:0;padding-right:24px; }.lc-result h3 { font-size:16px;line-height:1.6;font-weight:600;margin:7px 0; }.lc-result h3 a { color:var(--portal-text); }.lc-result p { color:var(--portal-muted);font-size:12px;line-height:1.8;margin:0;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden; }
.lc-result-foot { display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;font-size:11px;margin-top:12px; }.lc-result-foot a { color:var(--portal-accent); }.lc-health { color:var(--portal-muted);font-size:10px; }
.lc-save,.lc-book-save { position:absolute;right:0;top:25px;background:transparent;color:var(--portal-muted);border:0;padding:7px;cursor:pointer; }.lc-save[aria-pressed=true],.lc-book-save[aria-pressed=true] { color:var(--portal-accent); }.lc-book-save { top:12px;right:12px;background:var(--portal-surface);border:1px solid var(--portal-line);border-radius:8px;width:32px;height:32px; }.book-card { position:relative; }
.lc-more { text-align:center;margin-top:35px; }.lc-state { min-height:180px;grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;text-align:center;padding:40px;color:var(--portal-muted); }.lc-state h3 { color:var(--portal-text); }
.lc-academy-grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px; }
.lc-note-card { min-width:0;background:var(--portal-surface);border:1px solid var(--portal-line);border-radius:14px;overflow:hidden;transition:transform .2s,box-shadow .2s; }.lc-note-card:hover { transform:translateY(-4px);box-shadow:0 16px 32px #0000000b; }.lc-note-card>a { display:block;height:100%;color:var(--portal-text); }
.lc-note-image { height:200px;position:relative;background:var(--portal-elevated); }.lc-note-image img { width:100%;height:100%;object-fit:cover; }.lc-note-image span { position:absolute;bottom:12px;left:12px;padding:6px 10px;background:#f8f5eeed;border-radius:5px;font-size:9px;letter-spacing:1px;color:#3b3c32; }
.lc-note-body { padding:23px; }.lc-note-body .hub-eyebrow { font-size:9px; }.lc-note-body h2 { font-size:22px;letter-spacing:-.5px;line-height:1.5;margin:12px 0; }.lc-note-body p { font-size:13px;line-height:1.9;color:var(--portal-muted); }.lc-note-cta { display:block;color:var(--portal-accent);font-size:12px;margin-top:22px; }
.lc-breadcrumb { display:flex;gap:10px;font-size:12px;margin-bottom:36px;color:var(--portal-muted); }.lc-breadcrumb a { color:var(--portal-muted); }
.lc-lesson-hero { display:grid;grid-template-columns:1.3fr 1fr;gap:60px;align-items:center;padding-bottom:45px;border-bottom:1px solid var(--portal-line); }.lc-lesson-hero .lc-heading { margin:0; }.lc-lesson-hero h1 { font-size:clamp(30px,3.6vw,48px); }.lc-lesson-hero>img { width:100%;max-height:340px;object-fit:contain;border-radius:10px;background:var(--portal-elevated); }
.lc-lesson-meta { display:flex;gap:15px;flex-wrap:wrap;font-size:11px;color:var(--portal-muted);margin-top:22px; }
.lc-lesson-hero figure { margin:0;min-width:0; }.lc-lesson-hero figure img { width:100%;max-height:340px;object-fit:contain;border-radius:10px;background:var(--portal-elevated); }.lc-lesson-hero figcaption { font-size:9px;color:var(--portal-muted);margin-top:8px;text-align:right; }.lc-lesson-hero figcaption a { color:inherit; }
.lc-lesson-layout { display:grid;grid-template-columns:220px minmax(0,740px);gap:70px;padding-top:50px;justify-content:space-between; }
.lc-toc { position:sticky;top:105px;align-self:start;display:flex;flex-direction:column;gap:7px; }.lc-toc>.hub-eyebrow { margin-bottom:16px; }.lc-toc button { text-align:left;border:0;border-left:2px solid var(--portal-line);background:transparent;padding:9px 12px;color:var(--portal-muted);font:inherit;font-size:12px;line-height:1.7;cursor:pointer; }.lc-toc button.active,.lc-toc button:hover { border-color:var(--portal-accent);color:var(--portal-accent); }.lc-reading-state { font-size:11px;line-height:1.7;margin-top:25px;color:var(--portal-muted); }
.lc-lesson-body { min-width:0; }.lc-lesson-body>section { margin-bottom:52px;scroll-margin-top:110px; }.lc-section-number { color:var(--portal-accent);font-size:11px;letter-spacing:2px; }.lc-lesson-body h2 { font-size:27px;line-height:1.5;margin:10px 0 20px;letter-spacing:-.5px; }.lc-lesson-body p { font-size:16px;line-height:2.1;color:var(--portal-muted); }.lc-formula { border-left:3px solid var(--portal-accent);padding:23px;background:var(--portal-elevated);color:var(--portal-text);font-size:14px;line-height:2;overflow:auto;white-space:pre-wrap; }
.lc-code { padding:25px;border-radius:12px;background:#22251f;color:#ecede2;overflow:auto;line-height:1.9;font-size:13px;margin:20px 0; }.lc-code-head { display:flex;align-items:center;justify-content:space-between;gap:15px; }.lc-code-head h2 { margin:0; }.lc-code-head button { flex-shrink:0;cursor:pointer;border:1px solid var(--portal-line);border-radius:7px;background:var(--portal-surface);color:var(--portal-text);padding:9px 12px;font:inherit;font-size:11px; }
#lc-quiz { background:var(--portal-surface);padding:26px;border:1px solid var(--portal-line);border-radius:12px; }#lc-quiz fieldset { border:0;margin:0 0 20px;padding:0; }#lc-quiz legend { font-weight:600;font-size:16px;line-height:1.8;margin-bottom:16px; }#lc-quiz label { display:flex;align-items:center;gap:12px;font-size:14px;line-height:1.8;padding:12px;border:1px solid var(--portal-line);border-radius:8px;margin:8px 0;cursor:pointer; }#lc-quiz input { accent-color:var(--portal-accent); }#lc-quiz-feedback { margin-top:20px;font-size:14px; }#lc-quiz-feedback p { font-size:13px; }.is-correct { color:#4a8054!important; }.is-retry { color:var(--portal-accent)!important; }
.lc-notes label { display:block;font-size:12px;color:var(--portal-muted);margin-bottom:10px; }.lc-notes textarea { width:100%;padding:18px;border:1px solid var(--portal-line);border-radius:10px;background:var(--portal-surface);color:var(--portal-text);font:inherit;font-size:14px;line-height:1.8;resize:vertical; }#lc-note-status { min-height:20px;font-size:11px; }.lc-references { border-top:1px solid var(--portal-line);padding-top:25px; }.lc-references p { font-size:12px; }.lc-references ol { padding-left:22px; }.lc-references li { padding:8px;font-size:13px;line-height:1.6; }.lc-complete { display:flex;align-items:center;gap:25px;flex-wrap:wrap; }.lc-complete>a { font-size:12px; }.lc-related { margin-top:80px;padding-top:40px;border-top:1px solid var(--portal-line); }
.lc-stats { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--portal-line);border-radius:12px;background:var(--portal-surface);overflow:hidden; }.lc-stats>div { padding:28px;border-right:1px solid var(--portal-line);display:grid;gap:14px; }.lc-stats>div:last-child { border:0; }.lc-stats strong { font-size:37px;font-weight:500; }.lc-stats small { font-size:14px;color:var(--portal-muted); }.lc-stats span { color:var(--portal-muted);font-size:12px; }
.lc-desk-toolbar { display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:20px 0 45px; }.lc-desk-toolbar>span { flex:1;font-size:11px;color:var(--portal-muted);min-width:220px; }.lc-desk-toolbar button,.lc-file-btn { padding:9px 12px;border:1px solid var(--portal-line);border-radius:7px;font:inherit;font-size:11px;background:transparent;color:var(--portal-text);cursor:pointer; }
.lc-subheading { font-size:28px;margin:55px 0 26px;letter-spacing:-.6px; }.lc-course-resume { display:flex;gap:25px;padding:25px;background:var(--portal-surface);border:1px solid var(--portal-line);border-radius:12px;margin:0 0 25px; }.lc-course-resume>img { width:165px;object-fit:cover;border-radius:8px; }.lc-course-resume>div { flex:1; }.lc-course-resume h3 { margin:8px 0 15px;font-size:21px; }.lc-course-resume p { font-size:11px;color:var(--portal-muted); }.lc-course-resume a { font-size:12px; }
.lc-paths { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px; }.lc-path { padding:24px;border:1px solid var(--portal-line);border-radius:12px;background:var(--portal-surface); }.lc-path h3 { font-size:22px;margin:15px 0; }.lc-path p { font-size:11px;color:var(--portal-muted); }.lc-path-step { display:flex;align-items:flex-start;gap:12px;font-size:12px;line-height:1.8;padding:12px 0;border-bottom:1px solid var(--portal-line); }.lc-path-step:last-child { border:0; }.lc-path-step input { margin-top:4px;accent-color:var(--portal-accent);flex-shrink:0;width:16px;height:16px; }.lc-path-step a { color:var(--portal-text); }
.lc-path progress,.lc-course-resume progress { width:100%;height:5px;accent-color:var(--portal-accent);border:0;border-radius:3px; }.lc-completed-list { margin-top:40px;border:1px solid var(--portal-line);border-radius:10px;padding:20px; }.lc-completed-list summary { cursor:pointer; }.lc-completed-list>a { display:block;padding:12px;font-size:14px; }
.lc-motion-invite { display:flex;align-items:center;gap:25px;flex-wrap:wrap;background:var(--portal-surface);border:1px solid var(--portal-line);border-radius:12px;padding:22px 26px;margin:0 0 30px; }.lc-motion-invite>span { flex:1;min-width:220px;font-size:12px;line-height:1.8;color:var(--portal-muted); }.lc-motion-invite b { display:block;color:var(--portal-text);font-size:17px; }.lc-motion-invite a { font-size:12px; }
.lc-robot-hero { display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center; }.lc-robot-hero h1 { font-size:clamp(45px,6vw,78px);line-height:1.1;letter-spacing:-2px;margin:20px 0; }.lc-robot-hero p { color:var(--portal-muted);line-height:1.9;font-size:16px; }.lc-robot-hero figure { margin:0; }.lc-robot-hero img { width:100%;height:410px;object-fit:contain;background:var(--portal-elevated);border-radius:15px; }.lc-robot-hero figcaption { font-size:10px;text-align:right;margin-top:10px; }.lc-robot-hero figcaption a { color:var(--portal-muted); }.lc-robot-actions { display:flex;gap:12px;flex-wrap:wrap;margin-top:28px; }.lc-robot-facts { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:25px;margin-top:45px;border-top:1px solid var(--portal-line);border-bottom:1px solid var(--portal-line);padding:30px 0; }.lc-robot-facts>div { display:grid;gap:15px; }.lc-robot-facts span { color:var(--portal-muted);font-size:12px; }.lc-robot-facts strong { font-size:16px;font-weight:500;line-height:1.7; }.lc-muted { color:var(--portal-muted);font-size:12px;line-height:1.9;margin:22px 0; }
.lc-compare-picks { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-bottom:35px; }.lc-compare-picks label { display:grid;gap:10px;font-size:11px;color:var(--portal-muted); }.lc-compare-picks select { font-size:15px;padding:15px; }.lc-comparison-scroll { overflow-x:auto;border:1px solid var(--portal-line);border-radius:12px; }.lc-comparison { width:100%;min-width:650px;border-collapse:collapse;background:var(--portal-surface); }.lc-comparison caption { padding:18px;text-align:left;font-size:12px;color:var(--portal-muted);background:var(--portal-elevated); }.lc-comparison th,.lc-comparison td { padding:24px 20px;text-align:left;border-bottom:1px solid var(--portal-line);border-right:1px solid var(--portal-line);font-size:14px;line-height:1.8;vertical-align:top; }.lc-comparison thead th { font-size:21px;font-weight:600; }.lc-comparison th[scope=row] { width:20%;font-weight:500;font-size:12px;color:var(--portal-muted); }.lc-comparison tbody tr:last-child>* { border-bottom:0; }
.lc-notice { position:fixed;bottom:25px;left:50%;transform:translateX(-50%);z-index:10050;max-width:calc(100% - 40px);padding:14px 22px;background:var(--portal-text);color:var(--portal-bg);border-radius:10px;box-shadow:0 8px 30px #0003;font-size:13px; }.lc-notice[hidden] { display:none; }
.lc-result-image img:not([src]),.lc-note-image img:not([src]) { visibility:hidden; }
.lc-backup { width:min(600px,calc(100% - 40px));max-height:85dvh;overflow:auto;padding:30px;border:1px solid var(--portal-line);border-radius:16px;background:var(--portal-surface);color:var(--portal-text); }
.lc-backup::backdrop { background:#0009;backdrop-filter:blur(5px); }.lc-backup h2 { text-align:left;font-size:26px;margin-bottom:15px; }.lc-backup p { color:var(--portal-muted);font-size:13px;line-height:1.8; }.lc-backup summary { cursor:pointer;font-size:12px;margin:20px 0; }.lc-backup textarea { width:100%;box-sizing:border-box;background:var(--portal-bg);color:var(--portal-text);border:1px solid var(--portal-line);border-radius:8px;font:11px/1.6 monospace;padding:15px; }.lc-backup-actions { display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:25px; }.lc-backup-actions .btn { font-size:12px;padding:12px 16px; }
@media(max-width:1050px){.lc-lesson-layout{grid-template-columns:180px minmax(0,1fr);gap:35px;}.lc-academy-grid{grid-template-columns:repeat(2,minmax(0,1fr));}.lc-launch{width:91%;}.lc-paths{grid-template-columns:1fr;}.lc-robot-hero{gap:30px;}.lc-robot-hero img{height:350px;}}
@media(max-width:760px){.lc-heading{margin-bottom:26px;}.lc-heading h1{letter-spacing:-1px;}.lc-heading p{font-size:14px;}.lc-launch{grid-template-columns:1fr;width:calc(100% - 40px);}.lc-launch a{padding:22px;border-right:0;border-bottom:1px solid var(--portal-line);}.lc-launch a:last-child{border-bottom:0;}.lc-launch strong{font-size:20px;}.lc-results{grid-template-columns:1fr;}.lc-result{gap:14px;}.lc-result-image{width:88px;flex-basis:88px;height:120px;}.lc-search-tools{flex-direction:column;gap:15px;}.lc-topic{width:100%;}.lc-searchbox{padding:12px;gap:10px;}.lc-searchbox input{font-size:15px;}.lc-searchbox button{font-size:12px;padding:10px 15px;}.lc-lesson-hero{grid-template-columns:1fr;gap:25px;}.lc-lesson-hero>img{max-height:240px;}.lc-lesson-layout{grid-template-columns:1fr;padding-top:30px;}.lc-toc{position:static;display:grid;grid-template-columns:1fr 1fr;gap:4px;background:var(--portal-surface);padding:18px;border:1px solid var(--portal-line);border-radius:10px;}.lc-toc>.hub-eyebrow,.lc-reading-state{grid-column:1/-1;}.lc-reading-state{margin-top:12px;}.lc-toc button{font-size:11px;}.lc-lesson-body p{font-size:15px;line-height:2;}.lc-lesson-body h2{font-size:25px;}.lc-formula{font-size:12px;padding:16px;}.lc-code{font-size:11px;padding:17px;}#lc-quiz{padding:18px;}.lc-stats{grid-template-columns:1fr 1fr;}.lc-stats>div{padding:20px;border-bottom:1px solid var(--portal-line);}.lc-stats strong{font-size:30px;}.lc-stats>div:nth-child(2){border-right:0;}.lc-stats>div:nth-child(3){border-bottom:0;}.lc-course-resume{padding:18px;gap:16px;}.lc-course-resume>img{width:90px;}.lc-course-resume h3{font-size:17px;}.lc-robot-hero{grid-template-columns:1fr;}.lc-robot-hero img{height:330px;}.lc-robot-facts{grid-template-columns:1fr;padding:25px 0;gap:22px;}.lc-robot-facts>div{gap:8px;}.lc-compare-picks{gap:9px;}.lc-compare-picks select{padding:10px 5px;font-size:12px;}.lc-nav-icon{width:30px;height:34px;font-size:12px;}.lc-note-body{padding:18px;}.lc-note-body h2{font-size:19px;}.lc-note-image{height:175px;}}
@media(max-width:480px){.lc-academy-grid{grid-template-columns:1fr;}.lc-note-image{height:210px;}.lc-result h3{font-size:15px;}.lc-meta{font-size:9px;}.lc-result-main{padding-right:16px;}.lc-filters button{font-size:11px;padding:8px 10px;}.lc-code-head h2{font-size:22px;}.lc-robot-actions .btn{font-size:12px;}.lc-complete .btn{font-size:12px;}.lc-desk-toolbar>span{flex-basis:100%;margin-bottom:10px;}}
@media(prefers-reduced-motion:reduce){.lc-note-card,.lc-launch a{transition:none;}.lc-note-card:hover{transform:none;}}

.ml-workbench { display:grid;grid-template-columns:minmax(0,1fr) 350px;border:1px solid var(--portal-line);border-radius:18px;overflow:hidden;background:var(--portal-surface); }
.ml-stage { position:relative;background:radial-gradient(ellipse at 50% 45%,#f3f0e7,#dedbd2);min-width:0; }.ml-stage-head { position:absolute;left:30px;right:25px;top:30px;z-index:2;display:flex;justify-content:space-between;pointer-events:none; }.ml-stage-head h2 { font-size:23px;color:#30342b;letter-spacing:-.5px;margin-top:12px; }.ml-stage-head .hub-eyebrow { color:#75796a;font-size:9px; }.ml-badge { font-size:8px;letter-spacing:1px;color:#75796a; }.ml-canvas { height:725px;position:relative; }.ml-canvas canvas { display:block;width:100%;height:100%;touch-action:none; }#ml-status { position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:20px;background:#eeebe2f5;z-index:4;padding:30px;text-align:center;color:#575b4d;font-size:13px; }#ml-status[hidden] { display:none; }#ml-retry { border:1px solid #acae9e;padding:12px 20px;border-radius:8px;background:#fffaf0;cursor:pointer; }
.ml-position { position:absolute;left:28px;right:28px;bottom:78px;background:#fcfaf3e8;border:1px solid #b8b6aa70;border-radius:10px;padding:17px 20px;pointer-events:none; }.ml-position>span { font-size:8px;letter-spacing:1px;color:#818371; }#ml-tip { display:flex;justify-content:space-between;gap:15px;margin-top:8px; }#ml-tip>div { display:flex;align-items:center;gap:9px; }#ml-tip b { font-size:10px;color:#b86c3d; }#ml-tip output { font-size:22px;font-variant-numeric:tabular-nums;color:#30342b;letter-spacing:-.8px; }
.ml-view-tools { position:absolute;bottom:24px;left:28px;right:28px;display:flex;gap:8px; }.ml-view-tools button { border:1px solid #b8b6aa90;border-radius:7px;padding:9px 12px;font:inherit;font-size:10px;background:#fcfaf3e8;color:#565948;cursor:pointer; }.ml-view-tools button[aria-pressed=true] { background:#f4d6b7;border-color:#c6905d; }
.ml-panel { padding:30px;background:#24271f;color:#edede3; }.ml-panel h2 { font-size:23px;margin:13px 0 10px;letter-spacing:-.5px; }.ml-panel>p { font-size:11px;color:#a4a895;line-height:1.9;margin-bottom:24px; }.ml-panel>.hub-eyebrow { color:#b99169; }.ml-joint { margin-bottom:14px; }.ml-joint label { display:flex;align-items:center;justify-content:space-between;font-size:12px;margin-bottom:8px; }.ml-joint small { color:#858e79;font-size:9px;margin-left:8px; }.ml-joint output { color:#ecc99e;font-size:12px;font-variant-numeric:tabular-nums; }.ml-joint input,.ml-grip input { accent-color:#dc9e66;width:100%;height:5px;cursor:pointer; }.ml-limits { display:flex;justify-content:space-between;font-size:8px;color:#828978;margin-top:3px; }.ml-grip { padding:16px 0 23px;margin-top:12px;border-top:1px solid #515646; }.ml-grip label { display:flex;justify-content:space-between;font-size:11px;margin-bottom:12px; }.ml-grip output { color:#e0bd92; }.ml-panel>.btn { display:block;width:100%;padding:12px;font-size:12px;background:#393e30;border-color:#515a43;color:#eaece0; }.ml-panel>.lc-plain { font-size:11px;margin-top:18px;color:#d4ad85; }
.ml-math { margin-top:25px;border:1px solid var(--portal-line);border-radius:12px;padding:30px;font-size:11px;color:var(--portal-muted); }.ml-math[hidden] { display:none; }.ml-math h2 { font-size:25px;margin:12px 0; color:var(--portal-text);}.ml-math p { max-width:800px;font-size:13px;line-height:1.9; }.ml-math-table { overflow-x:auto;margin:20px 0; }.ml-math table { width:100%;min-width:550px;border-collapse:collapse;font-variant-numeric:tabular-nums;font-family:monospace; }.ml-math th,.ml-math td { padding:12px;text-align:center;border-bottom:1px solid var(--portal-line);font-size:12px; }.ml-math caption { text-align:left;padding:12px;font-size:11px; }
.ml-challenge { display:grid;grid-template-columns:1.5fr 1fr;gap:70px;margin:40px 0;padding:35px 0;border-top:1px solid var(--portal-line);border-bottom:1px solid var(--portal-line); }.ml-challenge h2 { font-size:29px;letter-spacing:-.7px;margin:13px 0; }.ml-challenge p { font-size:14px;line-height:1.9;color:var(--portal-muted); }.ml-challenge-actions { padding-top:30px; }.ml-challenge details { margin-top:20px;font-size:12px;color:var(--portal-muted); }.ml-challenge summary { cursor:pointer; }#ml-challenge-result { color:var(--portal-accent);font-size:13px; }.ml-source { display:flex;align-items:center;gap:35px;justify-content:space-between; }.ml-source p { color:var(--portal-muted);font-size:11px;line-height:1.9;max-width:700px; }.ml-source a { font-size:11px;flex-shrink:0; }.ml-lessons { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px;margin-top:35px; }.ml-lessons a { padding:20px;border:1px solid var(--portal-line);border-radius:9px;font-size:13px;color:var(--portal-text); }.portal:has(#kinematics.spa-active) #chatbot-toggle { width:42px;height:42px;padding:0;border-radius:50%; }.portal:has(#kinematics.spa-active) #chatbot-toggle .lang { display:none; }
@media(max-width:1050px){.ml-workbench{grid-template-columns:minmax(0,1fr) 300px;}.ml-panel{padding:24px;}.ml-stage-head{left:22px;top:25px;}.ml-stage-head h2{font-size:20px;}.ml-badge{display:none;}.ml-position{left:18px;right:18px;padding:14px;}.ml-view-tools{left:18px;right:18px;gap:5px;}.ml-view-tools button{padding:9px;font-size:9px;}.ml-source{display:block;}}
@media(max-width:760px){.ml-workbench{grid-template-columns:1fr;}.ml-canvas{height:490px;}.ml-stage-head{left:20px;top:23px;}.ml-stage-head h2{font-size:19px;}.ml-position{bottom:70px;}.ml-position>span{font-size:7px;}.ml-position output{font-size:20px!important;}.ml-view-tools{bottom:20px;right:60px;}.ml-panel{padding:26px;}.ml-joint{margin-bottom:22px;}.ml-joint input{height:7px;}.ml-joint label{font-size:13px;}.ml-joint output{font-size:14px;}.ml-challenge{grid-template-columns:1fr;gap:0;}.ml-challenge-actions{padding-top:10px;}.ml-lessons{grid-template-columns:1fr;}.ml-math{padding:20px;}.ml-challenge h2{font-size:26px;}.ml-position #ml-tip{gap:8px;}.ml-position #ml-tip>div{gap:6px;}}
