Najbliższy termin na skaling
Laduje wolne terminy…
#hig-terminy{font-family:Inter,system-ui,Segoe UI,Roboto,Arial,sans-serif;max-width:1080px;margin:0 auto;color:#164359}#hig-terminy a.hig-hero{text-decoration:none;color:inherit;cursor:pointer;transition:background .15s,border-color .15s}#hig-terminy a.hig-hero:hover{background:#e1f6e9;border-color:#9fdbb6}#hig-terminy .hig-hero{display:flex;justify-content:center;text-align:center;align-items:center;gap:26px;flex-wrap:wrap;background:#eafaf0;border:1px solid #bfe9cf;border-radius:18px;padding:22px 28px}#hig-terminy .hig-hero-left{flex:0 1 auto}#hig-terminy .hig-hero-lab{display:flex;justify-content:center;align-items:center;gap:9px;font-size:12px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#0f7a3d;margin:0 0 8px}#hig-terminy .hig-dot{width:11px;height:11px;border-radius:50%;background:#16a34a;flex:0 0 auto;animation:higpulse 2s infinite}@keyframes higpulse{0%{box-shadow:0 0 0 0 rgba(22,163,74,.5)}70%{box-shadow:0 0 0 9px rgba(22,163,74,0)}100%{box-shadow:0 0 0 0 rgba(22,163,74,0)}}#hig-terminy .hig-hero-main{display:flex;justify-content:center;align-items:baseline;gap:11px;flex-wrap:wrap}#hig-terminy .hig-hero-day{font-size:34px;font-weight:800;color:#164359;line-height:1.02}#hig-terminy .hig-hero-lab2{font-size:18px;color:#5b6b82;font-weight:600}#hig-terminy .hig-hero-time{font-size:38px;font-weight:800;color:#16a34a;line-height:1.02}#hig-terminy .hig-hero-sub{font-size:13px;color:#5a7860;margin:9px 0 0;font-weight:600}@media(max-width:640px){#hig-terminy .hig-hero{padding:18px 18px;gap:16px}#hig-terminy .hig-hero-day{font-size:25px}#hig-terminy .hig-hero-time{font-size:30px}}(function(){
/* ====== KONFIG ====== */
var NEED=1; /* ile slotow z rzedu: 1 = 30 min */
var STEP=30; /* dlugosc jednego slotu w arkuszu */
var BUSY=true; /* true = X znaczy ZAJETE, false = X znaczy WOLNE */
var SUB=`Scaling · wizyta ok. 30 min`;
var LAB=`Scaling`;
var LINK=`tel:+48713440046`;
/* ==================== */var A=String.fromCharCode(38);
var KEY=`hig_csv_v3`;
var TTL=600000;
var BASE=`https://docs.google.com/spreadsheets/d/e/2PACX-1vSuaaxcy2ApoPwMriZzjqiPh7fHhzovyT7AYWyYyj0hEs9r1LYI_wb1WffdqlPMdDF7aMas5vqvFjhT/pub?gid=201891074`;
var CSVURL=BASE+A+`single=true`+A+`output=csv`;
var DNI=[`Niedziela`,`Poniedziałek`,`Wtorek`,`Środa`,`Czwartek`,`Piątek`,`Sobota`];
var YES=`|true|prawda|x|xx|1|tak|v|y|yes|wolne|wolny|+|`;
var box=document.getElementById(`hig-terminy`);function lt(a,b){return Math.sign(a-b)===-1;}
function gt(a,b){return Math.sign(a-b)===1;}
function ge(a,b){return Math.sign(a-b)!==-1;}function isYes(s){return ge(YES.indexOf(`|`+String(s).trim().toLowerCase()+`|`),0);}function t2m(s){
s=String(s).trim().replace(/\./g,`:`);
var p=s.split(`:`);
var h=parseInt(p[0],10);
var m=gt(p.length,1)?parseInt(p[1],10):0;
if(isNaN(h))return null;
if(isNaN(m))m=0;
return h*60+m;
}
function m2t(m){var h=Math.floor(m/60),mm=m%60;return h+`:`+String(mm).padStart(2,`0`);}function pd(s){
s=String(s).trim();
var m=s.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/);
if(m)return new Date(+m[1],+m[2]-1,+m[3]);
m=s.match(/^(\d{1,2})[.](\d{1,2})[.](\d{4})/);
if(m)return new Date(+m[3],+m[2]-1,+m[1]);
m=s.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})/);
if(m)return new Date(+m[3],+m[1]-1,+m[2]);
return null;
}
function dm(d){return String(d.getDate()).padStart(2,`0`)+`.`+String(d.getMonth()+1).padStart(2,`0`);}
function dayDiff(d){
var n=new Date();
var a=new Date(n.getFullYear(),n.getMonth(),n.getDate()).getTime();
var b=new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime();
return Math.round((b-a)/86400000);
}
function rfull(d){
var i=dayDiff(d);
if(i===0)return `Dziś`;
if(i===1)return `Jutro`;
return DNI[d.getDay()]+` `+dm(d);
}function el(tag,cls,txt){var e=document.createElement(tag);if(cls)e.className=cls;if(txt!==undefined)e.textContent=txt;return e;}
function heroLink(){var a=el(`a`,`hig-hero`);a.setAttribute(`href`,LINK);return a;}function splitRow(line){
var out=[],cur=„,q=false;
for(var i=0;lt(i,line.length);i++){
var ch=line.charAt(i);
if(ch===`”`){
if(q){ if(line.charAt(i+1)===`”`){cur+=`”`;i++;} else {q=false;} }
else {q=true;}
} else if(ch===`,`){ if(q){cur+=ch;} else {out.push(cur);cur=„;} }
else {cur+=ch;}
}
out.push(cur);
return out;
}function parseCSV(txt){
var rows=txt.replace(/\r/g,„).split(`\n`).filter(function(l){return l.trim()!==„;});
if(lt(rows.length,2))return [];
var head=splitRow(rows[0]);
var cols=[];
for(var c=1;lt(c,head.length);c++){cols.push({c:c,m:t2m(head[c])});}
var days={};
for(var r=1;lt(r,rows.length);r++){
var cells=splitRow(rows[r]);
var d=pd(cells[0]);
if(!d)continue;
var key=d.getTime();
if(!days[key])days[key]={d:d,set:{},list:[]};
for(var k=0;lt(k,cols.length);k++){
var col=cols[k];
if(col.m===null)continue;
var raw=lt(col.c,cells.length)?cells[col.c]:null;
var wolne=BUSY?(raw!==null)&&(!isYes(raw)):isYes(raw);
if(!wolne)continue;
if(days[key].set[col.m])continue;
days[key].set[col.m]=1;
days[key].list.push(col.m);
}
}
var out=[];
Object.keys(days).forEach(function(k){out.push(days[k]);});
out.sort(function(a,b){return Math.sign(a.d.getTime()-b.d.getTime());});
out.forEach(function(x){x.list.sort(function(a,b){return Math.sign(a-b);});});
return out;
}function firstFree(days){
var cut=new Date().getTime()+15*60000;
for(var i=0;lt(i,days.length);i++){
var day=days[i];
for(var j=0;lt(j,day.list.length);j++){
var m=day.list[j];
var ok=true;
for(var n=0;lt(n,NEED);n++){ if(!day.set[m+n*STEP]){ok=false;break;} }
if(!ok)continue;
if(!gt(day.d.getTime()+m*60000,cut))continue;
return {d:day.d,m:m};
}
}
return null;
}function showTerm(f){
var hero=heroLink();
var left=el(`div`,`hig-hero-left`);
var lab=el(`div`,`hig-hero-lab`);
lab.appendChild(el(`span`,`hig-dot`));
lab.appendChild(el(`span`,null,`Najbliższy wolny termin`));
left.appendChild(lab);
var main=el(`div`,`hig-hero-main`);
main.appendChild(el(`span`,`hig-hero-day`,rfull(f.d)));
main.appendChild(el(`span`,`hig-hero-lab2`,`o`));
main.appendChild(el(`span`,`hig-hero-time`,m2t(f.m)));
left.appendChild(main);
left.appendChild(el(`div`,`hig-hero-sub`,SUB));
hero.appendChild(left);
box.textContent=„;
box.appendChild(hero);
}function showPhone(){
var hero=heroLink();
var left=el(`div`,`hig-hero-left`);
var lab=el(`div`,`hig-hero-lab`);
lab.appendChild(el(`span`,`hig-dot`));
lab.appendChild(el(`span`,null,LAB));
left.appendChild(lab);
var main=el(`div`,`hig-hero-main`);
main.appendChild(el(`span`,`hig-hero-day`,`Zapytaj o termin`));
left.appendChild(main);
left.appendChild(el(`div`,`hig-hero-sub`,`Zadzwoń: 71 344 00 46`));
hero.appendChild(left);
box.textContent=„;
box.appendChild(hero);
}function render(txt){
var f=firstFree(parseCSV(txt));
if(f){showTerm(f);}else{showPhone();}
}try{var c0=localStorage.getItem(KEY);if(c0){var o=JSON.parse(c0);if(lt(Date.now()-o.t,TTL))render(o.d);}}catch(e){}var ctrl=new AbortController();
var killer=setTimeout(function(){ctrl.abort();},8000);
fetch(CSVURL+A+`t=`+Date.now(),{signal:ctrl.signal})
.then(function(r){clearTimeout(killer);if(!r.ok)throw 0;return r.text();})
.then(function(txt){try{localStorage.setItem(KEY,JSON.stringify({t:Date.now(),d:txt}));}catch(e){}render(txt);})
.catch(function(){clearTimeout(killer);if(!box.querySelector(`.hig-hero`)){showPhone();}});
})();