:root{--bg:#fffdf8;--fg:#161616;--muted:#6f6f6f;--caption-bg:rgba(255,255,255,.66);--vv:1;--vv_inv:1;--nav-pad-y:22px;--nav-pad-x:32px;--logo-size:32px;--logo-chip-pad-y:8px;--logo-chip-h:calc(var(--logo-size) + (2 * var(--logo-chip-pad-y)));--nav-h:calc((2 * var(--nav-pad-y)) + var(--logo-chip-h));--nav-gap:clamp(12px,5.0vh,48px)}*{box-sizing:border-box}body,html{margin:0;padding:0;color:var(--fg);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Inter,Roboto,Arial}a{color:inherit;text-decoration:none}body,html,html *{-webkit-user-select:none!important;user-select:none!important}canvas,img,picture,svg,video{-webkit-user-drag:none;user-drag:none;pointer-events:none}.container{width:min(1200px,90vw);margin:0 auto}.pad{padding:8vh 0}.narrow{max-width:760px;margin:0 auto}.nav-edge{position:fixed;top:0;left:0;right:0;z-index:1000;width:100%;background:transparent;color:var(--fg);padding:var(--nav-pad-y) var(--nav-pad-x);display:flex;align-items:flex-start;justify-content:space-between;gap:14px;box-shadow:none}.nav-left .logo-lg{display:inline-block;background:var(--bg);border-radius:12px;padding:var(--logo-chip-pad-y) 12px;line-height:1;font-weight:800;letter-spacing:.06em;font-size:var(--logo-size);white-space:nowrap}.nav-right{position:relative;display:flex;align-items:flex-start;gap:28px}.nav-right:before{content:"";position:fixed;top:0;right:0;left:calc(var(--nav-pad-x) + (var(--logo-chip-w, 0px)) + 14px);height:var(--nav-h);background:var(--bg);pointer-events:none;z-index:-1}.nav-left .logo-lg{--logo-chip-w:auto}@supports (width:max-content){.nav-left{display:inline-block}.nav-left .logo-lg{width:max-content}}.nav-links{list-style:none;margin:0;padding:0;display:flex;align-items:center;gap:28px}.nav-links a{display:inline-grid;grid-template-columns:14px auto;align-items:center;column-gap:6px;text-decoration:none;font-weight:700;font-size:18px;line-height:1}.nav-links a:before{content:"●";width:14px;line-height:1;opacity:0;transition:opacity .2s ease}.nav-links a.active:before{opacity:1}.nav-links a.active{text-underline-offset:4px;text-decoration-thickness:2px}.lang-col{display:flex;flex-direction:column;align-items:flex-start;gap:14px}.lang-col a{text-decoration:none;font-weight:700;font-size:18px;line-height:1.2;opacity:.86;text-align:left;padding-left:2px}.lang-col a:hover{opacity:1}.lang-col a.current{opacity:1;text-decoration:underline;text-underline-offset:4px}.nav-edge:not(.nav-edge--transparent) a{color:var(--fg)}.nav-edge--transparent,.nav-edge--transparent a{color:#fff}.nav-edge--transparent .nav-left .logo-lg{background:transparent}.nav-edge--transparent .nav-right:before{display:none}.nav-reserve .nav-edge{padding-right:calc(32px + 16px)}html.has-scroll .nav-edge{padding-right:calc(32px + 0px)}html.has-scroll .hero-overlay--right{margin-right:0}.nav-spacer{height:calc(var(--nav-h) + var(--nav-gap))}.h1{margin:0;font-size:clamp(32px,6vw,64px);line-height:1.04}.muted{color:var(--muted)}.link{text-decoration:underline}.hero{position:fixed;height:100vh;overflow:hidden;z-index:1}.hero,.slide{inset:0;width:100%}.slide{position:absolute;height:100%;opacity:0;transition:opacity .8s ease}.slide.active{opacity:1}.hero-dots{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);display:flex;gap:8px;z-index:3}.dot{font-size:16px;line-height:1;background:transparent;border:none;cursor:pointer;color:#fff;text-shadow:0 2px 10px rgba(0,0,0,.35)}.dot-active{font-weight:700}.hero-overlay{position:fixed;left:50%;transform:translateX(-50%);bottom:80px;z-index:3;color:#fff}.hero-sub,.hero-title{color:#fff;text-shadow:0 3px 24px rgba(0,0,0,.45)}.hero-sub{margin-top:6px}.hero-overlay--left{left:32px;right:auto;bottom:96px;transform:none;text-align:left;max-width:none}@media (max-width:720px){.hero-overlay--left{left:20px}}.container-wide{width:min(1680px,94vw);margin:0 auto}.grid.portfolio-24{display:grid;grid-template-columns:repeat(24,1fr);gap:28px}.span-24{grid-column:span 24}.span-12{grid-column:span 12}.span-8{grid-column:span 8}.span-6{grid-column:span 6}@media (max-width:1200px){.grid.portfolio-24{grid-template-columns:repeat(12,1fr)}.span-6,.span-8{grid-column:span 6}}@media (max-width:820px){.grid.portfolio-24{grid-template-columns:repeat(4,1fr)}.span-6,.span-8{grid-column:span 4}}.tile{display:flex;flex-direction:column;gap:4px;background:transparent;border-radius:0;box-shadow:none}.tile-caption{margin:0;font-weight:600;line-height:1.2;font-size:18px;color:var(--fg)}.tile-media{position:relative;width:100%;aspect-ratio:16/10;overflow:hidden;border-radius:0;background:transparent}.tile-media :where(img){object-fit:contain;object-position:top center;transition:transform .5s ease;transform-origin:center}.tile:hover .tile-media :where(img){transform:scale(1.06)}.tile-media .zoomlock{position:absolute;inset:0;width:calc(100% * var(--vv));height:calc(100% * var(--vv));transform:scale(var(--vv_inv));transform-origin:top left;will-change:transform,width,height}.tile-media .zoomlock :where(img){object-fit:contain;object-position:top center;transition:transform .5s ease;transform-origin:center}.tile:hover .tile-media .zoomlock :where(img){transform:scale(1.06)}.splash.curtain{position:fixed;inset:0;z-index:9999;pointer-events:none;background:transparent;contain:layout paint}.curtain-half{position:absolute;left:0;width:100%;height:50vh;background:var(--bg);will-change:transform,opacity;backface-visibility:hidden;transform:translateZ(0);animation-duration:30s;animation-timing-function:cubic-bezier(.2,.8,.2,1);animation-fill-mode:forwards}.curtain-top{top:0;transform:translateZ(0);animation-name:curtainTopUp}@keyframes curtainTopUp{to{transform:translate3d(0,-101vh,0)}}.curtain-bottom{bottom:0;transform:translateZ(0);animation-name:curtainBottomDown}@keyframes curtainBottomDown{to{transform:translate3d(0,101vh,0)}}.logo-half{position:absolute;left:50%;transform:translateX(-50%);width:260px;height:auto;image-rendering:-webkit-optimize-contrast;backface-visibility:hidden}.logo-top{bottom:-1px;clip-path:inset(0 0 50% 0)}.logo-bottom{top:-1px;clip-path:inset(50% 0 0 0)}@media (prefers-reduced-motion:reduce){.curtain-half{animation:none}}.nav{display:flex;justify-content:space-between;align-items:center;padding:20px 0;width:min(1200px,90vw);margin:0 auto}.brand{font-weight:600;letter-spacing:.02em}.menu{display:flex;gap:18px;align-items:center}.nav-lg{font-size:18px;font-weight:600}.nav.nav-transparent{position:fixed;top:0;left:50%;transform:translateX(-50%);z-index:5;background:transparent}.nav.nav-transparent .brand,.nav.nav-transparent .lang-badge,.nav.nav-transparent .menu a{color:#fff}.nav.nav-transparent .lang-badge{border-color:rgba(255,255,255,.6);background:transparent}.nav.nav-transparent .lang-badge.current{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.9)}.auth-shell{min-height:calc(100vh - var(--nav-h));display:grid;place-items:start center;padding:24px 0 56px}.auth-wrap{width:100%;display:grid;justify-items:center}.auth-card{width:min(760px,100%);background:#fff;border:1px solid #f0ebe1;border-radius:16px;box-shadow:0 10px 30px rgba(0,0,0,.04);padding:22px 22px 18px}.auth-head{margin-bottom:6px}.auth-title{margin:0;font-size:28px;line-height:1.15}.auth-strap{margin:6px 0 0;color:var(--muted)}.auth-copy{margin:10px 0 18px;display:grid;gap:10px;color:#333}.auth-copy p{margin:0;line-height:1.5}.auth-form{display:grid;gap:14px}.lbl{font-weight:600}.in{width:100%;background:#fff;border:1px solid #e8e2d6;border-radius:12px;padding:12px 14px;font-size:16px;outline:none}.in:focus{border-color:#cfc6b6;box-shadow:0 0 0 3px rgba(0,0,0,.04)}.btn{display:inline-flex;align-items:center;justify-content:center;height:48px;padding:0 18px;border-radius:12px;font-weight:700;border:1px solid transparent;transition:filter .15s ease,opacity .15s ease,transform .02s ease-in-out}.btn:active{transform:translateY(1px)}.btn-primary{background:#111;color:#fff;border-color:#111}.btn-primary:hover{filter:brightness(1.06)}.btn-secondary{background:#f3f3f3;color:#111;border-color:#e8e8e8}.btn-secondary:hover{filter:brightness(.98)}.w-full{width:100%}.btn-spacer{margin-top:10px}@media (max-width:720px){.auth-card{padding:18px;border-radius:14px;width:min(640px,100%)}.auth-title{font-size:24px}:root{--nav-gap:clamp(8px,1.8vh,20px)}.nav-edge{padding:18px 20px}.nav-right{gap:36px}.nav-links{gap:16px}.lang-col a,.nav-links a{font-size:16px}}.lab-body,.policy-body{max-width:920px}.lab-body{margin:0 auto;padding:0 24px}.page-top{padding-top:24px}.site-footer{margin-top:clamp(28px,5vh,72px);padding:16px 0 24px;border-top:none!important;text-align:center;color:var(--muted);background:transparent}.site-footer a{text-decoration:underline}.site-footer a:hover{opacity:.9}:root{--bg:#fbf7ef;--text:#111;--muted:#6b6b6b;--input-bg:#fff;--tab-bg:#faf7ee;--tab-br:#eadfcb;--tab-on:#111;--tab-on-fg:#fff;--chip-bg:#f5f1e8;--chip-br:#eadfcb;--chip-on:#111;--chip-on-fg:#fff}html[data-theme=dark]{--bg:#0f0f0f;--text:#f1f1f1;--muted:#a6a6a6;--card:#121212;--card-br:#2a2a2a;--input-bg:#1a1a1a;--tab-bg:#171717;--tab-br:#2a2a2a;--tab-on:#eaeaea;--tab-on-fg:#111;--chip-bg:#171717;--chip-br:#2a2a2a;--chip-on:#eaeaea;--chip-on-fg:#111}html[data-theme=dark] body{background:var(--bg);color:var(--text)}html[data-theme=dark] .card{background:var(--card);border-color:var(--card-br);color:var(--text)}html[data-theme=dark] .proj-card{background:#1b1b1b;border-color:#2a2a2a;color:#eaeaea}html[data-theme=dark] .btn.btn-secondary{background:#1d1d1d;color:#eaeaea}html[data-theme=dark] .nav-edge{background:transparent}html[data-theme=dark] a{color:#ddd}.us-input.us-input--ro,.us-input:disabled{background:#f4f1ea;color:var(--muted,#777);border-color:var(--card-br,#eadfcb);cursor:not-allowed}html[data-theme=dark] .us-input.us-input--ro,html[data-theme=dark] .us-input:disabled{background:#1b1b1b;color:#9a9a9a;border-color:#2a2a2a}:root{--bg:#faf6ee;--card:#fff;--card-br:#eee6d7;--ink:#121212;--muted:#6f6b63;--chip-bg:#f6f1e6;--brand:#0f3751;--primary:#111;--primary-ink:#fff;--danger:#c91919;--danger-ink:#fff;--focus:#0f375180;--shadow:0 8px 30px rgba(0,0,0,.06)}body,html{background:var(--bg);color:var(--ink)}.page-top{padding-top:22px}.card{background:var(--card);border:1px solid var(--card-br);border-radius:16px;padding:18px;box-shadow:var(--shadow)}.card+.card{margin-top:12px}.card-title{margin:0 0 10px;font-size:clamp(20px,2.5vw,26px);font-weight:800}.proj-head{display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.proj-meta{font-weight:600;color:var(--muted);font-size:14px}.btn{appearance:none;border:0;cursor:pointer;height:42px;padding:0 16px;border-radius:10px;font-weight:800;background:var(--primary);color:var(--primary-ink)}.btn:hover{filter:brightness(.96)}.btn-secondary{background:var(--chip-bg);color:var(--ink);border:1px solid var(--card-br)}.btn-danger{background:var(--danger);color:var(--danger-ink)}.btn-ghost{background:transparent;color:var(--ink)}.btn-ghost,.status-wrap{border:1px solid var(--card-br)}.status-wrap{display:flex;align-items:center;gap:8px;padding:8px 10px;background:var(--chip-bg);border-radius:12px}.status-select{appearance:none;height:36px;padding:0 12px;border-radius:10px;border:1px solid var(--card-br);background:#fff;color:inherit}.chat-card .chat-row{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}.chat-input{height:48px;border-radius:12px;padding:0 14px;border:1px solid var(--card-br);background:#fff}.chat-list{margin-top:12px;display:grid;gap:10px;max-height:360px;overflow:auto;padding-right:4px}.chat-msg{border:1px solid var(--card-br);border-radius:12px;padding:10px 12px;background:#fff}.chat-meta{color:var(--muted);font-size:12px;margin-top:2px}.upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.upload-item{border:1px dashed var(--card-br);border-radius:14px;padding:14px;background:#fff}.helper{font-size:14px;color:var(--muted)}.banner{border-radius:12px;padding:10px 14px;font-weight:700;text-align:center;border:1px solid #dfe8de;background:#edf7ec;color:#22572a}.banner .banner-link{text-decoration:underline}.image-board{height:300px;border-radius:14px;background:var(--brand);display:grid;place-items:center;color:#fff;font-weight:800}.proj-card{transition:transform .06s ease,filter .12s ease}.proj-card:hover{transform:translateY(-1px);filter:brightness(.98)}@media (max-width:980px){.proj-head,.upload-grid{grid-template-columns:1fr}}