:root{
  --primary:#25671E;
  --secondary:#48A111;
  --tertiary:#F2B50B;
  --accent:#2F7A28;
  --accent-2:#C79A0B;
  --danger:#B3401F;
  --bg:#F7F6F1;
  --surface:#FFFFFF;
  --surface-2:#EDEBE3;
  --text:#3A3835;
  --text-muted:#71695f;
  --border:rgba(58,56,53,0.14);
  --border-strong:rgba(58,56,53,0.28);
  --shadow:0 1px 2px rgba(58,56,53,0.06),0 8px 24px rgba(58,56,53,0.06);
  --ring:rgba(47,122,40,0.35);
  --node-locked:rgba(58,56,53,0.22);
  --node-locked-fill:rgba(113,105,95,0.14);
}
html[data-theme="dark"]{
  --bg:#171915;
  --surface:#20231D;
  --surface-2:#2A2E24;
  --text:#F2F1EA;
  --text-muted:#A8A69B;
  --accent:#5EC352;
  --accent-2:#E8C34A;
  --border:rgba(242,241,234,0.12);
  --border-strong:rgba(242,241,234,0.24);
  --shadow:0 1px 2px rgba(0,0,0,0.3),0 12px 28px rgba(0,0,0,0.35);
  --ring:rgba(94,195,82,0.45);
  --node-locked:rgba(242,241,234,0.18);
  --node-locked-fill:rgba(168,164,146,0.12);
}
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:'IBM Plex Sans',sans-serif;
  transition:background .35s ease,color .35s ease;
  -webkit-font-smoothing:antialiased;
}
::selection{background:var(--accent);color:#FCF2E5;}
a{color:inherit;}
h1,h2,h3{font-family:'Newsreader',serif;font-weight:500;margin:0;letter-spacing:-0.01em;}
.mono{font-family:'IBM Plex Mono',monospace;}
button{font-family:inherit;cursor:pointer;}
input,select,textarea{font-family:inherit;}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}

.topbar{
  position:sticky;top:0;z-index:40;
  display:flex;align-items:center;justify-content:space-between;
  padding:18px clamp(20px,5vw,56px);
  background:color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--border);
}
.brand{display:flex;align-items:center;gap:10px;font-family:'IBM Plex Mono',monospace;font-size:13px;letter-spacing:0.14em;font-weight:600;}
.brand-mark{
  display:inline-flex;align-items:center;justify-content:center;
  width:26px;height:26px;border-radius:7px;background:var(--accent);color:#FCF2E5;font-size:13px;
  font-family:'Newsreader',serif;font-style:italic;
}
.topbar-meta{font-size:12px;color:var(--text-muted);letter-spacing:0.02em;display:none;}
@media(min-width:760px){.topbar-meta{display:block;}}
.topbar-actions{display:flex;align-items:center;gap:10px;}

.theme-toggle{
  width:38px;height:38px;border-radius:50%;
  border:1px solid var(--border-strong);background:var(--surface);color:var(--text);
  display:flex;align-items:center;justify-content:center;
  transition:transform .25s ease,background .25s ease;
}
.theme-toggle:hover{transform:rotate(18deg);}
.theme-toggle svg{width:17px;height:17px;}

.icon{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none;}
.icon-fill{width:16px;height:16px;fill:currentColor;flex:none;}

.btn{
  display:inline-flex;align-items:center;gap:8px;
  background:var(--accent);color:#FCF2E5;border:none;padding:10px 18px;border-radius:9px;
  font-size:13.5px;font-weight:600;letter-spacing:0.01em;transition:transform .15s ease,opacity .15s ease;
}
.btn:hover{transform:translateY(-1px);}
.btn:active{transform:translateY(0);}
.btn:disabled{opacity:0.5;cursor:not-allowed;transform:none;}
.btn-ghost{
  background:transparent;border:1px solid var(--border-strong);color:var(--text);padding:9px 16px;border-radius:9px;font-size:13px;
  display:inline-flex;align-items:center;gap:8px;
}
.btn-danger{background:var(--danger);color:#FCF2E5;}
.btn-block{width:100%;justify-content:center;}
.btn-sm{padding:6px 12px;font-size:12px;}

.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);}

.field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px;}
.field label{font-size:12.5px;font-weight:600;color:var(--text-muted);letter-spacing:0.02em;}
.field input,.field select,.field textarea{
  padding:10px 12px;border-radius:9px;border:1px solid var(--border-strong);
  background:var(--bg);color:var(--text);font-size:14px;
}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);}

.pill{
  font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:0.05em;text-transform:uppercase;
  padding:3px 8px;border-radius:20px;font-weight:600;display:inline-block;
}
.pill-completed{background:var(--accent);color:#FFFFFF;}
.pill-eligible{border:1.4px solid var(--accent-2);color:var(--accent-2);}
.pill-locked{background:var(--node-locked-fill);color:var(--text-muted);border:1px solid var(--border);}
.pill-open{border:1.4px solid var(--danger);color:var(--danger);}
.pill-resolved{background:var(--accent);color:#fff;}

.auth-shell{
  min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;
}
.auth-card{width:100%;max-width:380px;padding:34px 30px;}
.auth-card h1{font-size:26px;margin-bottom:6px;}
.auth-card p{color:var(--text-muted);font-size:13.5px;margin:0 0 24px;}
.auth-error{
  background:color-mix(in srgb, var(--danger) 12%, var(--surface));color:var(--danger);
  padding:10px 12px;border-radius:9px;font-size:13px;margin-bottom:16px;display:none;
}
.auth-error.show{display:block;}
.auth-switch{margin-top:18px;font-size:13px;color:var(--text-muted);text-align:center;}
.auth-hint{
  margin-top:20px;padding:12px 14px;border-radius:10px;background:var(--surface-2);
  font-size:12px;color:var(--text-muted);line-height:1.6;
}

.offline-banner{
  display:none;align-items:center;gap:8px;justify-content:center;
  background:var(--tertiary);color:#33280A;font-size:12.5px;font-weight:600;
  padding:8px 12px;
}
.offline-banner.show{display:flex;}

.toast{
  position:fixed;bottom:22px;left:50%;transform:translate(-50%,20px);
  background:var(--primary);color:var(--tertiary);padding:11px 18px;border-radius:10px;font-size:13px;
  box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;z-index:60;
  max-width:90vw;
}
html[data-theme="dark"] .toast{background:var(--accent);color:#1E1A19;}
.toast.show{opacity:1;transform:translate(-50%,0);}

.empty-state{padding:40px 20px;text-align:center;color:var(--text-muted);font-size:13.5px;}

.spinner{
  width:16px;height:16px;border-radius:50%;border:2px solid var(--border-strong);
  border-top-color:var(--accent);animation:spin .7s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg);}}
