@import url("./colors.css");

*{box-sizing:border-box}
html{min-width:320px;background:var(--color-page);scroll-behavior:smooth}
body{margin:0;min-width:320px;min-height:100vh;background:var(--color-page);color:var(--color-text);font-family:Inter,Geist,"Segoe UI",system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5;text-rendering:optimizeLegibility}
button,a{font:inherit}button{color:inherit}a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.mono,.panel-kicker,.axis-label,.inspector-label,.status-copy{font-family:"JetBrains Mono","IBM Plex Mono",Consolas,monospace}
.app-header{position:fixed;inset:0 0 auto;z-index:20;display:grid;grid-template-columns:minmax(210px,1fr) auto minmax(210px,1fr);align-items:center;height:60px;padding:0 24px;border-bottom:1px solid var(--color-border-soft);background:var(--color-overlay);backdrop-filter:blur(18px)}
.brand{display:inline-flex;align-items:center;gap:10px;width:max-content;font-family:"JetBrains Mono","IBM Plex Mono",Consolas,monospace;font-size:16px;font-weight:700;letter-spacing:.08em}
.brand-mark{width:8px;height:8px;border-radius:2px;background:var(--color-proteomics);box-shadow:10px 0 0 -2px var(--color-bioinformatics)}
.primary-nav{display:flex;align-items:stretch;align-self:stretch;gap:6px}
.primary-nav a{position:relative;display:grid;place-items:center;min-width:64px;padding:0 10px;color:var(--color-text-secondary);font-size:13px}
.primary-nav a:hover,.primary-nav a[aria-current="page"]{color:var(--color-text);background:var(--color-hover)}
.primary-nav a[aria-current="page"]::after{position:absolute;right:10px;bottom:-1px;left:10px;height:2px;background:var(--color-proteomics);content:""}
.header-actions{display:flex;justify-content:flex-end;gap:4px}
.icon-button,.mobile-tool,.view-button{display:inline-grid;place-items:center;border:1px solid transparent;border-radius:7px;background:transparent;cursor:pointer}
.icon-button{width:36px;height:36px;color:var(--color-text-secondary)}
.icon-button:hover,.mobile-tool:hover,.view-button:hover{border-color:var(--color-border);background:var(--color-hover);color:var(--color-text)}
.icon{width:18px;height:18px;stroke:currentColor;stroke-width:1.6;fill:none;stroke-linecap:round;stroke-linejoin:round}
.mobile-menu,.mobile-toolbar{display:none}
.shell{display:grid;gap:12px;max-width:1800px;margin:0 auto;padding:76px 16px 18px}
.workspace{display:grid;grid-template-columns:minmax(220px,15fr) minmax(520px,60fr) minmax(300px,25fr);min-height:620px;border:1px solid var(--color-border-soft);background:var(--color-panel)}
.panel{min-width:0;background:var(--color-panel)}
.sidebar,.inspector{padding:20px}.sidebar{border-right:1px solid var(--color-border)}.inspector{border-left:1px solid var(--color-border)}
.panel-title-row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.panel-title{margin:0;font-size:15px;font-weight:620;letter-spacing:-.01em}
.panel-kicker{color:var(--color-text-muted);font-size:9px}
.panel-intro{margin:8px 0 0;color:var(--color-text-secondary);font-size:12px}
.section-rule{margin:20px 0;border:0;border-top:1px solid var(--color-border-soft)}
.control-label{display:block;margin-bottom:10px;color:var(--color-text-secondary);font-size:12px;font-weight:600}
.filter-list{display:grid;gap:4px;margin:0;padding:0;list-style:none}
.filter-row{display:grid;grid-template-columns:14px 8px 1fr;align-items:center;gap:10px;min-height:34px;padding:0 6px;border-radius:6px;color:var(--color-text-secondary);font-size:12px}
.filter-row:hover{background:var(--color-hover);color:var(--color-text)}
.checkbox{width:13px;height:13px;border:1px solid var(--color-text-muted);border-radius:3px}
.domain-dot{width:7px;height:7px;border-radius:50%;background:var(--dot-color)}
.view-switcher{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.view-button{min-height:32px;padding:0 8px;border-color:var(--color-border-soft);color:var(--color-text-muted);font-size:11px}
.view-button.is-active{border-color:var(--color-proteomics);background:var(--color-selection);color:var(--color-proteomics)}
.signature{margin-top:auto;color:var(--color-text-muted);font-size:11px}
.sidebar-inner{display:flex;flex-direction:column;min-height:100%}
.canvas-panel{display:grid;grid-template-rows:55px 1fr 32px;min-width:0}
.canvas-header{display:flex;align-items:center;justify-content:space-between;padding:0 18px;border-bottom:1px solid var(--color-border-soft)}
.canvas-meta{display:flex;gap:18px;color:var(--color-text-muted);font-size:9px}
.canvas{position:relative;display:grid;place-items:center;min-height:500px;overflow:hidden;background-color:var(--color-page);background-image:radial-gradient(circle,var(--color-grid-dot) 1px,transparent 1px),linear-gradient(var(--color-grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--color-grid-line) 1px,transparent 1px);background-size:24px 24px,120px 120px,120px 120px}
.canvas::before,.canvas::after{position:absolute;width:38px;height:38px;border-color:var(--color-text-muted);opacity:.65;content:""}
.canvas::before{top:16px;left:16px;border-top:1px solid;border-left:1px solid}.canvas::after{right:16px;bottom:16px;border-right:1px solid;border-bottom:1px solid}
.axis-y,.axis-x{position:absolute;color:var(--color-text-muted);font-size:9px}
.axis-y{top:20px;bottom:20px;left:11px;display:flex;flex-direction:column;justify-content:space-between}
.axis-x{right:22px;bottom:8px;left:22px;display:flex;justify-content:space-between}
.empty-state{position:relative;z-index:1;width:min(360px,72%);padding:24px;text-align:center}
.empty-glyph{position:relative;display:grid;place-items:center;width:58px;height:58px;margin:0 auto 18px;border:1px solid var(--color-border);border-radius:50%;color:var(--color-text-secondary)}
.empty-glyph::before,.empty-glyph::after{position:absolute;background:var(--color-proteomics);opacity:.8;content:""}
.empty-glyph::before{width:18px;height:1px}.empty-glyph::after{width:1px;height:18px}
.empty-state h2{margin:0;font-size:15px;font-weight:560}.empty-state p{margin:7px auto 0;color:var(--color-text-muted);font-size:12px;line-height:1.65}
.canvas-status{display:flex;align-items:center;justify-content:space-between;padding:0 14px;border-top:1px solid var(--color-border-soft);color:var(--color-text-muted);font-size:9px}
.status-led{display:inline-block;width:5px;height:5px;margin-right:7px;border-radius:50%;background:var(--color-rnaseq)}
.inspector-empty{margin-top:18px;border-top:1px solid var(--color-border-soft)}
.inspector-field{padding:14px 0;border-bottom:1px solid var(--color-border-soft)}
.inspector-label{display:block;margin-bottom:5px;color:var(--color-text-secondary);font-size:10px}
.placeholder-line{display:block;width:54%;height:5px;border-radius:2px;background:var(--color-text-disabled);opacity:.36}.placeholder-line.short{width:28%}
.bottom-grid{display:grid;grid-template-columns:45fr 30fr 25fr;border:1px solid var(--color-border-soft);background:var(--color-panel)}
.bottom-module{min-width:0;min-height:150px;padding:18px}.bottom-module+.bottom-module{border-left:1px solid var(--color-border)}
.module-copy{margin:8px 0 0;max-width:52ch;color:var(--color-text-muted);font-size:11px}
.module-placeholder{display:flex;align-items:center;gap:12px;min-height:54px;margin-top:18px;padding:12px;border:1px dashed var(--color-border-soft);color:var(--color-text-disabled)}
.module-placeholder .icon{flex:0 0 auto}.module-placeholder span{font-size:11px}
.mobile-sheet-backdrop,.mobile-sheet{display:none}

@media(max-width:1199px){
  .workspace{grid-template-columns:72px minmax(480px,1fr) minmax(260px,30%)}
  .sidebar{padding:16px 10px}
  .sidebar .panel-title,.sidebar .panel-intro,.sidebar .control-label,.sidebar .filter-name,.sidebar .section-rule,.sidebar .signature,.sidebar .view-button{display:none}
  .filter-row{grid-template-columns:13px 8px;justify-content:center;padding:0}
  .view-switcher{display:block;width:24px;height:2px;margin:14px auto 0;background:var(--color-proteomics)}
}
@media(max-width:900px){
  .app-header{grid-template-columns:170px 1fr auto;padding:0 16px}.primary-nav a{min-width:52px;padding:0 6px;font-size:12px}
  .workspace{grid-template-columns:64px minmax(430px,1fr) 240px}.inspector{padding:16px}
}
@media(max-width:767px){
  body{font-size:13px}.app-header{grid-template-columns:1fr auto;height:56px;padding:0 16px}.brand{font-size:14px}
  .primary-nav,.header-actions .github-action,.header-actions .theme-action{display:none}.mobile-menu{display:inline-grid}
  .shell{gap:10px;padding:68px 10px 14px}
  .mobile-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;min-height:46px;padding:5px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-panel)}
  .mobile-tool{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:34px;padding:0 10px;color:var(--color-text-secondary);font-size:11px}.mobile-tool:last-child{justify-self:end}.mobile-mode{color:var(--color-text);font-size:11px}
  .workspace{display:block;min-height:0;border-color:var(--color-border);border-radius:8px;overflow:hidden}.sidebar,.inspector{display:none}
  .canvas-panel{grid-template-rows:52px minmax(465px,64vh) 30px}.canvas-header{padding:0 14px}.canvas-meta{display:none}
  .canvas{min-height:465px;background-size:22px 22px,110px 110px,110px 110px}
  .bottom-grid{grid-template-columns:1fr;border-radius:8px;overflow:hidden}.bottom-module{min-height:130px;padding:16px}.bottom-module+.bottom-module{border-top:1px solid var(--color-border);border-left:0}
  .mobile-sheet-backdrop.is-open{position:fixed;inset:0;z-index:29;display:block;background:var(--color-sheet-backdrop)}
  .mobile-sheet{position:fixed;right:0;bottom:0;left:0;z-index:30;max-height:72vh;padding:12px 16px 20px;border:1px solid var(--color-border);border-bottom:0;border-radius:14px 14px 0 0;background:var(--color-panel);transform:translateY(102%);transition:transform 180ms ease-out}
  .mobile-sheet.is-open{display:block;transform:translateY(0)}.sheet-handle{width:44px;height:4px;margin:0 auto 12px;border-radius:2px;background:var(--color-text-muted)}
  .sheet-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:10px;border-bottom:1px solid var(--color-border-soft)}.sheet-fields{overflow-y:auto;max-height:52vh}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important}}


/* Skill Graph */
.graph-canvas {
  display: block;
  isolation: isolate;
}

.graph-canvas::before,
.graph-canvas::after {
  display: none;
}

.graph-stage {
  position: relative;
  width: 100%;
  height: 100%;
  min-height: 500px;
  overflow: hidden;
}

.graph-edges {
  position: absolute;
  inset: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  pointer-events: none;
  overflow: visible;
}

.graph-edge {
  fill: none;
  stroke: var(--edge-color);
  stroke-width: 1.15;
  stroke-linecap: round;
  opacity: 0.34;
  transition: opacity 150ms ease-out, stroke-width 150ms ease-out;
}

.graph-edge--related-to {
  stroke: var(--color-text-muted);
  stroke-dasharray: 4 5;
  stroke-width: 0.85;
  opacity: 0.15;
}

.graph-edge.is-active {
  stroke-width: 1.8;
  opacity: 0.9;
}

.graph-edge--related-to.is-active {
  stroke-width: 1.2;
  opacity: 0.7;
}

.graph-edge.is-dimmed {
  opacity: 0.06;
}

.graph-nodes {
  position: absolute;
  inset: 0;
  z-index: 2;
}

.graph-node {
  position: absolute;
  left: var(--node-x);
  top: var(--node-y);
  display: grid;
  place-items: center;
  transform: translate(-50%, -50%);
  border: 1px solid var(--node-color);
  background: var(--color-panel);
  color: var(--color-text);
  cursor: pointer;
  transition: transform 150ms ease-out, opacity 150ms ease-out, border-color 150ms ease-out, box-shadow 150ms ease-out;
}

.graph-node:hover,
.graph-node.is-active {
  border-color: var(--node-color);
  box-shadow: 0 0 0 2px var(--color-selection), 0 0 20px var(--color-selection);
}

.graph-node:hover,
.graph-node.is-selected {
  transform: translate(-50%, -50%) scale(1.06);
}

.graph-node.is-dimmed {
  opacity: 0.3;
}

.graph-node--identity {
  width: 148px;
  height: 148px;
  align-content: center;
  border-width: 1.5px;
  border-radius: 50%;
  background: var(--color-card);
  text-align: center;
}

.graph-node--identity:hover,
.graph-node--identity.is-active {
  box-shadow: 0 0 0 2px var(--color-selection), 0 0 28px var(--color-selection);
}

.graph-node__title {
  font-size: 21px;
  font-weight: 630;
  letter-spacing: -0.04em;
}

.graph-node__subtitle {
  margin-top: 2px;
  color: var(--color-text-secondary);
  font-size: 12px;
}

.graph-node__meta {
  margin-top: 8px;
  color: var(--color-text-muted);
  font-size: 9px;
  line-height: 1.35;
}

.graph-node--domain {
  width: 94px;
  height: 94px;
  padding: 10px;
  border-width: 1.4px;
  border-radius: 50%;
  background: var(--color-card);
  text-align: center;
}

.graph-node--domain .graph-node__label {
  max-width: 76px;
  color: var(--color-text);
  font-size: 11px;
  font-weight: 620;
  line-height: 1.15;
}

.graph-node--skill {
  min-width: 38px;
  max-width: 124px;
  min-height: 32px;
  padding: 5px 8px;
  border-radius: 16px;
  background: var(--color-page);
  text-align: center;
}

.graph-node--skill .graph-node__label {
  color: var(--color-text-secondary);
  font-size: 9px;
  line-height: 1.1;
}

.graph-corner {
  position: absolute;
  z-index: 3;
  width: 26px;
  height: 26px;
  border-color: var(--color-text-muted);
  opacity: 0.65;
  pointer-events: none;
}

.graph-corner--top {
  top: 14px;
  left: 14px;
  border-top: 1px solid;
  border-left: 1px solid;
}

.graph-corner--bottom {
  right: 14px;
  bottom: 14px;
  border-right: 1px solid;
  border-bottom: 1px solid;
}

.inspector-selection {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 18px 0 0;
  padding: 14px 0;
  border-top: 1px solid var(--color-border-soft);
  border-bottom: 1px solid var(--color-border-soft);
}

.inspector-selection-dot {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  border: 1px solid var(--inspector-color);
  border-radius: 50%;
  box-shadow: 0 0 16px var(--color-selection);
}

.inspector-selection h3 {
  margin: 0;
  font-size: 17px;
  font-weight: 620;
  letter-spacing: -0.02em;
}

.inspector-selection p {
  margin: 2px 0 0;
  color: var(--color-text-secondary);
  font-size: 11px;
}

.inspector-value {
  margin: 0;
  color: var(--color-text-secondary);
  font-size: 11px;
  line-height: 1.6;
}

.inspector-value--muted {
  color: var(--color-text-muted);
}

.related-list {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
}

.related-list span {
  padding: 3px 6px;
  border: 1px solid var(--color-border);
  border-radius: 5px;
  color: var(--color-text-secondary);
  font-size: 9px;
  line-height: 1.2;
}

.mobile-sheet .sheet-fields > .panel-title-row,
.mobile-sheet .sheet-fields > .panel-intro {
  display: none;
}

@media (max-width: 767px) {
  .graph-canvas {
    overflow: auto;
    display: block;
  }

  .graph-stage {
    width: 820px;
    min-height: 465px;
  }

  .graph-node--identity {
    width: 126px;
    height: 126px;
  }

  .graph-node__title {
    font-size: 18px;
  }

  .graph-node--domain {
    width: 78px;
    height: 78px;
  }

  .graph-node--domain .graph-node__label {
    max-width: 64px;
    font-size: 9px;
  }

  .graph-node--skill {
    min-width: 30px;
    min-height: 26px;
    max-width: 104px;
    padding: 4px 6px;
  }

  .graph-node--skill .graph-node__label {
    font-size: 8px;
  }
}
