/* ========================================================= DARKFACE — THE ARCHIVE ========================================================= */ /* ---- CRT OVERLAY — subtle scanlines ---- */ .crt-overlay{ position:fixed;inset:0; z-index:9999;pointer-events:none; } .crt-overlay::before{ content:"";display:block;position:absolute;inset:0; background:repeating-linear-gradient( to bottom, transparent, transparent 2px, rgba(255,255,255,0.02) 2px, rgba(255,255,255,0.02) 4px ); z-index:2;pointer-events:none; } *,*::before,*::after{margin:0;padding:0;box-sizing:border-box} :root{ --bg:#0a0a0a; --fg:#e8e8e8; --accent:#b91c1c; --muted:rgba(255,255,255,0.35); --mono:'IBM Plex Mono','Courier New',monospace; --sans:'Inter','Helvetica Neue',sans-serif; } body{ background:var(--bg); color:var(--fg); font-family:var(--sans); font-size:12px; font-weight:500; line-height:1.35; text-transform:uppercase; letter-spacing:0.01em; overflow:hidden; height:100vh;width:100vw; cursor:default; } a{color:inherit;text-decoration:none} /* ---- Grain overlay (matching Grid) ---- */ body::after{ content:''; position:fixed; inset:0; background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.35'/%3E%3C/svg%3E"); background-size:150px 150px; pointer-events:none; z-index:9998; mix-blend-mode:overlay; opacity:0.6; } /* ---- Blur overlays ---- */ .blur-top{ position:fixed;top:0;left:0;right:0; height:120px; z-index:100; pointer-events:none; background:linear-gradient( to bottom, rgba(42,42,42, 1) 0%, rgba(42,42,42, 0.85) 30%, rgba(42,42,42, 0.5) 60%, rgba(42,42,42, 0) 100% ); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); mask-image:linear-gradient(to bottom, black 0%, transparent 100%); -webkit-mask-image:linear-gradient(to bottom, black 0%, transparent 100%); } .blur-bottom{ position:fixed;bottom:0;left:0;right:0; height:140px; z-index:100; pointer-events:none; background:linear-gradient( to top, rgba(42,42,42, 1) 0%, rgba(42,42,42, 0.85) 30%, rgba(42,42,42, 0.5) 60%, rgba(42,42,42, 0) 100% ); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); mask-image:linear-gradient(to top, black 0%, transparent 100%); -webkit-mask-image:linear-gradient(to top, black 0%, transparent 100%); } /* ========================================================= CRT OVERLAY — subtle scanlines only, NO flicker ========================================================= */ .crt-overlay{ position:fixed;inset:0; z-index:9999;pointer-events:none; } .crt-overlay::before{ content:"";display:block;position:absolute;inset:0; background:repeating-linear-gradient( to bottom, transparent, transparent 2px, rgba(255,255,255,0.02) 2px, rgba(255,255,255,0.02) 4px ); z-index:2;pointer-events:none; } /* ========================================================= CORNERS — fixed positioned corner elements ========================================================= */ .corner{ position:fixed; z-index:200; padding:14px; } .corner--tl{top:0;left:0} .corner--tc{ top:0; left:50%; transform:translateX(-50%); padding-top:20px; font-family:var(--mono); font-size:11px; font-weight:400; color:var(--muted); line-height:1.6; text-align:center; } .archive__title{ font-family:'Chakra Petch','Inter',sans-serif; font-size:clamp(36px, 6vw, 72px); font-weight:700; color:#fff; letter-spacing:0.15em; margin:0 0 8px 0; text-shadow:0 0 40px rgba(255,255,255,0.1); position:relative; filter:contrast(1.3) brightness(0.85); } .archive__title::after{ display:none; } .archive__sub{ margin:0; font-size:11px; color:var(--muted); text-align:left; } .corner--tr{ top:0;right:0; max-width:420px; font-size:11px; font-weight:700; color:var(--fg); line-height:1.55; } .social-links{ display:flex; justify-content:flex-end; gap:6px; } .social-link{ display:flex; align-items:center; justify-content:center; text-decoration:none; color:var(--fg); border:1px solid rgba(255,255,255,0.5); padding:6px; transition:color .25s, border-color .25s, background .25s; } .social-link:hover{ color:var(--accent); border-color:var(--accent); background:rgba(200,40,40,0.08); box-shadow:0 0 8px rgba(200,40,40,0.5), 0 0 20px rgba(200,40,40,0.2); } .back-link{ font-family:'Inter',sans-serif; font-size:12px; font-weight:500; text-decoration:none; color:#f3f3f3; display:inline-block; border:1px solid rgba(255,255,255,0.14); padding:3px 14px; letter-spacing:normal; text-transform:uppercase; line-height:14px; transition:background .25s, color .25s, border-color .25s; cursor:pointer; } .back-link:hover{ background:rgba(255,255,255,0.9); color:#111; border-color:rgba(255,255,255,0.9); } .lang-switch{ display:flex; gap:6px; margin-top:8px; } .lang-btn{ font-family:'Inter',sans-serif; font-size:12px; font-weight:500; color:#f3f3f3; border:1px solid rgba(255,255,255,0.14); padding:3px 14px; text-decoration:none; text-transform:uppercase; line-height:14px; letter-spacing:normal; transition:background .25s, color .25s, border-color .25s; cursor:pointer; } .lang-btn--active{ background:rgba(255,255,255,0.9); color:#111; border-color:rgba(255,255,255,0.9); } .lang-btn:hover{ background:rgba(255,255,255,0.9); color:#111; border-color:rgba(255,255,255,0.9); } /* ========================================================= VIEWS — visibility ========================================================= */ .view{ position:fixed; inset:0; display:none; z-index:10; } /* ========================================================= GALLERY VIEW — absolute positioned children ========================================================= */ .view--gallery.is-active{ display:block !important; } /* ---- Projects list (left) — vertically centered ---- */ .projects-list{ position:absolute !important; left:42% !important; top:50% !important; transform:translate(-100%,-50%) !important; display:flex !important; flex-direction:column !important; gap:4px; z-index:20; } .project-item{ display:flex; align-items:center; gap:8px; padding:2px 0; cursor:pointer; transition:opacity .2s; position:relative; } .project-item:hover{ opacity:1; } .project-item .thumb{ flex-shrink:0; } .project-name{ font-family:'Inter',sans-serif; font-size:11px; font-weight:600; color:rgba(255,255,255,0.5); text-transform:uppercase; letter-spacing:0.08em; transition:color .3s; border:none; padding:0; background:none; cursor:pointer; } .project-item:hover .project-name, .project-item.is-active .project-name{ color:#fff; } .project-link{ display:none; } /* ---- Center 3D Cube ---- */ .preview-center{ position:fixed !important; top:50% !important; left:50% !important; width:0 !important; height:0 !important; z-index:15; border:none !important; box-shadow:none !important; background:none !important; outline:none !important; } .cube-wrap{ perspective:1200px; transform-style:preserve-3d; } .cube{ transform-style:preserve-3d; transform-origin:0 0 0; } .cube__face{ position:absolute; width:230px; height:230px; left:-115px; top:-115px; border:2px solid var(--cube-color, #c82828) !important; background:rgba(0,0,0,0.9) !important; box-shadow:0 0 25px var(--cube-color, #c82828); backface-visibility:hidden; transition:border-color 0.5s, box-shadow 0.5s; } /* Circuit traces — inline SVG */ .circuit{ position:absolute; inset:8px; width:calc(100% - 16px); height:calc(100% - 16px); overflow:visible; color:var(--cube-color, #c82828); filter:drop-shadow(0 0 6px var(--cube-color, #c82828)); transition:color 0.5s, filter 0.5s; } .circuit path{ stroke:currentColor; stroke-width:2.5; stroke-linecap:round; fill:none; } .circuit circle{ fill:#000; stroke:currentColor; stroke-width:2; } .preview-center:hover .circuit{ filter:drop-shadow(0 0 14px var(--cube-color, #c82828)); } .cube__face--front { transform:translateZ(115px); } .cube__face--back { transform:rotateY(180deg) translateZ(115px); } .cube__face--left { transform:rotateY(-90deg) translateZ(115px); } .cube__face--right { transform:rotateY(90deg) translateZ(115px); } .cube__face--top { transform:rotateX(90deg) translateZ(115px); } .cube__face--bottom{ transform:rotateX(-90deg) translateZ(115px); } @keyframes cubeRotateB{ from{transform:rotateX(-25deg) rotateY(0deg)} to{transform:rotateX(-25deg) rotateY(360deg)} } .preview-center:hover .cube__face{ box-shadow:0 0 35px var(--cube-color, #c82828), 0 0 70px var(--cube-color, #c82828); } /* --- Scanlines removed from preview-center (3D cube needs clean bg) --- */ /* --- Circuit trace SVG layer --- */ #circuitSvg{ position:fixed; top:0;left:0; width:100%;height:100%; pointer-events:none; z-index:12; } #circuitSvg .trace-path{ fill:none; stroke:none; } #circuitSvg .particle{ fill:rgba(255,60,60,0.9); filter:drop-shadow(0 0 4px rgba(200,40,40,0.8)); } .preview-desc{ position:fixed !important; z-index:20; font-family:'Chakra Petch','Inter',sans-serif; font-size:11px; font-weight:400; letter-spacing:0.04em; color:rgba(243,243,243,0.7); line-height:1.7; text-transform:uppercase; max-width:260px; opacity:0; transition:opacity .35s ease; max-height:65vh; overflow-y:auto; scrollbar-width:none; } .desc-label{ font-family:'Chakra Petch','Inter',sans-serif; font-size:12px; font-weight:700; letter-spacing:0.1em; color:rgba(200,40,40,0.8); display:block; margin-bottom:6px; } .qr-code{ width:260px; height:auto; object-fit:contain; border:3px solid rgba(255,255,255,0.6); display:block; margin-top:2px; } .qr-download{ display:inline; font-family:'Chakra Petch','Inter',sans-serif; font-size:11px; font-weight:600; letter-spacing:0.08em; color:#f3f3f3; text-decoration:none; border-bottom:1px solid rgba(255,255,255,0.3); padding-bottom:2px; transition:color .25s, border-color .25s; } .qr-download:hover{ color:var(--accent); border-color:var(--accent); } /* ---- Sidebar right — vertically centered ---- */ .sidebar-right{ position:absolute !important; right:14px !important; top:50% !important; transform:translateY(-50%) !important; display:flex !important; flex-direction:column !important; gap:12px; align-items:center; z-index:20; } .sidebar-tagline{ font-family:'Chakra Petch','Inter',sans-serif; font-size:14px; font-weight:700; color:rgba(200,40,40,0.8); line-height:2.2; text-align:right; letter-spacing:0.1em; } .minimap{ display:flex; flex-direction:column; gap:6px; align-items:center; } .thumb{ width:105px; height:82px; cursor:pointer; border:none; background:transparent; transition:transform .2s; } .project-item:nth-child(2) .thumb img{ animation-delay:0s; } .project-item:nth-child(3) .thumb img{ animation-delay:0.5s; } .project-item:nth-child(4) .thumb img{ animation-delay:1s; } .project-item:nth-child(5) .thumb img{ animation-delay:1.5s; } .project-item:nth-child(6) .thumb img{ animation-delay:2s; } .project-item:nth-child(7) .thumb img{ animation-delay:2.5s; } @keyframes thumbPulse{ 0%,100%{ filter:brightness(0.7) drop-shadow(0 0 2px rgba(200,40,40,0.1)); } 50%{ filter:brightness(1.15) drop-shadow(0 0 10px rgba(200,40,40,0.45)); } } .thumb:hover{ transform:scale(1.12); } .thumb:hover img{ filter:brightness(1.3) drop-shadow(0 0 12px rgba(200,40,40,0.5)) !important; animation-play-state:paused; } .thumb.is-active{ filter:drop-shadow(0 0 8px var(--thumb-glow, rgba(200,40,40,0.7))); } .thumb.is-active img{ filter:brightness(1.4); animation-play-state:paused; } .thumb img{ width:100%;height:100%; object-fit:contain; animation:thumbPulse 3s ease-in-out infinite; } /* ========================================================= LIST VIEW ========================================================= */ .view--list.is-active{ display:flex !important; flex-direction:column; overflow-y:auto; padding:100px 14px 100px; } .list-container{ max-width:1200px; width:100%; margin:0 auto; } .list-row{ border-top:1px solid rgba(255,255,255,.1); padding:30px 0; display:grid; grid-template-columns:1fr; gap:10px; } .list-row:last-child{ border-bottom:1px solid rgba(255,255,255,.1); } .list-title{ display:flex; align-items:baseline; gap:20px; text-decoration:none; color:inherit; } .list-num{ font-size:12px; font-weight:500; color:var(--muted); flex-shrink:0; } .list-name{ font-size:clamp(32px, 5vw, 72px); font-weight:800; letter-spacing:-0.02em; line-height:1; color:var(--fg); text-transform:uppercase; transition:opacity .2s; } .list-row:hover .list-name{ opacity:.6; } .list-desc{ font-size:12px; font-weight:400; color:var(--muted); line-height:1.6; max-width:580px; text-transform:none; } .list-explore{ font-size:11px; font-weight:700; color:var(--fg); text-decoration:underline; display:inline-block; margin-top:4px; transition:opacity .2s; } .list-explore:hover{opacity:.6} /* ========================================================= BOTTOM CONTROLS ========================================================= */ .controls{ position:fixed; bottom:0;left:0;right:0; z-index:300; display:flex; align-items:center; justify-content:center; gap:40px; padding:16px 28px; } /* ---- Contacts bar — fixed bottom ---- */ .contacts-bar{ position:fixed; bottom:48px; left:0;right:0; z-index:100; display:flex; justify-content:center; gap:48px; padding:14px 28px; } .contacts-bar__item{ display:flex; flex-direction:column; gap:3px; } .contacts-bar__label{ font-family:'Chakra Petch','Inter',sans-serif; font-size:10px; font-weight:700; letter-spacing:0.12em; text-transform:uppercase; color:rgba(200,40,40,0.9); text-align:center; } .contacts-bar__value{ font-family:'IBM Plex Mono','Courier',monospace; font-size:11px; font-weight:400; letter-spacing:0.04em; color:#fff; border:1px solid rgba(255,255,255,0.4); padding:4px 10px; cursor:pointer; transition:all 0.2s; user-select:none; } .contacts-bar__value:hover{ border-color:rgba(255,255,255,0.35); color:rgba(243,243,243,0.9); } .contacts-bar__value.copied{ border-color:rgba(200,40,40,0.8); color:rgba(200,40,40,1); } .controls__label{ font-size:12px; font-weight:500; color:var(--muted); letter-spacing:.06em; } .controls__toggle{ display:flex; overflow:hidden; border:1px solid rgba(255,255,255,.2); } .toggle-btn{ font-family:var(--sans); font-size:12px; font-weight:600; text-transform:uppercase; padding:8px 22px; border:none; cursor:pointer; background:#1a1a1a; color:#999; transition:all .2s; letter-spacing:.04em; } .toggle-btn--active{ background:var(--accent); color:#fff; } .toggle-btn:hover:not(.toggle-btn--active){ background:rgba(255,255,255,.06); } /* ---- 3D Cubes ---- */