@font-face{font-family:Portfolio;src:local('Arial');font-display:swap}
:root{--paper:#f8f8f2;--white:#fff;--ink:#24332e;--muted:#626d64;--line:#dadfd3;--green:#263e34;--lime:#d8e4b8;--orange:#bd603b;--mono:'Courier New',monospace;--font:Portfolio,'Helvetica Neue',Arial,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent}button,input{font:inherit}button,a{touch-action:manipulation}a{color:inherit;text-decoration:none}button{cursor:pointer}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid var(--orange);outline-offset:5px}::selection{background:var(--lime);color:var(--ink)}.wrap{width:min(1240px,calc(100% - 112px));margin-inline:auto}.skip-link{position:fixed;left:18px;top:-100px;background:var(--green);color:white;padding:14px;z-index:99}.skip-link:focus{top:12px}.site-header{height:94px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:0 56px;gap:30px}.identity{display:flex;align-items:center;gap:17px;font-size:14px;font-weight:600}.monogram{font-size:28px;letter-spacing:-2px;line-height:1;font-weight:700}.monogram span{color:var(--orange)}.site-header nav{display:flex;gap:33px;font-size:13px}.site-header nav a{padding:15px 0}.site-header nav a:hover{color:var(--orange)}.site-header nav span{margin-left:6px;font:10px var(--mono);color:var(--muted)}.private-label{display:flex;align-items:center;gap:8px;color:var(--muted);font:11px var(--mono)}.private-label svg{width:15px;fill:none;stroke:currentColor;stroke-width:1.4}.hero{padding-block:68px 62px}.hero-copy{max-width:720px}.eyebrow{font:10px/1.6 var(--mono);letter-spacing:1.3px;font-weight:bold;color:var(--muted);margin:0 0 21px}.hero .eyebrow{font-size:9px;letter-spacing:1px;display:flex;align-items:center;gap:8px}.status-dot{width:6px;height:6px;background:var(--orange);display:inline-block;border-radius:100%;flex-shrink:0}h1{font-size:clamp(48px,5.2vw,74px);line-height:1.035;font-weight:500;letter-spacing:-3.5px;margin:0 0 24px}h1 em{color:var(--orange);font-family:Georgia,'Times New Roman',serif;font-weight:400}.hero-description{font-size:15px;line-height:1.8;color:var(--muted);max-width:610px;margin:0 0 26px}.primary-button{display:inline-flex;align-items:center;gap:33px;background:var(--green);color:#fff;padding:16px 21px;border-radius:5px;font-size:13px;transition:background .15s,transform .15s}.primary-button:hover{background:#395444;transform:translateY(-2px)}.primary-button span{font-size:19px}.hero-interests{display:flex;align-items:center;gap:10px;font:9px var(--mono);color:var(--muted);margin-top:27px}.hero-interests i{height:3px;width:3px;background:#a0aa96;border-radius:50%}.work-section{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#f0f2e9;padding:65px 0 70px}.section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:35px}.section-heading .eyebrow{margin-bottom:13px}h2{font-size:32px;font-weight:500;letter-spacing:-1.15px;line-height:1.22;margin:0}.section-heading>p{font-size:12px;color:var(--muted);line-height:1.7;margin:0 0 3px;flex-shrink:0}.filter-row{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:31px 0 26px}.filters{display:flex;gap:6px;flex-wrap:wrap}.filter{border:1px solid transparent;background:transparent;color:var(--muted);border-radius:5px;padding:10px 14px;font-size:11px;min-height:40px;transition:background .15s}.filter:hover{background:#e2e8d6}.filter.active{background:var(--green);color:#fff}.filter span{font:9px var(--mono);margin-left:8px;opacity:.7}.project-count{font:10px var(--mono);color:var(--muted);white-space:nowrap}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px}.project-card{background:#fff;border:1px solid var(--line);border-radius:9px;overflow:hidden;display:flex;flex-direction:column;transition:box-shadow .2s,transform .2s}.project-card[hidden]{display:none}.project-card:hover{box-shadow:0 10px 30px #283c3010;transform:translateY(-3px)}.project-visual{height:245px;position:relative;overflow:hidden;background:#e4eadd;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--line)}.project-visual>svg{height:100%;width:100%;object-fit:contain}.visual-caption{position:absolute;bottom:12px;left:17px;font:8px var(--mono);letter-spacing:.6px;color:#4e6454;background:#f8faf0d9;padding:4px 6px;border-radius:3px}.visual-number{position:absolute;top:17px;left:19px;font:10px var(--mono);color:#536453}.project-info{padding:25px 27px 0;flex:1;display:flex;flex-direction:column}.project-category{font:9px var(--mono);letter-spacing:1px;color:var(--orange);margin:0 0 10px;text-transform:uppercase}.project-info h3{font-size:24px;font-weight:500;letter-spacing:-.6px;margin:0 0 11px}.project-description{font-size:13px;line-height:1.75;color:var(--muted);margin:0 0 20px;max-width:460px}.tags{display:flex;flex-wrap:wrap;gap:6px}.tags span{border:1px solid #e1e5dc;padding:6px 8px;border-radius:4px;font:9px var(--mono);color:#54614f;background:#f9faf6}.project-info .tags{margin-top:auto;margin-bottom:21px}.project-link{display:flex;align-items:center;justify-content:space-between;width:100%;border:0;border-top:1px solid #e6e9e0;background:#fff;padding:18px 0;color:var(--green);font-size:12px;text-align:left}.project-link:hover{color:var(--orange)}.project-link span{font-size:19px}.about-section{display:grid;grid-template-columns:1.1fr 1fr;gap:100px;padding-block:75px 70px}.about-copy h2{font-size:34px;margin-bottom:23px}.about-copy>p:not(.eyebrow){font-size:13px;line-height:1.9;color:var(--muted);max-width:520px}.toolkit{padding:7px 0 0 32px;border-left:1px solid var(--line)}.toolkit .eyebrow{margin-bottom:24px}.toolkit-group+.toolkit-group{margin-top:22px}.toolkit-group h3{font-size:12px;font-weight:500;margin:0 0 11px}.toolkit .tags span{background:#f0f2e9}footer{border-top:1px solid var(--line);padding-block:27px 32px;display:flex;justify-content:space-between;align-items:center}footer .identity{font-size:12px}footer small{display:block;font-size:10px;color:var(--muted);font-weight:400;margin-top:6px}.back-top{font-size:11px;display:flex;gap:20px;align-items:center}.back-top span{font-size:19px}.project-dialog{padding:0;border:1px solid #d4dccb;border-radius:13px;width:min(910px,calc(100% - 40px));max-height:90vh;max-height:90dvh;background:var(--paper);color:var(--ink);box-shadow:0 28px 120px #10251e40}.project-dialog::backdrop{background:#142920ad;backdrop-filter:blur(5px)}.dialog-shell{padding:28px 40px 40px}.dialog-toolbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:24px}.dialog-toolbar .eyebrow{margin:0}.close-button{border:1px solid var(--line);border-radius:5px;background:white;padding:9px 12px;display:flex;gap:20px;align-items:center;font-size:11px;min-height:40px;color:var(--ink)}.close-button span{font-size:20px}.close-button:hover{background:#e9eede}.dialog-title{font-size:38px;letter-spacing:-1.5px;margin:0 0 16px;line-height:1.1;font-weight:500}.dialog-lede{color:var(--muted);font-size:14px;line-height:1.8;max-width:680px}.dialog-meta{margin:22px 0}.details-grid{display:grid;grid-template-columns:1fr 1fr;gap:30px;border-top:1px solid var(--line);padding-top:24px;margin-top:26px}.details-grid h3,.artifacts h3{font-size:14px;font-weight:600;margin:0 0 12px}.details-grid p,.details-grid li{font-size:12px;line-height:1.85;color:var(--muted)}.details-grid ul{padding-left:17px;margin-top:0}.result-box{background:#eaf0dd;padding:18px 20px;margin:24px 0;border-left:3px solid #8d9e70}.result-box h3{font:10px var(--mono);letter-spacing:1px;margin:0 0 9px}.result-box p{font-size:12px;line-height:1.8;margin:0;color:#455b41}.technical-details{border-block:1px solid var(--line);margin-top:20px}.technical-details summary{cursor:pointer;display:flex;justify-content:space-between;list-style:none;padding:18px 0;font-size:13px}.technical-details summary::-webkit-details-marker{display:none}.technical-details summary:after{content:'+';font:20px var(--mono);line-height:14px}.technical-details[open] summary:after{content:'−'}.technical-content{padding-bottom:15px}.technical-content p,.technical-content li{font-size:12px;color:var(--muted);line-height:1.9}.technical-content ul{padding-left:17px}.pin-table{border-collapse:collapse;width:100%;font-size:11px;text-align:left;margin:12px 0}.pin-table td,.pin-table th{padding:10px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.5}.pin-table th{font-weight:600;background:#eef1e8}.pipeline{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin:15px 0}.pipeline span{padding:9px 11px;background:#edf1e5;border:1px solid #dfe6d3;border-radius:4px;font:10px var(--mono)}.pipeline i{font-size:14px;font-style:normal}.artifacts{margin-top:28px}.artifacts>p{font-size:12px;color:var(--muted);line-height:1.7}.artifact-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:15px}.artifact-slot{padding:17px;border:1px dashed #c9d1bd;border-radius:6px;display:flex;gap:12px;background:#f1f4eb}.artifact-icon{width:22px;height:22px;flex-shrink:0;color:#748567}.artifact-slot h4{font-size:12px;margin:0 0 6px;font-weight:500}.artifact-slot p{font-size:10px;line-height:1.6;color:var(--muted);margin:0}.pending{display:inline-block;margin-top:9px;font:8px var(--mono);text-transform:uppercase;letter-spacing:.6px;color:#677a54}.dialog-bottom{font:9px/1.7 var(--mono);color:var(--muted);margin:22px 0 0}.noscript-note{padding:25px;border:1px solid var(--line)}body.modal-open{overflow:hidden}
@media(min-width:1550px){.hero{padding-block:82px 76px}}
@media(max-width:1100px){.wrap{width:calc(100% - 72px)}.site-header{padding-inline:36px}.hero{padding-block:58px}.hero .eyebrow{font-size:8px;letter-spacing:.5px}.hero-description{font-size:14px}.hero-interests{font-size:8px;gap:7px}.section-heading>p{display:none}.project-count{display:none}.about-section{gap:50px}.project-visual{height:220px}}
@media(max-width:760px){html{scroll-padding-top:24px}.wrap{width:calc(100% - 40px)}.site-header{padding-inline:20px;height:76px;gap:15px}.identity-name{display:none}.site-header nav{gap:20px;font-size:12px}.private-label{font-size:9px;gap:4px}.private-label svg{width:13px}.hero{padding-block:45px}.hero .eyebrow{font-size:8px;letter-spacing:.7px}h1{font-size:60px;letter-spacing:-2.7px}.hero-description{font-size:14px;max-width:520px}.hero-interests{font-size:8px;gap:9px}.work-section{padding-block:43px}.section-heading h2{font-size:28px;max-width:340px}.filter-row{margin-top:22px;gap:0}.filters{gap:4px}.filter{padding:10px 11px;font-size:10px}.project-grid{grid-template-columns:1fr;gap:22px}.project-visual{height:235px}.project-info{padding:23px 22px 0}.project-info h3{font-size:25px}.project-description{font-size:13px}.about-section{grid-template-columns:1fr;gap:32px;padding-block:48px}.about-copy h2{font-size:29px}.toolkit{border-left:0;border-top:1px solid var(--line);padding:27px 0 0}.toolkit .tags span{font-size:10px}footer .identity{gap:12px}footer .monogram{font-size:23px}.back-top{gap:10px}.dialog-shell{padding:20px 22px 26px}.dialog-title{font-size:31px}.dialog-toolbar .eyebrow{font-size:8px;letter-spacing:.6px}.close-button{padding:8px 11px;gap:10px}.details-grid{grid-template-columns:1fr;gap:18px}.artifact-grid{grid-template-columns:1fr}.project-dialog{width:calc(100% - 20px);max-height:94dvh}.pin-table td,.pin-table th{padding:8px 6px}.hero .primary-button{min-height:48px}}
@media(max-width:360px){.site-header nav{gap:13px}.private-label{font-size:8px}.hero h1{font-size:53px}.hero-interests{font-size:7px}.filter{padding-inline:8px}.about-copy h2{font-size:27px}footer small{max-width:150px;line-height:1.5}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}

/* Original submission artifacts within the gunshot case study. */
.evidence-visual{background:#151515}.evidence-visual>img{width:100%;height:100%;object-fit:contain;padding:19px 24px 26px}.evidence-visual .visual-number{color:#e5ecd9;background:#26362ccc;padding:4px 6px;top:10px;left:10px;border-radius:3px}.evidence-visual .visual-caption{font-size:8px;bottom:7px}.project-attribution{font:10px/1.8 var(--mono);color:var(--orange);margin:-4px 0 15px}.project-evidence{margin-top:27px}.project-evidence h3,.technical-content h3{font-size:13px;font-weight:600;margin:20px 0 10px}.project-evidence>p{font-size:12px;color:var(--muted);line-height:1.8}.evidence-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:16px 0 23px}.evidence-grid figure{margin:0;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:#fff}.evidence-grid figure>a{display:flex;align-items:center;justify-content:center;background:#171717;height:230px}.evidence-grid img{display:block;width:100%;height:100%;object-fit:contain}.evidence-grid figcaption{padding:14px;font-size:10px;line-height:1.8;color:var(--muted)}.evidence-grid figcaption strong{display:block;font-size:11px;font-weight:600;color:var(--ink);margin-bottom:5px}.technical-figure{margin:17px 0 22px}.technical-figure img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:6px}.technical-figure figcaption{font-size:10px;color:var(--muted);line-height:1.8;margin-top:9px}.technical-content a,.evidence-grid figcaption a{color:var(--green);text-decoration:underline;text-underline-offset:3px}.artifact-ready{border-style:solid;background:#f4f7ed;transition:border-color .15s,background .15s}.artifact-ready:hover{border-color:#7f9268;background:#eaf0de}.resource-action{display:block;font:9px/1.6 var(--mono);color:var(--green);margin-top:10px}.audio-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.audio-grid>div{min-width:0}.audio-grid label{display:block;font-size:11px;line-height:1.7;color:var(--muted);margin-bottom:8px}.audio-grid audio{width:100%;max-width:100%;height:42px}
@media(max-width:760px){.evidence-grid,.audio-grid{grid-template-columns:1fr}.evidence-grid figure>a{height:auto;min-height:190px}.evidence-grid img{height:auto;max-height:360px}.evidence-visual>img{padding-inline:16px}.project-attribution{font-size:9px}.technical-figure{margin-inline:0}.project-dialog .technical-content{min-width:0}}

.schematic-visual{background:#f0f2e9}.schematic-visual>img{padding:26px 14px 29px}.avr-evidence-grid figure>a{background:#fff}.avr-evidence-grid figure:nth-child(2) img{object-position:center top}.technical-content code{font:11px var(--mono);background:#edf1e5;padding:2px 4px;border-radius:3px}

.project-card-wide{grid-column:1/-1;display:grid;grid-template-columns:.85fr 1.15fr}.project-card-wide[hidden]{display:none}.project-card-wide .project-visual{height:360px;border-bottom:0;border-right:1px solid var(--line)}.project-card-wide .project-info{padding:32px 32px 0}.water-visual{background:#dde1d7}.water-visual>img{padding:0;object-fit:contain}.water-visual .visual-caption{bottom:10px}.water-evidence-grid figure>a{height:320px;background:#e9ece3}.water-evidence-grid img{object-fit:contain}
@media(max-width:760px){.project-card-wide{display:flex;grid-column:auto}.project-card-wide .project-visual{height:300px;border-right:0;border-bottom:1px solid var(--line)}.project-card-wide .project-info{padding:23px 22px 0}.water-evidence-grid figure>a{height:330px;min-height:0}.water-evidence-grid img{height:100%;max-height:330px}}

.dtmf-visual{background:#edf0e7}.dtmf-evidence-grid figure>a{background:#fff}.dtmf-keypad th,.dtmf-keypad td{text-align:center}.dtmf-keypad th:first-child{text-align:left}.dtmf-method-table th[scope="row"]{width:84px}
@media(max-width:420px){.dtmf-keypad th,.dtmf-keypad td{padding:8px 4px}.dtmf-keypad th:first-child{max-width:72px;overflow-wrap:break-word}}

/* CamPy demonstration and work-in-progress status. */
.project-status{align-self:flex-start;margin:0 0 12px;padding:5px 9px;border:1px solid #d1b27c;border-radius:4px;background:#fff5e0;color:#72531c;font-size:.875rem;line-height:1.3;font-weight:600}
.campy-visual{background:#fff}.campy-visual>img{padding:0;object-fit:contain}.campy-visual .visual-caption{font-size:.75rem;max-width:calc(100% - 24px)}
.campy-demo figure{margin:14px 0 22px}.campy-demo video{display:block;width:100%;max-width:640px;height:auto;aspect-ratio:4/3;background:#17201c;border:1px solid var(--line);border-radius:7px}
.campy-demo figcaption{max-width:640px;margin-top:12px;font-size:.875rem;line-height:1.7;color:var(--muted)}.campy-demo figcaption strong{display:block;color:var(--ink);font-weight:600;margin-bottom:4px}
.campy-demo video:focus-visible{outline:3px solid var(--orange);outline-offset:4px}
.section-heading .section-label,.about-copy .section-label{font:.875rem/1.6 var(--mono);font-weight:600;letter-spacing:1.3px;color:var(--muted);margin:0}
.about-copy .section-label{margin-bottom:20px}
