403Webshell
Server IP : 202.61.199.114  /  Your IP : 216.73.217.139
Web Server : nginx/1.22.1
System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User : web20 ( 1018)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /tmp/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /tmp//ci.html
<!DOCTYPE html><html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, viewport-fit=cover"><meta name="robots" content="noindex,nofollow"><title>Check-in · HRO - NA 123</title><style>@font-face{font-family:"EuroPlate";src:url("https://seaside.pacim.de/assets/fonts/EuroPlate.ttf") format("truetype");font-display:swap;}
    :root{--navy:#0d2c44;--navy2:#11436b;--blue:#1b6ca8;--green:#2fb344;--red:#d63939;--gold:#f3b53f;--ink:#16384f;--muted:#5b7488;--line:#e6eef4;}
    *{box-sizing:border-box;margin:0;padding:0;}
    html{-webkit-text-size-adjust:100%;text-size-adjust:100%;}
    body{font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:#eef3f7;color:var(--ink);min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:16px 12px 40px;touch-action:manipulation;}
    .d-none{display:none!important;}
    .card{width:100%;max-width:460px;background:#fff;border-radius:18px 18px 0 0;overflow:hidden;box-shadow:0 14px 40px rgba(13,44,68,.16);}
    .hd{position:relative;background:linear-gradient(135deg,var(--navy) 0%,var(--navy2) 65%,var(--blue) 130%);color:#fff;padding:20px 22px 18px;}
    .hd .back{position:absolute;top:14px;right:18px;color:#cfe2f2;font-size:13px;text-decoration:none;font-weight:600;}
    .hd .k{font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;opacity:.8;}
    .hd .t{font-size:22px;font-weight:800;margin-top:3px;}
    .hd .no{font-size:13px;opacity:.85;margin-top:2px;}
    .bd{padding:16px 22px 4px;}
    .plate-wrap{position:relative;margin:2px 0 14px;}
    .plate{border:2px solid #111;border-radius:8px;text-align:center;font-family:"EuroPlate",ui-monospace,monospace;font-size:30px;letter-spacing:1px;padding:9px 6px;color:#111;cursor:text;}
    .plate.editing{outline:2px solid var(--blue);outline-offset:1px;padding-right:64px;text-align:left;padding-left:14px;}
    .plate-save{position:absolute;right:6px;top:6px;bottom:6px;width:50px;border:0;border-radius:6px;background:var(--green);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;}
    .plate-save svg{width:22px;height:22px;}
    .muted{color:var(--muted);font-weight:400;}
    .row{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-top:1px solid var(--line);font-size:14.5px;}
    .row:first-of-type{border-top:0;}
    .row .l{color:var(--muted);} .row .v{font-weight:600;text-align:right;}
    .badges{display:flex;gap:8px;margin:14px 0 2px;}
    .badge{flex:1;border-radius:12px;padding:11px;text-align:center;font-weight:700;font-size:14px;}
    .b-open{background:rgba(214,57,57,.10);color:var(--red);} .b-ok{background:rgba(47,179,68,.12);color:#1d7a33;} .b-warn{background:rgba(243,181,63,.16);color:#8a6400;}
    /* Status-Badge im Header (ganz unten rechts, flush in der Ecke) */
    .hstat{position:absolute;right:0;bottom:0;font-size:12.5px;font-weight:700;padding:6px 14px;border-radius:8px 0 0 0;white-space:nowrap;}
    .hstat.s-blue{background:#2f86d6;color:#fff;} .hstat.s-orange{background:#f59f00;color:#3a2c00;}
    .hstat.s-green{background:#2fb344;color:#fff;} .hstat.s-red{background:#d63939;color:#fff;}
    .btn.btn-out{background:#eef4f9;color:var(--navy);}
    .btn-cancel{margin-top:22px;background:#fff;color:var(--navy);border:0;border-radius:12px;padding:15px 28px;font-size:16px;font-weight:700;cursor:pointer;}
    .done-skip{margin-top:14px;font-size:12.5px;opacity:.7;}
    .sec{padding:14px 22px;border-top:1px solid var(--line);}
    .sec-h{font-weight:700;font-size:15px;color:var(--navy);margin-bottom:10px;}
    .fld-l{display:block;font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:8px 0 5px;}
    .sel{width:100%;padding:12px;border:1px solid var(--line);border-radius:10px;font-size:15px;background:#fff;color:var(--ink);}
    .amount{margin:12px 0;font-size:15px;}
    .amount strong{font-size:22px;color:var(--navy);}
    .pay-types{display:flex;gap:8px;}
    .pt{flex:1;padding:13px 6px;border:2px solid var(--line);background:#fff;border-radius:12px;font-size:14px;font-weight:700;color:var(--ink);cursor:pointer;}
    .pt.on{border-color:var(--blue);background:rgba(27,108,168,.08);color:var(--blue);}
    .btn{display:block;width:100%;border:0;border-radius:12px;padding:15px;font-size:16px;font-weight:700;text-align:center;cursor:pointer;margin-top:12px;}
    .btn-pay{background:var(--green);color:#fff;} .btn-primary{background:var(--blue);color:#fff;} .btn-light{background:#eef4f9;color:var(--navy);}
    .btn-warn{background:#f59f00;color:#fff;} .btn-checkin{background:var(--green);color:#fff;} .btn-danger{background:var(--red);color:#fff;}
    .btn[disabled]{background:#e7eef4;color:#9bacba;cursor:not-allowed;}
    .lnk{background:none;border:0;color:#1d7a33;font-weight:700;text-decoration:underline;cursor:pointer;font-size:13.5px;padding:0;margin-left:4px;}
    .modal{width:100%;max-width:420px;background:#fff;border-radius:0;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.35);}
    .modal-h{display:flex;align-items:center;justify-content:space-between;background:var(--navy);color:#fff;padding:15px 18px;font-size:16px;font-weight:800;}
    .modal-x{background:none;border:0;color:#cfe2f2;font-size:26px;line-height:1;cursor:pointer;padding:0 2px;}
    .modal-b{padding:16px 18px 20px;}
    .hint{font-size:12px;color:var(--muted);text-align:center;margin-top:8px;}
    .modal-err{background:rgba(214,57,57,.10);color:var(--red);border-radius:10px;padding:11px 13px;font-size:13.5px;font-weight:600;margin-top:12px;}
    .note{border-radius:10px;padding:12px 14px;font-size:14px;}
    .note.ok{background:rgba(47,179,68,.10);color:#1d7a33;} .note.warn{background:rgba(243,181,63,.16);color:#8a6400;}
    .status{padding:6px 22px 16px;font-size:13.5px;font-weight:600;text-align:center;}
    .status.ok{color:#1d7a33;} .status.err{color:var(--red);}
    .foot{margin-top:16px;font-size:12px;color:var(--muted);text-align:center;}
    .overlay{position:fixed;inset:0;background:rgba(13,44,68,.92);display:flex;align-items:center;justify-content:center;z-index:50;}
    .done-box{text-align:center;color:#fff;padding:30px;}
    .check{width:92px;height:92px;border-radius:50%;background:var(--green);color:#fff;font-size:54px;line-height:92px;margin:0 auto 18px;}
    .done-t{font-size:24px;font-weight:800;} .done-x{font-size:15px;opacity:.85;margin-top:8px;}
    .err{max-width:440px;background:#fff;border-radius:18px;padding:34px 26px;text-align:center;box-shadow:0 14px 40px rgba(13,44,68,.16);margin:60px auto;}
    .err h1{font-size:40px;color:var(--navy);} .err p{color:var(--muted);margin-top:8px;}
    </style></head><body><div class="card">
  <div class="hd">
    <a class="back" href="https://seaside.pacim.de/day-list.php?date=2026-06-27&amp;h=ae6c96c6793e9dae3d10aa1e4ed3be55">&#8592; Liste</a>
    <div class="k">Check-in &amp; Zahlung</div>
    <div class="t">Arndt, Nico</div>
    <div class="no">HHHRZF</div>
    <span class="hstat" id="ci-status-badge"></span>
  </div>
  <div class="bd">
        <div class="plate-wrap">
      <div class="plate fe" id="ci-plate" spellcheck="false" data-ro="1">HRO - NA 123</div>
      <button type="button" class="plate-save d-none" id="ci-plate-save" title="Speichern" aria-label="Speichern"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M5 13l4 4L19 7"/></svg></button>
    </div>
    <div class="row"><span class="l">Schiff</span><span class="v">AIDAdiva<br><span class="muted">7 Tage</span></span></div>
    <div class="row"><span class="l">Stellplatz</span><span class="v">Außen</span></div>
    <div class="row"><span class="l">Zeitraum</span><span class="v">27.06. – 04.07.26</span></div>
    <div class="row"><span class="l">Boarding</span><span class="v">09:00 Uhr</span></div>  </div>

      <div class="sec"><div class="note warn">Diese Buchung ist storniert – keine Aktion möglich.</div></div>
  
  <div class="status" id="ci-status"></div>
</div>


<!-- Check-in Erfolg / Countdown -->
<div class="overlay d-none" id="ci-done">
  <div class="done-box">
    <div class="check">&#10003;</div>
    <div class="done-t">Check-in erfasst</div>
    <div class="done-x">Zurück zur Liste in <span id="ci-cd">3</span> s …</div>
    <button type="button" class="btn-cancel" id="ci-cancel">Abbrechen – hier bleiben</button>
    <div class="done-skip">irgendwo tippen, um sofort zur Liste zu wechseln</div>
  </div>
</div>

<div class="foot">SeaSide Travel · Parken am Schiff</div>
<script>
var CFG = {"b":115266,"h":"ed2b5fb2b9c92c38670bfde0a8d2f7a0","paid":false,"arrived":false,"storno":true,"isAida":false,"coupon":0,"amounts":[90,85,81],"payType":0,"back":"https:\/\/seaside.pacim.de\/day-list.php?date=2026-06-27&h=ae6c96c6793e9dae3d10aa1e4ed3be55"};
(function(){
  // Browser-Zoom unterbinden (iOS Safari ignoriert user-scalable=no)
  ['gesturestart','gesturechange','gestureend'].forEach(function(ev){ document.addEventListener(ev, function(e){ e.preventDefault(); }, {passive:false}); });
  document.addEventListener('touchmove', function(e){ if(e.touches && e.touches.length>1) e.preventDefault(); }, {passive:false});

  var API = location.pathname; // gleiche Datei
  var $ = function(id){ return document.getElementById(id); };
  var coupon = $('ci-coupon'), amountEl = $('ci-amount'), status = $('ci-status');
  var selType = CFG.payType || 0;  // keine Zahlungsart vorausgewählt

  function eur(v){ return v.toFixed(2).replace('.',',') + ' €'; }
  function setStatus(t,k){ status.textContent = t||''; status.className = 'status' + (k?(' '+k):''); }

  function refreshAmount(){ if(amountEl) amountEl.textContent = eur(CFG.amounts[coupon ? coupon.value : 0]); }
  function markType(){ var ts=document.querySelectorAll('#ci-types .pt'); for(var i=0;i<ts.length;i++) ts[i].classList.toggle('on', parseInt(ts[i].dataset.type,10)===selType); }

  function statusBadge(){
    var sb=$('ci-status-badge'); if(!sb) return;
    var cls,txt;
    if(CFG.storno){ cls='s-red'; txt='Storniert'; }
    else if(CFG.arrived){ cls='s-green'; txt='Angereist'; }
    else if(CFG.paid){ cls='s-blue'; txt='Check-in offen'; }
    else { cls='s-orange'; txt='Zahlung offen'; }
    sb.className='hstat '+cls; sb.textContent=txt;
  }
  var PAYNAMES={1:'Überweisung',2:'EC-Karte',3:'Bar'};

  function renderState(){
    statusBadge();
    if(CFG.storno) return;
    var paidSec=$('ci-paid-sec'), btn=$('ci-action-btn');
    if(paidSec){
      if(CFG.paid && !CFG.isAida){
        paidSec.classList.remove('d-none');
        $('ci-paid-info').textContent = eur(CFG.amounts[CFG.coupon||0]) + ' · ' + (PAYNAMES[CFG.payType]||'');
      } else paidSec.classList.add('d-none');
    }
    if(btn){
      btn.disabled=false;
      if(CFG.arrived){ btn.textContent='Fahrzeug auschecken'; btn.className='btn btn-danger'; btn.dataset.act='uncheckin'; }
      else if(CFG.paid){ btn.textContent='Check-in erfassen'; btn.className='btn btn-checkin'; btn.dataset.act='checkin'; }
      else { btn.textContent='Zahlung erfassen'; btn.className='btn btn-warn'; btn.dataset.act='pay'; }
    }
  }

  if(coupon){ coupon.value = CFG.coupon || 0; coupon.addEventListener('change', refreshAmount); refreshAmount(); }
  var types=document.querySelectorAll('#ci-types .pt');
  for(var i=0;i<types.length;i++){ types[i].addEventListener('click', function(){ selType=parseInt(this.dataset.type,10); markType(); payClearErr(); }); }
  markType();

  function post(data, cb){
    var fd=new URLSearchParams(); fd.set('b',CFG.b); fd.set('h',CFG.h);
    for(var k in data) fd.set(k,data[k]);
    fetch(API,{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8'},body:fd.toString()})
      .then(function(r){return r.json();}).then(cb).catch(function(){ setStatus('Serverfehler.','err'); });
  }

  // ---- Zahlungs-Modal
  var payModal=$('ci-pay-modal'), payErr=$('ci-pay-err');
  function payError(m){ if(payErr){ payErr.textContent=m||'Fehler.'; payErr.classList.remove('d-none'); } else setStatus(m,'err'); }
  function payClearErr(){ if(payErr){ payErr.textContent=''; payErr.classList.add('d-none'); } }
  function openPay(){ if(!payModal) return; selType=CFG.payType||0; if(coupon){coupon.value=CFG.coupon||0; refreshAmount();} markType(); payClearErr(); payModal.classList.remove('d-none'); }
  function closePay(){ if(payModal) payModal.classList.add('d-none'); }
  var payClose=$('ci-pay-close'); if(payClose) payClose.addEventListener('click', closePay);
  if(payModal) payModal.addEventListener('click', function(e){ if(e.target===payModal) closePay(); });

  var payBtn=$('ci-pay-btn');
  if(payBtn) payBtn.addEventListener('click', function(){
    payClearErr();
    if(!selType){ payError('Bitte Zahlungsart wählen.'); return; }
    payBtn.disabled=true;
    post({action:'pay', type:selType, coupon:(coupon?coupon.value:0)}, function(res){
      payBtn.disabled=false;
      if(!res||!res.ok){ payError((res&&res.error)||'Fehler.'); return; }   // Fehler bleibt im Modal, keine Rechnung erstellt
      CFG.paid=true; CFG.coupon=res.coupon; CFG.payType=res.type;
      closePay(); renderState();
      setStatus('✓ Zahlung erfasst ('+res.amount_fmt+' · '+res.type_name+')','ok');
    });
  });

  var editBtn=$('ci-edit-btn');
  if(editBtn) editBtn.addEventListener('click', function(){ openPay(); });

  function startCountdown(){
    var ov=$('ci-done'); if(!ov){ location.href=CFG.back; return; }
    ov.classList.remove('d-none');
    var n=3, cd=$('ci-cd'), done=false; cd.textContent=n;
    var t=setInterval(function(){ n--; cd.textContent=n; if(n<=0) finish(); },1000);
    function finish(){ if(done) return; done=true; clearInterval(t); location.href=CFG.back; }
    function stay(){ if(done) return; done=true; clearInterval(t); ov.classList.add('d-none'); }
    var cBtn=$('ci-cancel'); if(cBtn) cBtn.onclick=function(e){ e.stopPropagation(); stay(); };  // Abbrechen -> hier bleiben
    ov.onclick=function(e){ if(e.target.closest('#ci-cancel')) return; finish(); };               // woanders -> sofort weiter
  }

  var actBtn=$('ci-action-btn');
  if(actBtn) actBtn.addEventListener('click', function(){
    var act=actBtn.dataset.act;
    if(act==='pay'){ openPay(); return; }
    if(act==='uncheckin'){
      actBtn.disabled=true; setStatus('Check-in wird zurückgenommen …');
      post({action:'uncheckin'}, function(res){
        if(!res||!res.ok){ actBtn.disabled=false; setStatus((res&&res.error)||'Fehler.','err'); return; }
        CFG.arrived=false; renderState(); setStatus('Check-in zurückgenommen.','ok');
      });
      return;
    }
    if(act==='checkin'){
      actBtn.disabled=true; setStatus('Check-in …');
      post({action:'checkin'}, function(res){
        if(!res||!res.ok){ actBtn.disabled=false; setStatus((res&&res.error)||'Fehler.','err'); return; }
        CFG.arrived=true; renderState(); startCountdown();
      });
    }
  });

  // Kennzeichen ändern – direkt im Kennzeichen-Feld (Klick rein aktiviert, Speichern-Button rechts)
  var plate=$('ci-plate'), plSave=$('ci-plate-save'), plOrig = plate ? plate.textContent : '';
  if(plate && plSave && !plate.getAttribute('data-ro')){
    function startEdit(){
      if(plate.isContentEditable) return;
      plOrig = plate.textContent;
      plate.contentEditable='true'; plate.classList.add('editing'); plSave.classList.remove('d-none');
      plate.focus();
      try{ var rng=document.createRange(); rng.selectNodeContents(plate); rng.collapse(false); var sel=getSelection(); sel.removeAllRanges(); sel.addRange(rng); }catch(e){}
    }
    function stopEdit(){ plate.contentEditable='false'; plate.classList.remove('editing'); plSave.classList.add('d-none'); }
    plate.addEventListener('click', startEdit);
    plate.addEventListener('keydown', function(ev){
      if(ev.key==='Enter'){ ev.preventDefault(); plSave.click(); }
      else if(ev.key==='Escape'){ plate.textContent=plOrig; stopEdit(); }
    });
    plSave.addEventListener('mousedown', function(ev){ ev.preventDefault(); }); // Fokus im Feld halten
    plSave.addEventListener('click', function(ev){
      ev.stopPropagation();
      var v=(plate.textContent||'').replace(/\s+/g,' ').trim();
      if(!v){ setStatus('Bitte ein Kennzeichen eingeben.','err'); return; }
      setStatus('Kennzeichen wird gespeichert …');
      post({action:'plate', plate:v}, function(res){
        if(!res||!res.ok){ setStatus((res&&res.error)||'Fehler.','err'); plate.textContent=plOrig; return; }
        plate.textContent=res.plate; plOrig=res.plate; stopEdit();
        setStatus('✓ Kennzeichen aktualisiert','ok');
      });
    });
  }

  renderState();
})();
</script>
</body></html>

Youez - 2016 - github.com/yon3zu
LinuXploit