/* git.ps3.world: same palette as ps3.world and the archive subsites */
:root{
  --bg:#05070d; --surface:#0b0f19; --card:#10141f; --card-2:#161b28;
  --border:#1f2533; --border-2:#2a3245;
  --text:#eef1f7; --text-2:#c7cedc; --text-3:#a2acc0;
  --ps-blue:#2b8fff; --ps-blue-2:#4aa3ff; --ps-sky:#4ad9ff; --ps-sky-2:#7fe6ff;
  --mono:ui-monospace,"Cascadia Code","SF Mono",Consolas,"Liberation Mono",Menlo,monospace;
  --radius:14px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;display:flex;flex-direction:column;background:var(--bg);color:var(--text-2);
  font:15px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  background-image:radial-gradient(1200px 520px at 50% -180px,rgba(43,143,255,.16),transparent 70%),radial-gradient(700px 340px at 100% 0,rgba(74,217,255,.06),transparent 70%);
  background-repeat:no-repeat}
a{color:var(--ps-sky);text-decoration:none}
a:hover{color:var(--ps-sky-2);text-decoration:underline}
code,kbd{font-family:var(--mono);font-size:.9em}
.wrap{width:100%;max-width:1200px;margin:0 auto;padding:0 20px}
main{flex:1;padding:24px 0 56px}
main:focus{outline:none}
.skip-link{position:absolute;left:-999px;top:8px;z-index:99;padding:8px 14px;border-radius:8px;background:var(--ps-blue);color:#fff}
.skip-link:focus{left:8px}
.muted{color:var(--text-3)}
.small{font-size:13px}
.ext-mark{margin-left:3px;font-size:.8em;opacity:.7}

/* header */
header.site{position:sticky;top:0;z-index:20;background:rgba(5,7,13,.86);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}
.hd{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px}
.logo{display:flex;align-items:center;gap:12px}
.logo:hover{text-decoration:none}
.logo img{display:block;height:30px;width:auto}
.logo-sub{padding:3px 10px;border:1px solid var(--border-2);border-radius:999px;color:var(--text);font-size:12.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;background:linear-gradient(180deg,rgba(43,143,255,.18),rgba(43,143,255,.04))}
nav.main{display:flex;gap:4px;flex-wrap:wrap}
nav.main a{padding:7px 12px;border-radius:999px;color:var(--text-2);font-size:14.5px;font-weight:600}
nav.main a:hover{background:var(--card-2);color:var(--text);text-decoration:none}

/* hero (index) */
.hero{padding:28px 0 8px}
.hero h1,.repo-head h1{margin:0 0 6px;color:var(--text);font-size:clamp(28px,4vw,40px);line-height:1.15;letter-spacing:-.5px}
.lede{margin:0 0 18px;max-width:720px;color:var(--text-3);font-size:16.5px}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:22px 0 8px}
.stat{padding:14px 16px;border:1px solid var(--border);border-radius:var(--radius);background:linear-gradient(180deg,var(--card-2),var(--card))}
.stat b{display:block;color:var(--text);font-size:24px;line-height:1.2;font-variant-numeric:tabular-nums}
.stat span{color:var(--text-3);font-size:13px}
.section-title{margin:30px 0 14px;color:var(--text);font-size:20px}
.section-title .count{margin-left:6px;padding:2px 9px;border-radius:999px;background:var(--card-2);color:var(--text-3);font-size:13px;vertical-align:2px}

/* project cards */
.repo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.repo-card{display:flex;flex-direction:column;gap:10px;padding:18px;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);color:var(--text-2);transition:border-color .15s,transform .15s,box-shadow .15s}
.repo-card:hover{text-decoration:none;border-color:var(--ps-blue-2);transform:translateY(-2px);box-shadow:0 10px 30px rgba(0,0,0,.35),0 0 0 1px rgba(43,143,255,.2)}
.rc-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.rc-head strong{color:var(--text);font-size:17px;word-break:break-word}
.rc-desc{color:var(--text-3);font-size:14px;flex:1}
.rc-meta{display:flex;flex-wrap:wrap;gap:6px 14px;color:var(--text-3);font-size:12.5px}
.rc-meta i,.lang-legend i,.file-meta i{display:inline-block;width:10px;height:10px;margin-right:6px;border-radius:50%;vertical-align:-1px}
.rc-go{color:var(--ps-sky);font-size:13.5px;font-weight:700}
.chip{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border:1px solid var(--border-2);border-radius:999px;color:var(--text-3);font-size:12px;white-space:nowrap}
.chip svg{width:12px;height:12px}

/* language bar */
.langbar{display:flex;height:8px;overflow:hidden;border-radius:999px;background:var(--card-2);gap:2px}
.langbar.sm{height:5px}
.langbar span{display:block;min-width:2px}
.lang-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:12px 0 0;padding:0;list-style:none;font-size:13px;color:var(--text-2)}
.lang-legend span{color:var(--text-3)}

/* crumbs */
.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin:0 0 14px;font-size:14px;color:var(--text-3)}
.crumbs a,.crumbs span{word-break:break-all}
.crumbs > * + *::before{content:"/";margin-right:6px;color:var(--border-2)}
.crumbs span[aria-current]{color:var(--text);font-weight:700}

/* repo header + bar */
.repo-head{margin:0 0 14px}
.repo-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin:0 0 16px;padding-bottom:12px;border-bottom:1px solid var(--border)}
.tabs{display:flex;gap:4px}
.tab{display:inline-flex;align-items:center;gap:7px;padding:7px 14px;border-radius:999px;color:var(--text-2);font-weight:600;font-size:14px}
.tab svg{width:15px;height:15px;opacity:.8}
.tab b{padding:0 7px;border-radius:999px;background:var(--card-2);color:var(--text-3);font-size:12px}
.tab:hover{background:var(--card-2);color:var(--text);text-decoration:none}
.tab.is-on{background:var(--ps-blue);color:#fff}
.tab.is-on b{background:rgba(255,255,255,.2);color:#fff}
.repo-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border:1px solid var(--border-2);border-radius:10px;background:var(--card-2);color:var(--text);font:inherit;font-size:14px;font-weight:600;cursor:pointer}
.btn svg{width:15px;height:15px}
.btn:hover{border-color:var(--ps-blue-2);color:#fff;text-decoration:none}
.btn.sm{padding:5px 11px;font-size:13px;border-radius:8px}
.goto{position:relative}
.goto input{width:240px;padding:8px 34px 8px 12px;border:1px solid var(--border-2);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;font-size:14px}
.goto input:focus{outline:none;border-color:var(--ps-blue);box-shadow:0 0 0 3px rgba(43,143,255,.25)}
.goto input::-webkit-search-cancel-button{display:none}
.goto input:focus + kbd,.goto input:not(:placeholder-shown) + kbd{display:none}
.goto kbd{position:absolute;right:9px;top:50%;transform:translateY(-50%);padding:0 6px;border:1px solid var(--border-2);border-radius:5px;color:var(--text-3);font-size:11px;pointer-events:none}
.goto-results{position:absolute;right:0;top:calc(100% + 6px);z-index:30;width:min(520px,90vw);max-height:360px;overflow:auto;margin:0;padding:6px;list-style:none;border:1px solid var(--border-2);border-radius:12px;background:var(--card);box-shadow:0 18px 50px rgba(0,0,0,.55)}
.goto-results a{display:block;padding:7px 10px;border-radius:8px;color:var(--text-2);font-family:var(--mono);font-size:13px;word-break:break-all}
.goto-results a b{color:var(--ps-sky);font-weight:700}
.goto-results a:hover,.goto-results a.is-on{background:var(--card-2);color:var(--text);text-decoration:none}
.goto-results li.none{padding:8px 10px;color:var(--text-3);font-size:13px}

/* layout */
.repo-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}
.repo-main{display:flex;flex-direction:column;gap:16px;min-width:0}
.side{display:flex;flex-direction:column;gap:14px}
.box{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);overflow:hidden}
.box.pad,.pad{padding:16px 18px}
.box + .box{margin-top:16px}
.repo-main .box + .box{margin-top:0}
.side-title{margin:0 0 8px;color:var(--text);font-size:14px;letter-spacing:.3px}
.side p{margin:0 0 10px;font-size:14px}
.facts{margin:6px 0 0;padding:0;list-style:none;font-size:13.5px}
.facts li{display:flex;justify-content:space-between;padding:5px 0;border-top:1px solid var(--border)}
.facts span{color:var(--text-3)}
.facts b{color:var(--text);font-variant-numeric:tabular-nums}
.commit-msg{color:var(--text);font-weight:600}
.link{font-weight:600}

/* file list */
.files{width:100%;border-collapse:collapse;font-size:14.5px}
.files td{padding:9px 14px;border-top:1px solid var(--border)}
.files tr:first-child td{border-top:0}
.files tr:hover td{background:rgba(43,143,255,.05)}
.files .ic{width:34px;padding-right:0;color:var(--text-3)}
.files .ic svg{display:block;width:16px;height:16px}
.files .ic.dir{color:var(--ps-sky)}
.files .nm a{color:var(--text);word-break:break-all}
.files .nm a:hover{color:var(--ps-sky-2)}
.files .up a{color:var(--text-3);font-weight:700}
.files .sz{width:120px;color:var(--text-3);font-size:13px;text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.tag{margin-left:6px;padding:1px 7px;border:1px solid var(--border-2);border-radius:999px;color:var(--text-3);font-size:11.5px;font-style:normal}

/* readme / markdown */
.box-title{display:flex;align-items:center;gap:8px;margin:0;padding:11px 16px;border-bottom:1px solid var(--border);background:var(--card-2);font-size:14px}
.box-title svg{width:15px;height:15px;color:var(--text-3)}
.box-title a{color:var(--text)}
.md{padding:18px 26px 22px;color:var(--text-2);font-size:15.5px;line-height:1.7;overflow-wrap:anywhere}
.md.pad{padding:18px 26px 22px}
.md h1,.md h2,.md h3,.md h4{color:var(--text);line-height:1.3;margin:1.4em 0 .5em}
.md h1{font-size:28px;padding-bottom:.3em;border-bottom:1px solid var(--border)}
.md h2{font-size:22px;padding-bottom:.3em;border-bottom:1px solid var(--border)}
.md h3{font-size:18px}
.md > :first-child{margin-top:0}
.md img{max-width:100%;height:auto;border-radius:8px}
.md code{padding:2px 6px;border-radius:6px;background:var(--card-2);color:var(--text)}
.md pre{padding:14px 16px;overflow:auto;border:1px solid var(--border);border-radius:10px;background:var(--surface)}
.md pre code{padding:0;background:none;font-size:13.5px;line-height:1.55}
.md blockquote{margin:0 0 1em;padding:2px 16px;border-left:3px solid var(--ps-blue);color:var(--text-3)}
.md table{border-collapse:collapse;margin:0 0 1em;display:block;overflow:auto}
.md th,.md td{padding:7px 12px;border:1px solid var(--border-2)}
.md th{background:var(--card-2);color:var(--text)}
.md hr{border:0;border-top:1px solid var(--border);margin:1.6em 0}
.md-plain{margin:0;padding:18px;white-space:pre-wrap;font-family:var(--mono);font-size:13.5px}

/* file view */
.file-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:9px 14px;border-bottom:1px solid var(--border);background:var(--card-2)}
.file-meta{display:flex;flex-wrap:wrap;gap:4px 16px;color:var(--text-3);font-size:13px}
.file-actions{display:flex;align-items:center;gap:8px}
.seg{display:flex;padding:2px;border:1px solid var(--border-2);border-radius:9px}
.seg button{padding:4px 11px;border:0;border-radius:7px;background:none;color:var(--text-3);font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.seg button.is-on{background:var(--ps-blue);color:#fff}
.code-wrap{overflow:auto}
.code{border-collapse:collapse;width:100%;font-family:var(--mono);font-size:13px;line-height:1.6;tab-size:4;-moz-tab-size:4}
.code td{padding:0;vertical-align:top}
.code tr{scroll-margin-top:90px}
.code .ln{position:sticky;left:0;width:1%;min-width:56px;padding:0 14px 0 12px;background:var(--card);border-right:1px solid var(--border);text-align:right;user-select:none;-webkit-user-select:none}
.code .ln a{color:#5d6780;text-decoration:none}
.code .ln a:hover{color:var(--text)}
.code .lc{padding:0 16px;white-space:pre;color:#d7dce8}
.code tr:first-child td{padding-top:10px}
.code tr:last-child td{padding-bottom:12px}
.code tr:target td,.code tr.hl td{background:rgba(255,214,102,.10)}
.code tr:target .ln,.code tr.hl .ln{background:#2a2614}
.code tr:target .ln a,.code tr.hl .ln a{color:#ffd666}
.img-view{display:grid;place-items:center;padding:24px;background:repeating-conic-gradient(#121726 0 25%,#0d111c 0 50%) 0 0/20px 20px}
.img-view img{max-width:100%;height:auto;image-rendering:auto}
.empty{margin:0;padding:34px 18px;color:var(--text-3);text-align:center}

/* syntax colours */
.t-c{color:#6b768c;font-style:italic}
.t-s{color:#a5e07a}
.t-n{color:#f0b27a}
.t-k{color:#6cb6ff;font-weight:600}
.t-t{color:#4ad9ff}
.t-p{color:#c792ea}
.t-f{color:#ffd479}
.t-v{color:#ff9e64}
.t-m{color:#f78c9c}
.t-a{color:#ffd479}

/* commits */
.day{margin:22px 0 8px;color:var(--text-3);font-size:13px;font-weight:700;letter-spacing:.5px;text-transform:uppercase}
.day:first-of-type{margin-top:4px}
.commits{margin:0;padding:0;list-style:none}
.commits li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 16px;padding:12px 16px;border-top:1px solid var(--border)}
.commits li:first-child{border-top:0}
.c-msg{color:var(--text);font-weight:600;overflow-wrap:anywhere}
.c-meta{display:flex;align-items:center;gap:12px;color:var(--text-3);font-size:13px}
.c-meta code{padding:2px 7px;border:1px solid var(--border-2);border-radius:6px;color:var(--ps-sky)}

/* footer */
footer.site{border-top:1px solid var(--border);background:var(--surface);padding:26px 0 30px;font-size:13.5px;color:var(--text-3)}
.footer-links{display:flex;flex-wrap:wrap;gap:6px 18px;margin-bottom:12px}
.footer-links a{color:var(--text-2)}
.footer-note{margin:0 0 4px}
.footer-meta{margin:0;font-size:12px;opacity:.8}

@media (max-width:900px){
  .repo-layout{grid-template-columns:1fr}
  .side{order:-1}
  .side .box:not(:first-child){display:none}
}
@media (max-width:640px){
  .wrap{padding:0 14px}
  .hd{min-height:56px}
  .logo img{height:24px}
  nav.main a:not(:first-child){display:none}
  .stats{grid-template-columns:repeat(2,1fr)}
  .repo-grid{grid-template-columns:1fr}
  .repo-actions,.goto,.goto input{width:100%}
  .files .sz{width:auto}
  .md,.md.pad{padding:16px}
  .code{font-size:12px}
  .code .ln{min-width:44px;padding:0 8px}
}
@media (prefers-reduced-motion:reduce){.repo-card{transition:none}.repo-card:hover{transform:none}}
