/* มุมนี้ดี — one-screen photo wall, built to behave like nrly.co */
:root{
  --bg:#fff; --ink:#2b2a29; --card:#ffffff; --theme-1:#2b2a29; --theme-2:#2b2a29;
  --col:clamp(230px,22vw,350px); --gap:16px; --pad:10px; --sans:"Inter Tight",Kanit,system-ui,sans-serif;
  --expo:cubic-bezier(.16,1,.3,1); --p3:cubic-bezier(.215,.61,.355,1); --io:cubic-bezier(.645,.045,.355,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden;background:var(--bg)}
body{color:var(--ink);font:400 13px/1.3 var(--sans);-webkit-font-smoothing:antialiased;
  touch-action:none;cursor:ns-resize;user-select:none;-webkit-user-select:none}
body.modal-open{cursor:auto}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid var(--ink);outline-offset:3px}

/* intro colour mask (nrly: full-screen card colour, fades after load) */
.morph{position:fixed;inset:0;z-index:1;background:var(--card);pointer-events:none;transition:background-color .6s ease}
.morph-top .morph{z-index:79}

/* ---------- the wall ---------- */
.hero{position:fixed;inset:0;overflow:hidden}
.wall{position:absolute;inset:0}
.slot{position:absolute;left:0;top:0;padding:var(--pad);will-change:transform;backface-visibility:hidden}
.tile{opacity:0;transition:opacity 1.2s ease}
.tile.in{opacity:1}
.tile__in{position:relative;width:100%;height:100%;overflow:hidden;background:#eee}
.tile img{width:100%;height:100%;object-fit:cover;pointer-events:none;filter:saturate(.82) contrast(.86) brightness(1.08)}
.cap{position:absolute;left:12px;bottom:12px;right:12px;display:flex;gap:6px;flex-wrap:wrap;opacity:0;transform:translateY(6px);transition:.4s var(--p3)}
.tile:hover .cap{opacity:1;transform:none}
.cap span{font:500 10.5px/1 var(--sans);letter-spacing:.03em;text-transform:uppercase;background:#fff;color:var(--ink);padding:7px 10px;border-radius:99px}

/* ---------- name card (fixed in the middle; the wall moves behind it) ---------- */
.slot--card{z-index:2}
.card{width:100%;height:100%;
  background:var(--card);padding:clamp(18px,2vw,30px);display:flex;flex-direction:column;justify-content:space-between;
  cursor:pointer;outline:0;opacity:0;transition:opacity 1.2s ease .3s,background-color .6s ease}
.ready .card{opacity:1}
.card h1{margin:0 -4px;opacity:0;transform:translate3d(0,-14px,0);will-change:transform,opacity;transition:opacity 1.6s ease .5s,transform 2s var(--expo) .5s}
.ready .card h1{opacity:1;transform:none}
.card h1 img{width:100%;height:auto}
.bio{font:400 clamp(11px,.85vw,13.5px)/1.25 var(--sans);text-transform:uppercase;color:var(--theme-2);max-width:32ch;transition:color .6s ease}
.bio .sub{display:block;margin:.2em 0 1.6em;font-family:Kanit,var(--sans)}
.ul{position:relative;color:var(--theme-1);transition:color .6s ease}
.ul:before{content:"";position:absolute;left:0;bottom:1px;width:100%;border-top:1px solid currentColor;transform:scaleX(0);transform-origin:left;transition:transform .7s var(--expo)}
.card:hover .ul:before,a.ul:hover:before{transform:scaleX(1)}
.bio{opacity:0;transform:translate3d(0,14px,0);will-change:transform,opacity;transition:opacity 1.6s ease .8s,transform 2s var(--expo) .8s,color .6s ease}
.ready .bio{opacity:1;transform:none}

/* ---------- contact pills (nrly: hovered pill opens black with the address, others step aside) ---------- */
.chips{position:fixed;left:0;right:0;bottom:22px;z-index:85;display:flex;justify-content:center;gap:.7em;pointer-events:none;
  opacity:0;transition:opacity 2s ease 1s;font-size:clamp(13px,1.05vw,16px)}
.ready .chips{opacity:1}
.chip{position:relative;display:block;height:2.25em;width:calc(var(--w0,4em) + 2em);border-radius:999px;background:#fff;overflow:hidden;
  pointer-events:auto;cursor:pointer;text-transform:uppercase;transition:width .65s var(--p3),background .65s var(--p3)}
.chip span{position:absolute;top:0;height:100%;display:flex;align-items:center;white-space:nowrap;padding-top:.1em;transition:transform .65s var(--p3),opacity .4s}
.chip__a{left:1em;color:var(--ink)}
.chip__b{left:1.8em;color:#fff;opacity:0;transform:translateX(20px)}
.chip:hover,.chip:focus-visible{width:calc(var(--w1,8em) + 2.8em);background:#000}
.chip:hover .chip__a,.chip:focus-visible .chip__a{opacity:0}
.chip:hover .chip__b,.chip:focus-visible .chip__b{opacity:1;transform:none}
@media (hover:none){.chip:hover{width:calc(var(--w0,4em) + 2em);background:#fff}.chip:hover .chip__a{opacity:1}.chip:hover .chip__b{opacity:0}}

/* ---------- profile (card grows to full screen) ---------- */
.modal{position:fixed;inset:0;z-index:80;visibility:hidden;pointer-events:none}
.modal.open{visibility:visible;pointer-events:auto}
.modal__logo{position:absolute;left:5rem;top:5rem;width:min(38vw,620px);transform-origin:0 0}
.modal-open .card h1{visibility:hidden}
.modal__content{position:absolute;right:5.3rem;top:calc(37.5vh);width:calc(50% - 5.3rem);display:flex;flex-direction:column;align-items:flex-start;color:var(--theme-2)}
.skills{list-style:none;display:flex;flex-direction:column}
.skills li{overflow:hidden;font:400 clamp(26px,2.8vw,40px)/1.15 var(--sans);letter-spacing:-.035em}
.skills span,.m-p span,.m-foot span{display:block;transform:translateY(105%);transition:transform 1s var(--expo)}
.skills i{font-style:normal;display:inline-flex;align-items:center;justify-content:center;height:1.75em;min-width:1.75em;margin:.4em .65em 0 0;font-size:.35em;border:1px solid currentColor;border-radius:99px;vertical-align:top}
.m-p{overflow:hidden;font:400 clamp(13px,1.1vw,18px)/1.35 var(--sans);text-transform:uppercase;margin-top:1.6em;max-width:36em}
.m-p:first-of-type{margin-top:3rem}
.m-p .ul{color:var(--theme-1)}
.m-foot{position:absolute;bottom:5rem;overflow:hidden;font:400 clamp(13px,1.1vw,18px)/1.2 var(--sans);text-transform:uppercase;color:var(--theme-2)}
.m-foot--l{left:5rem}.m-foot--r{right:5rem}
.modal.in .skills span,.modal.in .m-p span,.modal.in .m-foot span{transform:none}
.modal.in .skills li:nth-child(1) span{transition-delay:1s}.modal.in .skills li:nth-child(2) span{transition-delay:1.05s}
.modal.in .skills li:nth-child(3) span{transition-delay:1.1s}.modal.in .skills li:nth-child(4) span{transition-delay:1.15s}
.modal.in .m-p span{transition-delay:1.2s}.modal.in .m-p + .m-p span{transition-delay:1.25s}.modal.in .m-foot span{transition-delay:1.3s}
/* close: a small white circle with an arrow; on hover a black pill slides out to the left with "CLOSE"
   and the circle shrinks inside it (same behaviour as the ref) */
.close{position:absolute;right:5rem;top:5rem;height:2.6em;width:2.6em;font-size:16px;text-transform:uppercase;padding:0;
  opacity:0;transform:scale(.6);transition:opacity .6s ease,transform .65s var(--io)}
.close .c-pill{position:absolute;right:0;top:0;height:100%;width:2.6em;border-radius:99px;background:#000;color:#fff;overflow:hidden;
  display:flex;align-items:center;padding-left:1.1em;white-space:nowrap;transition:width .65s cubic-bezier(.215,.61,.355,1)}
.close .c-pill span{opacity:0;transform:translateX(14px);transition:opacity .4s,transform .65s cubic-bezier(.215,.61,.355,1);font-size:.85em;padding-top:.1em}
.close .c-dot{position:absolute;right:0;top:0;width:2.6em;height:2.6em;border-radius:99px;background:#000;color:#fff;display:grid;place-items:center;
  font-size:1em;line-height:1;transition:transform .65s cubic-bezier(.215,.61,.355,1),background .3s,color .3s}
.close:hover .c-pill,.close:focus-visible .c-pill{width:7.4em}
.close:hover .c-pill span,.close:focus-visible .c-pill span{opacity:1;transform:none}
.close:hover .c-dot,.close:focus-visible .c-dot{transform:scale(.62);background:#fff;color:#000}
.modal.in .close{opacity:1;transform:none;transition-delay:1.5s}
@media (orientation:portrait){
  .modal__logo{left:2rem;top:3rem;width:70vw}
  .modal__content{left:2rem;right:2rem;width:auto;top:auto;bottom:8rem}
  .skills li{font-size:7vw}
  .close{right:1.5rem;top:1.5rem;bottom:auto}
  .m-foot{display:none}
}

/* ---------- photo viewer ---------- */
.lb{position:fixed;inset:0;z-index:90;background:rgba(255,255,255,.92);backdrop-filter:blur(10px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;
  opacity:0;pointer-events:none;transition:opacity .45s;cursor:zoom-out;padding:24px}
.lb.open{opacity:1;pointer-events:auto}
.lb img{max-width:min(1200px,92vw);max-height:78vh;transform:scale(.97);transition:transform .7s var(--expo)}
.lb.open img{transform:none}
.lb .cap{position:static;opacity:1;transform:none;justify-content:center}

/* ---------- film grain over everything (nrly: animated noise pass) ---------- */
.grain{position:fixed;inset:-128px;pointer-events:none;z-index:200;opacity:.06;mix-blend-mode:overlay;background-repeat:repeat;background-size:192px;
  will-change:transform;animation:grain .4s steps(1) infinite}
@keyframes grain{0%{transform:translate(0,0)}25%{transform:translate(-37px,23px)}50%{transform:translate(29px,-41px)}75%{transform:translate(-17px,-29px)}}

@media (max-width:640px){
  :root{--col:46vw;--gap:10px}
  .card{padding:20px}
  .chips{bottom:3rem}
  .bio{font-size:11px}
}
@media (prefers-reduced-motion:reduce){
  .grain{animation:none}
  .card h1,.bio,.chips{transition:none;opacity:1;transform:none}
}

/* profile open: card text slides away */
.modal-open .card .bio{opacity:0;transform:translateY(-24px);transition:opacity .45s ease,transform .65s cubic-bezier(.645,.045,.355,1)}

/* ---------- WebGL version: canvas draws photos + card sheet; HTML card text floats on top ---------- */
.gl{position:absolute;inset:0;width:100%;height:100%;display:block}
.is-gl .grain{display:none}
.card--gl{position:fixed;left:0;top:0;z-index:5;background:transparent!important;will-change:transform}
.modal-open .card--gl{z-index:5}

.modal-open .card--gl{opacity:0;transition:opacity .3s}
.chip{box-shadow:inset 0 0 0 1px rgba(0,0,0,.14)}
.close .c-dot i{font-style:normal;font-size:1.25em;line-height:1;display:block;transform:translateY(-.04em)}

/* ---------- profile: more life ---------- */
.skills li{cursor:default}
.skills li span{transition:transform 1s var(--expo),padding-left .5s var(--p3)}
.skills i{transition:background .35s,color .35s,transform .5s var(--p3)}
.modal__logo{transition-property:transform;will-change:transform,translate,rotate}
.m-p .ul{background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;transition:background-size .6s var(--expo)}
.m-p .ul:hover{background-size:100% 1px}
.m-p .ul:before{display:none}

/* ---------- profile: one big statement instead of paragraphs ---------- */
.modal__content{top:auto;bottom:9.5rem;width:calc(50% - 5.3rem)}
.big{font:600 clamp(34px,3.6vw,60px)/1.08 var(--sans);text-transform:uppercase;letter-spacing:-.02em;color:var(--ink)}
.big .ln{display:block;overflow:hidden;padding-bottom:.04em}
.big .ln span{display:block;transform:translateY(110%);transition:transform 1.2s var(--expo)}
.big .ln--2{color:#9a9794}
.modal.in .big .ln span{transform:none;transition-delay:1s}
.modal.in .big .ln--2 span{transition-delay:1.1s}
.m-rule{width:100%;height:1px;background:rgba(0,0,0,.12);margin:2.2rem 0 1.6rem;transform:scaleX(0);transform-origin:left;transition:transform 1.2s var(--expo)}
.modal.in .m-rule{transform:none;transition-delay:1.25s}
.m-tag{overflow:hidden;font:400 clamp(12px,.95vw,15px)/1.3 var(--sans);text-transform:uppercase;color:var(--ink-2,#55524f)}
.m-tag span{display:block;transform:translateY(105%);transition:transform 1s var(--expo)}
.modal.in .m-tag span{transform:none;transition-delay:1.35s}
.m-talk{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:1.1rem;font:600 clamp(13px,1vw,16px)/1 var(--sans);text-transform:uppercase;
  color:var(--ink);opacity:0;transition:opacity .8s ease}
.m-talk b{font-weight:400;font-size:1.2em;transition:transform .45s var(--p3)}
.m-talk:hover b{transform:translate(3px,-3px)}
.m-talk span{background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;padding-bottom:2px;transition:background-size .6s var(--expo)}
.m-talk:hover span{background-size:100% 1px}
.modal.in .m-talk{opacity:1;transition-delay:1.45s}
@media (orientation:portrait){.modal__content{bottom:8rem}.big{font-size:8vw}}
@media (orientation:portrait){.modal .modal__content{left:2rem;right:2rem;width:auto}.big{font-size:9vw}}

/* ---------- profile layout = ref: logo top-left, text column on the right half from ~37.5vh, foot corners ---------- */
.modal .modal__logo{left:5rem;top:5rem;width:min(38vw,620px)}
.modal .modal__content{left:auto;right:5.3rem;top:37.5vh;bottom:auto;width:calc(50% - 5.3rem)}
.modal .big{font-size:clamp(30px,3.2vw,52px);line-height:1.05;letter-spacing:-.035em}
.modal .m-rule{margin:2rem 0 1.3rem}
.m-row{display:flex;flex-direction:column;align-items:flex-start;gap:1rem;width:100%}
.m-row .m-talk{width:100%;margin:0}
@media (orientation:portrait){
  .modal .modal__logo{left:1.5rem;top:1.5rem;width:62vw}
  .modal .modal__content{left:1.5rem;right:1.5rem;width:auto;top:auto;bottom:7rem}
  .modal .big{font-size:9vw}
}

/* ---------- colour accents pulled from the logo (yellow / teal / blue / pink / red) ---------- */
:root{--lg:linear-gradient(90deg,#f47cad 0%,#0d81ce 35%,#17a5a8 55%,#f3c833 78%,#e9232a 100%)}
.big .ln--2 span{background:var(--lg);-webkit-background-clip:text;background-clip:text;color:transparent}
.modal .m-rule{height:2px;background:var(--lg)}
.m-talk:hover{color:#f47cad}
.chip:nth-child(1):hover,.chip:nth-child(1):focus-visible{background:#f47cad}
.chip:nth-child(2):hover,.chip:nth-child(2):focus-visible{background:#0d81ce}
.card .ul{background:linear-gradient(#f47cad,#f47cad) 0 100%/100% 2px no-repeat;padding-bottom:2px}
.card .ul:before{display:none}
.tile img{filter:none}

/* ---------- profile: logo and text centred in their halves, same middle line ---------- */
@media (orientation:landscape){
  .modal{--lw:min(36vw,600px)}
  .modal .modal__logo{width:var(--lw);left:calc(25vw - var(--lw) / 2);top:calc(44% - var(--lw) * .268)}
  .modal .modal__content{left:calc(50% + 2.5rem);right:auto;width:calc(50% - 7.5rem);top:44%;bottom:auto;transform:translateY(-50%)}
}

/* close: card + logo come back instantly (the modal logo is already sitting on top of it) */
.swap .card--gl,.swap .card h1{transition:none!important}
.swap .card .bio{transition:none!important;opacity:0}

/* card copy: bold headline + Thai line + link */
.bio{max-width:none}
.bio .hd{display:block;font-weight:600;font-size:1.25em;line-height:1.15;letter-spacing:-.01em;color:var(--ink)}
.bio .sub{margin:.7em 0 1.4em;text-transform:none;font-size:1.05em;line-height:1.45;color:#55524f}


/* ---------- MEET MOOMNIDEE: text rolls up, arrow flies out and back, pink line wipes across (card hover) ---------- */
.card .meet{display:inline-flex;align-items:center;gap:.35em;background:none;padding-bottom:4px;position:relative}
.card .meet:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:#f47cad;transform-origin:right;transition:transform .5s cubic-bezier(.645,.045,.355,1)}
.card:hover .meet:after{animation:wipe .9s cubic-bezier(.645,.045,.355,1) forwards}
@keyframes wipe{0%{transform:scaleX(1);transform-origin:right}45%{transform:scaleX(0);transform-origin:right}46%{transform:scaleX(0);transform-origin:left}100%{transform:scaleX(1);transform-origin:left;background:#0d81ce}}
.meet .mt{position:relative;display:inline-block;overflow:hidden;line-height:1.25;vertical-align:bottom}
.meet .mi{display:block;transition:transform .55s cubic-bezier(.645,.045,.355,1)}
.meet .mi:after{content:attr(data-t);position:absolute;left:0;top:100%;color:#f47cad}
.card:hover .meet .mi{transform:translateY(-100%)}
.meet .ma{position:relative;display:inline-block;width:1em;height:1em;overflow:hidden;line-height:1}
.meet .ma i{position:absolute;inset:0;font-style:normal;display:grid;place-items:center;transition:transform .5s cubic-bezier(.645,.045,.355,1)}
.meet .ma i+i{transform:translate(-110%,110%);color:#f47cad}
.card:hover .meet .ma i:first-child{transform:translate(110%,-110%)}
.card:hover .meet .ma i+i{transform:none;transition-delay:.12s}

/* pills: text always centred, collapsed and expanded */
.chip span{left:50%;right:auto;width:max-content;translate:-50% 0;padding-top:0}
.chip__a,.chip__b{left:50%}
.chip:hover,.chip:focus-visible{width:calc(var(--w1,8em) + 2.4em)}

.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

.m-svc{display:flex;gap:14px;flex-wrap:wrap;font:400 clamp(12px,.95vw,15px)/1.3 Kanit,sans-serif;opacity:0;transition:opacity .8s ease}
.m-svc a{color:#55524f;text-decoration:none;border-bottom:1px solid #d9d5d0}
.m-svc a:hover{color:#f47cad;border-color:#f47cad}
.modal.in .m-svc{opacity:1;transition-delay:1.4s}
