:root{--violet:#6428c9;--blue:#175cff;--lime:#b8ff00;--pink:#ff3d9a;--chrome:#c9ceca;--titlebar-blue:#174a7e;--titlebar-teal:#087c78;--ink:#101028;--paper:#fff;color-scheme:light}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:0;color:var(--ink);font:16px/1.45 Verdana,Geneva,Tahoma,sans-serif;background:#35127c;background-image:linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(rgba(255,255,255,.08) 1px,transparent 1px);background-size:18px 18px}.wallpaper{position:fixed;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent 0 3px,rgba(0,0,0,.13) 3px 4px);mix-blend-mode:multiply}.skip-link{position:fixed;z-index:99;top:-6rem;left:1rem;background:#fff;color:#000;padding:.75rem;border:3px solid #000}.skip-link:focus{top:1rem}a{color:#001ed0;text-decoration-thickness:2px;text-underline-offset:3px}a:hover{background:var(--lime);color:#000}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible,.scrollbox:focus-visible{outline:3px dashed #ff0;outline-offset:3px}.browser-shell{position:relative;width:min(760px,calc(100% - 28px));margin:30px auto 12px;background:var(--chrome);border:3px ridge #e8ece9;box-shadow:8px 9px 0 #16063e,12px 13px 0 var(--pink)}.browser-bar{min-height:34px;padding:4px 5px 4px 8px;color:#fff;background:linear-gradient(90deg,#103b68,var(--titlebar-blue) 55%,var(--titlebar-teal));display:flex;align-items:center;justify-content:space-between;font:bold 13px/1.1 "Courier New",monospace;text-shadow:1px 1px #102436}.browser-title{display:flex;gap:7px;align-items:center}.window-controls{display:flex;gap:3px;flex:0 0 auto}.window-controls>span{position:relative;display:grid;place-items:center;width:20px;height:20px;color:#102434;background:#c9ceca;border:2px outset #eef2ef;font:bold 13px/1 Arial;box-shadow:inset 0 0 0 1px #8b938e}.window-controls .minimise:after{content:"";width:8px;border-bottom:2px solid currentColor;transform:translateY(3px)}.window-controls .maximise:after{content:"";width:8px;height:7px;border:1px solid currentColor;border-top-width:2px}.window-controls .close:before,.window-controls .close:after{content:"";position:absolute;width:10px;border-top:2px solid currentColor;transform:rotate(45deg)}.window-controls .close:after{transform:rotate(-45deg)}.menu-strip{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px;min-height:34px;padding:3px 8px;border-bottom:2px groove #f1f3f1;font:13px "Nimbus Sans",Helvetica,Arial,sans-serif}.menu-strip a{color:#111;text-decoration:none}.menu-strip button{min-height:28px;background:#ddd;border:2px outset #fff;color:#111;font:inherit}.menu-strip button{margin-left:auto}.address-strip{display:flex;align-items:center;gap:6px;padding:5px 7px;border-bottom:2px groove #fff;font-size:12px}.address-strip code{min-width:0;flex:1;padding:4px 7px;overflow:hidden;white-space:nowrap;background:#fff;border:2px inset #eee;font-family:"Courier New",monospace}.address-strip b{padding:3px 5px;background:var(--lime);border:1px solid #000}.page-canvas{padding:18px clamp(10px,3vw,27px) 32px;background-color:#f8f8ff;background-image:radial-gradient(#c8c8e4 1px,transparent 1px);background-size:8px 8px}.hello{position:relative;padding:27px 18px 22px;margin:0 0 15px;overflow:hidden;background:#fff;border:3px solid #000;box-shadow:7px 7px 0 var(--lime)}.hello:after{content:"";position:absolute;right:-45px;bottom:-60px;width:190px;height:190px;border:14px double var(--violet);border-radius:50%;opacity:.18}.eyebrow{margin:0 0 10px;font:700 11px "Courier New",monospace;letter-spacing:.06em;color:#4c287c}.hello h1{position:relative;z-index:1;margin:0;font:900 clamp(45px,11vw,87px)/.75 Impact,Haettenschweiler,"Arial Narrow Bold",sans-serif;letter-spacing:-.025em;text-transform:uppercase}.hello h1 span{display:block}.hello h1 span:last-child{padding-left:clamp(10px,8vw,72px);color:var(--violet);text-shadow:3px 3px 0 var(--lime),6px 6px 0 #111}.hello-copy{position:relative;z-index:1;max-width:540px;margin:27px 0 12px;font:bold 18px/1.4 Georgia,serif}.guestbook-cta{position:relative;z-index:2;display:inline-flex;min-height:44px;align-items:center;justify-content:center;margin:24px 0 2px;padding:7px 14px;color:#111;background:linear-gradient(135deg,var(--pink) 0 72%,var(--lime) 72%);border:3px solid #000;box-shadow:4px 4px 0 var(--lime);transform:rotate(2deg);font:bold 14px/1.15 "Courier New",monospace;text-decoration:none}.guestbook-cta:hover{color:#111;background:var(--lime)}.badge-row{display:flex;flex-wrap:wrap;gap:6px}.badge-row span{padding:3px 6px;color:#fff;background:#111;border:2px solid #999;font:bold 10px "Courier New",monospace;letter-spacing:.04em}.mail-now{margin:13px 0 0;font:bold 13px "Courier New",monospace}.window{margin:22px 0;background:#ccd1cd;border:3px ridge #f0f3f1;box-shadow:5px 5px 0 #30303d}.window summary{min-height:35px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;padding:4px 6px;cursor:pointer;list-style:none;color:#fff;background:linear-gradient(90deg,#123d68,var(--titlebar-blue) 60%,var(--titlebar-teal));border-bottom:2px groove #e7ece8;font:bold 13px "Courier New",monospace;text-shadow:1px 1px #102436}.window summary::-webkit-details-marker{display:none}.panel-controls>span{width:16px;height:16px;background:#c9ceca;box-shadow:none}.panel-controls .minimise:after{width:6px}.panel-controls .maximise:after{width:6px;height:5px}.panel-controls .close:before,.panel-controls .close:after{width:7px}.window-content{padding:9px}.scroll-instruction{margin:0 0 6px;padding:4px 7px;background:#ffffa8;border:1px dashed #222;font:11px "Courier New",monospace}.scrollbox{overflow-y:scroll;overscroll-behavior:contain;scrollbar-color:var(--violet) #ccc;scrollbar-width:auto;background:#fff;border:3px inset #eee}.projects-scroll{height:330px}.projects-scroll article{position:relative;padding:17px 18px 20px;border-bottom:2px dotted #888;background:linear-gradient(90deg,#fff 0 95%,#ececff 95%)}.projects-scroll article:nth-child(even){background:linear-gradient(90deg,#efffd7 0 95%,#d7ff9e 95%)}.projects-scroll h2{margin:4px 0 5px;font:700 clamp(21px,5vw,30px)/1.05 Georgia,serif}.projects-scroll p{margin:0;max-width:580px}.filetype{display:inline-block;padding:2px 5px;background:#111;color:var(--lime);font:bold 10px "Courier New",monospace}.statusline{display:flex;justify-content:space-between;padding:6px 4px 0;font:11px "Courier New",monospace}.contact-zone{position:relative;margin:35px 10px 12px;padding:25px 22px;background:#fff;border:4px double var(--violet);box-shadow:-7px 7px 0 var(--pink)}.contact-zone h2{margin:0;font:900 42px/1 Impact,sans-serif;letter-spacing:.03em}.contact-zone p:not(.rubber-stamp){margin:.6rem 0}.contact-zone ul{margin:.7rem 0 0;padding-left:20px}.contact-zone li{margin:.4rem 0}.rubber-stamp{display:inline-block;margin:0 0 9px;padding:3px 8px;transform:rotate(-2deg);border:3px solid #c80054;color:#c80054;font:bold 12px "Courier New",monospace}.doodle{position:absolute;right:25px;top:-28px;color:var(--blue);font:70px/1 "Comic Sans MS",cursive;transform:rotate(12deg)}.browser-status{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;padding:6px 8px;border-top:2px groove #fff;font:11px "Courier New",monospace}.browser-status a{margin-left:auto}@media(max-width:600px){.browser-shell{width:calc(100% - 12px);margin-top:8px;box-shadow:4px 5px 0 #16063e}.menu-strip{gap:7px;overflow-x:auto}.menu-strip a{min-height:40px;display:flex;align-items:center}.address-strip span{display:none}.page-canvas{padding-inline:9px}.hello{padding-inline:12px}.hello h1{font-size:clamp(39px,15vw,68px)}.hello h1 span:last-child{padding-left:8px}.guestbook-cta{margin-top:22px}.projects-scroll{height:300px}.browser-status{align-items:flex-start}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
/* Working desktop window controls */
.window-controls>button{position:relative;display:grid;place-items:center;width:28px;height:28px;padding:0;color:#102434;background:#c9ceca;border:2px outset #eef2ef;font:bold 13px/1 Arial;box-shadow:inset 0 0 0 1px #8b938e;cursor:pointer}
.window-controls>button:active{border-style:inset}
.window-controls button.minimise:after{content:"";width:8px;border-bottom:2px solid currentColor;transform:translateY(3px)}
.window-controls button.maximise:after{content:"";width:8px;height:7px;border:1px solid currentColor;border-top-width:2px}
.window-controls button.close:before,.window-controls button.close:after{content:"";position:absolute;width:10px;border-top:2px solid currentColor;transform:rotate(45deg)}
.window-controls button.close:after{transform:rotate(-45deg)}
.window-titlebar{min-height:35px;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:8px;padding:4px 6px;color:#fff;background:linear-gradient(90deg,#123d68,var(--titlebar-blue) 60%,var(--titlebar-teal));border-bottom:2px groove #e7ece8;font:bold 13px "Courier New",monospace;text-shadow:1px 1px #102436}
[data-window].is-minimized>.window-content{display:none}
.browser-shell.is-minimized>:not(.browser-bar){display:none}
[data-window].is-maximized{position:fixed;z-index:80;inset:8px;width:auto;max-width:none;height:auto;max-height:calc(100dvh - 16px);margin:0;overflow:auto;box-shadow:8px 9px 0 #16063e}
[data-window][hidden]{display:none!important}
@media(max-width:600px){.window-titlebar{grid-template-columns:auto minmax(0,1fr)}[data-window].is-maximized{inset:4px;max-height:calc(100dvh - 8px)}}
.shortcut-hint{padding:1px 3px;border:1px dotted #555;font:10px "Courier New",monospace;text-decoration:none;cursor:help}
.page-canvas{position:relative;isolation:isolate}
.home-page>.window.is-maximized{position:relative;z-index:auto;inset:auto;width:auto;max-width:none;height:auto;max-height:none;margin:18px 0;overflow:visible;box-shadow:8px 9px 0 #16063e}
.home-page>.window.is-maximized .scrollbox{height:auto;overflow-y:visible}
.browser-shell.is-maximized{position:fixed;z-index:80;inset:8px;width:auto;max-width:none;height:auto;max-height:calc(100dvh - 16px);margin:0;overflow:auto;box-shadow:8px 9px 0 #16063e}
@media(max-width:600px){.home-page>.window.is-maximized{inset:auto}.browser-shell.is-maximized{inset:4px;max-height:calc(100dvh - 8px)}}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.terminal-window{margin:35px 0 12px}.terminal-window .window-titlebar{background:linear-gradient(90deg,#14341d,#176629 65%,#1c7b36)}.terminal-screen{min-height:245px;padding:16px;background:#07130b;color:#71ff84;font:14px/1.5 "Courier New",monospace;text-shadow:0 0 5px rgba(113,255,132,.24)}.terminal-output{max-height:290px;overflow-y:auto;overflow-wrap:anywhere;overscroll-behavior:contain}.terminal-output:empty{display:none}.terminal-output p{margin:4px 0}.terminal-output ul,.terminal-contact-list{margin:5px 0 12px;padding:0;list-style:none}.terminal-output li,.terminal-contact-list li{margin:4px 0}.terminal-screen a{color:#9dffab;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}.terminal-screen a:hover{background:#9dffab;color:#07130b}.terminal-screen a:focus-visible{outline-color:#fff}.terminal-prompt{display:flex;align-items:center;gap:8px;overflow-wrap:anywhere}.terminal-prompt>span:first-child{flex:0 1 auto;color:#71ff84;font-weight:bold}.terminal-prompt:focus-within>span:first-child{color:#fff}.terminal-input-wrap{position:relative;display:flex;min-width:0;flex:1}.terminal-prompt input{min-width:0;flex:1;padding:2px 0;border:0;outline:0;background:transparent;color:#d4ffda;font:inherit;caret-color:#71ff84}.terminal-prompt input:placeholder-shown{caret-color:transparent}.terminal-prompt input:focus-visible{outline:none}.terminal-block-cursor{position:absolute;top:50%;left:0;display:block;width:1ch;height:1em;transform:translateY(-50%);background:#71ff84;pointer-events:none}.terminal-input-wrap input:not(:placeholder-shown)+.terminal-block-cursor{display:none}.browser-shell:not([hidden]):not(.is-minimized) .terminal-window:not([hidden]):not(.is-minimized) .terminal-block-cursor{animation:terminal-cursor-blink 1s steps(1,end) infinite}@keyframes terminal-cursor-blink{50%{opacity:0}}
@media (prefers-reduced-motion:reduce){.terminal-block-cursor{animation:none!important;opacity:1}}
.terminal-motd{width:100%;max-width:100%;margin:0 0 10px;overflow:hidden}.terminal-motd pre{margin:0 0 7px;color:#71ff84;font-family:"Courier New",monospace;font-size:4px;line-height:1.05;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-all}.terminal-motd p{margin:1px 0;font-size:12px}
@media(min-width:601px){.terminal-motd pre{font-size:8px}}

.browser-bookmarks{position:relative;color:#111}.browser-bookmarks summary{min-height:28px;padding:5px 7px;list-style:none;cursor:pointer;background:#ddd;border:2px outset #fff}.browser-bookmarks summary::-webkit-details-marker{display:none}.browser-bookmarks summary:after{content:' ▾'}.browser-bookmarks[open] summary{border-style:inset}.bookmarks-list{position:absolute;z-index:70;top:calc(100% + 2px);left:0;width:max-content;min-width:230px;max-width:calc(100vw - 40px);padding:5px;background:#ddd;border:2px outset #fff;box-shadow:4px 4px 0 rgba(22,6,62,.55)}.bookmarks-list a{display:block;min-height:30px;padding:5px 8px;overflow-wrap:anywhere}.bookmarks-list hr{margin:4px;border:0;border-top:1px solid #777;border-bottom:1px solid #fff}

.navigator-recovery{width:min(300px,calc(100% - 28px));margin:30px auto 12px;padding:12px;text-align:center;background:var(--chrome);border:3px ridge #e8ece9;box-shadow:6px 7px 0 #16063e;font:13px "Courier New",monospace}.navigator-recovery p{margin:0 0 9px}.navigator-recovery button{min-height:32px;padding:4px 9px;background:#ddd;border:2px outset #fff;color:#111;font:inherit}.navigator-recovery[hidden]{display:none!important}
@media(max-width:600px){.menu-strip{gap:2px 7px;overflow:visible}.menu-strip a,.menu-strip button,.browser-bookmarks summary{min-height:40px}.shortcut-hint{display:none}.bookmarks-list{right:0;left:auto}.menu-strip button{padding-inline:7px}.navigator-recovery{margin-top:8px}}

/* Editable address bar and local-only Navigator controls */
.address-strip{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:5px 7px;background:#b8bdb9;border-top:1px solid #eef2ef;border-bottom:2px groove #eef2ef;font:12px "Courier New",monospace}.address-strip label{flex:0 0 auto}.address-strip input{min-width:0;min-height:30px;flex:1 1 250px;padding:3px 6px;color:#111;background:#fff;border:2px inset #eef2ef;font:13px "Courier New",monospace}.address-strip .address-actions{display:flex;flex:0 0 auto;gap:3px}.address-strip .address-actions button span{display:inline}.address-actions button{display:grid;place-items:center;width:32px;height:32px;padding:0;color:#102434;background:#d5d9d6;border:2px outset #fff;font:bold 19px/1 Arial,sans-serif;cursor:pointer}.address-actions button:active{border-style:inset}.address-actions button:disabled{color:#7c837f;cursor:default;text-shadow:1px 1px #fff}.connectivity-dialog{width:min(410px,calc(100% - 20px));max-width:none;padding:0;color:#111;background:#c9ceca;border:3px ridge #f0f3f1;box-shadow:7px 8px 0 rgba(18,8,39,.55);font:13px/1.4 Verdana,Geneva,Tahoma,sans-serif}.connectivity-dialog::backdrop{background:rgba(14,8,30,.42)}.dialog-titlebar{padding:6px 8px;color:#fff;background:linear-gradient(90deg,#777,#a3a3a3);border-bottom:2px groove #eee;font:bold 13px "Courier New",monospace;text-shadow:1px 1px #333}.dialog-content{display:flex;align-items:flex-start;gap:12px;padding:16px 16px 8px}.dialog-content p{margin:0 0 9px}.dialog-warning{display:grid;place-items:center;flex:0 0 34px;width:34px;height:34px;color:#111;background:#f4df39;border:2px solid #111;clip-path:polygon(50% 0,100% 100%,0 100%);font:bold 22px/1 Arial}.server-name{max-width:100%;font-weight:bold;overflow-wrap:anywhere;word-break:break-word}.dialog-buttons{padding:4px 16px 14px;text-align:center}.dialog-buttons button{min-width:74px;min-height:32px;background:#ddd;border:2px outset #fff;color:#111;font:inherit}.dialog-buttons button:active{border-style:inset}@media(max-width:390px){.address-strip label{flex-basis:100%}.address-strip input{flex-basis:calc(100% - 108px)}.address-actions{margin-left:auto}}


/* Navigator-owned X11-style cursors: fine pointing devices only. */
@media (hover:hover) and (pointer:fine){
  .browser-shell,.connectivity-dialog{cursor:url(assets/cursor-default.svg) 4 2,default}
  .browser-shell a,.browser-shell button:not(:disabled),.connectivity-dialog a,.connectivity-dialog button:not(:disabled){cursor:url(assets/cursor-pointer.svg) 8 2,pointer}
  .browser-shell button:disabled,.connectivity-dialog button:disabled{cursor:default}
  .browser-shell input,.browser-shell textarea,.browser-shell [contenteditable="true"],.browser-shell .terminal-screen,.connectivity-dialog input,.connectivity-dialog textarea,.connectivity-dialog [contenteditable="true"]{cursor:text}
}

/* In-Navigator project viewport. The frame stays sandboxed and always has a direct escape link. */
.project-view{min-width:0;margin:0;background:#8f9691;border:2px inset #eef2ef;overflow:hidden}
.project-viewbar{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;padding:6px 8px;background:#d5d9d6;border-bottom:2px groove #fff;font:12px/1.3 "Courier New",monospace}
.project-viewbar strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.project-viewbar a{flex:0 0 auto;padding:3px 6px;border:2px outset #fff;background:#e5e8e6;color:#111}
.project-view iframe{display:block;width:100%;height:min(72dvh,700px);min-height:420px;border:0;background:#fff}
@media(max-width:390px){.project-viewbar{align-items:stretch;flex-direction:column}.project-viewbar strong{white-space:normal}.project-viewbar a{align-self:flex-start;min-height:32px}.project-view iframe{height:64dvh;min-height:360px}}

/* Small Navigator throbber; busy state is bounded by script and static under reduced motion. */
.loading-globe{position:relative;display:inline-block;flex:0 0 20px;width:20px;height:20px;border:1px solid #d8f5ef;border-radius:50%;overflow:hidden;background:radial-gradient(circle at 35% 35%,#8de8d3 0 16%,#147a85 17% 55%,#073c62 56%);box-shadow:inset -2px -2px 0 rgba(0,0,0,.28)}
.loading-globe:before,.loading-globe:after{content:"";position:absolute;inset:3px 1px;border:1px solid rgba(255,255,255,.7);border-top:0;border-bottom:0;border-radius:50%}
.loading-globe:after{inset:8px 1px;border:0;border-top:1px solid rgba(255,255,255,.72);border-radius:0}
.loading-globe>span{position:absolute;top:3px;left:2px;width:7px;height:5px;border-radius:60% 35%;background:#c8df68;box-shadow:8px 7px 0 -1px #bad35e}
.loading-globe.is-loading{outline:1px solid #f7ed68;animation:globe-turn .7s steps(8,end) infinite}
@keyframes globe-turn{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.loading-globe.is-loading{animation:none;outline:2px dotted #fff}}

/* Local about:mozilla page. */
.mozilla-view{min-height:420px;padding:clamp(42px,9vw,82px) clamp(24px,9vw,76px);color:#fff1df;background:#5b0000;text-align:center}
.mozilla-view h2{margin:0 0 2rem;font:italic 700 clamp(24px,5vw,38px)/1.2 Georgia,"Times New Roman",serif;letter-spacing:.04em}
.mozilla-view blockquote{max-width:580px;margin:0 auto;font:italic clamp(18px,3.2vw,25px)/1.65 Georgia,"Times New Roman",serif}
.mozilla-view blockquote p{margin:0 0 1.6rem}.mozilla-view em{color:#fff;font-weight:700}.mozilla-view cite{display:block;font-size:.72em}
@media(max-width:390px){.browser-title{min-width:0}.loading-globe{flex-basis:18px;width:18px;height:18px}.mozilla-view{min-height:360px}}

/* Discoverable local pages entered in the simulated address field. */
.local-browser-view{min-height:420px;background:#f4f1dc;color:#171321}
.guestbook-view iframe{display:block;width:100%;height:min(74dvh,760px);min-height:520px;border:0;background:#fff}
.credits-view,.source-view{padding:clamp(20px,5vw,46px)}
.credits-view{font:17px/1.6 Georgia,"Times New Roman",serif}
.credits-view h2,.source-view h2{margin-top:0;color:#34128b}
.source-view pre{max-height:68dvh;margin:0;padding:14px;overflow:auto;border:2px inset #fff;background:#fff;color:#111;font:12px/1.45 "Courier New",monospace;white-space:pre-wrap;overflow-wrap:anywhere}
@media(max-width:390px){.guestbook-view iframe{min-height:600px}.credits-view,.source-view{padding:16px}}
