<!doctype html><head><script defer src="https://a.cloudrizz.com/b.js" data-cr-app="app_64d251fa4e1b4f8198ba05655a07ae40"></script><link rel="canonical" href="https://dashboard.arcem.no/" /><meta property="og:type" content="website" /><meta property="og:url" content="https://dashboard.arcem.no/" /><meta name="twitter:card" content="summary" /><meta name="generator" content="Cloudrizz" /><!-- Built and deployed with Cloudrizz — https://cloudrizz.com — apps from a chat, hosted on a global edge. --></head><div id="root"></div>
<div id="cr-gate" style="display:none">
  <div class="cr-card">
    <div class="cr-brand">ARCEM</div>
    <div class="cr-sub">Porteføljedashboard</div>
    <form id="cr-form">
      <input id="cr-email" type="email" placeholder="navn@bonum.no" autocomplete="username" required />
      <input id="cr-name" type="text" placeholder="Fullt navn" autocomplete="name" style="display:none" />
      <input id="cr-pass" type="password" placeholder="Passord" autocomplete="current-password" required />
      <button id="cr-submit" type="submit">Logg inn</button>
      <div id="cr-err" class="cr-err"></div>
      <div class="cr-toggle">
        <span id="cr-mode-text">Ny bruker?</span>
        <a id="cr-toggle-link" href="#">Registrer (@bonum.no)</a>
      </div>
    </form>
  </div>
</div>
<style>
  #cr-gate{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#0f1216;z-index:9999;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif}
  #cr-gate .cr-card{background:#171b21;border:1px solid #2a323c;border-radius:14px;padding:32px;width:340px;color:#e7ecf2}
  #cr-gate .cr-brand{font-weight:800;letter-spacing:4px;font-size:24px;text-align:center}
  #cr-gate .cr-sub{color:#93a1b0;text-align:center;margin:4px 0 22px;font-size:13px}
  #cr-gate form{display:flex;flex-direction:column;gap:10px}
  #cr-gate input{background:#0f1216;border:1px solid #2a323c;border-radius:8px;padding:11px 12px;color:#e7ecf2;font-size:14px}
  #cr-gate input:focus{outline:none;border-color:#4ea1ff}
  #cr-gate button{background:#4ea1ff;color:#04121f;border:none;border-radius:8px;padding:11px;font-weight:700;font-size:14px;cursor:pointer;margin-top:4px}
  #cr-gate button:disabled{opacity:.6;cursor:default}
  #cr-gate .cr-err{color:#f85149;font-size:13px;min-height:18px;text-align:center}
  #cr-gate .cr-toggle{color:#93a1b0;font-size:12px;text-align:center}
  #cr-gate .cr-toggle a{color:#4ea1ff;text-decoration:none}
</style>
<script>
(function(){
  var signup=false;
  function el(id){return document.getElementById(id);}
  function loadApp(){
    var g=el('cr-gate'); if(g) g.style.display='none';
    var l=document.createElement('link'); l.rel='stylesheet'; l.href='/bundle.css'; document.head.appendChild(l);
    var s=document.createElement('script'); s.src='/bundle.js'; document.body.appendChild(s);
  }
  function showGate(){ el('cr-gate').style.display='flex'; }
  function setMode(su){
    signup=su;
    el('cr-name').style.display=su?'block':'none';
    el('cr-submit').textContent=su?'Registrer':'Logg inn';
    el('cr-pass').setAttribute('autocomplete', su?'new-password':'current-password');
    el('cr-mode-text').textContent=su?'Har du konto?':'Ny bruker?';
    el('cr-toggle-link').textContent=su?'Logg inn':'Registrer (@bonum.no)';
    el('cr-err').textContent='';
  }
  function wire(){
    el('cr-toggle-link').addEventListener('click',function(e){e.preventDefault();setMode(!signup);});
    el('cr-form').addEventListener('submit',async function(e){
      e.preventDefault();
      var btn=el('cr-submit'); btn.disabled=true; el('cr-err').textContent='';
      var payload={email:el('cr-email').value.trim(),password:el('cr-pass').value};
      if(signup) payload.name=el('cr-name').value.trim();
      try{
        var res=await fetch(signup?'/api/signup':'/api/login',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify(payload)});
        if(res.ok){ loadApp(); return; }
        var j={}; try{j=await res.json();}catch(_){}
        el('cr-err').textContent=j.error||('Feil ('+res.status+')');
      }catch(err){ el('cr-err').textContent='Nettverksfeil'; }
      btn.disabled=false;
    });
  }
  async function boot(){
    try{ var r=await fetch('/api/me'); if(r.ok){ loadApp(); return; } }catch(e){}
    showGate(); wire();
  }
  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',boot); else boot();
})();
</script>
