| 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 : |
<!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"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="theme-color" content="#0d2c44"><link rel="manifest" href="https://seaside.pacim.de/manifest.php?term=ea55ed8567a3840f208b5cd4"><link rel="apple-touch-icon" href="https://seaside.pacim.de/assets/webapp/icon-180.png"><meta name="apple-mobile-web-app-title" content="PaCIM Terminal"><title>ZZ_TERM</title><style>
:root{--navy:#0d2c44;--navy2:#11436b;--blue:#1b6ca8;--ink:#16384f;--muted:#5b7488;--line:#e6eef4;}
*{box-sizing:border-box;margin:0;padding:0;}
.d-none{display:none!important;}
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;
padding:calc(env(safe-area-inset-top,0px)) env(safe-area-inset-right,0px) calc(40px + env(safe-area-inset-bottom,0px)) env(safe-area-inset-left,0px);touch-action:manipulation;}
.hd{background:linear-gradient(135deg,var(--navy) 0%,var(--navy2) 65%,var(--blue) 130%);color:#fff;padding:22px 18px 18px;}
.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;}
.wrap{max-width:560px;margin:0 auto;}
.grid{display:grid;grid-template-columns:1fr;gap:12px;padding:16px;}
@media(min-width:480px){.grid{grid-template-columns:1fr 1fr;}}
.tile{display:block;text-decoration:none;color:inherit;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;box-shadow:0 2px 8px rgba(13,44,68,.06);transition:transform .08s ease,box-shadow .12s ease;}
.tile:active{transform:scale(.98);}
.tile .tl{font-size:17px;font-weight:800;color:var(--navy);}
.tile .td{font-size:13px;color:var(--muted);margin-top:2px;}
.tile .chips{margin-top:8px;display:flex;flex-wrap:wrap;gap:5px;}
.chip{background:#eef3f7;border-radius:999px;padding:2px 9px;font-size:11.5px;font-weight:600;color:var(--navy);}
.tile .go{margin-top:10px;font-size:13px;font-weight:700;color:var(--blue);}
.empty{margin:30px 18px;padding:24px;background:#fff;border-radius:14px;text-align:center;color:var(--muted);border:1px dashed var(--line);}
.foot{color:var(--muted);font-size:12px;text-align:center;margin-top:8px;}
/* Dashboard-Slider (oben): bis zu 3 Anreisetage als native Widget-Karten (horizontal swipebar). */
.dswipe-wrap{padding:14px 0 4px;}
.dswipe{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:0;scrollbar-width:none;}
.dswipe::-webkit-scrollbar{display:none;}
.dslide{flex:0 0 100%;scroll-snap-align:center;padding:0 14px;box-sizing:border-box;}
.dwidget{background:#fff;border-radius:16px;box-shadow:0 4px 18px rgba(13,44,68,.12);overflow:hidden;display:flex;flex-direction:column;max-height:66vh;}
.dwidget-h{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:14px 16px 4px;}
.dwidget-k{font-size:10.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#8aa0b3;}
.dwidget-t{font-size:18px;font-weight:800;color:#16384f;margin-top:2px;}
.dwidget-open{flex:0 0 auto;background:#eef3f7;color:#1b6ca8;text-decoration:none;font-size:13px;font-weight:700;border-radius:9px;padding:7px 11px;}
.dwidget-open:active{background:#dde7f0;}
.dwidget-sub{padding:0 16px 10px;font-size:13px;color:#5b7488;font-weight:600;border-bottom:1px solid #eef3f7;}
.dwidget .dwt{flex:1 1 auto;min-height:0;}
.dwidget .dwt-body .dw-card:last-child{border-bottom:0;}
.dwidget-body{overflow-y:auto;-webkit-overflow-scrolling:touch;}
.dwidget-body .dw-card:last-child{border-bottom:0;}
.dwidget-empty{padding:24px 16px;text-align:center;color:#8aa0b3;}
.ddots{display:flex;justify-content:center;gap:7px;margin-top:10px;}
.ddot{width:8px;height:8px;border-radius:50%;background:#c4d2de;transition:background .15s,transform .15s;}
.ddot.on{background:var(--navy);transform:scale(1.25);}
.sec-h{max-width:560px;margin:18px auto 0;padding:0 16px;font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);}
/* Login-Auswahl (mehrere Login-Zugänge) */
.login-pick{padding:16px;}
.login-pick-h{font-size:13px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:4px 2px 12px;}
.login-item{display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:10px;text-decoration:none;color:inherit;box-shadow:0 2px 8px rgba(13,44,68,.06);}
.login-item:active{transform:scale(.99);}
.login-ic{flex:0 0 auto;width:42px;height:42px;border-radius:50%;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:800;}
.login-nm{flex:1;min-width:0;font-size:17px;font-weight:700;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.login-item svg{width:20px;height:20px;color:var(--muted);flex:0 0 auto;}
/* Alle Ansichten: nach Datum gruppiert (Akkordeon) + Info-Modal */
.dgroup{background:#fff;border:1px solid var(--line);border-radius:14px;margin-bottom:10px;overflow:hidden;box-shadow:0 2px 8px rgba(13,44,68,.05);}
.dgroup-h{width:100%;display:flex;align-items:center;gap:10px;background:none;border:0;cursor:pointer;padding:14px 16px;font:inherit;text-align:left;-webkit-tap-highlight-color:transparent;}
.dgroup-l{flex:1;min-width:0;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
.dgroup-d{font-size:16px;font-weight:800;color:var(--navy);}
.dgroup-rel{font-size:12px;font-weight:700;color:#fff;background:var(--blue);border-radius:999px;padding:2px 9px;}
.dgroup-n{flex:0 0 auto;background:#eef3f7;color:var(--navy);font-size:13px;font-weight:800;border-radius:999px;min-width:24px;height:24px;display:flex;align-items:center;justify-content:center;padding:0 7px;}
.dgroup-c{width:20px;height:20px;color:var(--muted);transition:transform .18s ease;flex:0 0 auto;}
.dgroup.open .dgroup-c{transform:rotate(180deg);}
.dgroup-body{display:none;border-top:1px solid var(--line);}
.dgroup.open .dgroup-body{display:block;}
.vrow{display:flex;align-items:stretch;border-bottom:1px solid var(--line);}
.vrow:last-child{border-bottom:0;}
.vrow-main{flex:1;min-width:0;display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit;padding:13px 14px;-webkit-tap-highlight-color:transparent;}
.vrow-main:active{background:#f4f8fb;}
.vmode{flex:0 0 auto;font-size:11px;font-weight:800;border-radius:7px;padding:3px 8px;text-transform:uppercase;letter-spacing:.02em;}
.vmode.m-anreise{background:#e7f1fb;color:#1b6ca8;} .vmode.m-abreise{background:#fdeee7;color:#b5651d;} .vmode.m-dashboard{background:#e9f7ee;background:#e6f4ea;color:#1d7a33;}
.vtext{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
.vlabel{font-size:15px;font-weight:700;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.vstatus{font-size:12px;color:var(--muted);font-weight:600;} .vstatus b{color:var(--navy);}
.vgo{width:18px;height:18px;color:var(--muted);flex:0 0 auto;}
.vinfo{flex:0 0 auto;width:50px;border:0;border-left:1px solid var(--line);background:none;color:var(--blue);cursor:pointer;display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent;}
.vinfo svg{width:22px;height:22px;} .vinfo:active{background:#eef3f7;}
.vmodal{position:fixed;inset:0;z-index:70;background:rgba(13,44,68,.45);display:flex;align-items:flex-end;}
.vsheet{background:#fff;width:100%;max-width:560px;margin:0 auto;border-radius:18px 18px 0 0;max-height:80vh;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom,0px);}
.vsheet-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 18px;font-size:17px;font-weight:800;color:var(--navy);border-bottom:1px solid var(--line);}
.vsheet-x{background:none;border:0;font-size:28px;line-height:1;color:var(--muted);cursor:pointer;}
.vsheet-b{overflow-y:auto;padding:16px 18px 22px;}
.vsheet-sub{font-size:12.5px;color:var(--muted);margin-bottom:12px;}
.vbadges{display:flex;flex-wrap:wrap;gap:8px;}
.vbadge{border-radius:999px;padding:7px 13px;font-size:13.5px;font-weight:700;border:1.5px solid transparent;}
.vbadge.b-mode{background:var(--navy);color:#fff;}
.vbadge.b-info{background:#eef3f7;color:var(--navy);border-color:#dde7f0;}
.vbadge.b-ok{background:#e6f4ea;color:#1d7a33;}
.vbadge.b-warn{background:#fdeee7;color:#b5651d;}
.vbadge.b-lock{background:#fdeaea;color:#a23030;}
/* „Alle anzeigen"-Button (weitere Termin-Tage nachladen) */
.term-more{width:100%;max-width:560px;margin:4px auto 0;display:flex;align-items:center;justify-content:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;font:inherit;font-size:15px;font-weight:700;color:var(--blue);cursor:pointer;box-shadow:0 2px 8px rgba(13,44,68,.05);-webkit-tap-highlight-color:transparent;}
.term-more:active{background:#f4f8fb;}
.tm-spin{width:18px;height:18px;border:2.5px solid #cdd9e4;border-top-color:var(--blue);border-radius:50%;animation:tmspin .7s linear infinite;}
@keyframes tmspin{to{transform:rotate(360deg);}}
.dw-card{background:#fff;padding:14px 16px 6px;border-bottom:1px solid #e6eef4;}
.dw-card.dw-sumcard{background:#f5f9fc;}
.dw-card-h{font-size:17px;font-weight:800;color:#16384f;}
.dw-muted{font-weight:600;opacity:.55;font-size:14px;}
.dw-sub{font-size:12.5px;opacity:.6;margin-top:1px;}
.dw-stat{margin-top:12px;}
.dw-stat-t{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;opacity:.6;margin-bottom:4px;}
.dw-stat.is-total .dw-stat-t{color:#1b6ca8;opacity:1;}
.dw-grid{display:flex;gap:4px;}
.dw-grid>div{flex:1;text-align:center;padding:4px 2px;}
.dw-grid .dl{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.03em;opacity:.55;}
.dw-grid .dv{display:block;font-size:23px;font-weight:800;line-height:1.15;margin-top:2px;color:#16384f;}
.dw-grid .dv.h{color:#c0392b;} .dw-grid .dv.a{color:#1d7a33;} .dw-grid .dv.v{color:#1b6ca8;}
.dw-grid>div.g .dv{color:#0d2c44;}
/* Getabbtes Widget (Terminal-Startseite) */
.dwt{display:flex;flex-direction:column;min-height:0;}
.dwt-tabs{display:flex;border-bottom:1px solid #eef3f7;overflow-x:auto;scrollbar-width:none;flex:0 0 auto;}
.dwt-tabs::-webkit-scrollbar{display:none;}
.dwt-tab{flex:1 0 auto;min-width:78px;border:0;background:none;padding:11px 12px;font:inherit;font-size:13px;font-weight:700;color:#5b7488;cursor:pointer;position:relative;-webkit-tap-highlight-color:transparent;white-space:nowrap;}
.dwt-tab.on{color:#1b6ca8;}
.dwt-tab.on::after{content:"";position:absolute;left:14%;right:14%;bottom:0;height:3px;border-radius:3px 3px 0 0;background:#1b6ca8;}
.dwt-body{overflow-y:auto;-webkit-overflow-scrolling:touch;min-height:0;}
.dwt-pane{display:none;} .dwt-pane.on{display:block;}
/* PIN-Screen: gemeinsame Komponente (pacim_pin_css), hier nicht nötig. */
.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="hd"><div class="wrap"><div class="k">Terminal</div><div class="t">ZZ_TERM</div></div></div>
<div class="sec-h">Alle Ansichten</div><div class="wrap">
<div class="dgroup open">
<button type="button" class="dgroup-h" aria-expanded="true">
<span class="dgroup-l"><span class="dgroup-d">Sa, 27.06.2026</span> <span class="dgroup-rel">heute</span></span>
<span class="dgroup-n">1</span>
<svg class="dgroup-c" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>
</button>
<div class="dgroup-body">
<div class="vrow">
<a class="vrow-main" href="https://seaside.pacim.de/day-list.php?t=0333f5ebdd0932723e42390e&term=ea55ed8567a3840f208b5cd4&d=2026-06-27">
<span class="vmode m-anreise">Anreisen</span>
<span class="vtext">
<span class="vlabel">Anreise lang</span>
<span class="vstatus"><b>16</b> / 202 angereist</span> </span>
<svg class="vgo" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 6l6 6-6 6"/></svg>
</a>
<button type="button" class="vinfo" data-title="Anreise lang · Sa, 27.06.2026" data-badges="[{"t":"Anreisen","k":"mode"},{"t":"Alle Stellplätze","k":"info"},{"t":"Status: offen\/angereist","k":"info"},{"t":"Check-in & Zahlung","k":"ok"},{"t":"gültig bis 15.07.2026 23:59","k":"warn"}]" aria-label="Berechtigungen ansehen">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 7.5v.5"/></svg>
</button>
</div>
</div>
</div>
<div class="dgroup">
<button type="button" class="dgroup-h" aria-expanded="false">
<span class="dgroup-l"><span class="dgroup-d">So, 28.06.2026</span> <span class="dgroup-rel">morgen</span></span>
<span class="dgroup-n">1</span>
<svg class="dgroup-c" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>
</button>
<div class="dgroup-body">
<div class="vrow">
<a class="vrow-main" href="https://seaside.pacim.de/day-list.php?t=0333f5ebdd0932723e42390e&term=ea55ed8567a3840f208b5cd4&d=2026-06-28">
<span class="vmode m-anreise">Anreisen</span>
<span class="vtext">
<span class="vlabel">Anreise lang</span>
</span>
<svg class="vgo" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 6l6 6-6 6"/></svg>
</a>
<button type="button" class="vinfo" data-title="Anreise lang · So, 28.06.2026" data-badges="[{"t":"Anreisen","k":"mode"},{"t":"Alle Stellplätze","k":"info"},{"t":"Status: offen\/angereist","k":"info"},{"t":"Check-in & Zahlung","k":"ok"},{"t":"gültig bis 15.07.2026 23:59","k":"warn"}]" aria-label="Berechtigungen ansehen">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 7.5v.5"/></svg>
</button>
</div>
</div>
</div>
<div class="dgroup">
<button type="button" class="dgroup-h" aria-expanded="false">
<span class="dgroup-l"><span class="dgroup-d">Fr, 03.07.2026</span></span>
<span class="dgroup-n">1</span>
<svg class="dgroup-c" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>
</button>
<div class="dgroup-body">
<div class="vrow">
<a class="vrow-main" href="https://seaside.pacim.de/day-list.php?t=0333f5ebdd0932723e42390e&term=ea55ed8567a3840f208b5cd4&d=2026-07-03">
<span class="vmode m-anreise">Anreisen</span>
<span class="vtext">
<span class="vlabel">Anreise lang</span>
</span>
<svg class="vgo" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 6l6 6-6 6"/></svg>
</a>
<button type="button" class="vinfo" data-title="Anreise lang · Fr, 03.07.2026" data-badges="[{"t":"Anreisen","k":"mode"},{"t":"Alle Stellplätze","k":"info"},{"t":"Status: offen\/angereist","k":"info"},{"t":"Check-in & Zahlung","k":"ok"},{"t":"gültig bis 15.07.2026 23:59","k":"warn"}]" aria-label="Berechtigungen ansehen">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 7.5v.5"/></svg>
</button>
</div>
</div>
</div>
<div id="termMore"></div>
<button type="button" class="term-more" id="termMoreBtn" data-offset="3">
<span class="tm-label">Alle anzeigen (5 weitere Tage)</span>
<span class="tm-spin d-none" id="termMoreSpin"></span>
</button>
<div class="foot">PaCIM Terminal</div>
</div>
<!-- Info-Modal: Berechtigungen/Filter einer Ansicht -->
<div class="vmodal d-none" id="vModal">
<div class="vsheet">
<div class="vsheet-h"><span id="vmTitle">Ansicht</span><button type="button" class="vsheet-x" id="vmClose">×</button></div>
<div class="vsheet-b"><div class="vsheet-sub">Berechtigungen & Filter dieser Ansicht</div><div class="vbadges" id="vmBadges"></div></div>
</div>
</div>
<script>(function(){
var modal=document.getElementById('vModal'), vmB=document.getElementById('vmBadges'), vmT=document.getElementById('vmTitle');
var KMAP={mode:'b-mode',info:'b-info',ok:'b-ok',warn:'b-warn',lock:'b-lock'};
function esc(s){return String(s==null?'':s).replace(/[&<>"]/g,function(c){return {'&':'&','<':'<','>':'>','"':'"'}[c];});}
// Akkordeon (Datum auf-/zuklappen) + Info-Button (Berechtigungs-Modal), delegiert.
document.addEventListener('click', function(e){
var h=e.target.closest('.dgroup-h'); if(h){ var g=h.closest('.dgroup'); var op=g.classList.toggle('open'); h.setAttribute('aria-expanded', op?'true':'false'); return; }
var inf=e.target.closest('.vinfo'); if(inf && modal){ vmT.textContent=inf.getAttribute('data-title')||'Ansicht'; var arr=[]; try{ arr=JSON.parse(inf.getAttribute('data-badges')||'[]'); }catch(_){}
vmB.innerHTML=arr.map(function(b){ return '<span class="vbadge '+(KMAP[b.k]||'b-info')+'">'+esc(b.t)+'</span>'; }).join(''); modal.classList.remove('d-none'); return; }
});
if(modal){ document.getElementById('vmClose').addEventListener('click',function(){ modal.classList.add('d-none'); });
modal.addEventListener('click',function(e){ if(e.target===modal) modal.classList.add('d-none'); }); }
// „Alle anzeigen": weitere Termin-Tage per AJAX nachladen (Ladesymbol bis fertig).
var moreBtn=document.getElementById('termMoreBtn'), moreBox=document.getElementById('termMore'), moreSpin=document.getElementById('termMoreSpin');
if(moreBtn && moreBox){ moreBtn.addEventListener('click', function(){
var off=moreBtn.getAttribute('data-offset')||'0'; moreBtn.disabled=true;
var lab=moreBtn.querySelector('.tm-label'); if(lab) lab.classList.add('d-none'); if(moreSpin) moreSpin.classList.remove('d-none');
var u=location.pathname+location.search; u+=(u.indexOf('?')>=0?'&':'?')+'action=more&offset='+encodeURIComponent(off);
fetch(u,{headers:{'X-Requested-With':'XMLHttpRequest'},cache:'no-store'}).then(function(r){return r.ok?r.text():'';}).then(function(html){
moreBox.insertAdjacentHTML('beforeend', html||''); moreBtn.parentNode.removeChild(moreBtn);
}).catch(function(){ moreBtn.disabled=false; if(lab) lab.classList.remove('d-none'); if(moreSpin) moreSpin.classList.add('d-none'); });
}); }
})();</script>
<script>(function(){function go(){var e=document.documentElement,r=e.requestFullscreen||e.webkitRequestFullscreen;if(r){try{r.call(e);}catch(_){}}}document.addEventListener("pointerdown",function f(e){if(e.target&&e.target.closest&&e.target.closest("a,button,input,textarea,select,label"))return;document.removeEventListener("pointerdown",f);go();},{passive:true});})();</script><style>
#pwi-ov{position:fixed;inset:0;z-index:9000;display:none;flex-direction:column;align-items:center;justify-content:flex-start;
background:linear-gradient(160deg,#0d2c44 0%,#11436b 60%,#1b6ca8 130%);color:#fff;overflow-y:auto;-webkit-overflow-scrolling:touch;
padding:calc(34px + env(safe-area-inset-top,0px)) 22px calc(28px + env(safe-area-inset-bottom,0px));
font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;}
#pwi-ov.pwi-show{display:flex;}
.pwi-card{width:100%;max-width:430px;margin:auto 0;text-align:center;}
.pwi-icon{width:96px;height:96px;border-radius:22px;box-shadow:0 12px 34px rgba(0,0,0,.32);margin:0 auto 18px;display:block;background:#fff;}
.pwi-name{font-size:25px;font-weight:800;letter-spacing:.2px;}
.pwi-sub{font-size:14.5px;opacity:.82;margin-top:6px;line-height:1.5;}
.pwi-steps{margin:22px 0 6px;text-align:left;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:16px;padding:16px 16px 6px;}
.pwi-step{display:flex;align-items:flex-start;gap:12px;padding:0 0 14px;}
.pwi-num{flex:0 0 auto;width:26px;height:26px;border-radius:50%;background:#fff;color:#0d2c44;font-weight:800;font-size:14px;display:flex;align-items:center;justify-content:center;margin-top:1px;}
.pwi-txt{font-size:14.5px;line-height:1.5;}
.pwi-txt b{font-weight:800;}
.pwi-ic{display:inline-flex;vertical-align:-5px;margin:0 1px;}
.pwi-ic svg{width:19px;height:19px;}
.pwi-install{display:none;width:100%;margin-top:18px;background:#fff;color:#0d2c44;border:0;border-radius:13px;padding:15px;font-size:16px;font-weight:800;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.pwi-install:active{transform:scale(.98);}
.pwi-install.pwi-show{display:block;}
.pwi-cont{display:inline-block;margin-top:18px;color:#cfe2f2;font-size:14px;font-weight:600;text-decoration:underline;cursor:pointer;background:none;border:0;-webkit-tap-highlight-color:transparent;}
.pwi-hint{font-size:12px;opacity:.6;margin-top:14px;}
</style>
<div id="pwi-ov" role="dialog" aria-label="App installieren">
<div class="pwi-card">
<img class="pwi-icon" src="https://seaside.pacim.de/assets/webapp/icon-192.png" alt="" width="96" height="96">
<div class="pwi-name">PaCIM Terminal</div>
<div class="pwi-sub">Für den schnellsten Zugriff diese App zum Startbildschirm hinzufügen – sie öffnet dann im Vollbild wie eine echte App.</div>
<div class="pwi-steps" id="pwi-ios" style="display:none">
<div class="pwi-step"><span class="pwi-num">1</span><span class="pwi-txt">Unten in der Safari-Leiste auf das <b>Teilen-Symbol</b>
<span class="pwi-ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16V4M8 8l4-4 4 4"/><path d="M5 12v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6"/></svg></span>
tippen.</span></div>
<div class="pwi-step"><span class="pwi-num">2</span><span class="pwi-txt">Im Menü <b>„Zum Home-Bildschirm"</b> wählen.</span></div>
<div class="pwi-step"><span class="pwi-num">3</span><span class="pwi-txt">Oben rechts auf <b>„Hinzufügen"</b> tippen – fertig.</span></div>
</div>
<div class="pwi-steps" id="pwi-android" style="display:none">
<div class="pwi-step"><span class="pwi-num">1</span><span class="pwi-txt">Oben rechts im Browser auf das <b>Menü</b>
<span class="pwi-ic"><svg viewBox="0 0 24 24" fill="currentColor"><circle cx="12" cy="5" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="12" cy="19" r="2"/></svg></span>
tippen.</span></div>
<div class="pwi-step"><span class="pwi-num">2</span><span class="pwi-txt"><b>„App installieren"</b> bzw. <b>„Zum Startbildschirm hinzufügen"</b> wählen.</span></div>
<div class="pwi-step"><span class="pwi-num">3</span><span class="pwi-txt">Mit <b>„Installieren"</b> bestätigen – fertig.</span></div>
</div>
<div class="pwi-steps" id="pwi-other" style="display:none">
<div class="pwi-step"><span class="pwi-num">1</span><span class="pwi-txt">Im Browser-Menü <b>„Zum Startbildschirm hinzufügen"</b> bzw. <b>„App installieren"</b> wählen.</span></div>
</div>
<button type="button" class="pwi-install" id="pwi-install">App installieren</button>
<br><button type="button" class="pwi-cont" id="pwi-cont">Im Browser fortfahren</button>
<div class="pwi-hint">Diese Anleitung erscheint nur im Browser, nicht in der installierten App.</div>
</div>
</div>
<script>(function(){
var ov=document.getElementById('pwi-ov'); if(!ov) return;
var KEY='pwiSkip';
function standalone(){ return (window.matchMedia&&window.matchMedia('(display-mode: standalone)').matches) || window.navigator.standalone===true; }
function embedded(){ try{ return window.self!==window.top; }catch(e){ return true; } }
var skipped=false; try{ skipped=sessionStorage.getItem(KEY)==='1'; }catch(e){}
if(standalone()||embedded()||skipped) return;
var ua=navigator.userAgent||'';
var isIOS=/iphone|ipad|ipod/i.test(ua) || (navigator.platform==='MacIntel' && navigator.maxTouchPoints>1);
var isAndroid=/android/i.test(ua);
document.getElementById( isIOS?'pwi-ios':(isAndroid?'pwi-android':'pwi-other') ).style.display='block';
// Ein-Tipp-Installation, falls der Browser sie anbietet (Chrome/Edge mit erfüllten Kriterien).
var deferred=null, btn=document.getElementById('pwi-install');
window.addEventListener('beforeinstallprompt', function(e){ e.preventDefault(); deferred=e; if(btn) btn.classList.add('pwi-show'); });
if(btn) btn.addEventListener('click', function(){ if(!deferred) return; deferred.prompt(); deferred.userChoice.then(function(c){ deferred=null; btn.classList.remove('pwi-show'); if(c&&c.outcome==='accepted') hide(); }); });
// Wurde die App während der Sitzung installiert → Overlay weg.
window.addEventListener('appinstalled', function(){ hide(); });
function hide(){ ov.classList.remove('pwi-show'); }
document.getElementById('pwi-cont').addEventListener('click', function(){ try{ sessionStorage.setItem(KEY,'1'); }catch(e){} hide(); });
ov.classList.add('pwi-show');
})();</script>
</body></html>