/* Login, setup and admin pages. The tool itself carries its own styles and is untouched. */
:root{
  --ink:#e8eaed; --sub:#a6adb4; --line:#2c3a33;
  --card:rgba(12,22,17,.82); --field:#101a15;
  --accent:#4fd1c5; --green:#22c55e; --danger:#ef4444;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; color:var(--ink);
  font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  background:#08120d url("forest-bg.jpg") center/cover no-repeat fixed;
}
/* The photo is busy in places; a wash keeps text readable wherever it lands. */
body::before{content:"";position:fixed;inset:0;background:rgba(4,12,8,.26);pointer-events:none}
.wrap{position:relative;min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px}
.wrap.top{align-items:flex-start;padding-top:32px}
.card{
  width:100%;max-width:420px;background:var(--card);border:1px solid var(--line);
  border-radius:14px;padding:28px;backdrop-filter:blur(10px);
  box-shadow:0 20px 60px rgba(0,0,0,.5);
}
.card.wide{max-width:1180px}
h1{margin:0 0 4px;font-size:21px;letter-spacing:.2px}
h2{margin:28px 0 10px;font-size:16px;color:var(--accent);font-weight:600}
.lede{margin:0 0 22px;color:var(--sub);font-size:13.5px}
label{display:block;margin:14px 0 5px;font-size:13px;color:var(--sub)}
input[type=text],input[type=password],textarea{
  width:100%;padding:10px 12px;background:var(--field);color:var(--ink);
  border:1px solid var(--line);border-radius:8px;font:inherit;
}
input:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(79,209,197,.15)}
textarea{min-height:64px;resize:vertical}
.btn{
  display:inline-block;width:100%;margin-top:20px;padding:11px 16px;border:none;border-radius:8px;
  background:var(--accent);color:#06251f;font:600 15px/1 inherit;cursor:pointer;
}
.btn:hover{filter:brightness(1.08)}
.btn.slim{width:auto;margin:0;padding:7px 12px;font-size:13px}
.btn.ghost{background:transparent;color:var(--sub);border:1px solid var(--line)}
.btn.danger{background:transparent;color:var(--danger);border:1px solid rgba(239,68,68,.4)}
.checkrow{display:flex;align-items:center;gap:9px;margin-top:16px;color:var(--sub);font-size:13.5px}
.checkrow input{width:16px;height:16px;accent-color:var(--accent);flex:none}
.checkrow label{margin:0;color:inherit}
.msg{margin:0 0 16px;padding:10px 12px;border-radius:8px;font-size:13.5px}
.msg.err{background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.35);color:#fca5a5}
.msg.ok{background:rgba(34,197,94,.12);border:1px solid rgba(34,197,94,.35);color:#86efac}
.msg.warn{background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.35);color:#fcd34d}

/* --- server page: tiles and meters -------------------------------------------------------- */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:8px 0 6px}
.tile{padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:rgba(8,16,12,.55)}
.tile .k{color:var(--sub);font-size:12px;text-transform:uppercase;letter-spacing:.4px}
.tile .v{font-size:20px;font-weight:600;margin:3px 0 6px}
.tile .v .sub{font-size:12px;font-weight:400}
.meter{height:7px;border-radius:99px;background:#1c2a23;overflow:hidden;margin-bottom:5px}
.meter div{height:100%;border-radius:99px}
.btn:disabled{opacity:.5;cursor:default}
.foot{margin-top:22px;padding-top:16px;border-top:1px solid var(--line);color:var(--sub);font-size:11.5px;line-height:1.55}
.foot a{color:var(--sub)}
table{width:100%;border-collapse:collapse;margin-top:6px;font-size:13.5px}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}
th{color:var(--sub);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.4px}
td.note{color:var(--sub);max-width:280px}
.tag{display:inline-block;padding:2px 7px;border-radius:99px;font-size:11px;font-weight:600}
.tag.admin{background:rgba(79,209,197,.15);color:var(--accent)}
.tag.user{background:rgba(166,173,180,.12);color:var(--sub)}
.tag.moderator{background:rgba(251,191,36,.14);color:#fbbf24}
select{width:100%;padding:9px 10px;background:var(--field);color:var(--ink);
  border:1px solid var(--line);border-radius:8px;font:inherit}
select:focus{outline:none;border-color:var(--accent)}
.bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.acts{display:flex;gap:7px}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@media (max-width:640px){.grid{grid-template-columns:1fr}.card{padding:20px}}
.scroll{overflow-x:auto}
.sub{color:#8f9a94;font-size:12px}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;font-size:12.5px}
.count{display:inline-block;min-width:18px;margin-left:4px;padding:1px 6px;border-radius:99px;
  background:var(--danger);color:#fff;font-size:11px;font-weight:700;text-align:center}

/* --- users: online dot and activity ------------------------------------------------------- */
.dot{display:inline-block;width:9px;height:9px;margin-right:7px;border-radius:50%;vertical-align:1px;
  background:#3a4740}
.dot.on{background:var(--green);box-shadow:0 0 0 3px rgba(34,197,94,.18),0 0 8px rgba(34,197,94,.7)}
.live{color:#86efac;font-weight:600;white-space:nowrap}
table.visits td{font-size:13px}

/* --- bug reports -------------------------------------------------------------------------- */
.tabs{display:flex;gap:6px;margin:20px 0 4px}
.tabs a{padding:6px 12px;border-radius:99px;border:1px solid var(--line);color:var(--sub);text-decoration:none;font-size:13px}
.tabs a span{opacity:.7;margin-left:3px}
.tabs a.on{color:var(--ink);border-color:var(--accent);background:rgba(79,209,197,.1)}
.report{margin-top:14px;padding:14px 16px;border:1px solid var(--line);border-radius:10px;background:rgba(8,16,12,.55)}
.report.done{opacity:.7}
.report .rhead{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}
.report .rhead .sub{margin-right:6px}
.report .rmsg{margin-top:10px;white-space:normal;overflow-wrap:anywhere}
.shots{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.shots a{display:block;text-decoration:none;color:var(--sub);font-size:11px}
.shots img{display:block;max-width:260px;max-height:170px;border-radius:6px;border:1px solid var(--line);background:#000}
.shots a:hover img{border-color:var(--accent)}
.ctx{margin-top:12px;font-size:13px}
.ctx summary{cursor:pointer;color:var(--sub)}
.ctx table{margin-top:6px}
.ctx th{width:130px;text-transform:none;letter-spacing:0;font-size:12px}
.ctx td{overflow-wrap:anywhere}

/* --- cookie notice ------------------------------------------------------------------------ */
/* Shown once, over the login form, because signing in sets a cookie. Until it is accepted the
   form underneath is inert -- the point is to ask before storing anything, not after. */
#cookieGate{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;
  padding:24px;background:rgba(3,9,6,.72);backdrop-filter:blur(3px)}
#cookieGate[hidden]{display:none}
#cookieGate .card{max-width:480px}
#cookieGate ul{margin:12px 0 0;padding-left:18px;color:var(--sub);font-size:13px}
#cookieGate li{margin:5px 0}
#agreeBtn{
  background:#243029;color:#6b7a72;cursor:not-allowed;transition:
    background .25s ease,color .25s ease,box-shadow .35s ease,transform .1s ease;
}
#agreeBtn.on{
  background:var(--green);color:#05240f;cursor:pointer;
  box-shadow:0 0 0 1px rgba(34,197,94,.6),0 0 18px rgba(34,197,94,.55),0 0 42px rgba(34,197,94,.3);
  animation:glow 2s ease-in-out infinite;
}
#agreeBtn.on:active{transform:translateY(1px)}
@keyframes glow{
  0%,100%{box-shadow:0 0 0 1px rgba(34,197,94,.6),0 0 18px rgba(34,197,94,.5),0 0 40px rgba(34,197,94,.25)}
  50%    {box-shadow:0 0 0 1px rgba(34,197,94,.85),0 0 26px rgba(34,197,94,.75),0 0 60px rgba(34,197,94,.4)}
}
@media (prefers-reduced-motion:reduce){#agreeBtn.on{animation:none}}

/* --- public front page (index.php): what the tool does, with the sign-in beside it ----------- */
.landing{position:relative;max-width:1120px;margin:0 auto;padding:40px 20px 28px}
.hero{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:32px;align-items:start}
.kicker{margin:0 0 6px;color:var(--accent);font-weight:600;font-size:13px;letter-spacing:.4px}
.hero h1{font-size:34px;line-height:1.18;margin:0 0 14px}
.lede.big{font-size:16.5px;line-height:1.55;color:#d3d9de;max-width:620px}
.card.signin{max-width:none}
.card.signin h2.first{margin-top:0;font-size:18px}
.features{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;margin-top:34px}
.feature{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;backdrop-filter:blur(8px)}
.feature h3{margin:0 0 6px;font-size:15px;color:var(--accent)}
.feature p{margin:0;color:var(--sub);font-size:13.5px}
.gallery{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:26px}
.gallery figure{margin:0;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.gallery figure.narrow{grid-column:1 / -1;max-width:440px;justify-self:center}
.gallery img{display:block;width:100%;height:auto}
.gallery figcaption{padding:10px 14px;color:var(--sub);font-size:12.5px}
.landing-foot{margin-top:30px;color:rgba(232,234,237,.45);font-size:11px;line-height:1.6;text-align:center}
@media (max-width:860px){
  .hero{grid-template-columns:1fr}
  .hero h1{font-size:27px}
  .gallery{grid-template-columns:1fr}
}

/* Licence credit for the background, which is drawn from OpenStreetMap woodland data. Kept off
   the sign-in card so it stays uncluttered, but still on the page as ODbL asks. */
.attrib{position:fixed;left:0;right:0;bottom:8px;text-align:center;
  font-size:10.5px;color:rgba(232,234,237,.32);pointer-events:none}
