* {
  padding:0;
  margin:0;
  box-sizing:border-box;
}

:root {
  --fg:light-dark(#292222, #e0e0e8);
  --bg:light-dark(#fff, #1c1c1f);
  --primary:light-dark(#c25, #69f);
  --fg-faded:light-dark(#a71, #8090b3);
  --bg-faded:light-dark(#fde, #444460);
  --font:KohSantepheap, serif;
  --rule:2px;

  font:13pt / 1.5 var(--font);
  hyphens:auto;
  color:var(--fg);
  background:var(--bg);
  counter-reset:fig 1;
}

body {
  max-width:900px;
  min-height:100vh;
  padding:24px;
  margin-inline:auto;
  display:grid;
  grid-template:
    "head" min-content
    "nav"  min-content
    "main" 1fr
    "foot" min-content
  / 1fr;
}

header {
  --kf-offset:0.12s;
  --kf-delay:2s;
  grid-area:head;
  text-align:center;
}

@media (width > 900px) {
  header {
    text-align:left;
  }
}

header h1 {
  margin-bottom:0;
}

header h1 span {
  font-size:2rem;
  text-transform:uppercase;
  letter-spacing:0.1em;
  animation:sparkle 0.3s;
}

header h1 a {
  color:var(--primary);
  text-decoration:none;
}

header h1 a:hover::after {
  content:none;
}

header h2 {
  border:none;
  color:var(--fg-faded);
  margin-top:0;
}

/* C */ header h1 span:nth-child(1) {animation-delay:calc(0 * var(--kf-offset) + var(--kf-delay));}
/* space */
/* W */ header h1 span:nth-child(3) {animation-delay:calc(1 * var(--kf-offset) + var(--kf-delay));}
/* i */ header h1 span:nth-child(4) {animation-delay:calc(2 * var(--kf-offset) + var(--kf-delay));}
/* e */ header h1 span:nth-child(5) {animation-delay:calc(3 * var(--kf-offset) + var(--kf-delay));}
/* b */ header h1 span:nth-child(6) {animation-delay:calc(4 * var(--kf-offset) + var(--kf-delay));}
/* e */ header h1 span:nth-child(7) {animation-delay:calc(5 * var(--kf-offset) + var(--kf-delay));}

nav {
  grid-area:nav;
  margin-block:16px;
  text-align:center;
}

nav h3 {
  text-align:center;
  color:var(--fg-faded);
}

main {
  grid-area:main;
  animation:fadein 0.5s;
}

footer {
  grid-area:foot;
  font-size:0.8rem;
  width:fit-content;
  margin-inline:auto;
  padding-top:64px;
}

@media (width > 900px) {
  body {
    grid-template:
      "head head" min-content
      "main nav" 1fr
      "foot foot" min-content
    / 1fr min-content;
  }

  nav {
    border-left:var(--rule) solid var(--bg-faded);
    margin-left:16px;
    padding-left:16px;
    text-align:left;
  }

  nav form {
    position:sticky;
    top:8px;
  }

  nav button {
    display:block;
    margin-block:8px;
    width:100%;
  }
}

/* Element ----------------------------------------------------------------- */

ul, ol {
  margin-left:4ch;
}

p + p {
  margin-top:16px;
}

ul > li, ol > li {
  margin-top:16px;
}

@media (width > 900px) {
  p {
    text-align:justify;
  }
}

inline-list {
  list-style:none;
}

inline-list li::before {
  content:'* ';
  color:var(--fg-faded);
}

@media (width > 900px) {
  inline-list li {
    display:inline;
  }

  inline-list li::before {
    content:' // ';
  }

  inline-list li:first-child::before {
    content:'';
  }
}

h1, h2, h3 {
  font-size:1rem;
  font-weight:normal;
  line-height:1.2;
}

h1 {
  font-size:1.5rem;
  margin-top:32px;
  margin-bottom:8px;
  color:var(--primary);
}

h2 {
  font-size:1.2rem;
  border-top:var(--rule) solid var(--bg-faded);
  padding-top:8px;
  margin-top:16px;
  margin-bottom:12px;
}

button {
  border:var(--rule) solid var(--bg-faded);
  border-radius:4px;
  padding:4px 8px;
  color:var(--fg);
  background:var(--bg-faded);
  font-family:var(--font-family);
  font-size:0.9rem;
}

button:hover {
  background:none;
  cursor:pointer;
}

button:active {
  border-color:var(--fg-faded);
  background:var(--fg-faded);
  color:var(--bg);
}

a {
  color:var(--primary);
  text-decoration:none;
}

a:hover {
  position:relative;
}

a:hover::after {
  position:absolute;
  top:1.3rem;
  left:0;
  white-space:pre;
  content:attr(href);
  padding:4px 8px;
  border-radius:4px;
  background:var(--bg-faded);
  font-weight:normal;
  color:var(--fg);
}

img {
  max-width:100%;
  border-radius:16px;
}

figure {
  text-align:center;
}

figcaption {
  text-align:left;
  font-size:0.8rem;
  max-width:90%;
  width:fit-content;
  margin-inline:auto;
}

img + figcaption::before {
  content:"fig "counter(fig)": ";
  color:var(--fg-faded);
}

project-profile {
  display:block;
  margin:32px 16px;
}

project-name {
  font-weight:bold;
}

project-tagline::before {
  content:' — ';
}

project-link {
  display:block;
}

project-link::before {
  content:'link(s): ';
  color:var(--fg-faded);
}

project-lang {
  display:block;
}

project-lang::before {
  content:'lang(s): ';
  color:var(--fg-faded);
}

project-desc {
  display:block;
}

personal-profile {
  display:grid;
  gap:16px;
}

@media (width > 900px) {
  personal-profile {
    grid-template:"desc img";
  }
}

/* Animations -------------------------------------------------------------- */

@keyframes sparkle {
  0% {opacity:1;}
  50% {opacity:0.5;}
  100% {opacity:1;}
}

@keyframes fadein {
  from {opacity:0;}
  to   {opacity:1;}
}

/* Fonts ------------------------------------------------------------------- */

@font-face {
  font-family:KohSantepheap;
  src:url('/fonts/KohSantepheap-Regular.ttf');
  font-display:swap;
}

@font-face {
  font-family:KohSantepheap;
  font-weight:bold;
  src:url('/fonts/KohSantepheap-Bold.ttf');
  font-display:swap;
}
