/* src/components/language-bullets.css */
ul .lang {
  list-style: none;
  padding: 0;
  margin: 0;
}
.lang-list {
  padding: 0;
  margin: 0;
  list-style: none;
}
.lang-list li.lang {
  display: inline;
  margin: 0;
}
.lang-list li.lang + li.lang {
  margin-left: 0.65em;
}
li.lang::before {
  display: inline-block;
  width: 1em;
  margin-left: -1em;
  content: "\2022";
  color: #888;
  transform: scale(1.5, 1.5);
}
.lang-list li.lang::before {
  width: auto;
  margin: 0 0.35em 0 0;
  transform: scale(1.2);
}
li.js::before {
  color: #f1e05a;
}
.lang-list li.ts::before,
li.ts::before {
  color: #3178c6;
}
li.npm::before {
  color: #cb3837;
}
li.archlinux::before {
  color: #1793d1;
}
li.socket::before {
  color: #9762fc;
}
li.html::before {
  color: #e34c26;
}
li.go::before {
  color: #00ADD8;
}
li.rust::before {
  color: #dea584;
}
li.python::before {
  color: #3572A5;
}
li.css::before {
  color: #563d7c;
}
li.sh::before {
  color: #89e051;
}
li.objc::before {
  color: #6866fb;
}
li.cpp::before {
  color: #f34b7d;
}
li.docker::before {
  color: #384d54;
}
li.twitter::before {
  color: rgb(76, 159, 235);
}
li.node::before {
  color: #339933;
}
li.next::before {
  color: #000;
}
li.postgresql::before {
  color: #336791;
}
li.redis::before {
  color: #d82c20;
}
li.kafka::before {
  color: #231f20;
}
li.nats::before {
  color: #27aae1;
}
li.kubernetes::before {
  color: #326ce5;
}
li.gcp::before {
  color: #4285f4;
}
li.grafana::before {
  color: #f46800;
}
li.otel::before {
  color: #f5a800;
}
li.oauth::before {
  color: #eb5424;
}
li.aws::before {
  color: #ff9900;
}
li.electron::before {
  color: #47848f;
}
li.graphql::before {
  color: #e10098;
}
li.github::before {
  color: #6e40c9;
}
li.ethereum::before {
  color: #627eea;
}
li.hypercore::before {
  color: #3b8f70;
}
li.crypto::before {
  color: #8b6f47;
}
li.jenkins::before {
  color: #d33833;
}
li.react::before {
  color: #61dafb;
}
li.docker::before {
  color: #2496ed;
}
li.datadog::before {
  color: #632ca6;
}
li.ruby::before {
  color: #701516;
}
li.mysql::before {
  color: #4479a1;
}
li.webpack::before {
  color: #8dd6f9;
}
li.svg::before {
  color: #ffb13b;
}
li.dotnet::before {
  color: #512bd4;
}
li.express::before {
  color: #666;
}
li.qt::before {
  color: #41cd52;
}
li.qml::before {
  color: #41cd52;
}
li.django::before {
  color: #092e20;
}
li.linux::before {
  color: #fcc624;
}
li.cluster::before {
  color: #555;
}
li.arduino::before {
  color: #00979d;
}
li.fpga::before {
  color: #759b24;
}
li.labview::before {
  color: #ffdb00;
}
li.solidworks::before {
  color: #e2231a;
}
li.unix::before {
  color: #555;
}
li.radio-astronomy::before {
  color: #7c6fcb;
}
li.vacuum::before {
  color: #607d8b;
}
li.lasers::before {
  color: #e53935;
}
li.terraform::before {
  color: #7b42bc;
}

/* src/resume/style.css */
.subdue {
  color: var(--accent-foreground);
}
.markdown-body h1 {
  letter-spacing: -0.035em;
}
.markdown-body .resume-photo {
  display: block;
  float: right;
  width: 7rem;
  height: 7rem;
  margin: 0 0 1rem 1.5rem;
  border: 1px solid var(--accent-midground);
  border-radius: 50%;
  object-fit: cover;
}
.markdown-body .resume-contact {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem 1.25rem;
  max-width: none;
  padding: 0;
  margin-block: 1.25rem 0;
  list-style: none;
  font-family: var(--system-sans);
  font-size: 0.85rem;
}
.markdown-body .resume-contact > li {
  max-width: 100%;
  margin: 0;
  overflow-wrap: anywhere;
}
.markdown-body h2 {
  margin-block: 2.75rem 1rem;
  padding-block-end: 0.65rem;
  border-block-end: 1px solid var(--accent-midground);
  break-after: avoid;
}
.markdown-body h2:not(.job-heading) {
  font-family: var(--system-sans);
  font-size: 0.9rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.markdown-body .job-heading,
.markdown-body .job-role {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.35rem 1.5rem;
}
.markdown-body .job-heading {
  align-items: center;
  font-size: clamp(1.2rem, 3vw, 1.55rem);
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -0.02em;
}
.job-employer {
  display: flex;
  flex: 1 1 20rem;
  align-items: center;
  gap: 0.6rem;
  min-width: 0;
}
.job-employer > a:not(.job-logo) {
  min-width: 0;
  color: var(--text);
  text-decoration: none;
}
.job-employer > a:not(.job-logo):is(:hover, :focus-visible) {
  color: var(--link-text);
  text-decoration: underline;
  text-underline-offset: 0.15em;
}
.job-logo {
  display: inline-flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
}
.job-logo img {
  display: block;
  margin: 0;
}
.markdown-body .job-role {
  margin-block: 1.5rem 0.65rem;
  font-family: var(--system-sans);
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.45;
  break-after: avoid;
}
.markdown-body .job-heading + .job-role {
  margin-block-start: 1rem;
}
.markdown-body .job-dates {
  flex-shrink: 0;
  color: var(--accent-foreground);
  font-family: var(--system-sans);
  font-size: 0.8rem;
  font-weight: 400;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0;
  white-space: nowrap;
}
.markdown-body .job-role:has(+ h4) {
  margin-block-end: 0;
}
.markdown-body h3 + h4 {
  margin-block: 0.2rem 0.75rem;
  color: var(--accent-foreground);
  font-family: var(--system-sans);
  font-size: 0.85rem;
  font-weight: 400;
  line-height: 1.5;
  break-after: avoid;
}
.markdown-body h3 + h4 small {
  font-size: inherit;
}
.markdown-body h3 + h4 a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 0.15em;
}
.markdown-body h3 + h4 a:is(:hover, :focus-visible) {
  color: var(--link-text);
}
.markdown-body .resume-tech {
  display: grid;
  grid-template-columns: 1.5rem minmax(0, 1fr);
  gap: 0.35rem;
  align-items: start;
  margin-block: 0.35rem 0.6rem;
  color: var(--accent-foreground);
  font-family: var(--font-code);
  font-size: 0.72rem;
  line-height: 1.55;
}
.markdown-body .resume-tech-label {
  display: inline-block;
  border-bottom: 1px solid var(--accent-midground);
  padding: 0.25em 0.35em;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  writing-mode: vertical-rl;
  transform: rotate(180deg);
}
.markdown-body .resume-tech .lang-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.15rem 0.75rem;
  margin: 0;
  padding: 0;
  font: inherit;
}
.markdown-body .resume-tech .lang-list li.lang {
  padding-left: 1em;
  white-space: nowrap;
}
@media screen and (max-width: 40rem) {
  .markdown-body .resume-photo {
    width: 5.5rem;
    height: 5.5rem;
    margin-left: 1rem;
  }
  .markdown-body .job-heading,
  .markdown-body .job-role {
    flex-direction: column;
    align-items: stretch;
    gap: 0.25rem;
  }
  .job-employer {
    flex-basis: auto;
  }
}
@media print {
  .markdown-body h2 {
    margin-block-start: 1.75rem;
  }
  .markdown-body .job-employer {
    flex-basis: auto;
  }
  .subdue,
  .header .subtitle,
  .portfolio figcaption,
  h1 small,
  h2 small,
  h3 small,
  h4 small,
  h5 small,
  h6 small {
    color: var(--accent-foreground);
  }
  .avatar {
    height: 5em;
    width: 5em;
  }
}
/*# sourceMappingURL=style-6MKMPLE5.css.map */
