#hub {
  height: 100dvh;
  overflow: auto;
  background: var(--color-kumo-base);
  scrollbar-color: var(--color-kumo-fill) transparent;
}
.portal-header {
  min-height: 72px;
  border-bottom: 1px solid var(--color-kumo-line);
  display: flex;
  align-items: center;
  gap: 32px;
  padding: 12px 32px;
  background: var(--color-kumo-base);
  position: sticky;
  top: 0;
  z-index: 15;
}
.portal-header nav,
.portal-utilities {
  display: flex;
  gap: 6px;
  align-items: center;
}
.portal-header nav button,
.portal-utilities button {
  background: none;
  border-color: transparent;
  font-size: var(--text-base);
}
.portal-header nav button[aria-current=page] {
  background: var(--color-kumo-tint);
  color: var(--text-color-kumo-default);
}
.portal-utilities {
  margin-left: auto;
}
.portal-header .brand {
  flex-shrink: 0;
}
.portal-main {
  max-width: 1320px;
  margin: 0 auto;
  padding: 48px 40px 64px;
}
.portal-intro {
  max-width: 780px;
  margin-bottom: 40px;
}
.portal-main h1 {
  font-size: var(--text-3xl);
  line-height: 1.2;
  letter-spacing: -.025em;
  font-weight: 500;
  margin: 14px 0 20px;
}
.portal-intro > p,
.brief-lead {
  font-size: var(--text-lg);
  line-height: 1.75;
  color: var(--text-color-kumo-subtle);
}
.portal-main h2 {
  font-size: var(--text-xl);
  font-weight: 500;
  letter-spacing: -.025em;
}
.portal-main p {
  color: var(--text-color-kumo-subtle);
}
.catalog-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  margin: 0 0 24px;
  color: var(--text-color-kumo-subtle);
  font-size: var(--text-base);
}
.search-label {
  display: flex;
  align-items: center;
  gap: 10px;
  width: min(440px, 100%);
  margin: 0;
  border: 1px solid var(--color-kumo-line);
  border-radius: 10px;
  padding: 0 14px;
  background: var(--color-kumo-control);
}
.search-label input {
  background: none;
  border: 0;
  box-shadow: none;
  padding: 12px 0;
  font-size: var(--text-lg);
}
.lab-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 22px;
}
.lab-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  background: var(--color-kumo-control);
  border: 1px solid var(--color-kumo-line);
  box-shadow: var(--shadow-stack);
  border-radius: 16px;
  padding: 28px;
  transition:
    transform .2s var(--ease-out-strong),
    box-shadow .2s,
    border-color .2s;
}
.lab-card:hover {
  transform: translateY(-3px);
  border-color: var(--color-kumo-fill);
  box-shadow: 0 12px 30px #00000009;
}
.card-category {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
}
.lab-card h2 {
  font-size: var(--text-xl);
  line-height: 1.4;
  margin: 24px 0 12px;
}
.lab-card p {
  font-size: var(--text-lg);
  line-height: 1.8;
  margin: 0 0 24px;
}
.lab-card > button {
  margin-top: auto;
}
.product-tags {
  display: flex;
  gap: 7px;
  flex-wrap: wrap;
  margin: 0 0 24px;
}
.product-tag {
  background: var(--color-kumo-tint);
  border: 1px solid var(--color-kumo-line);
  font-size: var(--text-base);
  padding: 4px 9px;
  border-radius: 6px;
  color: var(--text-color-kumo-subtle);
}
.text-button {
  background: none;
  border: 0;
  padding-left: 0;
  color: var(--text-color-kumo-subtle);
}
.brief-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.6fr) minmax(300px, 1fr);
  gap: 70px;
  margin-top: 36px;
  align-items: start;
}
.brief-layout article > h2 {
  margin-top: 38px;
}
.brief-layout article > p {
  line-height: 1.8;
}
.outcome-list {
  list-style: none;
  padding: 0;
}
.outcome-list li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  margin: 16px 0;
  font-size: var(--text-lg);
}
.outcome-list .icon {
  color: var(--text-color-kumo-success);
  margin-top: 4px;
}
.example-result {
  border: 1px solid var(--color-kumo-line);
  background: var(--color-kumo-elevated);
  padding: 24px;
  border-radius: 12px;
  font-size: var(--text-lg);
  line-height: 1.8;
}
.brief-start {
  position: sticky;
  top: 105px;
  border: 1px solid var(--color-kumo-line);
  background: var(--color-kumo-control);
  box-shadow: var(--shadow-stack);
  border-radius: 16px;
  padding: 28px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.brief-start h2 {
  margin: 8px 0 0;
}
.brief-start ul {
  padding-left: 18px;
  color: var(--text-color-kumo-subtle);
  line-height: 1.8;
  margin: 0;
}
.brief-start p {
  font-size: var(--text-lg);
  line-height: 1.8;
  margin: 4px 0 12px;
}
.brief-details {
  display: flex;
  justify-content: space-between;
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
  padding-bottom: 20px;
  border-bottom: 1px solid var(--color-kumo-line);
}
.brief-start .brief-preserved {
  font-size: var(--text-base);
  margin: 0;
}
.build-list {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.saved-build {
  display: flex;
  align-items: center;
  gap: 22px;
  background: var(--color-kumo-control);
  border: 1px solid var(--color-kumo-line);
  box-shadow: var(--shadow-stack);
  border-radius: 14px;
  padding: 24px;
}
.build-mark {
  width: 44px;
  height: 44px;
  display: flex;
  justify-content: center;
  align-items: center;
  background: var(--color-kumo-tint);
  border: 1px solid var(--color-kumo-line);
  border-radius: 12px;
  flex-shrink: 0;
}
.saved-build-copy {
  flex: 1;
  min-width: 0;
}
.build-name {
  display: flex;
  gap: 14px;
  align-items: center;
  flex-wrap: wrap;
}
.build-name h2 {
  margin: 0;
  font-size: var(--text-xl);
}
.state-badge {
  display: inline-flex;
  padding: 3px 8px;
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
  background: var(--color-kumo-tint);
  border-radius: 6px;
}
.state-badge.verified {
  color: var(--text-color-kumo-success);
}
.saved-build p {
  font-size: var(--text-base);
  margin: 9px 0;
}
.build-links {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
}
.portal-empty {
  text-align: center;
  border: 1px solid var(--color-kumo-line);
  padding: 60px 24px;
  border-radius: 16px;
  background: var(--color-kumo-elevated);
}
.portal-empty h1 {
  font-size: var(--text-3xl);
}
.library-back {
  background: none;
  border: 0;
  justify-content: flex-start;
  padding: 0 10px 24px;
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
}
.sidebar nav {
  min-height: 0;
  overflow-y: auto;
}
.sidebar-label > span {
  font-size: var(--text-base);
}
.sidebar-bottom {
  padding-top: 14px;
}
.reasoning {
  font-size: var(--text-base);
}
.composer-footer {
  margin-top: 0;
}
.composer .reasoning {
  margin: 8px 0 0;
}
.tools-list {
  display: grid;
  gap: 18px;
  margin-top: 24px;
}
.tools-list article {
  padding: 18px;
  border: 1px solid var(--color-kumo-line);
  border-radius: 12px;
  background: var(--color-kumo-tint);
}
.tools-list h3 {
  font-size: var(--text-lg);
  margin: 0 0 8px;
  font-weight: 500;
}
.tools-list p {
  font-size: var(--text-lg);
  line-height: 1.8;
}
.finish-actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin: 24px 0;
}
#finishEvidence p {
  display: flex;
  align-items: center;
  gap: 10px;
}
#finishEvidence .icon {
  color: var(--text-color-kumo-success);
}
#startupProgress {
  text-align: left;
  margin: 20px 0;
}
#startupProgress p {
  margin: 10px 0;
  font-size: var(--text-base);
}
#startupProgress .current {
  color: var(--text-color-kumo-default);
}
#startupActions {
  display: flex;
  gap: 8px;
  justify-content: center;
  margin: 20px 0;
}
.lab-cover-card {
  width: min(460px, 100%);
}
.lab-cover {
  overflow: auto;
}
.lab-cover-card h2 {
  font-size: var(--text-2xl);
}
.instructor-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 360px;
  gap: 40px;
  align-items: start;
}
.panel-form {
  background: var(--color-kumo-control);
  border: 1px solid var(--color-kumo-line);
  padding: 28px;
  border-radius: 16px;
  box-shadow: var(--shadow-stack);
}
.panel-form label {
  font-size: var(--text-base);
  margin-top: 16px;
}
.panel-form input {
  font-size: var(--text-lg);
}
.panel-form > button,
.panel-form form > button {
  margin-top: 20px;
}
.panel-form fieldset {
  border: 0;
  padding: 0;
  margin: 20px 0;
}
.panel-form legend {
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
  margin-bottom: 8px;
}
.check-label {
  display: flex;
  align-items: center;
  gap: 8px;
}
.check-label input {
  width: 16px;
  height: 16px;
  accent-color: var(--orange);
}
.operator-login {
  max-width: 480px;
  margin: 30px auto;
}
.operator-login h1 {
  font-size: var(--text-3xl);
}
.event-list {
  display: grid;
  gap: 14px;
}
.event-card {
  position: relative;
  text-align: left;
  display: flex;
  align-items: flex-start;
  flex-direction: column;
  padding: 24px;
  border-radius: 12px;
  background: var(--color-kumo-control);
  box-shadow: var(--shadow-stack);
}
.event-card b {
  font-size: var(--text-lg);
  font-weight: 500;
}
.event-card span {
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
}
.event-card .icon {
  position: absolute;
  right: 20px;
  top: 24px;
}
.event-overview {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  margin: 28px 0;
}
.metric {
  display: flex;
  flex-direction: column;
  gap: 10px;
  border: 1px solid var(--color-kumo-line);
  border-radius: 12px;
  padding: 22px;
  background: var(--color-kumo-control);
}
.metric b {
  font-size: var(--text-2xl);
  font-weight: 500;
  letter-spacing: -.03em;
}
.metric span {
  font-size: var(--text-base);
  color: var(--text-color-kumo-subtle);
}
.event-control-bar {
  padding: 22px;
  border: 1px solid var(--color-kumo-line);
  border-radius: 12px;
  background: var(--color-kumo-elevated);
  display: flex;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
}
.event-control-bar > div {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.event-control-bar b,
.event-control-bar span,
.event-control-bar button {
  font-size: var(--text-base);
}
.event-control-bar code {
  font-size: var(--text-lg);
}
.event-dates {
  font-size: var(--text-base);
}
.capacity-panel {
  display: flex;
  align-items: center;
  gap: 24px;
  border: 1px solid var(--color-kumo-line);
  border-radius: 12px;
  padding: 24px;
  margin: 32px 0;
  background: var(--color-kumo-control);
}
.capacity-panel > div {
  flex: 1;
}
.capacity-panel h2 {
  margin-top: 0;
}
.capacity-panel p {
  font-size: var(--text-base);
  line-height: 1.8;
  margin-bottom: 0;
}
.roster {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
}
.roster article,
.help-row {
  border: 1px solid var(--color-kumo-line);
  padding: 20px;
  border-radius: 12px;
  background: var(--color-kumo-control);
  overflow-wrap: anywhere;
}
.roster h3 {
  font-size: var(--text-lg);
  font-weight: 500;
  margin: 0 0 10px;
}
.roster p {
  font-size: var(--text-base);
}
.help-row {
  display: flex;
  align-items: center;
  gap: 24px;
  justify-content: space-between;
  margin-bottom: 12px;
}
.help-row b {
  font-size: var(--text-base);
}
.help-row p {
  font-size: var(--text-base);
  margin-bottom: 0;
}
.error-text {
  display: block;
  color: var(--text-color-kumo-danger);
  font-size: var(--text-base);
  margin-top: 7px;
}
.privacy-note {
  font-size: var(--text-base);
  margin-top: 32px;
}
.portal-main code {
  overflow-wrap: anywhere;
}
#helpDialog form button {
  margin-top: 18px;
}
#helpDialog p {
  font-size: var(--text-lg);
  line-height: 1.8;
}
#finishDialog {
  max-width: 600px;
}
#toolsDialog {
  max-width: 660px;
}
.build-actions #finishButton {
  color: var(--text-color-kumo-subtle);
}
@media (max-width: 1250px) {
  .library-back {
    font-size: 0;
    padding: 0 0 20px;
    justify-content: center;
  }
  .library-back:before {
    content: "\2190";
    font-size: var(--text-xl);
  }
  .brief-layout {
    gap: 32px;
  }
  .portal-header {
    gap: 16px;
  }
  .portal-header .brand > span:not(.brand-mark) {
    display: none;
  }
  .portal-main {
    padding: 40px 28px 64px;
  }
  .instructor-layout {
    grid-template-columns: minmax(0, 1fr) 320px;
  }
}
@media (max-width: 760px) {
  .portal-header {
    padding: 12px 16px;
    gap: 8px;
    flex-wrap: wrap;
    position: static;
  }
  .portal-header .brand {
    gap: 5px;
  }
  .portal-header nav {
    order: 3;
    width: 100%;
    padding-top: 6px;
  }
  .portal-utilities {
    gap: 0;
  }
  .portal-utilities button {
    font-size: var(--text-base);
    padding: 7px;
  }
  .portal-main {
    padding: 32px 18px 56px;
  }
  .portal-main h1 {
    font-size: var(--text-3xl);
  }
  .portal-intro {
    margin-bottom: 28px;
  }
  .portal-intro > p,
  .brief-lead {
    font-size: var(--text-lg);
  }
  .lab-grid {
    grid-template-columns: 1fr;
    gap: 16px;
  }
  .lab-card {
    padding: 24px;
  }
  .lab-card h2 {
    font-size: var(--text-xl);
  }
  .card-category {
    font-size: var(--text-base);
  }
  .brief-layout {
    grid-template-columns: 1fr;
    margin-top: 24px;
    gap: 24px;
  }
  .brief-start {
    position: static;
  }
  .saved-build {
    padding: 20px;
    gap: 14px;
    align-items: flex-start;
    flex-wrap: wrap;
  }
  .build-mark {
    display: none;
  }
  .saved-build-copy {
    flex-basis: 100%;
  }
  .build-name {
    gap: 8px;
  }
  .build-name h2 {
    font-size: var(--text-lg);
  }
  .build-links {
    font-size: var(--text-base);
  }
  .catalog-controls > span {
    display: none;
  }
  .library-back {
    display: none;
  }
  .sidebar-label {
    display: none;
  }
  .sidebar nav {
    overflow: visible;
  }
  .build-actions {
    gap: 5px;
  }
  .build-actions #finishButton {
    padding: 6px 8px;
    font-size: var(--text-base);
  }
  .build-actions #finishButton .icon {
    width: 13px;
  }
  .instructor-layout {
    grid-template-columns: 1fr;
  }
  .event-overview {
    grid-template-columns: repeat(2, 1fr);
  }
  .metric {
    padding: 16px;
  }
  .metric b {
    font-size: var(--text-2xl);
  }
  .roster {
    grid-template-columns: 1fr;
  }
  .capacity-panel {
    align-items: flex-start;
    flex-direction: column;
  }
  .event-control-bar {
    padding: 18px;
  }
  .finish-actions {
    grid-template-columns: 1fr;
  }
  .help-row {
    flex-direction: column;
    align-items: flex-start;
  }
  .lab-cover {
    align-items: safe center;
    padding: 12px;
  }
  .lab-cover-card {
    padding: 24px 18px;
  }
  #startupActions {
    flex-direction: column;
  }
}
@media (prefers-reduced-motion: reduce) {
  .lab-card:hover {
    transform: none;
  }
}
@media (max-width: 760px) {
  .sidebar nav {
    display: flex;
    flex-direction: row;
    grid-template-columns: none;
    flex-wrap: nowrap;
    overflow-x: auto;
  }
  .sidebar nav > button {
    flex: 0 0 auto;
    min-width: 112px;
  }
  .sidebar nav .topic-copy {
    min-width: 0;
  }
}

.preview-notice { display:flex; flex-wrap:wrap; align-items:center; gap:8px 16px; padding:14px 18px; margin:0 0 32px; border:1px solid var(--color-kumo-line); border-radius:10px; background:var(--color-kumo-tint); font-size:var(--text-base); line-height:1.6; color:var(--text-color-kumo-subtle); }
.preview-notice b { font-weight:500; color:var(--text-color-kumo-default); }
.lab-availability { border-top:1px solid var(--color-kumo-line); margin-top:8px; padding-top:16px; }
.lab-availability h3 { font-size:var(--text-lg); font-weight:500; margin:0 0 8px; }
.brief-start .lab-start-error { font-size:var(--text-lg); color:var(--text-color-kumo-danger); border-left:2px solid var(--color-kumo-danger); padding:10px 14px; margin:0; }
.build-availability { font-size:var(--text-base); color:var(--text-color-kumo-subtle); }
