@font-face{font-family:DM Sans;src:url('assets/dm-sans.woff2') format('woff2');font-style:normal;font-weight:400 700;font-display:swap}
@font-face{font-family:TillyCaveat;src:url('/assets/projects/tilly-caveat.woff2') format('woff2');font-weight:400 700;font-display:swap}
:root{font-family:DM Sans,Arial,sans-serif;font-synthesis:none;color:#232725;background:#efeee8;color-scheme:light}
*{box-sizing:border-box}
html{scroll-behavior:auto;scroll-padding-top:28px}
body{margin:0}
a{color:inherit;text-underline-offset:6px}
button{font:inherit}
img{display:block;max-width:100%;height:auto}
[hidden]{display:none!important}
a:focus-visible,button:focus-visible{outline:2px solid currentColor;outline-offset:6px}
.frame{width:min(1440px,calc(100% - 112px));margin-inline:auto}
.skip-link{position:absolute;z-index:10;top:-80px;left:24px;padding:14px;background:#fff;color:#141827}
.skip-link:focus{top:16px}
.opening{--surface:#0f172b;--ink:#f4f1e9;--soft:#bbc3d4;--line:#f4f1e930;--accent:#b9e0cf;position:relative;isolation:isolate;color:var(--ink);background:var(--surface);transition:none}
.opening[data-theme=tilly]{--surface:#fff8ef;--ink:#2a2018;--soft:#6d5c4b;--line:#2a201829;--accent:#b33422}
.opening[data-theme=energy]{--surface:#172554;--soft:#cbd5e1;--accent:#8eddec}
.opening[data-theme=octopus]{--surface:#24063e;--soft:#e7d3f1;--accent:#8ee6f6}
.opening[data-theme=cards]{--surface:#0a214a;--soft:#d0dcf1;--accent:#ffd84b}
.opening[data-theme=satellite]{--surface:#0d111d;--soft:#c5cedf;--accent:#b1c8ff;background-image:url('/assets/projects/uk-satellite-sky.svg');background-size:cover}
.opening:before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:0;background:#123775;clip-path:polygon(60.5% 0,100% 0,100% 100%,35.5% 100%);transition:none}
.opening[data-theme=cards]:before{opacity:1}
.masthead{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:104px;border-bottom:1px solid var(--line,#23272529)}
.home-mark{display:flex;align-items:center;gap:13px;text-decoration:none;min-height:44px;font-size:13px;font-weight:500;letter-spacing:.01em}
.company-symbol{width:53px;height:36px;flex-shrink:0}
.masthead nav{display:flex;gap:32px;align-items:center;font-size:14px}
.masthead nav a{display:flex;align-items:center;min-height:44px;text-decoration:none}
.masthead nav a:hover{text-decoration:underline}
.showcase{display:grid;grid-template-columns:minmax(0,.86fr) minmax(0,1.74fr);gap:clamp(30px,5vw,90px);align-items:center;padding-block:32px;min-height:calc(100svh - 198px)}
.company-intro{align-self:center;padding-bottom:60px;min-width:0}
.company-name{margin:0 0 39px;font-weight:500;font-size:clamp(62px,6.35vw,98px);line-height:.92;letter-spacing:-.065em}
.company-name>span{display:block}
.company-name em{display:block;margin-left:3px;font-family:Georgia,serif;font-size:1.07em;font-weight:400;letter-spacing:-.058em;color:var(--accent)}
.brand-dot{font-family:DM Sans,sans-serif;font-size:.82em;letter-spacing:-.08em}
.company-line{margin:0;font-size:22px;line-height:1.3;letter-spacing:-.02em;font-weight:500}
.company-description{max-width:295px;margin:18px 0 0;font-size:15px;line-height:1.65;color:var(--soft);text-wrap:pretty}
.scenes{min-width:0}
.scene{min-width:0}
.scene-visual{display:flex;align-items:center;justify-content:center;min-height:300px;height:clamp(300px,min(34vw,calc(100svh - 390px)),520px);position:relative}
.norri-devices{width:100%;max-height:100%;object-fit:contain}
.scene-caption{display:grid;grid-template-columns:minmax(0,.72fr) minmax(0,1.28fr);gap:26px;align-items:start;border-top:1px solid var(--line);padding-top:22px;margin-top:16px}
.scene-caption h2{margin:3px 0;font-size:23px;letter-spacing:-.035em;font-weight:500;line-height:1.2}
.scene-description p{margin:0;max-width:430px;font-size:14px;color:var(--soft);line-height:1.6;text-wrap:pretty}
.project-domain{display:inline-flex;align-items:center;min-height:44px;font-size:13px;font-weight:500;text-decoration-color:color-mix(in srgb,currentColor,transparent 55%);text-decoration-thickness:1px}
.project-domain:hover{text-decoration-color:currentColor;text-decoration-thickness:2px}
.scene-description .project-domain{color:var(--accent)}
.project-tabs{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));padding-block:4px 29px;gap:26px}
.project-tabs button{position:relative;min-width:0;min-height:60px;border:0;border-top:1px solid var(--line);padding:16px 0 8px;color:var(--soft);background:transparent;text-align:left;font-size:13px;line-height:1.3;cursor:pointer;transition:color .2s}
.project-tabs button:before{content:"";position:absolute;top:-1px;left:0;right:0;height:2px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .25s ease}
.project-tabs button[aria-selected=true]{color:var(--ink)}
.project-tabs button[aria-selected=true]:before,.project-tabs button:hover:before{transform:scaleX(1)}
.project-tabs button:hover{color:var(--ink)}

.tilly-art{position:relative;width:100%;height:100%;display:grid;grid-template-columns:minmax(0,.72fr) minmax(0,1.28fr);gap:16px;align-items:center}
.tilly-logo{width:100%;max-width:235px;justify-self:center}
.tilly-collage-slot{width:100%;aspect-ratio:512/408;position:relative;justify-self:center;min-width:0}
.tilly-photos{position:absolute;inset:0}
.tilly-polaroid{position:absolute;margin:0;width:45.3125%;padding:2.1484375%;background:#fff;border-radius:4px;box-shadow:0 9px 23px #2a20182e;color:#2a2018}
.tilly-polaroid img{width:100%;aspect-ratio:210/190;object-fit:cover;object-position:center;border-radius:3px;margin-bottom:4.285714%}
.tilly-polaroid figcaption{font-family:TillyCaveat,cursive;font-weight:700;font-size:clamp(10px,1.15vw,18px);line-height:1.05;white-space:nowrap}
.tilly-polaroid-one{top:2.941176%;left:2.34375%;transform:rotate(-3deg);z-index:3}
.tilly-polaroid-two{top:20.588235%;left:27.34375%;transform:rotate(2deg);z-index:2}
.tilly-polaroid-three{top:38.235294%;left:52.34375%;transform:rotate(-3deg);z-index:1}
.tilly-tape{position:absolute;z-index:4;width:37.068965%;height:11.2%;top:-4.6%;left:10.344828%;transform:rotate(-7deg);background:repeating-linear-gradient(135deg,#ffffff73 0 3px,#ffffff1a 3px 6px),#ffd68a;border-inline:1px dashed #2a20182e;box-shadow:0 2px 4px #2a201824}
.tilly-polaroid-two .tilly-tape{left:auto;right:9.482759%;transform:rotate(6deg);background:repeating-linear-gradient(135deg,#ffffff73 0 3px,#ffffff1a 3px 6px),#ffd9cc}
.tilly-polaroid-three .tilly-tape{left:37.931034%;transform:rotate(6deg);background:repeating-linear-gradient(135deg,#ffffff6b 0 3px,#ffffff14 3px 6px),#8fc1e8}
.tilly-decoration{position:absolute;display:block;pointer-events:none}
.tilly-decoration svg{width:100%;height:100%;display:block}
.tilly-star-one{width:24px;height:24px;top:8%;left:4%;color:#f0a830}
.tilly-star-two{width:19px;height:19px;top:8%;right:3%;color:#f0a830}
.tilly-heart{width:20px;height:20px;bottom:11%;left:23%;color:#f04830}
.website-capture{width:100%;max-height:100%;object-fit:contain;border-radius:5px;box-shadow:0 16px 38px #0003}
.cards-art{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;gap:22px}
.cards-logo{width:min(80%,430px)}
.card-fan{position:relative;width:min(100%,34rem);height:clamp(17rem,25vw,22rem)}
.card{position:absolute;bottom:26px;left:50%;height:clamp(14rem,21vw,18rem);width:auto;max-width:none;border:2px solid #f7f0e66b;border-radius:.65rem;box-shadow:.65rem .8rem 1.35rem #04122b7a}
.card-one{z-index:1;transform:translate(-130%,7%) rotate(-12deg)}
.card-two{z-index:2;transform:translate(-85%,-2%) rotate(-4deg)}
.card-three{z-index:3;transform:translate(-35%,-2%) rotate(5deg)}
.card-four{z-index:4;transform:translate(12%,7%) rotate(13deg)}
.development-status{display:inline-flex;font-size:10px;font-weight:700;color:#0a214a;background:#ffd84b;box-shadow:2px 2px 0 #fa0008;padding:3px 6px;margin-top:8px}
.satellite-art{width:100%;display:flex;align-items:center;justify-content:center}
.satellite-art>img{width:min(62%,360px)}
.project-index{display:grid;grid-template-columns:minmax(0,.86fr) minmax(0,1.74fr);gap:clamp(30px,5vw,90px);padding-block:83px 77px}
.index-heading h2{font-size:36px;line-height:1.1;font-weight:500;letter-spacing:-.05em;margin:0 0 18px}
.index-heading p{max-width:220px;font-size:14px;line-height:1.65;color:#646b65;margin:0}
.index-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.45fr);column-gap:24px;row-gap:3px;padding:20px 0;border-top:1px solid #23272529}
.index-row:first-child{padding-top:0;border-top:0}
.index-row:last-child{border-bottom:1px solid #23272529}
.index-row h3{font-size:19px;letter-spacing:-.035em;font-weight:500;line-height:1.35;margin:0;padding-top:2px;grid-row:span 2}
.index-row p{font-size:13px;color:#646b65;line-height:1.65;margin:0}
.index-row .project-domain{font-size:12px;justify-self:start}
.index-status{display:block;font-size:10px;letter-spacing:0;color:#646b65;margin-top:5px}
.footer{padding-block:27px 34px;border-top:1px solid #23272529}
.footer-email{display:inline-flex;align-items:center;font-size:24px;letter-spacing:-.035em;font-weight:500;min-height:44px;text-decoration-color:#2327254d}
.footer-details{display:flex;flex-wrap:wrap;gap:14px 32px;align-items:center;padding-top:18px;font-size:11px;color:#646b65}
.footer-details>a{margin-left:auto;display:inline-flex;align-items:center;min-height:44px;color:#232725}
.privacy-main{max-width:800px;padding-block:64px}
.privacy-main h1{font-size:46px;font-weight:500;letter-spacing:-.04em;margin:0 0 30px}
.privacy-main h2{font-size:24px;letter-spacing:-.025em;font-weight:500;margin:32px 0 12px}
.privacy-main p{line-height:1.8;font-size:16px;color:#646b65}
.privacy-main .text-link{display:inline-flex;align-items:center;min-height:44px}
body:not(.enhanced) .scenes>.scene+ .scene{padding-top:64px}
body:not(.enhanced) .showcase{align-items:start}
body:not(.enhanced) .company-intro{position:sticky;top:48px;align-self:start}
body:not(.enhanced) .scene-tilly{background:#fff8ef;color:#2a2018;padding:32px}
@media(min-width:1600px){.company-name{font-size:103px}}
@media(max-width:1100px){.frame{width:calc(100% - 72px)}.showcase{grid-template-columns:minmax(0,.85fr) minmax(0,1.55fr);gap:35px;min-height:585px;padding-block:34px}.company-name{font-size:67px}.company-line{font-size:20px}.scene-visual{min-height:300px;height:330px}.scene-caption{grid-template-columns:1fr;gap:12px;margin-top:12px}.scene-title{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.development-status{margin-top:0}.scene-caption h2{font-size:23px}.project-tabs{gap:17px}.project-tabs button{font-size:12px}.project-index{gap:35px}.card-fan{height:245px}.card{height:215px}.cards-art{gap:6px}.cards-logo{width:78%}.tilly-polaroid figcaption{font-size:11px}}
@media(max-width:800px){.frame{width:calc(100% - 48px)}.masthead{min-height:83px}.home-mark{gap:9px}.company-symbol{width:42px;height:30px}.masthead nav{gap:21px;font-size:12px}.showcase{grid-template-columns:1fr;gap:27px;min-height:auto;padding-block:35px 20px}.company-intro{display:grid;grid-template-columns:1fr 1fr;align-items:center;column-gap:32px;padding:0}.company-name{font-size:clamp(48px,9vw,68px);margin:0;grid-row:span 2}.company-line{font-size:19px}.company-description{font-size:13px;margin:10px 0 0;max-width:300px}.scene-visual{height:clamp(280px,52vw,425px);min-height:0}.scene-caption{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:25px;padding-top:19px;margin-top:13px}.scene-title{display:block}.scene-caption h2{font-size:22px}.scene-description p{font-size:13px}.project-tabs{grid-template-columns:repeat(3,minmax(0,1fr));gap:5px 20px;padding-bottom:24px}.project-tabs button{min-height:50px;padding-block:13px 8px;font-size:12px}.project-index{grid-template-columns:1fr;gap:35px;padding-block:52px}.index-heading{display:flex;justify-content:space-between;align-items:center;gap:30px}.index-heading h2{margin:0;font-size:31px}.index-heading p{font-size:12px;max-width:190px}.index-row{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr)}.card-fan{height:280px}.card{height:245px}.cards-logo{width:65%;max-width:330px}.tilly-logo{max-width:200px}.tilly-polaroid figcaption{font-size:clamp(11px,2vw,16px)}.footer-email{font-size:22px}}
@media(max-width:480px){.frame{width:calc(100% - 40px)}.home-mark span{display:none}.masthead{min-height:70px}.masthead nav{gap:26px;font-size:12px}.company-intro{grid-template-columns:minmax(0,1fr) minmax(0,.96fr);gap:17px}.company-name{font-size:47px}.company-line{font-size:15px}.company-description{font-size:13px;line-height:1.55;margin-top:10px}.showcase{gap:22px;padding-top:28px;padding-bottom:22px}.scene-visual{height:clamp(202px,65vw,280px)}.scene-caption{grid-template-columns:1fr;gap:10px;margin-top:12px;padding-top:18px}.scene-caption h2{font-size:23px}.scene-title{display:flex}.scene-description p{font-size:13px;line-height:1.6}.project-domain{font-size:12px}.project-tabs{gap:4px 16px}.project-tabs button{font-size:11px;min-height:52px}.index-heading{display:block}.index-heading h2{font-size:30px;margin-bottom:12px}.index-heading p{max-width:none;font-size:13px}.index-row{grid-template-columns:1fr;gap:8px;padding-block:23px}.index-row h3{font-size:22px;grid-row:auto;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.index-row .project-domain{font-size:12px}.index-row p{font-size:13px;max-width:300px}.index-status{font-size:10px;margin:0}.footer-details{display:block;font-size:11px;line-height:1.7}.footer-details span{display:block;margin-bottom:5px}.footer-details>a{margin-top:8px}.tilly-art{grid-template-columns:minmax(0,.67fr) minmax(0,1.33fr);gap:12px}.tilly-polaroid figcaption{font-size:9px}.tilly-star-one{width:14px;height:14px;top:10%}.tilly-star-two{width:12px;height:12px;top:15%}.tilly-heart{width:13px;height:13px;bottom:12%;left:18%}.cards-art{gap:5px}.cards-logo{width:72%;max-width:260px}.card-fan{height:180px;width:100%}.card{height:155px;border-width:1px;border-radius:5px}.satellite-art>img{width:66%}.privacy-main{padding-block:40px}.privacy-main h1{font-size:36px}.privacy-main p{font-size:15px}}
@media(max-width:360px){.company-name{font-size:40px}.company-line{font-size:14px}.company-description{font-size:12px}.company-intro{gap:13px}.scene-visual{height:202px}.tilly-polaroid figcaption{font-size:8px}.card-fan{height:155px}.card{height:135px}.cards-logo{width:70%}.project-tabs{gap:3px 10px}.project-tabs button{font-size:10px}.footer-email{font-size:20px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.opening,.opening:before,.project-tabs button,.project-tabs button:before{transition:none}.enhanced .scene:not([hidden]){animation:none}}

/* Each unenhanced scene carries its own native colours and remains readable. */
body:not(.enhanced) .scene{--ink:#f4f1e9;--soft:#bbc3d4;--line:#f4f1e930;--accent:#b9e0cf;color:var(--ink);padding:32px;margin-top:24px;background:#0f172b}
body:not(.enhanced) .scene:first-child{margin-top:0}
body:not(.enhanced) .scene-tilly{--ink:#2a2018;--soft:#6d5c4b;--line:#2a201829;--accent:#b33422;background:#fff8ef}
body:not(.enhanced) .scene-energy{--soft:#cbd5e1;--accent:#8eddec;background:#172554}
body:not(.enhanced) .scene-octopus{--soft:#e7d3f1;--accent:#8ee6f6;background:#24063e}
body:not(.enhanced) .scene-cards{--soft:#d0dcf1;--accent:#ffd84b;background:linear-gradient(105deg,#0a214a 50%,#123775 50%)}
body:not(.enhanced) .scene-satellite{--soft:#c5cedf;--accent:#b1c8ff;background:#0d111d url('/assets/projects/uk-satellite-sky.svg') center/cover}
@media(max-width:800px){body:not(.enhanced) .company-intro{position:static}body:not(.enhanced) .scene{padding:20px}}
