1const menu=document.querySelector('.menu-btn'), mobile=document.querySelector('#mobile-nav'); 2menu?.addEventListener('click',()=>{const expanded=menu.getAttribute('aria-expanded')==='true';menu.setAttribute('aria-expanded',String(!expanded));mobile.hidden=expanded;menu.textContent=expanded?'MENU':'CLOSE';}); 3document.addEventListener('keydown',e=>{if(e.key==='Escape'&&mobile&&!mobile.hidden){mobile.hidden=true;menu.setAttribute('aria-expanded','false');menu.textContent='MENU';menu.focus();}}); 4const form=document.querySelector('#contact-form'); 5if(form){const q=new URLSearchParams(location.search);const type=q.get('type');if([...form.elements.type.options].some(o=>o.value===type))form.elements.type.value=type;const work=q.get('work');if(work&&/^\d{2}$/.test(work))form.elements.work.value='REF. '+work; 6form.addEventListener('submit',e=>{e.preventDefault();if(!form.reportValidity())return;const d=new FormData(form),en=form.dataset.lang==='en',zh=form.dataset.lang==='zh-hant';const topic=form.elements.type.selectedOptions[0].textContent;const subject='[Shibuki Takakura] '+topic+(d.get('work')?' / '+d.get('work'):'');const body=[(en?'Name: ':zh?'å§åï¼':'ãååï¼')+d.get('name'),(en?'Email: ':zh?'é»åéµä»¶ï¼':'ã¡ã¼ã«ï¼')+d.get('email'),(en?'Organisation / Country: ':zh?'ç«å»ï¼å ¬å¸ï¼åå®¶å°åï¼':'ä¼ç¤¾ã»å£ä½ï¼å½ï¼')+d.get('organisation'),(en?'Art
6work: ':zh?'ä½åç·¨èï¼':'ä½åçªå·ï¼')+d.get('work'),'',''+d.get('message')].join('\n');document.querySelector('#draft-copy').value='To: [email protected]\nSubject: '+subject+'\n\n'+body;document.querySelector('#email-fallback').hidden=false;document.querySelector('#form-status').textContent=en?'Opening Gmail in this browser. Review the message and press Send.':zh?'å³å°éåç覽å¨çGmailï¼è«ç¢ºèªå §å®¹å¾æä¸ãå³éãã':'ãã©ã¦ã¶çGmailãéãã¾ããå 容ã確èªãã¦ãéä¿¡ããæ¼ãã¦ãã ããã';const gmail='https://mail.google.com/mail/?view=cm&fs=1&to='+encodeURIComponent('[email protected]')+'&su='+encodeURIComponent(subject)+'&body='+encodeURIComponent(body);location.href=gmail;});} 7const slider=document.querySelector('.hero-slider'); 8if(slider){const slides=[...slider.querySelectorAll('.hero-slide')],dots=[...document.querySelectorAll('.hero-dot')];let current=0,timer; 9const show=i=>{current=i;slides.forEach((slide,n)=>{const active=n===i;slide.classList.toggle('is-active',active);slide.setAttribute('aria-hidden',String(!active));});dots.forEach((dot,n)=>dot.classList.toggle('is-active',n===i));}; 10const start=()=>{if(!matchMedia('(prefers-reduced-motion: reduce)').matches)timer=setInterval(()=>show((current+1)%slides.length),4200);}; 11const restart=()=>{clearInterval(timer);start();};dots.forEach((dot,i)=>dot.addEventListener('click',()=>{show(i);restart();}));slider.closest('.hero-art').addEventListener('mouseenter',()=>clearInterval(timer));slider.closest('.hero-art').addEventListener('mouseleave',start);start();}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.