/* ============================================================
   porbanderwala.cloud — terminal UI
   a full-viewport TUI app (lazygit / htop lineage)
   self-hosted fonts · auto light/dark · zero dependencies
   ============================================================ */

@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400;
  font-display:swap;src:url("fonts/JetBrainsMono-Regular.woff2") format("woff2");}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:500;
  font-display:swap;src:url("fonts/JetBrainsMono-Medium.woff2") format("woff2");}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:700;
  font-display:swap;src:url("fonts/JetBrainsMono-Bold.woff2") format("woff2");}

/* ---------- theme tokens ---------- */
:root{
  --bg:#08090c;          /* backdrop behind the app frame */
  --term:#0d0f15;        /* pane fill */
  --term-2:#11141c;      /* raised fill */
  --line:#2b3040;        /* idle borders */
  --ink:#d4d7d0;         /* body text */
  --dim:#717682;         /* secondary text */
  --accent:#5be58c;      /* phosphor green */
  --accent-deep:#0c1f14; /* text on accent */
  --accent-soft:rgba(91,229,140,.12);
  --amber:#e3ad5c;       /* alpha */
  --cyan:#62bcdb;        /* beta */
  --violet:#b1a0f6;
  color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:#cdcabc; --term:#f6f4ec; --term-2:#ecebe0; --line:#bdb9a8; --ink:#26261f;
  --dim:#736f5f; --accent:#1d7a44; --accent-deep:#f6f4ec; --accent-soft:rgba(29,122,68,.13);
  --amber:#8a5d18; --cyan:#226179; --violet:#5a44c0; color-scheme:light;
}
@media (prefers-color-scheme:light){
  :root:not([data-theme]){
    --bg:#cdcabc; --term:#f6f4ec; --term-2:#ecebe0; --line:#bdb9a8; --ink:#26261f;
    --dim:#736f5f; --accent:#1d7a44; --accent-deep:#f6f4ec; --accent-soft:rgba(29,122,68,.13);
    --amber:#8a5d18; --cyan:#226179; --violet:#5a44c0; color-scheme:light;
  }
}

/* ---------- base ---------- */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  background:var(--bg);color:var(--ink);
  font-family:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:13.5px;line-height:1.6;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  font-feature-settings:"calt";
}
a{color:inherit}
b,strong{font-weight:700}

.skip{position:absolute;left:-9999px;top:auto}
.skip:focus{left:10px;top:10px;z-index:90;background:var(--term);color:var(--accent);
  border:1px solid var(--accent);padding:7px 11px}

/* the TUI replaces the fallback only once it has actually rendered,
   so a JS failure leaves the readable fallback document in place */
#app{display:none}
.tui-ready #app{display:flex}
.tui-ready #fallback{display:none}

/* ============================================================
   no-JS fallback document
   ============================================================ */
#fallback{max-width:760px;margin:0 auto;padding:42px 22px 90px}
#fallback h1{font-size:22px;font-weight:700}
#fallback [data-tagline]{color:var(--accent);margin-bottom:18px}
#fallback h2{font-size:14px;color:var(--accent);margin:32px 0 10px;
  border-bottom:1px solid var(--line);padding-bottom:5px;text-transform:lowercase}
#fallback h3{font-size:14px;margin-top:18px}
#fallback h3 span{color:var(--dim);font-weight:400}
#fallback article{margin-bottom:14px}
#fallback p{margin:4px 0;color:var(--ink)}
#fallback [data-detail],#fallback [data-body]{color:var(--dim)}
#fallback a{color:var(--accent);text-underline-offset:3px}
#fallback ul{list-style:none;margin-top:6px}
#fallback li{padding:3px 0}
#fallback [data-footer]{margin-top:40px;color:var(--dim);font-size:12px}

/* ============================================================
   TUI app
   ============================================================ */
#app{
  height:100vh;height:100dvh;
  flex-direction:column;gap:7px;
  padding:9px;font-size:13.5px;
  animation:appin .22s ease both;
}
@keyframes appin{from{opacity:0}to{opacity:1}}

/* ---- title bar ---- */
.tui-top{display:flex;align-items:center;gap:10px;padding:2px 6px;color:var(--dim);font-size:12.5px}
.tui-top .brand{color:var(--accent);font-weight:700}
.tui-top .brand::before{content:"▌ "}
.tui-top .sub{color:var(--dim)}
.tui-top .spacer{flex:1}
.tui-top .clock{color:var(--dim);font-variant-numeric:tabular-nums}
.theme-btn{
  font:inherit;font-size:13px;cursor:pointer;color:var(--dim);
  background:transparent;border:1px solid var(--line);border-radius:0;
  padding:2px 8px;transition:color .14s,border-color .14s;
}
.theme-btn:hover{color:var(--accent);border-color:var(--accent)}
.theme-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}

/* ---- main split ---- */
.tui-main{flex:1;display:flex;gap:7px;min-height:0}

.pane{
  position:relative;
  border:1px solid var(--line);
  background:var(--term);
  min-height:0;
  transition:border-color .14s;
}
.pane.is-focus{border-color:var(--accent)}
.pane-label{
  position:absolute;top:-7px;left:11px;z-index:2;
  background:var(--bg);padding:0 6px;
  font-size:11px;color:var(--dim);white-space:nowrap;letter-spacing:.02em;
}
.pane.is-focus .pane-label{color:var(--accent)}
.pane-scroll{height:100%;overflow:auto;scrollbar-width:thin}
.pane-scroll::-webkit-scrollbar{width:8px;height:8px}
.pane-scroll::-webkit-scrollbar-thumb{background:var(--line)}

.pane-nav{width:252px;flex-shrink:0}
.pane-detail{flex:1}
.pane-nav .pane-scroll{padding:13px 0 10px}
.pane-detail .pane-scroll{padding:18px 20px 22px}

/* ---- nav ---- */
.nav-grp{
  padding:13px 14px 4px;color:var(--dim);font-size:10.5px;
  letter-spacing:.13em;text-transform:uppercase;
}
.nav-grp:first-child{padding-top:0}
.nav-grp .ct{color:var(--line)}
.nav-row{
  display:flex;align-items:baseline;gap:8px;
  padding:3px 14px 3px 22px;cursor:pointer;position:relative;
  white-space:nowrap;
}
.nav-row .nm{flex:1;overflow:hidden;text-overflow:ellipsis}
.nav-row .st{font-size:10.5px;letter-spacing:.03em}
.st-alpha{color:var(--amber)} .st-beta{color:var(--cyan)}
.st-live{color:var(--accent)} .st-supporting{color:var(--dim)}
.nav-row:hover{background:var(--accent-soft)}
.nav-row.is-sel{background:var(--term-2)}
.nav-row.is-sel::before{
  content:"▸";position:absolute;left:9px;color:var(--accent);
}
.pane-nav.is-focus .nav-row.is-sel{background:var(--accent);color:var(--accent-deep)}
.pane-nav.is-focus .nav-row.is-sel::before{color:var(--accent-deep)}
.pane-nav.is-focus .nav-row.is-sel .st{color:var(--accent-deep)}
.nav-row.is-hidden{display:none}

/* ---- detail ---- */
.detail-head{
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  font-size:17px;font-weight:700;
}
.detail-head .tag{
  font-size:11px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;
  border:1px solid currentColor;padding:1px 7px;
}
.detail-rule{border:0;border-top:1px solid var(--line);margin:11px 0 14px}
.detail .host{color:var(--dim);font-size:12.5px;margin-bottom:14px}
.detail p{margin-bottom:11px;max-width:70ch}
.detail .lead{color:var(--ink)}
.detail .body{color:var(--dim)}
.detail .kv{display:flex;gap:12px;margin:3px 0;font-size:13px}
.detail .kv .k{color:var(--accent);width:100px;flex-shrink:0;padding-right:8px}
.detail .kv .v{color:var(--ink)}
.detail .open{
  display:inline-block;margin-top:8px;
  border:1px solid var(--accent);color:var(--accent);
  padding:6px 13px;text-decoration:none;
  transition:background .14s,color .14s;
}
.detail .open:hover,.detail .open:focus-visible{background:var(--accent);color:var(--accent-deep);outline:none}
.detail .ascii{
  color:var(--accent);font-size:13px;line-height:1.3;
  white-space:pre;margin-bottom:14px;text-shadow:0 0 16px var(--accent-soft);
}
.detail h3.sect{font-size:14px;color:var(--accent);margin:22px 0 8px}
.detail h3.sect:first-child{margin-top:0}
.detail .links{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 4px}
.detail .links a{
  border:1px solid var(--line);padding:5px 11px;text-decoration:none;
  font-size:12.5px;transition:border-color .14s,color .14s;
}
.detail .links a:hover,.detail .links a:focus-visible{border-color:var(--accent);color:var(--accent);outline:none}
.detail .essays{list-style:none;margin:6px 0}
.detail .essays li{padding:3px 0}
.detail .essays li::before{content:"› ";color:var(--accent)}
.detail .hint{color:var(--dim);font-size:12px;margin-top:18px}
.detail .hint b{color:var(--accent);font-weight:500}
.cursor::after{
  content:"";display:inline-block;width:8px;height:15px;
  background:var(--accent);margin-left:3px;vertical-align:-3px;
  animation:blink 1.1s steps(1) infinite;
}
@keyframes blink{0%,50%{opacity:1}50.01%,100%{opacity:0}}

/* detail print-in (terminal-style, fast) */
.detail-body>*{animation:printline .26s ease both;animation-delay:calc(var(--ln,0)*30ms)}
@keyframes printline{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}

/* ---- bottom bar ---- */
.tui-bar{
  display:flex;align-items:center;gap:7px 17px;flex-wrap:wrap;
  padding:3px 8px;color:var(--dim);font-size:11.5px;
}
.tui-bar .key{color:var(--accent);font-weight:500}
.tui-bar form{display:flex;align-items:center;gap:7px;flex:1;min-width:160px}
.tui-bar .search-ps{color:var(--accent)}
.tui-bar input{
  flex:1;font:inherit;font-size:12px;background:transparent;
  border:none;color:var(--ink);caret-color:var(--accent);
}
.tui-bar input:focus{outline:none}
.tui-bar .hide{display:none}

/* ---- help overlay ---- */
.help{
  position:fixed;inset:0;z-index:80;display:none;
  align-items:center;justify-content:center;
  background:rgba(0,0,0,.55);
}
.help.show{display:flex}
.help-box{
  background:var(--term);border:1px solid var(--accent);
  padding:22px 26px;max-width:440px;width:calc(100% - 40px);
}
.help-box h2{font-size:14px;color:var(--accent);margin-bottom:12px}
.help-box dl{display:grid;grid-template-columns:max-content 1fr;gap:6px 18px;font-size:12.5px}
.help-box dt{color:var(--accent)}
.help-box .close{margin-top:16px;color:var(--dim);font-size:12px}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  #app{animation:none}
  .detail-body>*{animation:none}
  .cursor::after{animation:none;opacity:1}
}

/* ---------- mobile: panes stack, page scrolls ---------- */
@media (max-width:720px){
  html,body{height:auto}
  body{overflow:auto}
  #app{height:auto;min-height:100dvh}
  .tui-main{flex-direction:column}
  .pane{min-height:0}
  .pane-nav{width:auto}
  .pane-nav .pane-scroll{max-height:none}
  .pane-detail{min-height:62vh}
  .pane-label{font-size:10.5px}
  .nav-row{padding-top:7px;padding-bottom:7px}  /* bigger tap targets */
  .tui-bar .deskonly{display:none}
}
