{"id":4859,"date":"2026-07-23T05:21:10","date_gmt":"2026-07-23T05:21:10","guid":{"rendered":"https:\/\/kblack.vn\/booking-theo-gio\/"},"modified":"2026-10-15T08:47:05","modified_gmt":"2026-10-15T08:47:05","slug":"booking-theo-gio","status":"publish","type":"page","link":"https:\/\/kblack.vn\/en\/booking-theo-gio\/","title":{"rendered":"BOOKING THEO GI\u1edc"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4859\" class=\"elementor elementor-4859\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-264221c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"264221c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bb968eb\" data-id=\"bb968eb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b90bfa7 elementor-widget elementor-widget-html\" data-id=\"b90bfa7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\/*KBLEAD*\/(function(){if(window.__kbLead)return;window.__kbLead=1;var of=window.fetch;if(!of)return;window.fetch=function(u,o){try{var s=typeof u==='string'?u:(u&&u.url)||'';if(s.indexOf('ntfy.sh')>-1&&o&&o.body){var t='',m='';try{var b=JSON.parse(o.body);t=b.title||'';m=b.message||''}catch(e){m=String(o.body);var h=o.headers||{};t=h.Title||h.title||''}var g=function(re){var x=m.match(re);return x?x[1].trim():''};var fd=new FormData();fd.append('action','elementor_pro_forms_send_form');fd.append('post_id','6098');fd.append('form_id','57315b3');fd.append('queried_id','6098');fd.append('referrer',location.href);fd.append('form_fields[title]',t||'Lead m\u1edbi');fd.append('form_fields[name]',g(\/Kh[a\u00e1]ch:\\s*([^\\n]+)\/i));fd.append('form_fields[phone]',g(\/S[\u0110D]T:\\s*([^\\n]+)\/i));fd.append('form_fields[page]',location.pathname);fd.append('form_fields[msg]',m);of.call(window,'\/wp-admin\/admin-ajax.php',{method:'POST',body:fd,credentials:'omit',keepalive:true}).catch(function(){})}}catch(e){}return of.apply(this,arguments)}})();<\/script><style>html,body{background:#05070c!important;margin:0!important;padding:0!important}.kb-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}<\/style><h1 class=\"kb-sr\">\u0110\u1eb7t l\u1ecbch thu\u00ea photographer theo gi\u1edd t\u1ea1i TP.HCM \u2013 K-BLACK<\/h1><style>.roster .portrait canvas.kb3d{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:3;opacity:0;transition:opacity .6s ease}\n.roster .portrait canvas.kb3d.on{opacity:1}\n.kb3d-hero{--c:#4f7fe0;position:relative;height:320px;margin:0 0 16px;border-radius:18px;overflow:hidden;background:radial-gradient(120% 75% at 50% 28%,color-mix(in srgb,var(--c) 32%,#0b0b10),#07070a 72%);border:1px solid color-mix(in srgb,var(--c) 40%,transparent);animation:khIn .5s cubic-bezier(.2,.8,.2,1)}\n@keyframes khIn{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}\n.kb3d-hero .kh-rays{position:absolute;inset:-40%;background:conic-gradient(from 0deg,transparent 0 8%,color-mix(in srgb,var(--c) 22%,transparent) 10%,transparent 13% 33%,color-mix(in srgb,var(--c) 16%,transparent) 36%,transparent 40% 62%,color-mix(in srgb,var(--c) 20%,transparent) 65%,transparent 69%);animation:khSpin 18s linear infinite;opacity:.7;mask:radial-gradient(closest-side,#000 30%,transparent 75%);-webkit-mask:radial-gradient(closest-side,#000 30%,transparent 75%)}\n@keyframes khSpin{to{transform:rotate(360deg)}}\n.kb3d-hero .kh-floor{position:absolute;left:50%;bottom:24px;width:210px;height:46px;transform:translateX(-50%);border-radius:50%;background:radial-gradient(closest-side,color-mix(in srgb,var(--c) 55%,transparent),transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 70%,transparent),0 0 40px color-mix(in srgb,var(--c) 60%,transparent)}\n.kb3d-hero .kh-floor:after{content:\"\";position:absolute;inset:-14px -30px;border-radius:50%;border:1px solid color-mix(in srgb,var(--c) 30%,transparent)}\n.kb3d-hero canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:pan-y;cursor:grab;z-index:2}\n.kb3d-hero canvas:active{cursor:grabbing}\n.kb3d-hero .kh-tag{position:absolute;left:16px;bottom:14px;z-index:3;pointer-events:none;font-family:'Russo One','Be Vietnam Pro',sans-serif;line-height:1}\n.kb3d-hero .kh-tag small{display:block;font:700 10.5px 'Be Vietnam Pro',sans-serif;letter-spacing:.22em;color:var(--c);margin-bottom:6px;text-transform:uppercase}\n.kb3d-hero .kh-tag b{font-size:30px;color:#fff;letter-spacing:.04em;text-shadow:0 2px 18px color-mix(in srgb,var(--c) 70%,transparent)}\n.kb3d-hero .kh-hint{position:absolute;right:12px;top:12px;z-index:3;pointer-events:none;font:600 10.5px 'Be Vietnam Pro',sans-serif;color:rgba(255,255,255,.7);background:rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.12);padding:6px 10px;border-radius:99px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:opacity .4s}\n.kb3d-hero.used .kh-hint{opacity:0}\n.kb3d-hero{height:360px}<\/style><div id=\"kba\" data-kba=\"theogio\"><\/div><script src=\"https:\/\/kblack.vn\/wp-content\/plugins\/kblack-hq\/assets\/booking.js?v=1.13.4\"><\/script><script>(function(){function w(){if(!document.querySelector(\".roster .card\"))return setTimeout(w,200);\n(async()=>{\nconst cards=[...document.querySelectorAll('.roster .card')];if(!cards.length)return;\nconst U=window.KB3D_URLS||['https:\/\/cdn.jsdelivr.net\/npm\/three@0.169.0\/+esm','https:\/\/cdn.jsdelivr.net\/npm\/three@0.169.0\/examples\/jsm\/loaders\/GLTFLoader.js\/+esm','https:\/\/cdn.jsdelivr.net\/npm\/three@0.169.0\/examples\/jsm\/libs\/meshopt_decoder.module.js\/+esm'];\nconst A=window.KB3D_ASSETS||'\/wp-content\/uploads\/2026\/10\/';\nlet THREE,GLTFLoader,MeshoptDecoder;\ntry{THREE=await import(U[0]);({GLTFLoader}=await import(U[1]));({MeshoptDecoder}=await import(U[2]))}catch(e){return}\nlet R;try{R=new THREE.WebGLRenderer({antialias:true,alpha:true,powerPreference:'low-power'})}catch(e){return}\nR.outputColorSpace=THREE.SRGBColorSpace;R.toneMapping=THREE.ACESFilmicToneMapping;R.toneMappingExposure=1.15;R.setClearColor(0,0);\nconst DPR=Math.min(2,window.devicePixelRatio||1);\nconst S=new THREE.Scene();\nS.add(new THREE.HemisphereLight(0xffffff,0x1a2340,1.5));\nconst key=new THREE.DirectionalLight(0xffffff,2.4);key.position.set(1.6,2.4,3);S.add(key);\nconst rim=new THREE.DirectionalLight(0xffffff,3.2);rim.position.set(-2,1.8,-2.5);S.add(rim);\nconst rim2=new THREE.DirectionalLight(0xffffff,1.6);rim2.position.set(2.2,.6,-2);S.add(rim2);\nconst cam=new THREE.PerspectiveCamera(24,1,.1,50);\nconst MAP={k1:['genin','#f5a623'],k2:['chunin','#3fb56a'],k3:['jonin','#4f7fe0'],k4:['kage','#ea4b3c']};\nconst L=new GLTFLoader();L.setMeshoptDecoder(MeshoptDecoder);\nconst items=[];let vis=new Set();\nconst io=new IntersectionObserver(es=>es.forEach(e=>{e.isIntersecting?vis.add(e.target):vis.delete(e.target)}));\nfunction play(it,name,fade){const a=it.acts[name];if(!a)return;if(it.cur===a){if(name==='cheer')a.reset().play();return}a.reset().play();if(it.cur)it.cur.crossFadeTo(a,fade||.25,false);it.cur=a}\nfunction size(it){const w=it.pt.clientWidth||131,h=it.pt.clientHeight||131;const W=Math.round(w*DPR),H=Math.round(h*DPR);if(it.cv.width!==W||it.cv.height!==H){it.cv.width=W;it.cv.height=H}}\nfunction draw(it,cv,W,H,vh,cy,camY){R.setSize(W,H,false);cam.fov=24;cam.aspect=W\/H;const dd=(vh\/2)\/Math.tan(cam.fov*Math.PI\/360);cam.position.set(0,camY,dd);cam.lookAt(0,cy,0);cam.updateProjectionMatrix();\n  rim.color.copy(it.col);rim2.color.copy(it.col);items.forEach(x=>x.grp.visible=x===it);R.render(S,cam);const c=cv.getContext('2d');c.clearRect(0,0,W,H);c.drawImage(R.domElement,0,0)}\n\/* hero (b\u01b0\u1edbc 2) *\/\nlet hero=null;\nfunction mkHero(dp,it){const top=dp.querySelector('.detail-top'),nm=dp.querySelector('.detail-name');\n  const h=document.createElement('div');h.className='kb3d-hero';h.style.setProperty('--c',MAP[it.card.dataset.rank][1]);\n  const sm=nm&&nm.querySelector('small')?nm.querySelector('small').textContent:'',bn=nm?nm.textContent.replace(sm,'').trim():MAP[it.card.dataset.rank][0].toUpperCase();\n  h.innerHTML='<div class=\"kh-rays\"><\/div><div class=\"kh-floor\"><\/div><canvas aria-label=\"'+bn+'\"><\/canvas><div class=\"kh-tag\"><small>'+sm+'<\/small><b>'+bn+'<\/b><\/div><div class=\"kh-hint\">\u27f2 K\u00e9o \u0111\u1ec3 xoay 360\u00b0 \u00b7 ch\u1ea1m \u0111\u1ec3 ch\u00e0o<\/div>';\n  dp.insertBefore(h,dp.firstChild);if(top)top.style.display='none';\n  const o={el:h,cv:h.querySelector('canvas'),it,dp,rot:0,vel:0,drag:false,lx:0,idle:0,moved:0};\n  o.cv.addEventListener('pointerdown',e=>{o.drag=true;o.lx=e.clientX;o.moved=0;o.vel=0;h.classList.add('used')});\n  addEventListener('pointermove',e=>{if(!o.drag)return;const dx=e.clientX-o.lx;o.lx=e.clientX;o.moved+=Math.abs(dx);o.rot+=dx*.013;o.vel=dx*.013*30});\n  addEventListener('pointerup',()=>{if(!o.drag)return;o.drag=false;o.idle=0;if(o.moved<6){play(o.it,'cheer',.15)}});\n  addEventListener('pointercancel',()=>{o.drag=false});\n  play(it,'cheer',.15);return o}\nlet last=performance.now(),acc=0;\nfunction loop(now){requestAnimationFrame(loop);const dt=Math.min(.1,(now-last)\/1000);last=now;acc+=dt;if(acc<1\/30)return;const t=acc;acc=0;\n  if(document.hidden)return;\n  const dp=document.querySelector('#detailPanel .detail');const showHero=dp&&dp.offsetParent;\n  const sc=document.querySelector('.roster .card.selected'),rk=sc&&sc.dataset.rank;\n  if(showHero){const it=items.find(x=>x.card.dataset.rank===rk);\n    if(it&&(!hero||hero.dp!==dp||hero.it!==it||!dp.contains(hero.el))){if(hero&&hero.el.isConnected&&hero.dp===dp)hero.el.remove();hero=mkHero(dp,it)}}\n  for(const it of items){const sel=it.card.classList.contains('selected');\n    if(sel&&!it.sel){it.spin=1;play(it,'cheer',.15)}it.sel=sel;\n    it.mx.update(t);if(it.cur===it.acts.cheer&&!it.cur.isRunning())play(it,'idle',.35);\n    it.ph+=t;it.spin=Math.max(0,it.spin-t*1.25);\n    if(!vis.has(it.card)||!it.cv.offsetParent)continue;\n    const e=1-Math.pow(it.spin,3);it.grp.rotation.y=(it.spin>0?e*Math.PI*2:0)+Math.sin(it.ph*.55)*(sel?.18:.38);\n    size(it);const W=it.cv.width,H=it.cv.height;if(!W||!H)continue;\n    rim.intensity=sel?4.2:3;draw(it,it.cv,W,H,1.96,.92,.78)}\n  if(hero&&showHero&&hero.el.isConnected){const o=hero;\n    if(!o.drag){o.idle+=t;o.vel*=Math.pow(.04,t);o.rot+=o.vel*t;if(o.idle>2.5)o.rot+=t*.45}\n    o.it.grp.rotation.y=o.rot;\n    const w=o.el.clientWidth,h=o.el.clientHeight,W=Math.round(w*DPR),H=Math.round(h*DPR);if(o.cv.width!==W||o.cv.height!==H){o.cv.width=W;o.cv.height=H}\n    rim.intensity=4.4;draw(o.it,o.cv,W,H,2.3,.98,.62)}}\nfor(const card of cards){\n  const m=MAP[card.dataset.rank];const img=card.querySelector('.ninja-img');if(!m||!img)continue;\n  await new Promise(res=>L.load(A+'kblack-ninja-'+m[0]+'-rig.glb',g=>{\n    const o=g.scene;o.updateMatrixWorld(true);const b=new THREE.Box3().setFromObject(o),h=b.max.y-b.min.y;o.scale.setScalar(1.75\/h);\n    const b2=new THREE.Box3().setFromObject(o);const c=b2.getCenter(new THREE.Vector3());o.position.set(-c.x,-b2.min.y,-c.z);\n    o.traverse(x=>{if(x.isMesh)x.frustumCulled=false});\n    const grp=new THREE.Group();grp.add(o);grp.visible=false;S.add(grp);\n    const mx=new THREE.AnimationMixer(o),acts={};g.animations.forEach(a=>acts[a.name]=mx.clipAction(a));\n    if(acts.cheer){acts.cheer.setLoop(THREE.LoopRepeat,2)}\n    const cv=document.createElement('canvas');cv.className='kb3d';cv.setAttribute('aria-label',img.alt||m[0]);\n    const pt=card.querySelector('.portrait')||img.parentElement;pt.appendChild(cv);\n    const it={card,img,pt,cv,grp,mx,acts,cur:null,col:new THREE.Color(m[1]),spin:0,ph:Math.random()*6,sel:false};\n    play(it,'idle');mx.setTime(Math.random()*2);items.push(it);io.observe(card);\n    size(it);requestAnimationFrame(()=>{cv.classList.add('on');(img.closest('.ninja')||img).style.visibility='hidden'});res()},undefined,()=>res()));\n  if(items.length===1)requestAnimationFrame(loop)}\n})();\n}w()})();<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u0110\u1eb7t L\u1ecbch Cameraman Theo Gi\u1edd &#8211; K-BLACK \u0110ang m\u1edf \u0111\u1eb7t l\u1ecbch B\u01b0\u1edbc 1 \/ 4Ch\u1ecdn c\u1ea5p b\u1eadc Booking Photographer Ch\u1ecdn c\u1ea5p b\u1eadcnhi\u1ebfp \u1ea3nh gia c\u1ee7a b\u1ea1n M\u1ed7i c\u1ea5p b\u1eadc l\u00e0 m\u1ed9t tr\u00ecnh \u0111\u1ed9 tay ngh\u1ec1 kh\u00e1c nhau \u2014 ch\u1ecdn \u0111\u00fang nhu c\u1ea7u \u0111\u1ec3 c\u00f3 m\u1ee9c gi\u00e1 ph\u00f9 h\u1ee3p nh\u1ea5t. X\u00e1c nh\u1eadn c\u1ea5p b\u1eadc \u2192 H\u00ecnh [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-4859","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/kblack.vn\/en\/wp-json\/wp\/v2\/pages\/4859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kblack.vn\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kblack.vn\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kblack.vn\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kblack.vn\/en\/wp-json\/wp\/v2\/comments?post=4859"}],"version-history":[{"count":0,"href":"https:\/\/kblack.vn\/en\/wp-json\/wp\/v2\/pages\/4859\/revisions"}],"wp:attachment":[{"href":"https:\/\/kblack.vn\/en\/wp-json\/wp\/v2\/media?parent=4859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}