/* ═══════════════════════════════════════
   LAYOUT — Application Structure
   ═══════════════════════════════════════ */

body {
  font-family: var(--font-primary);
  background: var(--bg-primary);
  color: var(--text-primary);
  overflow: hidden;
  height: 100vh;
  width: 100vw;
}

/* ── Loading Screen ── */
#loading-screen {
  position: fixed;
  inset: 0;
  z-index: var(--z-loading);
  background: var(--bg-primary);
  display: flex;
  align-items: center;
  justify-content: center;
}

.loader-content {
  text-align: center;
}

.atom-loader {
  position: relative;
  width: 80px;
  height: 80px;
  margin: 0 auto var(--sp-5);
}

.nucleus-dot {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 10px;
  height: 10px;
  background: var(--accent-cyan);
  border-radius: 50%;
  transform: translate(-50%, -50%);
  box-shadow: 0 0 15px var(--accent-cyan);
}

.orbit-ring {
  position: absolute;
  inset: 0;
  border: 1px solid rgba(100, 200, 255, 0.3);
  border-radius: 50%;
}
.ring-1 { animation: spin-orbit 2s linear infinite; }
.ring-2 { animation: spin-orbit 3s linear infinite reverse; transform: rotateX(60deg); }
.ring-3 { animation: spin-orbit 4s linear infinite; transform: rotateY(60deg); }

.loader-title {
  font-family: var(--font-display);
  font-size: var(--fs-2xl);
  font-weight: 900;
  letter-spacing: 8px;
  background: linear-gradient(135deg, var(--accent-cyan), var(--accent-purple));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin-bottom: var(--sp-2);
}

.loader-subtitle {
  color: var(--text-secondary);
  font-size: var(--fs-sm);
  margin-bottom: var(--sp-5);
}

.progress-bar {
  width: 240px;
  height: 3px;
  background: rgba(255,255,255,0.08);
  border-radius: 2px;
  margin: 0 auto var(--sp-3);
  overflow: hidden;
}

.progress-fill {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, var(--accent-cyan), var(--accent-purple));
  border-radius: 2px;
  transition: width 300ms ease;
}

.loading-status {
  color: var(--text-muted);
  font-size: var(--fs-xs);
  font-family: var(--font-mono);
}

/* ── App Container ── */
.app-container {
  display: flex;
  flex-direction: column;
  height: 100vh;
  width: 100vw;
  overflow: hidden;
}

/* ── Top Bar ── */
.top-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: var(--top-bar-height);
  padding: 0 var(--sp-4);
  background: var(--bg-panel);
  border-bottom: 1px solid var(--border-color);
  z-index: var(--z-topbar);
  backdrop-filter: blur(12px);
}

.top-bar-left {
  display: flex;
  align-items: baseline;
  align-items: center;
  gap: var(--sp-2);
}

.app-logo {
  font-family: var(--font-display);
  font-size: var(--fs-lg);
  font-weight: 900;
  letter-spacing: 4px;
  background: linear-gradient(135deg, var(--accent-cyan), var(--accent-purple));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.app-version {
  font-size: var(--fs-xs);
  color: var(--text-muted);
  font-family: var(--font-mono);
}

.top-bar-center {
  display: flex;
  align-items: center;
}

.element-display {
  display: flex;
  align-items: baseline;
  gap: var(--sp-3);
}

.element-symbol-large {
  font-family: var(--font-display);
  font-size: var(--fs-xl);
  font-weight: 700;
  color: var(--accent-cyan);
}

.element-name-display {
  font-size: var(--fs-md);
  color: var(--text-primary);
}

.element-z-display {
  font-size: var(--fs-sm);
  color: var(--text-secondary);
  font-family: var(--font-mono);
}

.top-bar-right {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
}

.language-switcher {
  display: flex;
  gap: 2px;
  background: rgba(255,255,255,0.05);
  border-radius: var(--border-radius);
  padding: 2px;
}

.lang-btn {
  padding: var(--sp-1) var(--sp-2);
  font-size: var(--fs-xs);
  font-weight: 600;
  color: var(--text-secondary);
  border-radius: 4px;
  transition: all var(--transition-fast);
}
.lang-btn:hover {
  color: var(--text-primary);
  background: rgba(255,255,255,0.1);
}
.lang-btn.active {
  color: var(--bg-primary);
  background: var(--accent-cyan);
}

.icon-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: var(--border-radius);
  color: var(--text-secondary);
  transition: all var(--transition-fast);
}
.icon-btn:hover {
  color: var(--text-primary);
  background: rgba(255,255,255,0.1);
}

/* ── Main Content Area ── */
.main-content {
  display: flex;
  flex: 1;
  overflow: hidden;
  position: relative;
}

/* ── Panels ── */
.panel {
  width: var(--panel-width);
  min-width: var(--panel-width);
  background: var(--bg-panel);
  border: 1px solid var(--border-color);
  z-index: var(--z-panels);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transition: width var(--transition-normal), min-width var(--transition-normal),
              transform var(--transition-normal);
  backdrop-filter: blur(12px);
}

.panel.collapsed {
  width: 0;
  min-width: 0;
  overflow: hidden;
  border: none;
}

.panel-left {
  border-right: 1px solid var(--border-color);
}

.panel-right {
  border-left: 1px solid var(--border-color);
}

.panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--sp-3) var(--sp-4);
  border-bottom: 1px solid var(--border-color);
  flex-shrink: 0;
}

.panel-header h2 {
  font-size: var(--fs-sm);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 1.5px;
  color: var(--text-secondary);
}

.panel-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  color: var(--text-muted);
  border-radius: 4px;
  transition: all var(--transition-fast);
  cursor: pointer;
  background: none;
  border: none;
}
.panel-toggle:hover {
  color: var(--text-primary);
  background: rgba(255,255,255,0.1);
}

/* Collapsed panel: hide content */
.panel.collapsed {
  width: 0;
  min-width: 0;
  overflow: hidden;
  border: none;
}

/* Reopen tab — appears when panel is collapsed */
.panel-reopen {
  display: none;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 24px;
  height: 60px;
  background: var(--bg-panel);
  border: 1px solid var(--border-color);
  color: var(--text-muted);
  cursor: pointer;
  z-index: var(--z-panels);
  align-items: center;
  justify-content: center;
  transition: all var(--transition-fast);
}
.panel-reopen:hover {
  color: var(--text-primary);
  background: var(--bg-hover);
}
.panel-reopen.left {
  left: 0;
  border-radius: 0 6px 6px 0;
  border-left: none;
}
.panel-reopen.right {
  right: 0;
  border-radius: 6px 0 0 6px;
  border-right: none;
}
.panel-reopen.visible {
  display: flex;
}

/* Mobile overlay backdrop */
.panel-overlay {
  display: none;
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,0.6);
  z-index: calc(var(--z-modal) - 1);
  backdrop-filter: blur(2px);
  opacity: 0;
  transition: opacity 0.3s ease;
}
.panel-overlay.active {
  display: block;
  opacity: 1;
}

.panel-body {
  flex: 1;
  overflow-y: auto;
  padding: var(--sp-3);
}

/* ── Viewport ── */
.viewport-container {
  flex: 1;
  position: relative;
  overflow: hidden;
  min-height: 0;
  /* Stable height prevents resize when PT collapses */
  height: calc(100vh - var(--top-bar-height) - 36px);
}

#render-canvas {
  width: 100% !important;
  height: 100% !important;
  display: block;
}

.overlay-badge {
  position: absolute;
  padding: var(--sp-1) var(--sp-2);
  background: rgba(0,0,0,0.6);
  border-radius: var(--border-radius);
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  color: var(--text-secondary);
  backdrop-filter: blur(4px);
}
.overlay-badge.top-left {
  top: var(--sp-3);
  left: var(--sp-3);
}

.badge-sub {
  display: block;
  font-size: 9px;
  color: var(--text-muted);
}

/* ── Periodic Table ── */
.periodic-table-container {
  background: var(--bg-panel);
  border-top: 1px solid var(--border-color);
  overflow: hidden;
  transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  max-height: 400px;
  min-height: 36px;
  flex-shrink: 0;
  backdrop-filter: blur(12px);
}

.periodic-table-container.collapsed {
  max-height: 36px;
}

.periodic-table-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--sp-2) var(--sp-4);
}

.periodic-table-header h2 {
  font-size: var(--fs-sm);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 1.5px;
  color: var(--text-secondary);
}

.periodic-table {
  padding: 0 var(--sp-3) var(--sp-3);
  overflow-x: auto;
  overflow-y: auto;
  max-height: calc(400px - 36px);
}

/* Category legend */
.pt-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 2px var(--sp-3) 6px;
  justify-content: center;
}

.pt-legend-item {
  font-size: 9px;
  padding: 1px 6px;
  border-radius: 3px;
  color: var(--text-primary);
  font-weight: 500;
}

.pt-legend-item.cat-alkali-metal     { background: rgba(255,107,107,0.3); }
.pt-legend-item.cat-alkaline-earth   { background: rgba(255,169,77,0.3); }
.pt-legend-item.cat-transition-metal { background: rgba(255,212,59,0.25); }
.pt-legend-item.cat-post-transition  { background: rgba(105,219,124,0.25); }
.pt-legend-item.cat-metalloid        { background: rgba(102,217,232,0.25); }
.pt-legend-item.cat-nonmetal         { background: rgba(116,192,252,0.3); }
.pt-legend-item.cat-halogen          { background: rgba(177,151,252,0.3); }
.pt-legend-item.cat-noble-gas        { background: rgba(229,153,247,0.3); }
.pt-legend-item.cat-lanthanide       { background: rgba(255,135,135,0.25); }
.pt-legend-item.cat-actinide         { background: rgba(247,131,172,0.25); }

/* The grid: 18 columns, 10 rows (7 periods + spacer + Ln + Ac) */
.pt-grid {
  display: grid;
  grid-template-columns: repeat(18, minmax(28px, 1fr));
  grid-template-rows: repeat(10, auto);
  gap: 2px;
  row-gap: 2px;
}

/* Spacer row 8 (gap between main table and Ln/Ac rows) */
.pt-grid::before {
  content: '';
  grid-row: 8;
  grid-column: 1 / -1;
  height: 6px;
}

/* Element cells */
.pt-element {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 2px 1px;
  min-height: 32px;
  min-width: 28px;
  border-radius: 3px;
  cursor: pointer;
  transition: all 0.15s ease;
  border: 1px solid transparent;
  position: relative;
  user-select: none;
}

.pt-element:hover {
  transform: scale(1.35);
  z-index: 10;
  border-color: rgba(255,255,255,0.5);
  box-shadow: 0 0 12px rgba(100,200,255,0.4);
}

.pt-element.selected {
  border-color: var(--accent-cyan);
  box-shadow: 0 0 10px rgba(0,229,255,0.5), inset 0 0 8px rgba(0,229,255,0.15);
  transform: scale(1.1);
  z-index: 5;
}

.pt-element .pt-z {
  font-size: 7px;
  color: rgba(255,255,255,0.45);
  line-height: 1;
}

.pt-element .pt-sym {
  font-weight: 700;
  font-size: 11px;
  line-height: 1.2;
  color: var(--text-primary);
}

.pt-element.pt-indicator {
  cursor: default;
  border: 1px dashed rgba(255,255,255,0.15);
  background: transparent !important;
}
.pt-element.pt-indicator:hover {
  transform: none;
  box-shadow: none;
}

/* Category background colors */
.pt-element.cat-alkali-metal     { background: rgba(255,107,107,0.25); }
.pt-element.cat-alkaline-earth   { background: rgba(255,169,77,0.25); }
.pt-element.cat-transition-metal { background: rgba(255,212,59,0.18); }
.pt-element.cat-post-transition  { background: rgba(105,219,124,0.18); }
.pt-element.cat-metalloid        { background: rgba(102,217,232,0.2); }
.pt-element.cat-nonmetal         { background: rgba(116,192,252,0.22); }
.pt-element.cat-halogen          { background: rgba(177,151,252,0.22); }
.pt-element.cat-noble-gas        { background: rgba(229,153,247,0.22); }
.pt-element.cat-lanthanide       { background: rgba(255,135,135,0.18); }
.pt-element.cat-actinide         { background: rgba(247,131,172,0.18); }
.pt-element.cat-unknown          { background: rgba(134,142,150,0.18); }

/* ── Credits Bar ── */
.credits-bar {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 4px 12px;
  background: var(--bg-panel);
  border-top: 1px solid var(--border-color);
  font-size: 11px;
  color: var(--text-muted);
  flex-shrink: 0;
}

.credits-text strong {
  color: var(--accent-cyan, #64ffda);
  font-weight: 600;
}

.credits-links {
  display: flex;
  align-items: center;
  gap: 8px;
}

.credits-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  color: var(--text-muted);
  border: 1px solid rgba(255,255,255,0.08);
  transition: all 0.2s ease;
  text-decoration: none;
}

.credits-link:hover {
  color: var(--accent-cyan, #64ffda);
  border-color: rgba(100,255,218,0.3);
  background: rgba(100,255,218,0.06);
}
