@font-face{font-family:"ADF Khmer";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/khmer-400.ttf") format("truetype");}
@font-face{font-family:"ADF Khmer";font-style:normal;font-weight:600;font-display:swap;src:url("fonts/khmer-600.ttf") format("truetype");}
@font-face{font-family:"ADF Khmer";font-style:normal;font-weight:700;font-display:swap;src:url("fonts/khmer-700.ttf") format("truetype");}
@font-face{font-family:"ADF Chinese";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/chinese-400.ttf") format("truetype");}
@font-face{font-family:"ADF Chinese";font-style:normal;font-weight:600;font-display:swap;src:url("fonts/chinese-600.ttf") format("truetype");}
@font-face{font-family:"ADF Chinese";font-style:normal;font-weight:700;font-display:swap;src:url("fonts/chinese-700.ttf") format("truetype");}
:root{
  --bg:#f2f2ef;
  --fg:#11110f;
  --muted:#66645e;
  --line:#c9c7c0;
  --paper:#ffffff;
  --inverse:#0f0f0e;
  --inverse-fg:#f5f4f0;
  --max:1680px;
  --gutter:clamp(18px,3vw,52px);
  --section:clamp(88px,11vw,176px);
  --ease:cubic-bezier(.2,.7,.2,1);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;background:var(--bg);color:var(--fg)}
body{margin:0;background:var(--bg);color:var(--fg);font-family:Arial,"ADF Khmer","ADF Chinese","Noto Sans Khmer","Noto Sans CJK SC",Helvetica,sans-serif;font-size:16px;line-height:1.5;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
img{display:block;width:100%;height:100%;object-fit:cover;background:#d8d7d2}
a{color:inherit;text-decoration:none}
a:hover{text-decoration-thickness:1px}
button,summary,a{touch-action:manipulation}
:focus-visible{outline:2px solid currentColor;outline-offset:4px}
.skip-link{position:fixed;top:10px;left:10px;z-index:1000;background:#fff;color:#111;padding:10px 14px;transform:translateY(-160%);transition:transform .2s}
.skip-link:focus{transform:translateY(0)}
.site-header{position:sticky;top:0;z-index:50;display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:clamp(18px,3vw,44px);min-height:74px;padding:0 var(--gutter);border-bottom:1px solid rgba(17,17,15,.14);background:rgba(242,242,239,.94);backdrop-filter:saturate(120%) blur(8px)}
.brand{display:inline-flex;align-items:baseline;gap:7px;width:max-content;font-size:15px;letter-spacing:-.02em;font-weight:500}.brand span{font-weight:800;letter-spacing:-.05em}
.primary-nav,.lang-nav{display:flex;align-items:center;gap:18px;font-size:13px}.primary-nav a,.lang-nav a{padding:12px 0;border-bottom:1px solid transparent}.primary-nav a:hover,.lang-nav a:hover,.lang-nav a[aria-current="page"]{border-bottom-color:currentColor}
main{overflow:clip}
.hero{max-width:var(--max);margin:0 auto;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(360px,.9fr);min-height:calc(100dvh - 74px);padding:var(--gutter);gap:clamp(26px,4vw,72px);align-items:stretch}
.hero__copy{display:flex;flex-direction:column;justify-content:space-between;padding:clamp(36px,7vh,88px) 0 8px;min-width:0}
.eyebrow{margin:0;font-size:11px;line-height:1.25;letter-spacing:.12em;text-transform:uppercase;font-weight:650}
.hero h1{max-width:9.6ch;margin:clamp(28px,7vh,90px) 0 28px;font-size:clamp(62px,7.8vw,146px);line-height:.9;letter-spacing:-.065em;font-weight:650}
.lang-km .hero h1{max-width:11.8ch;font-size:clamp(48px,6.5vw,116px);line-height:1.04;letter-spacing:-.04em;font-weight:650}
.lang-zh .hero h1{max-width:9.2ch;font-size:clamp(58px,7vw,126px);line-height:.98;letter-spacing:-.06em}
.hero__body{max-width:58ch;margin:0 0 clamp(32px,8vh,90px);font-size:clamp(18px,1.35vw,24px);line-height:1.5;letter-spacing:-.02em;color:#2b2a27}
.lang-km .hero__body{line-height:1.7}
.hero__foot{display:flex;justify-content:space-between;gap:20px;align-items:end;padding-top:18px;border-top:1px solid var(--line);font-size:12px;color:var(--muted)}
.hero__foot a{color:var(--fg);font-weight:600}
.hero__media{position:relative;margin:0;min-height:610px;background:#181818;overflow:hidden}.hero-picture{position:absolute;inset:0}.hero__media img{object-position:center 48%}.hero__media:after{content:"";position:absolute;inset:auto 0 0;height:38%;background:linear-gradient(to top,rgba(0,0,0,.78),transparent);pointer-events:none}.hero__media figcaption{position:absolute;z-index:2;inset:auto 24px 24px;display:grid;gap:3px;color:white;font-size:12px}.hero__media figcaption strong{font-size:14px;font-weight:600}.hero__media figcaption span{opacity:.76}
.intro-section{max-width:var(--max);margin:0 auto;padding:var(--section) var(--gutter) 0}
.section-head{display:grid;grid-template-columns:minmax(120px,.28fr) minmax(0,.9fr) minmax(280px,.5fr);gap:clamp(28px,4vw,72px);align-items:start;padding-bottom:clamp(54px,7vw,96px);border-bottom:1px solid var(--line)}
.section-head h2,.contact h2{margin:0;font-size:clamp(42px,5vw,84px);line-height:.98;letter-spacing:-.055em;font-weight:580}.lang-km .section-head h2,.lang-km .contact h2{line-height:1.16;letter-spacing:-.035em}.lang-zh .section-head h2,.lang-zh .contact h2{line-height:1.04}
.section-intro{margin:0;max-width:50ch;color:var(--muted);font-size:16px;line-height:1.65}
.projects{display:grid;gap:0}.project{display:grid;grid-template-columns:minmax(0,1.34fr) minmax(300px,.66fr);gap:clamp(28px,5vw,90px);padding:clamp(48px,7vw,112px) 0;border-bottom:1px solid var(--line);align-items:center}.project--reverse{grid-template-columns:minmax(300px,.66fr) minmax(0,1.34fr)}.project--reverse .project__media{order:2}.project--reverse .project__copy{order:1}
.project__media{aspect-ratio:1.24/1;overflow:hidden;background:#ddd}.project__media picture{display:block;width:100%;height:100%}.project__media img{transition:transform .7s var(--ease)}.project:hover .project__media img{transform:scale(1.012)}
.project__copy{max-width:440px}.project__index{font-size:11px;font-weight:700;margin-bottom:clamp(44px,7vw,90px)}.project__meta{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 14px}.project h3{font-size:clamp(30px,3.2vw,54px);line-height:1.02;letter-spacing:-.05em;font-weight:560;margin:0 0 22px}.lang-km .project h3{line-height:1.18;letter-spacing:-.03em}.project__copy>p:last-child{margin:0;color:var(--muted);max-width:42ch;line-height:1.65}
.section-head--approach{grid-template-columns:minmax(120px,.28fr) minmax(0,1.4fr);padding-bottom:clamp(46px,6vw,86px)}
.steps{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--line)}.step{min-height:360px;padding:clamp(34px,4vw,64px) clamp(18px,2.6vw,46px) clamp(42px,5vw,72px) 0;border-right:1px solid var(--line)}.step+.step{padding-left:clamp(18px,2.6vw,46px)}.step:last-child{border-right:none}.step span{display:block;font-size:11px;font-weight:700;margin-bottom:clamp(70px,10vw,140px)}.step h3{font-size:clamp(28px,2.7vw,46px);line-height:1.05;letter-spacing:-.045em;font-weight:560;margin:0 0 20px}.lang-km .step h3{line-height:1.2;letter-spacing:-.025em}.step p{margin:0;color:var(--muted);line-height:1.65;max-width:36ch}
.capability-line{display:grid;grid-template-columns:.7fr 1.3fr;gap:30px;padding:34px 0 0;font-size:13px}.capability-line span{font-weight:700}.capability-line p{margin:0;color:var(--muted);text-align:right}
.contact{max-width:var(--max);margin:var(--section) auto 0;padding:clamp(70px,9vw,140px) var(--gutter) clamp(78px,9vw,130px);background:var(--inverse);color:var(--inverse-fg)}.contact .eyebrow{margin-bottom:clamp(54px,9vw,120px)}.contact__grid{display:grid;grid-template-columns:minmax(0,1.28fr) minmax(320px,.72fr);gap:clamp(36px,6vw,120px);align-items:end}.contact__grid>div>p{font-size:clamp(18px,1.5vw,23px);line-height:1.6;color:#c7c6c0;max-width:48ch;margin:0 0 38px}.contact__links{display:flex;gap:28px;flex-wrap:wrap}.contact__links a{font-size:16px;padding-bottom:4px;border-bottom:1px solid #777670}.contact__links a:hover{border-bottom-color:#fff}
.footer{max-width:var(--max);margin:0 auto;padding:28px var(--gutter) 110px;display:flex;justify-content:space-between;gap:20px;font-size:11px;color:var(--muted)}
.contact-dock{position:fixed;right:20px;bottom:20px;z-index:70;color:white}.contact-dock summary{list-style:none;cursor:pointer;background:#11110f;color:white;border:1px solid rgba(255,255,255,.18);border-radius:999px;padding:14px 18px;font-size:13px;font-weight:650;box-shadow:0 8px 30px rgba(0,0,0,.14)}.contact-dock summary::-webkit-details-marker{display:none}.contact-dock__panel{position:absolute;right:0;bottom:calc(100% + 10px);min-width:190px;background:white;color:#111;border:1px solid #dad8d1;box-shadow:0 14px 48px rgba(0,0,0,.14);padding:8px}.contact-dock__panel a{display:flex;justify-content:space-between;gap:20px;padding:12px 10px;font-size:13px}.contact-dock__panel a+a{border-top:1px solid #ebe9e4}
@media (max-width:1100px){
  .site-header{grid-template-columns:1fr auto}.primary-nav{display:none}.hero{grid-template-columns:1fr .9fr;gap:28px}.hero h1{font-size:clamp(58px,8vw,94px)}.lang-km .hero h1{font-size:clamp(48px,7vw,80px)}.lang-zh .hero h1{font-size:clamp(54px,7.5vw,86px)}
  .section-head{grid-template-columns:.26fr 1fr}.section-intro{grid-column:2}.project,.project--reverse{grid-template-columns:1.15fr .85fr}.steps{grid-template-columns:1fr 1fr}.step:nth-child(2){border-right:none}.step:last-child{grid-column:1/-1;border-top:1px solid var(--line);min-height:auto}.step span{margin-bottom:70px}.contact__grid{grid-template-columns:1fr .8fr}
}
@media (max-width:760px){
  :root{--gutter:18px;--section:84px}.site-header{min-height:64px;grid-template-columns:1fr auto;padding:0 16px}.brand{font-size:14px;min-height:44px;align-items:center}.lang-nav{gap:2px;font-size:11px}.lang-nav a{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:0 4px}.hero{display:block;min-height:auto;padding:20px var(--gutter) 0}.hero__copy{padding:28px 0 22px}.hero h1{max-width:10ch;margin:54px 0 24px;font-size:clamp(52px,16vw,78px);line-height:.92}.lang-km .hero h1{max-width:13ch;font-size:clamp(42px,12vw,60px);line-height:1.08}.lang-zh .hero h1{max-width:10ch;font-size:clamp(50px,14vw,68px);line-height:1.03}.hero__body{font-size:17px;margin-bottom:44px}.hero__foot{font-size:10px}.hero__media{min-height:0;aspect-ratio:4/5;margin:0 calc(var(--gutter)*-1)}.hero__media figcaption{inset:auto 18px 18px}.intro-section{padding-top:var(--section)}.section-head,.section-head--approach{display:block;padding-bottom:50px}.section-head .eyebrow{margin-bottom:46px}.section-head h2,.contact h2{font-size:clamp(40px,12vw,58px);line-height:1}.lang-km .section-head h2,.lang-km .contact h2{font-size:clamp(36px,9.6vw,48px);line-height:1.18}.section-intro{margin-top:28px;font-size:15px}.project,.project--reverse{display:flex;flex-direction:column;gap:26px;padding:54px 0}.project--reverse .project__media,.project--reverse .project__copy{order:initial}.project__media{width:100%;aspect-ratio:4/5}.project__copy{max-width:none}.project__index{margin-bottom:42px}.project h3{font-size:38px}.lang-km .project h3{font-size:33px}.steps{display:block}.step,.step+.step,.step:last-child{min-height:0;padding:34px 0 48px;border-right:none;border-top:0;border-bottom:1px solid var(--line)}.step span{margin-bottom:52px}.step h3{font-size:34px}.capability-line{display:block;padding-top:28px}.capability-line p{text-align:left;margin-top:12px;line-height:1.6}.contact{margin-top:var(--section);padding:68px var(--gutter) 100px}.contact .eyebrow{margin-bottom:58px}.contact__grid{display:block}.contact__grid>div>p{font-size:17px;margin-top:32px}.footer{display:grid;padding-bottom:100px}.contact-dock{right:14px;bottom:14px}.contact-dock summary{padding:13px 16px;min-height:44px;display:flex;align-items:center}.hero__foot a,.contact__links a,.contact-dock__panel a{min-width:44px;min-height:44px;display:inline-flex;align-items:center}
}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}
@media (prefers-reduced-transparency:reduce){.site-header{background:var(--bg);backdrop-filter:none}}


/* Chinese display copy wraps at complete phrases, without splitting 组合. */
.lang-zh .hero h1{max-width:none}.hero-phrase{display:block}
@media(max-width:760px){.lang-zh .hero h1{font-size:clamp(42px,14vw,68px)}}
.project__media video{display:block;width:100%;height:100%;object-fit:cover;background:#111}

/* V10: CMS-selected video heroes use the same frame as image heroes. */
.hero__media video.hero-picture{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#111}

/* R03: preserve the approved visual system; repair navigation and focus boundaries. */
html{scroll-padding-top:90px}
.mobile-nav{display:none}
.contact-dock{right:calc(20px + env(safe-area-inset-right,0px));bottom:calc(20px + env(safe-area-inset-bottom,0px))}
a:active,summary:active{text-decoration:underline;text-underline-offset:4px}
.contact-dock__panel a:hover,.contact-dock__panel a:focus-visible{background:#f2f2ef}
@media(max-width:1100px){
  .mobile-nav{display:flex;justify-content:space-evenly;gap:8px;padding:4px var(--gutter);border-bottom:1px solid var(--line)}
  .mobile-nav a{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 8px;font-size:13px}
}
@media(max-width:760px){
  html{scroll-padding-top:80px}
  .contact-dock{right:calc(14px + env(safe-area-inset-right,0px));bottom:calc(14px + env(safe-area-inset-bottom,0px))}
}

/* R04: bridge to preserved pages and keep native video controls within real media proportions. */
.legacy-nav{padding:24px 0 32px;border-bottom:1px solid var(--line)}
.legacy-nav>p{font-size:13px;margin:0 0 12px;color:var(--muted)}
.legacy-nav>div{display:flex;flex-wrap:wrap;gap:10px 20px}
.legacy-nav a{display:inline-flex;align-items:center;gap:12px;min-height:44px;padding:8px 0;border-bottom:1px solid currentColor}
.project__media video{object-fit:contain}

/* R05: visual previews are the entry; existing type, colour, composition and rhythm retained. */
.visual-entry{position:relative;display:block;cursor:pointer;isolation:isolate}
.visual-entry video{pointer-events:none}
.visual-entry:focus-visible{outline:3px solid var(--fg);outline-offset:6px}
.visual-entry__cue{position:absolute;right:18px;bottom:18px;display:grid;place-items:center;width:44px;height:44px;background:rgba(17,17,15,.88);color:white;font-size:25px;border:1px solid rgba(255,255,255,.35)}
.hero-visual-entry{position:absolute;inset:0}
.hero__media figcaption{pointer-events:none;right:76px}
.hero__media video.hero-picture{object-fit:cover}
.step-link{display:block;height:100%}.step-link:hover h3{text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:1px}
.step-more{display:inline-flex;align-items:center;min-height:44px;margin-top:20px;font-size:13px;font-weight:500;border-bottom:1px solid var(--line)}
.method-overview,.text-link{display:inline-flex;align-items:center;min-height:44px;border-bottom:1px solid currentColor;padding:8px 0}
.method-overview{margin-top:28px;font-size:16px}
.motion-toggle{position:fixed;left:calc(20px + env(safe-area-inset-left,0px));bottom:calc(20px + env(safe-area-inset-bottom,0px));z-index:70;max-width:calc(50vw - 32px);min-height:44px;border:1px solid var(--line);border-radius:0;padding:10px 14px;background:var(--bg);color:var(--fg);font:12px/1.4 Arial,"ADF Khmer","ADF Chinese",sans-serif;cursor:pointer}
.motion-toggle[hidden]{display:none}
.method-main{max-width:var(--max);margin:auto;padding:0 var(--gutter)}
.method-hero{max-width:1100px;padding:clamp(54px,8vw,120px) 0 clamp(60px,9vw,140px)}
.method-hero h1{font-size:clamp(44px,6vw,96px);font-weight:580;line-height:1.08;letter-spacing:-.045em;margin:40px 0 30px}
.method-hero>p{font-size:clamp(18px,1.8vw,24px);max-width:65ch;color:var(--muted);line-height:1.7}
.method-section{padding:clamp(54px,7vw,110px) 0;border-top:1px solid var(--line);scroll-margin-top:100px}
.method-heading{display:grid;grid-template-columns:.15fr .65fr 1fr;gap:32px;align-items:start}.method-heading h2{margin:0;font-size:clamp(36px,4vw,65px);line-height:1.15;font-weight:560;letter-spacing:-.04em}.method-heading>p{margin:0;max-width:60ch;font-size:18px;line-height:1.7;color:var(--muted)}
.method-columns{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,8vw,120px);padding:48px 0 54px}.method-columns h3,.method-example h3,.method-proof h3{font-size:clamp(24px,2.3vw,34px);font-weight:550;line-height:1.3;margin:0 0 20px;letter-spacing:-.02em}.method-columns ul{padding:0 0 0 22px;margin:0;max-width:60ch}.method-columns li{padding-left:8px;margin-bottom:16px;line-height:1.75;color:var(--muted)}
.method-example{display:grid;grid-template-columns:.8fr 1.2fr;gap:clamp(28px,6vw,90px);background:#e7e6e0;padding:clamp(22px,3vw,44px)}.method-example>a{aspect-ratio:4/3;display:block;overflow:hidden}.method-example img{object-fit:contain;background:#111}.method-example p{max-width:60ch;color:#44433e;line-height:1.8;margin:0 0 18px}
.method-connections{padding:70px 0;border-top:1px solid var(--line)}.method-connections>h2,.method-next h2{font-size:clamp(32px,4vw,62px);line-height:1.15;font-weight:550;margin:0 0 28px;letter-spacing:-.035em}.method-connections>p{color:var(--muted);max-width:70ch;line-height:1.7}.method-proof-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:36px;margin-top:40px}.method-proof{border-top:1px solid var(--line);padding-top:24px;min-height:150px}.method-proof p{color:var(--muted);line-height:1.7}.method-next{padding:clamp(44px,6vw,90px);background:var(--inverse);color:var(--inverse-fg);margin-bottom:60px}.method-next>p{max-width:70ch;line-height:1.8;color:#d2d1ca}.method-next>div{display:flex;flex-wrap:wrap;gap:20px 40px}
@media(max-width:760px){.motion-toggle{left:calc(14px + env(safe-area-inset-left,0px));bottom:calc(14px + env(safe-area-inset-bottom,0px));padding:9px 10px;font-size:11px}.method-heading,.method-columns,.method-example,.method-proof-grid{display:block}.method-heading .eyebrow{display:block;margin-bottom:28px}.method-heading>p{margin-top:24px;font-size:17px}.method-columns>div+div{margin-top:40px}.method-example>div{margin-top:28px}.method-proof{margin-top:28px}.method-hero h1{font-size:46px}.method-section{scroll-margin-top:80px}}
.method-example--text{display:block}
/* Keep caption and entry affordance clear of both fixed controls. */
.hero__media figcaption{bottom:76px}
.visual-entry__cue{top:18px;bottom:auto}
html{scroll-padding-bottom:100px}
