commit a26c102fb5a1e5ef360334cebdf40335636e5d98 Author: NicholaiVogel Date: Thu Oct 2 16:01:12 2025 -0600 first commit diff --git a/.vs/BiohazardWeb/v16/.suo b/.vs/BiohazardWeb/v16/.suo new file mode 100644 index 0000000..a82cd51 Binary files /dev/null and b/.vs/BiohazardWeb/v16/.suo differ diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..fa3cb68 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,9 @@ +{ + "ExpandedNodes": [ + "", + "\\css", + "\\js" + ], + "SelectedNode": "\\index.html", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000..934536d Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/admin.html b/admin.html new file mode 100644 index 0000000..997ee09 --- /dev/null +++ b/admin.html @@ -0,0 +1,214 @@ + + + + + Admin — Biohazard VFX + + + + + + +
+
+

Add New Project

+ + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + diff --git a/admin/api.js b/admin/api.js new file mode 100644 index 0000000..4cc2b61 --- /dev/null +++ b/admin/api.js @@ -0,0 +1,132 @@ +/** + * Biohazard VFX Micro-CMS API + * + * Installation: + * npm i express multer dotenv + * + * Usage: + * PORT=4000 node admin/api.js + * # or use PM2 for process management + * + * Reverse Proxy: + * Proxy /api/* to http://localhost:4000 via Nginx Proxy Manager. + * + * Security: + * Protect /admin/* and /api/* with basic-auth or Cloudflare Zero-Trust. + * + * SMB Share: + * Ensure new files are world-readable (0644) for Nginx. + */ + +const express = require('express'); +const multer = require('multer'); +const fs = require('fs'); +const fsp = require('fs/promises'); +const path = require('path'); +const dotenv = require('dotenv'); +dotenv.config(); + +const API_SECRET = process.env.API_SECRET; +const PORT = process.env.PORT || 4000; +const PROJECTS_JSON = path.resolve(__dirname, '../projects/projects.json'); +const PROJECTS_DIR = path.resolve(__dirname, '../projects'); +const TMP_DIR = path.resolve(__dirname, 'tmp'); + +if (!API_SECRET) { + console.error('Missing API_SECRET in environment.'); + process.exit(1); +} + +if (!fs.existsSync(TMP_DIR)) fs.mkdirSync(TMP_DIR, { recursive: true }); + +const app = express(); +app.use(express.json()); + +const upload = multer({ dest: TMP_DIR }); + +function slugify(str) { + return str + .toLowerCase() + .replace(/[^a-z0-9]+/g, '_') + .replace(/^_+|_+$/g, '') + .slice(0, 30); +} + +function safeExt(filename) { + const ext = path.extname(filename).toLowerCase(); + return ext.match(/\.(jpg|jpeg|png|webp|gif)$/) ? ext : '.jpg'; +} + +function requireApiKey(req, res, next) { + if (req.headers['x-api-key'] !== API_SECRET) { + return res.status(401).json({ ok: false, error: 'Unauthorized' }); + } + next(); +} + +app.get('/api/projects', async (req, res) => { + try { + const data = await fsp.readFile(PROJECTS_JSON, 'utf8'); + res.type('json').send(data); + } catch (e) { + res.status(500).json({ ok: false, error: 'Cannot read manifest.' }); + } +}); + +app.post('/api/projects', requireApiKey, upload.single('thumb'), async (req, res) => { + try { + const { title, size = 'small', embed, credits = '', info = '' } = req.body; + const file = req.file; + if (!title || !embed || !file) { + if (file) fs.unlinkSync(file.path); + return res.status(400).json({ ok: false, error: 'Missing required fields.' }); + } + + // Load manifest + let manifest = []; + try { + manifest = JSON.parse(await fsp.readFile(PROJECTS_JSON, 'utf8')); + } catch (e) {} + + const index = String(manifest.length + 1).padStart(2, '0'); + const slug = slugify(title); + const folderName = `${index}_${slug}`; + const folderPath = path.join(PROJECTS_DIR, folderName); + + await fsp.mkdir(folderPath, { recursive: true }); + + // Move thumbnail + const ext = safeExt(file.originalname); + const thumbName = `thumbnail${ext}`; + const thumbDest = path.join(folderPath, thumbName); + await fsp.rename(file.path, thumbDest); + await fsp.chmod(thumbDest, 0o644); + + // Write info.txt and credits.txt with provided content + await fsp.writeFile(path.join(folderPath, 'info.txt'), info, { mode: 0o644 }); + await fsp.writeFile(path.join(folderPath, 'credits.txt'), credits, { mode: 0o644 }); + + // Build new project object + const newObj = { + id: folderName, + title, + thumbnail: `projects/${folderName}/${thumbName}`, + size, + embed, + credits: `projects/${folderName}/credits.txt`, + info: `projects/${folderName}/info.txt` + }; + + manifest.push(newObj); + await fsp.writeFile(PROJECTS_JSON, JSON.stringify(manifest, null, 2), { mode: 0o644 }); + + res.json({ ok: true }); + } catch (err) { + if (req.file && fs.existsSync(req.file.path)) fs.unlinkSync(req.file.path); + res.status(500).json({ ok: false, error: 'Server error.' }); + } +}); + +app.listen(PORT, () => { + console.log(`Biohazard VFX micro-CMS running on port ${PORT}`); +}); diff --git a/contact.html b/contact.html new file mode 100644 index 0000000..3b32dd3 --- /dev/null +++ b/contact.html @@ -0,0 +1,138 @@ + + + + + Connect + + + + + + + + + +
+

CONNECT

+
+ + + + + + +
+
+ + +
+
+ + +
+
+ + + + + + + +
+
+

We usually reply within 24 hours.
Email: contact@biohazardvfx.com

+
+
+
+
+ + + + + + + + + + + diff --git a/crew.html b/crew.html new file mode 100644 index 0000000..a7dfd55 --- /dev/null +++ b/crew.html @@ -0,0 +1,156 @@ + + + + + + Crew — Biohazard VFX + + + + + + + + +
+

Meet the Crew

+ +
+
+ + +
+ +
+
+
+

© 2025 Biohazard VFX. All Rights Reserved.

+
+ + + diff --git a/css/home.css b/css/home.css new file mode 100644 index 0000000..4ace4ed --- /dev/null +++ b/css/home.css @@ -0,0 +1,55 @@ +/* ───────── css/home.css ───────── */ +:root { + /* 1 = 100% (default). Adjust as needed. */ + --font-scale: 1.0; +} +html { + font-size: calc(16px * var(--font-scale)); +} + +/* Page-specific layout overrides for index.html */ +.content-block, .section { + max-width: 1100px; + margin: 0 auto 4.5rem; + padding: 8vh var(--gutter-x) 6vh; + background: none; + border-radius: 0.7em; + box-sizing: border-box; +} +main.grid { + max-width: 2000px; + margin-left: auto; + margin-right: auto; + gap: 22px; +} +@media (max-width: 900px) { + .content-block, .section { + padding: 5vh 16px 3vh; + max-width: 98vw; + } + main.grid { max-width: 98vw; gap: 14px; } +} +@media (max-width: 600px) { + .content-block, .section { + padding: 3vh 6px 2vh; + max-width: 100vw; + } + main.grid { max-width: 100vw; gap: 8px; } +} +#projects.grid { margin-bottom: 6rem; } +#about.content-block, +#team.content-block, +#crew.content-block { + margin-top: 4.5rem; + margin-bottom: 1rem; + max-width: 2000px; + margin-left: auto; + margin-right: auto; +} +#pipeline.section { + margin-bottom: 1rem; + max-width: 2000px; + margin-left: auto; + margin-right: auto; +} +footer { margin-top: 1.5rem; padding-bottom: 1.5rem; } \ No newline at end of file diff --git a/css/styles.css b/css/styles.css new file mode 100644 index 0000000..433f05e --- /dev/null +++ b/css/styles.css @@ -0,0 +1,934 @@ +/* ───────── css/styles.css ───────── */ +:root{ + --gutter-x: 24px; /* (adjusts margins) */ + --vh:1vh; + /* Safety net for JS-less browsers */ + --header-h: 64px; + font-family:'Roboto Condensed',sans-serif; + color-scheme:dark; + --acid:#ffffff; + --slate:#000000; + --graphite:#0e0e0e; + --hot:#ffffff; + --ghost:#777; + /* ====== THEME ====== */ + --accent:#dbdbdb; /* neon-cyan accent */ + --glass:rgba(14,14,14,.55);/* translucent card surface */ + --blur:12px; /* backdrop blur strength */ +} + +*{box-sizing:border-box;margin:0;padding:0} + +@media (max-width: 767px){ + :root{ --gutter-x: 12px; } /* tighter on phones */ +} + +@font-face{ + font-family:"BiohazardHead"; + src:url("../fonts/BebasNeue-Regular.woff2") format("woff2"), + url("../fonts/BebasNeue-Regular.woff") format("woff"); + font-weight:400; font-style:normal; +} +@font-face{ + font-family:"Machina"; + src:url("../fonts/Bebas_Neue/BebasNeue-Regular.ttf") format("opentype"); + font-weight:700; +} +@font-face{ + font-family:"ArchiveCond"; + src:url("..//fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Bold.woff2") format("woff2"); + font-weight:500; +} +@font-face{ + font-family:"SpaceMono"; + src:url("../fonts/Space_Mono/SpaceMono-Regular.ttf") format("opentype"); + font-weight:400; +} + +body{ + + background:var(--slate);color:var(--acid); + padding-top: calc(var(--header-h) + 2vh); + +} + +/* Add horizontal padding only to main content blocks, not header */ +.content-block, .section, main.grid { + padding-left: var(--gutter-x); + padding-right: var(--gutter-x); +} + +a{text-decoration:none;color:inherit} +img{max-width:100%;display:block} + +/* Fix 100 vh on mobile */ +@media(max-width:767px){ + body,html{height:calc(var(--vh)*100)} +} + +header.nav{ + position:fixed;top:0;left:0;width:100vw;/* Ensure full viewport width */ + z-index:100; + display:flex;flex-direction:column;align-items:center; + background:linear-gradient(to bottom, rgba(11,11,12,0.6) 0%, rgba(11,11,12,0) 100%); + text-shadow:0 0 4px var(--acid); + mix-blend-mode:normal; + font-size:clamp(14px,1.1vw,20px); + margin:0; + box-sizing:border-box; + padding: 8px 0; +} + +header.nav nav{ + display:flex; gap:24px; + font-family:'ArchiveCond',sans-serif; +} +header.nav .logo{ + font-family:"Machina",sans-serif; + font-weight:700; /* bold blocky */ + font-size:clamp(40.5px,5.6vw,72px); /* 1.125× larger */ + color:var(--acid); + transform:scale(.95); + transition:transform .3s, filter .1s; + letter-spacing:.07em; + text-transform:uppercase; + margin-bottom:2px; + position:relative; /* for underline */ +} + +header.nav .logo:hover{ + transform:scale(1); +} + +/* Fancy underline animation for logo */ +header.nav .logo::after{ + content:""; + position:absolute;left:0;right:0;bottom:0; + height:3px; + background:var(--accent); + transform:scaleX(0); + transform-origin:center center; + transition:transform .25s; +} +header.nav .logo:hover::after{ + transform:scaleX(1); +} + +header.social{ + display:flex; gap:24px; + font-family:'ArchiveCond',sans-serif; + text-shadow:0 0 2px var(--acid); + top:0; left:0; width:100%; + z-index:100; padding:8px 0 0; + display:flex; flex-direction:column; /* stack logo + nav */ + align-items:center; /* center horizontally */ + mix-blend-mode:normal; + font-size:clamp(14px,1.1vw,20px); +} + +footer{ + text-align:center; + padding:3rem 1rem; + font-size:.95rem; + opacity:.7; + font-family:"SpaceMono",monospace; +} + +#contact { + font-family:"SpaceMono",monospace; + max-width:1300px; + margin:0 auto; + padding:9vh var(--gutter-x) 4vh; + line-height:1.4; + color:var(--acid); + text-shadow:0 0 2px var(--acid); + border-bottom:1px solid var(--graphite); +} +#contact form{ + font-family:"SpaceMono",monospace; + max-width:520px; + margin:0 auto; + display:flex;flex-direction:column;gap:1.5rem; + color:var(--acid); + background:var(--glass); + border:1px solid rgba(255,255,255,.06); + box-shadow:0 4px 18px rgba(0,0,0,.4); + backdrop-filter:blur(var(--blur)); + -webkit-backdrop-filter:blur(var(--blur)); + padding:2rem 1.5rem 1.5rem; + border-radius:10px; +} +#contact label{ + font-family:"ArchiveCond",sans-serif; + margin-bottom:.4rem; + font-weight:500; + font-size:1rem; + text-align:left; + color:var(--accent); + letter-spacing:.04em; + text-transform:uppercase; +} +#contact input, +#contact textarea{ + font-family:"SpaceMono",monospace; + padding:.75rem 1rem; + margin-bottom:.5rem; + border:1px solid rgba(255,255,255,.12); + background:rgba(0,0,0,.35); + color:var(--acid); + border-radius:4px; + font-size:1rem; + transition:border-color .2s, box-shadow .2s; + resize:vertical; +} +#contact input:focus, +#contact textarea:focus{ + border-color:var(--accent); + box-shadow:0 0 6px var(--accent); + outline:none; +} +#contact input[type="submit"]{ + font-family:"ArchiveCond",sans-serif; + cursor:pointer; + background:var(--accent); + color:var(--slate); + font-weight:700; + text-transform:uppercase; + letter-spacing:.07em; + border:none; + border-radius:4px; + padding:.85rem 1.5rem; + transition:background .2s,color .2s,box-shadow .2s; + margin-top:.5rem; +} +#contact input[type="submit"]:hover{ + background:var(--acid); + color:var(--graphite); + box-shadow:0 2px 12px rgba(0,0,0,.25); +} +#contact button[type="submit"]{ + font-family:"ArchiveCond",sans-serif; + cursor:pointer; + background:var(--accent); + color:var(--slate); + font-weight:700; + text-transform:uppercase; + letter-spacing:.07em; + border:none; + border-radius:4px; + padding:.85rem 1.5rem; + transition:background .2s,color .2s,box-shadow .2s; + margin-top:.5rem; +} +#contact button[type="submit"]:hover{ + background:var(--acid); + color:var(--graphite); + box-shadow:0 2px 12px rgba(0,0,0,.25); +} + + + +header.nav a{ + transition:opacity .3s +} + +header.nav a:hover{ + opacity:.8 +} + +/* underline kicker */ +header.nav nav a::after{ + content:""; + display:block; + height:2px; + background:var(--accent); + transform:scaleX(0);transition:transform .25s; +} +header.nav nav a:hover::after{transform:scaleX(1);} +@media(max-width:767px){ + header.nav{top:8px;justify-content:space-between;padding:0 var(--gutter);font-size:12px} + header.nav .logo{margin:0;font-weight:bold} + header.nav nav{gap:16px} +} + +/* GRID */ +.grid{ + --cols:4; + display:grid; + grid-template-columns:repeat(var(--cols),1fr); + gap:24px; + padding-top: calc(var(--header-h)*.5 + 2vh); + counter-reset: item; /* Reset Project counter */ +} + +@media(max-width:1024px){.grid{--cols:3}} +@media(max-width:767px){.grid{--cols:2;gap:12px;padding:calc(var(--vh)*5) var(--gutter)}} + +.item:not(.hidden) h2::before{ /* only real cards */ + counter-increment:item; +} + +.item{ + position:relative; + counter-increment:item; + overflow:hidden;cursor:pointer; + opacity:0;transform:translateY(40px); + transition:opacity .6s,transform .6s; +} +.item.loaded{opacity:1;transform:none} + + +/* Item Spans */ + +.item[data-span="banner"] { grid-column: span 3; } +.item[data-span="portrait-xl"]{ grid-row: span 3; } +.item[data-span="wide"] { grid-column: span 2; } +.item[data-span="tall"] { grid-row: span 2; } +.item[data-span="big"] { grid-column: span 2; grid-row: span 2; } + +@media(max-width:767px){ + .item[data-span="wide"], + .item[data-span="tall"], + .item[data-span="big"]{ grid-column: span 2; grid-row: span 1; } +} + +small,code,.mono{font-family:"SpaceMono",monospace} + +.item h2{ + font-family:"ArchiveCond",sans-serif; + letter-spacing:.04em; + font-size:clamp(12px,.9vw,18px); + text-transform:uppercase; + margin-bottom:8px; + line-height:1.1; + display:inline-block; /* so the counter sits inline */ + position:relative; + transition:opacity .5s; /* Only opacity transitions */ +} + +.item h2::before{ + counter-increment:item; + content: counter(item,decimal-leading-zero) " "; + font-family:'Roboto Mono',monospace; + margin-right:.75em; +} + +/* Underline kicker for item h2, styled like nav */ +.item h2::after { + content: ""; + display: block; + height: 2px; + background: var(--accent); + transform: scaleX(0); + transition: transform .25s; + margin-top: 3px; +} +.item:hover h2::after { + transform: scaleX(1); +} + +.thumb{ + background-size:cover;background-position:center; + padding-bottom:62.5%; + transition:opacity .5s,transform .5s +} +.item:hover .thumb { + opacity:.8; + transform:scale(1.04); +} +.item:hover h2{ + opacity:.8; +} + +.content-block{ + max-width:800px; + margin:0 auto; + padding:20vh var(--gutter); + font-family:'Roboto Mono',monospace; + line-height:1.5; +} + +#about{ + font-family:"ArchiveCond",sans-serif; + max-width:1300px; + margin:0 auto; + padding:4vh var(--gutter-x) 1vh; + line-height:1.2; + color:var(--acid); + text-shadow:0 0 2px var(--acid); + border-bottom:1px solid var(--graphite); +} + +#crew{ + font-family:"ArchiveCond",sans-serif; + max-width:1300px; + margin:0 auto; + padding:4vh var(--gutter-x) 4vh; + line-height:1.2; + color:var(--acid); + text-shadow:0 0 2px var(--acid); + border-bottom:1px solid var(--graphite); +} + +/* PIPELINE SECTION */ +.section h2{ + font-family:"ArchiveCond",sans-serif; + font-size:clamp(1.1rem,1.5vw + .5rem,2rem); + text-transform:uppercase; + letter-spacing:.05em; + color:var(--accent); + margin:0 0 2.2rem; + position:relative; +} +.section h2::after{ + content:""; + position:absolute;left:0;bottom:-6px; + width:40px;height:2px; + background:var(--accent); +} + +#pipeline{ + font-family:"ArchiveCond",sans-serif; + padding:4vh var(--gutter-x) 1vh; + line-height:1.2; +} +.pipeline-steps{ + gap:var(--gutter-x); +} +.pipeline-step{ + border-radius:10px; +} + +.pipeline-step { + background: var(--glass); + color: var(--acid); + border-radius: 8px; + box-shadow: 0 4px 18px rgba(0,0,0,.4); + padding: 2rem 1.5rem 1.5rem; + min-width: 220px; + max-width: 320px; + flex: 1 1 220px; + display: flex; + flex-direction: column; + align-items: center; + opacity: 0.97; + transition: transform .25s, box-shadow .25s, opacity .25s; + text-align: center; +} + +.pipeline-step:hover { + transform: translateY(-4px) scale(1.028); + box-shadow: 0 10px 32px rgba(0,0,0,.55); + opacity: 1; +} + +.pipeline-step h3 { + font-family: "ArchiveCond", sans-serif; + font-size: 1.05rem; + text-transform: uppercase; + letter-spacing: 0.04em; + margin-bottom: 0.5rem; + margin-top: 0; + color: var(--hot); + text-shadow: 0 0 2px var(--acid); + font-weight: 500; +} + +.pipeline-step p, +.pipeline-step small { + font-family: "SpaceMono", monospace; + font-size: 0.92rem; + color: var(--acid); + opacity: 0.85; + margin: 0; + line-height: 1.4; +} + +@media (max-width: 1024px) { + .pipeline-steps { + gap: 1.2rem; + } + .pipeline-step { + padding: 1.2rem 0.7rem 1rem; + min-width: 160px; + max-width: 240px; + } +} + +@media (max-width: 767px) { + #pipeline { + padding: 6vh var(--gutter-x) 2vh; + } + .pipeline-steps { + gap: 0.7rem; + flex-direction: column; + align-items: center; + } + .pipeline-step { + min-width: 0; + max-width: 320px; + width: 100%; + margin: 0 auto; + padding: 1rem 0.5rem 1rem; + } +} + +/* TEAM SECTION */ +#team { + font-family:"ArchiveCond",sans-serif; + max-width: 1300px; + margin: 0 auto; + padding: 4vh var(--gutter-x) 2.5vh; /* ↓ tighter bottom gap */ + line-height: 1.2; + color: var(--acid); + text-shadow: 0 0 2px var(--acid); + border-bottom: 1px solid var(--graphite); +} + +.team-container { + display: flex; + gap: var(--gutter-x); + margin: 3rem 0; /* slightly more spacing between heading and founder images */ + padding: 0; + justify-content: center; + flex-wrap: wrap; +} + +.portrait { + width: clamp(200px, 22vw, 300px); + padding: 0 0 1.25rem; + overflow: hidden; /* allow image to bleed */ + background:var(--glass); + color: var(--acid); + border-radius: 10px; + /* glass-card behaviour */ + /* duplicate here to avoid extra class */ + border:1px solid rgba(255,255,255,.06); + box-shadow:0 4px 18px rgba(0,0,0,.35); + backdrop-filter:blur(var(--blur)); + -webkit-backdrop-filter:blur(var(--blur)); + transition:transform .25s, box-shadow .25s, opacity .25s; + text-decoration: none; + display: flex; + flex-direction: column; + align-items: center; + opacity: 0.96; +} +.portrait:hover { + transform:translateY(-4px) scale(1.03); + box-shadow:0 10px 32px rgba(0,0,0,.55); + opacity: 1; +} +.portrait img { + width: 100%; + height: auto; + border-radius: 0; + object-fit: cover; + margin: 0; + box-shadow: 0 2px 8px rgba(0,0,0,0.18); + background: var(--slate); + display: block; +} +.portrait h3 { + font-family: "ArchiveCond", sans-serif; + font-size: 1.3rem; + text-transform: uppercase; + letter-spacing: 0.04em; + margin-bottom: 0.25rem; + margin-top: 0; + color: var(--hot); + text-shadow: 0 0 2px var(--acid); + font-weight: 500; + text-align: center; +} +.portrait p { + font-family:"ArchiveCond",sans-serif; + font-size: 1rem; + color: var(--acid); + opacity: 0.85; + text-align: center; + margin: 0; + line-height: 1.4; +} + +@media (max-width: 1024px) { + .team-container { + gap: 1.5rem; + } + .portrait { + width: 180px; + padding: 1rem 0.5rem 1rem; + } + .portrait img { + width: 120px; + height: 120px; + } +} + +@media (max-width: 767px) { + #team { + padding: 6vh var(--gutter-x) 2vh; + } + .team-container { + gap: 1rem; + } + .portrait { + width: 100%; + max-width: 320px; + margin: 0 auto; + padding: 1rem 0.5rem 1rem; + } + .portrait img { + width: 100px; + height: 100px; + } +} + +header.social social a { + position: relative; + display: inline-block; + transition: opacity .3s; +} +header.social social a::after { + content: ""; + display: block; + height: 2px; + background: var(--acid); + transform: scaleX(0); + transition: transform 0.25s cubic-bezier(.4,0,.2,1); + margin-top: 2px; +} +header.social social a:hover::after { + transform: scaleX(1); +} + +/* -------- GLOBAL GLASS CARD -------- */ +.glass-card{ + background:var(--glass); + border:1px solid rgba(255,255,255,.06); + box-shadow:0 4px 18px rgba(0,0,0,.4); + backdrop-filter:blur(var(--blur)); + -webkit-backdrop-filter:blur(var(--blur)); + transition:transform .25s, box-shadow .25s, opacity .25s; +} +.glass-card:hover{ + transform:translateY(-4px) scale(1.025); + box-shadow:0 10px 32px rgba(0,0,0,.55); +} + +/* -------- SECTION HEADING -------- */ +.content-block h2{ + font-family:"ArchiveCond",sans-serif; + font-size:clamp(1.1rem,1.5vw + .5rem,2rem); + text-transform:uppercase; + letter-spacing:.05em; + color:var(--accent); + margin:0 0 2.2rem; + position:relative; +} +.content-block h2::after{ + content:""; + position:absolute;left:0;bottom:-6px; + width:40px;height:2px; + background:var(--accent); +} + +/* ===== NAV accent underline ===== */ +header.nav nav a::after{ + background:var(--accent); +} + +/* ===== GRID card underline ===== */ +.item h2::after { + background: var(--accent); +} + +/* ===== PORTRAITS ===== */ +.portrait { + width: clamp(200px, 22vw, 300px); + padding: 0 0 1.25rem; + overflow: hidden; /* allow image to bleed */ + background:var(--glass); + color: var(--acid); + border-radius: 10px; + /* glass-card behaviour */ + /* duplicate here to avoid extra class */ + border:1px solid rgba(255,255,255,.06); + box-shadow:0 4px 18px rgba(0,0,0,.35); + backdrop-filter:blur(var(--blur)); + -webkit-backdrop-filter:blur(var(--blur)); + transition:transform .25s, box-shadow .25s, opacity .25s; + text-decoration: none; + display: flex; + flex-direction: column; + align-items: center; + opacity: 0.96; +} +.portrait:hover { + transform:translateY(-4px) scale(1.03); + box-shadow:0 10px 32px rgba(0,0,0,.55); + opacity: 1; +} +.portrait img { + width: 100%; + height: auto; + border-radius: 0; + object-fit: cover; + margin: 0; + box-shadow: 0 2px 8px rgba(0,0,0,0.18); + background: var(--slate); + display: block; +} +.portrait h3 { + font-family: "ArchiveCond", sans-serif; + font-size: 1.3rem; + text-transform: uppercase; + letter-spacing: 0.04em; + margin-bottom: 0.25rem; + margin-top: 0; + color: var(--hot); + text-shadow: 0 0 2px var(--acid); + font-weight: 500; + text-align: center; +} +.portrait p { + font-family:"ArchiveCond",sans-serif; + font-size: 1rem; + color: var(--acid); + opacity: 0.85; + text-align: center; + margin: 0; + line-height: 1.4; +} + +@media (max-width: 1024px) { + .team-container { + gap: 1.5rem; + } + .portrait { + width: 180px; + padding: 1rem 0.5rem 1rem; + } + .portrait img { + width: 120px; + height: 120px; + } +} + +@media (max-width: 767px) { + #team { + padding: 6vh var(--gutter-x) 2vh; + } + .team-container { + gap: 1rem; + } + .portrait { + width: 100%; + max-width: 320px; + margin: 0 auto; + padding: 1rem 0.5rem 1rem; + } + .portrait img { + width: 100px; + height: 100px; + } +} + +header.social social a { + position: relative; + display: inline-block; + transition: opacity .3s; +} +header.social social a::after { + content: ""; + display: block; + height: 2px; + background: var(--acid); + transform: scaleX(0); + transition: transform 0.25s cubic-bezier(.4,0,.2,1); + margin-top: 2px; +} +header.social social a:hover::after { + transform: scaleX(1); +} + +/* ===== PIPELINE, FAQ, PROJECT GLASS ===== */ +.faq-list details, +.project-section{ + background:var(--glass); + border:1px solid rgba(255,255,255,.06); + box-shadow:0 4px 18px rgba(0,0,0,.38); + backdrop-filter:blur(var(--blur)); + -webkit-backdrop-filter:blur(var(--blur)); +} + +/* Contact info */ +.contact-info{ + margin:2em 0 4vh;text-align:center;font-size:1rem;opacity:.7; + font-family:"SpaceMono",monospace; +} +.contact-info a{color:var(--accent);} + +/* === BACK TO TOP BUTTON === */ +.back-to-top { + position: fixed; + bottom: 2rem; + right: 2rem; + width: 50px; + height: 50px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + z-index: 1000; + opacity: 0; + pointer-events: none; + transform: translateY(20px); + transition: opacity .3s, transform .3s, background .3s; + + /* Glass card style */ + background: var(--glass); + border: 1px solid rgba(255,255,255,.06); + backdrop-filter: blur(var(--blur)); + -webkit-backdrop-filter: blur(var(--blur)); +} + +.back-to-top.visible { + opacity: .8; + pointer-events: auto; + transform: translateY(0); +} + +.back-to-top:hover { + opacity: 1; + background: var(--accent); +} + +.back-to-top svg { + width: 24px; + height: 24px; + stroke: var(--accent); + transition: stroke .3s; +} + +.back-to-top:hover svg { + stroke: var(--slate); +} + +/* === PAGE LOADER === */ +#loader-overlay{ + position:fixed;inset:0; + background:rgba(0,0,0,.85); + backdrop-filter:blur(6px); + display:flex;align-items:center;justify-content:center; + z-index:9999; + transition:opacity .6s; +} +#loader-overlay.hide{opacity:0;pointer-events:none;} +.spinner{ + width:72px;height:72px; + border:6px solid rgba(255,255,255,.15); + border-top-color:var(--accent); + border-radius:50%; + animation:spin 1s linear infinite; +} +@keyframes spin{to{transform:rotate(360deg);}} + +/* ===== HERO PARALLAX REFINEMENT ===== */ +.hero{ + position:relative; + height:100vh; + margin-top:-15vh; /* Remove negative margin to bring video to top */ + overflow:hidden; + z-index:1; +} +/* Video as moveable box that behaves as background */ +.hero video{ + position:absolute; + top:0; + left:0; + width:100%; + height:120vh; + object-fit:cover; + z-index:-2; + pointer-events:none; + transform:translateY(-100vh); + transition:transform 0.1s ease-out; +} +/* Gradient overlay - separate from video, controlled by scroll */ +.hero::after{ + content:""; + position:absolute; + top:0; + left:0; + width:100%; + height:200vh; /* further extend to mask bottom edge even during video movement */ + pointer-events:none; + background:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgba(0,0,0,0.5) 50%,rgba(0,0,0,1) 100%); + z-index:-1; + opacity:var(--gradient-opacity,100%); + transition:opacity 0.3s; +} + +/* Dynamic about section padding */ +#about.content-block { + margin-top: 15vh; /* Start with large padding */ + max-width: 2000px; + margin-left: auto; + margin-right: auto; + transition: margin-top 0.5s ease-out; +} + +/* When about reaches top, reduce padding */ +#about.content-block.reduced-padding { + margin-top: -50rem; +} + +/* Projects grid spacing */ +#projects.grid { + margin-bottom: 4.5rem; + transition: margin-top 0.5s ease-out; +} + +/* Content that scrolls over the video */ +.content-wrapper { + position: relative; + z-index: 2; + background: transparent; +} + +/* Remove black background from content sections */ +.content-block, .section, main.grid { + background: transparent; + position: relative; + z-index: 2; +} + +/* ===== CONTACT FORM REFINEMENTS ===== */ +.form-message{ + margin-top:1em; + padding:1em; + border-radius:6px; + font-family:"SpaceMono",monospace; + font-size:1.1em; + text-align:center; + display:none; /* initially hidden */ +} +.form-message.success{background:#1a3d1a;color:#b6ffb6;border:1px solid #3c6;} +.form-message.error {background:#3d1a1a;color:#ffb6b6;border:1px solid #c66;} +.honeypot{display:none;} + +/* Form layout helpers */ +.form-row{display:flex;gap:1em;flex-wrap:wrap;} +.form-col{flex:1 1 120px;min-width:120px;} + +@media(max-width:600px){ + #contact{padding:4vh 8px 2vh;font-size:1rem;} + #contact form label, + #contact form input, + #contact form textarea{font-size:1em;} +} + + + diff --git a/directory-layout.txt b/directory-layout.txt new file mode 100644 index 0000000..378b7aa --- /dev/null +++ b/directory-layout.txt @@ -0,0 +1,259 @@ +BiohazardWeb/ +├─ index.html +├─ css +│ ├─ styles.css +├─ fonts/ +├─ images/ +├─ js +│ ├─ main.js +├─ projects/ +│ ├─ 01_PROJ/ +│ │ ├─ Videos/ +│ │ ├─ thumbnail.jpg +│ │ ├─ info.txt +│ │ ├─ credits.txt +├─ reel/ +│ ├─ Reel_July_2025.mp4 +├─ written/ +│ ├─ about_us.txt + +A few notes: +1. The blurring on the header looks weird, maybe add a black gradient to it so things fade as it scrolls past them? +1.1 the inversion of the text looks weird +2. when I hover over the projects I'd like if the text on them transformed with them +2.2 the counter is offset, there are only two projects on the page currently and its starting at 02 and skipping 03 and going straight to 04 for the second One +3. I'd like if the about section had more room on the left and right +3.1 the old about is still at the bottom of the page and needs to be removed +4. I'd like to add a case studies section (added to nav as well) +4.1 I had a case studies section at one point, you can get an idea of it from this: + +HTML + /*================================================== + CASE STUDIES + ==================================================*/ + #case-studies { + text-align: center; + padding-bottom: 1rem; + } + .case-studies-container { + display: flex; + gap: 2.5rem; + justify-content: center; + flex-wrap: wrap; + } + .case-study { + flex: 0 0 404px; + background: var(--box-bg); + border: none; /* Remove border for minimalism */ + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); + padding: 1rem; + border-radius: 8px; + transition: transform 0.3s ease, box-shadow 0.3s ease; + aspect-ratio: 404 / 316; + } + .case-study:hover { + transform: translateY(-8px) scale(1.02); /* Slight zoom */ + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4); + } + + +
+

CASE STUDIES

+
+
+ +
+
+ +
+
+ +
+
+
+ +5. I think it would also be nice to have a section dedicated to the founders, I had a previous version on an older version of the sight, +it would look good right above contact, heres an example: + +/*================================================== + THE CREW + ==================================================*/ + #team { + max-width: 1200px; + margin: 0 auto 12rem; + text-align: center; + } + .team-container { + display: flex; + gap: 2rem; + justify-content: space-evenly; + align-items: center; + } + #team .team-container a.portrait { + display: block; + width: 350px; + height: 400px; + text-decoration: none; + color: inherit; + background: var(--box-bg); + padding: 1rem; + border-radius: 8px; + transition: transform 0.3s ease, box-shadow 0.3s ease; + } + #team .team-container a.portrait:hover { + transform: translateY(-5px); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); + } + #team .team-container a.portrait img { + width: 200px; + height: 200px; + object-fit: cover; + border-radius: 8px; + margin-bottom: 1rem; + border: 3px solid var(--accent); + transition: border-color 0.3s ease; + } + #team .team-container a.portrait:hover img { + border-color: var(--hover-accent); /* Change border on hover */ + } + #team .team-container a.portrait h3 { + font-size: 1.6rem; + font-weight: 700; + margin-bottom: 0.75rem; + color: var(--accent); + } + #team .team-container a.portrait p { + font-size: 1rem; + font-style: italic; + opacity: 0.85; + } + + +
+

THE CREW

+ +
+ +6. I think it would also be good to revamp the contact section, right now its too barebones, something like this would be cool but maybe as its own separate page actually, I don't want this one to get too long. +HTML + /*================================================== + CONTACT SECTION + ==================================================*/ + #contact { text-align: center; } + #contact form { + max-width: 700px; + margin: 0 auto; + display: flex; + flex-direction: column; + } + #contact label { + margin-bottom: 0.75rem; + font-weight: 700; + font-size: 1.1rem; + text-align: left; + } + #contact input, + #contact textarea { + padding: 1rem; + margin-bottom: 1.75rem; + border: none; + background: var(--contact-bg); + color: #FFFFFF; + border-radius: 4px; + font-size: 1rem; + transition: background 0.3s ease, box-shadow 0.3s ease; + } + #contact input:focus, + #contact textarea:focus { + background: var(--contact-focus-bg); + box-shadow: 0 0 5px var(--accent); /* Glow effect */ + outline: none; + } + #contact input[type="submit"] { + cursor: pointer; + background: var(--accent); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + transition: background 0.3s ease; + } + #contact input[type="submit"]:hover { + background: var(--contact-hover-bg); + } + .social-bar { + margin-top: 2.5rem; + font-size: 1rem; + } + .social-bar a { + color: #FFFFFF; + text-decoration: none; + margin: 0 15px; + font-weight: 700; + transition: color 0.3s ease; + } + .social-bar a:hover { + color: var(--accent); + } + + +
+

CONNECT

+
+ + + + + + + +
+ +
+ +7. Lastly, I think we should add a nice little footer. +HTML: + /*================================================== + FOOTER + ==================================================*/ + footer { + text-align: center; + padding: 3rem 1rem; + font-size: 0.95rem; + opacity: 0.7; + } /*================================================== + FOOTER + ==================================================*/ + footer { + text-align: center; + padding: 3rem 1rem; + font-size: 0.95rem; + opacity: 0.7; + } + + +
+

© 2025 Biohazard VFX. All Rights Reserved.

+
+ + diff --git a/faq.html b/faq.html new file mode 100644 index 0000000..e389298 --- /dev/null +++ b/faq.html @@ -0,0 +1,158 @@ + + + + + + FAQ — Biohazard VFX + + + + + + +
+

Frequently Asked Questions

+
+
+
+
+

© 2025 Biohazard VFX. All Rights Reserved.

+
+ + + + diff --git a/fonts/Archiv-Grotesk-Font.zip b/fonts/Archiv-Grotesk-Font.zip new file mode 100644 index 0000000..1647db7 Binary files /dev/null and b/fonts/Archiv-Grotesk-Font.zip differ diff --git a/fonts/Archiv-Grotesk-Font/ArchivGroteskTrial-RegularTrial.otf b/fonts/Archiv-Grotesk-Font/ArchivGroteskTrial-RegularTrial.otf new file mode 100644 index 0000000..4fc3a56 Binary files /dev/null and b/fonts/Archiv-Grotesk-Font/ArchivGroteskTrial-RegularTrial.otf differ diff --git a/fonts/Bebas_Neue,Instrument_Serif,Space_Mono.zip b/fonts/Bebas_Neue,Instrument_Serif,Space_Mono.zip new file mode 100644 index 0000000..e784066 Binary files /dev/null and b/fonts/Bebas_Neue,Instrument_Serif,Space_Mono.zip differ diff --git a/fonts/Bebas_Neue,Space_Mono.zip b/fonts/Bebas_Neue,Space_Mono.zip new file mode 100644 index 0000000..5578312 Binary files /dev/null and b/fonts/Bebas_Neue,Space_Mono.zip differ diff --git a/fonts/Bebas_Neue/BebasNeue-Regular.ttf b/fonts/Bebas_Neue/BebasNeue-Regular.ttf new file mode 100644 index 0000000..d2190b5 Binary files /dev/null and b/fonts/Bebas_Neue/BebasNeue-Regular.ttf differ diff --git a/fonts/Bebas_Neue/OFL.txt b/fonts/Bebas_Neue/OFL.txt new file mode 100644 index 0000000..84eb958 --- /dev/null +++ b/fonts/Bebas_Neue/OFL.txt @@ -0,0 +1,93 @@ +Copyright © 2010 by Dharma Type. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/Instrument_Serif/InstrumentSerif-Italic.ttf b/fonts/Instrument_Serif/InstrumentSerif-Italic.ttf new file mode 100644 index 0000000..32c6b8e Binary files /dev/null and b/fonts/Instrument_Serif/InstrumentSerif-Italic.ttf differ diff --git a/fonts/Instrument_Serif/InstrumentSerif-Regular.ttf b/fonts/Instrument_Serif/InstrumentSerif-Regular.ttf new file mode 100644 index 0000000..7efd936 Binary files /dev/null and b/fonts/Instrument_Serif/InstrumentSerif-Regular.ttf differ diff --git a/fonts/Instrument_Serif/OFL.txt b/fonts/Instrument_Serif/OFL.txt new file mode 100644 index 0000000..ee60ded --- /dev/null +++ b/fonts/Instrument_Serif/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2022 The Instrument Serif Project Authors (https://github.com/Instrument/instrument-serif) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/JetBrainsMono-2.304.zip b/fonts/JetBrainsMono-2.304.zip new file mode 100644 index 0000000..1d05731 Binary files /dev/null and b/fonts/JetBrainsMono-2.304.zip differ diff --git a/fonts/JetBrainsMono-2.304/AUTHORS.txt b/fonts/JetBrainsMono-2.304/AUTHORS.txt new file mode 100644 index 0000000..8814941 --- /dev/null +++ b/fonts/JetBrainsMono-2.304/AUTHORS.txt @@ -0,0 +1,10 @@ +# This is the official list of project authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS.txt file. +# See the latter for an explanation. +# +# Names should be added to this file as: +# Name or Organization + +JetBrains <> +Philipp Nurullin +Konstantin Bulenkov diff --git a/fonts/JetBrainsMono-2.304/OFL.txt b/fonts/JetBrainsMono-2.304/OFL.txt new file mode 100644 index 0000000..8bee414 --- /dev/null +++ b/fonts/JetBrainsMono-2.304/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Bold.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Bold.ttf new file mode 100644 index 0000000..8c93043 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Bold.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-BoldItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-BoldItalic.ttf new file mode 100644 index 0000000..1ddf216 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-BoldItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraBold.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraBold.ttf new file mode 100644 index 0000000..435d7a7 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraBold.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraBoldItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraBoldItalic.ttf new file mode 100644 index 0000000..79e616e Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraBoldItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraLight.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraLight.ttf new file mode 100644 index 0000000..c131cbf Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraLight.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraLightItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraLightItalic.ttf new file mode 100644 index 0000000..a768985 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ExtraLightItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Italic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Italic.ttf new file mode 100644 index 0000000..ccc9d6a Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Italic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Light.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Light.ttf new file mode 100644 index 0000000..15f15a2 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Light.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-LightItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-LightItalic.ttf new file mode 100644 index 0000000..506208f Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-LightItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Medium.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Medium.ttf new file mode 100644 index 0000000..9767115 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Medium.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-MediumItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-MediumItalic.ttf new file mode 100644 index 0000000..415a9e3 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-MediumItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Regular.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Regular.ttf new file mode 100644 index 0000000..dff66cc Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Regular.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-SemiBold.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-SemiBold.ttf new file mode 100644 index 0000000..a70e69b Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-SemiBold.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-SemiBoldItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-SemiBoldItalic.ttf new file mode 100644 index 0000000..968602e Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-SemiBoldItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Thin.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Thin.ttf new file mode 100644 index 0000000..7dbe2ac Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-Thin.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ThinItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ThinItalic.ttf new file mode 100644 index 0000000..c6ad6c2 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMono-ThinItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Bold.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Bold.ttf new file mode 100644 index 0000000..f78f84f Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Bold.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-BoldItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-BoldItalic.ttf new file mode 100644 index 0000000..9fb8c83 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-BoldItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraBold.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraBold.ttf new file mode 100644 index 0000000..fe5be6a Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraBold.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf new file mode 100644 index 0000000..59fc980 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraBoldItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraLight.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraLight.ttf new file mode 100644 index 0000000..6da7b75 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraLight.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraLightItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraLightItalic.ttf new file mode 100644 index 0000000..5733efc Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ExtraLightItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Italic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Italic.ttf new file mode 100644 index 0000000..4e9c380 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Italic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Light.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Light.ttf new file mode 100644 index 0000000..0b79b0c Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Light.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-LightItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-LightItalic.ttf new file mode 100644 index 0000000..b5e0842 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-LightItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Medium.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Medium.ttf new file mode 100644 index 0000000..1454372 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Medium.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-MediumItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-MediumItalic.ttf new file mode 100644 index 0000000..8d63c6c Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-MediumItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Regular.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Regular.ttf new file mode 100644 index 0000000..70d2ec9 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Regular.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-SemiBold.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-SemiBold.ttf new file mode 100644 index 0000000..ce60a88 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-SemiBold.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-SemiBoldItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-SemiBoldItalic.ttf new file mode 100644 index 0000000..3b3f8f6 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-SemiBoldItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Thin.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Thin.ttf new file mode 100644 index 0000000..bea837e Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-Thin.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ThinItalic.ttf b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ThinItalic.ttf new file mode 100644 index 0000000..f0bfed7 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/ttf/JetBrainsMonoNL-ThinItalic.ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/variable/JetBrainsMono-Italic[wght].ttf b/fonts/JetBrainsMono-2.304/fonts/variable/JetBrainsMono-Italic[wght].ttf new file mode 100644 index 0000000..5414835 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/variable/JetBrainsMono-Italic[wght].ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/variable/JetBrainsMono[wght].ttf b/fonts/JetBrainsMono-2.304/fonts/variable/JetBrainsMono[wght].ttf new file mode 100644 index 0000000..b60e77f Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/variable/JetBrainsMono[wght].ttf differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Bold.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Bold.woff2 new file mode 100644 index 0000000..4917f43 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Bold.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-BoldItalic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-BoldItalic.woff2 new file mode 100644 index 0000000..536d3f7 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-BoldItalic.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraBold.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraBold.woff2 new file mode 100644 index 0000000..8f88c54 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraBold.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraBoldItalic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..d1478ba Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraBoldItalic.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraLight.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraLight.woff2 new file mode 100644 index 0000000..b97239f Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraLight.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraLightItalic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraLightItalic.woff2 new file mode 100644 index 0000000..be01aac Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ExtraLightItalic.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Italic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Italic.woff2 new file mode 100644 index 0000000..d60c270 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Italic.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Light.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Light.woff2 new file mode 100644 index 0000000..6538498 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Light.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-LightItalic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-LightItalic.woff2 new file mode 100644 index 0000000..66ca3d2 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-LightItalic.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Medium.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000..669d04c Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Medium.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-MediumItalic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-MediumItalic.woff2 new file mode 100644 index 0000000..80cfd15 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-MediumItalic.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Regular.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..40da427 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Regular.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-SemiBold.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-SemiBold.woff2 new file mode 100644 index 0000000..5ead7b0 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-SemiBold.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-SemiBoldItalic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-SemiBoldItalic.woff2 new file mode 100644 index 0000000..c5dd294 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-SemiBoldItalic.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Thin.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Thin.woff2 new file mode 100644 index 0000000..17270e4 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Thin.woff2 differ diff --git a/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ThinItalic.woff2 b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ThinItalic.woff2 new file mode 100644 index 0000000..a643215 Binary files /dev/null and b/fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-ThinItalic.woff2 differ diff --git a/fonts/Space_Mono.zip b/fonts/Space_Mono.zip new file mode 100644 index 0000000..533feab Binary files /dev/null and b/fonts/Space_Mono.zip differ diff --git a/fonts/Space_Mono/OFL.txt b/fonts/Space_Mono/OFL.txt new file mode 100644 index 0000000..2805642 --- /dev/null +++ b/fonts/Space_Mono/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Space Mono Project Authors (https://github.com/googlefonts/spacemono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/Space_Mono/SpaceMono-Bold.ttf b/fonts/Space_Mono/SpaceMono-Bold.ttf new file mode 100644 index 0000000..7c38f23 Binary files /dev/null and b/fonts/Space_Mono/SpaceMono-Bold.ttf differ diff --git a/fonts/Space_Mono/SpaceMono-BoldItalic.ttf b/fonts/Space_Mono/SpaceMono-BoldItalic.ttf new file mode 100644 index 0000000..b2f1e0d Binary files /dev/null and b/fonts/Space_Mono/SpaceMono-BoldItalic.ttf differ diff --git a/fonts/Space_Mono/SpaceMono-Italic.ttf b/fonts/Space_Mono/SpaceMono-Italic.ttf new file mode 100644 index 0000000..3845e17 Binary files /dev/null and b/fonts/Space_Mono/SpaceMono-Italic.ttf differ diff --git a/fonts/Space_Mono/SpaceMono-Regular.ttf b/fonts/Space_Mono/SpaceMono-Regular.ttf new file mode 100644 index 0000000..8bf82ce Binary files /dev/null and b/fonts/Space_Mono/SpaceMono-Regular.ttf differ diff --git a/fonts/Stretch-Sans-Font.zip b/fonts/Stretch-Sans-Font.zip new file mode 100644 index 0000000..f8ba79a Binary files /dev/null and b/fonts/Stretch-Sans-Font.zip differ diff --git a/fonts/Stretch-Sans-Font/STRRETCH SANS.otf b/fonts/Stretch-Sans-Font/STRRETCH SANS.otf new file mode 100644 index 0000000..539a284 Binary files /dev/null and b/fonts/Stretch-Sans-Font/STRRETCH SANS.otf differ diff --git a/fonts/Stretch-Sans-Font/STRRETCH SANS.svg b/fonts/Stretch-Sans-Font/STRRETCH SANS.svg new file mode 100644 index 0000000..cb288dd --- /dev/null +++ b/fonts/Stretch-Sans-Font/STRRETCH SANS.svg @@ -0,0 +1,1414 @@ + + + + +Created by FontForge 20200314 at Thu Apr 30 00:42:23 2020 + By Ril +Copyright 2020 - riljs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fonts/Stretch-Sans-Font/STRRETCH SANS.ttf b/fonts/Stretch-Sans-Font/STRRETCH SANS.ttf new file mode 100644 index 0000000..9ee0748 Binary files /dev/null and b/fonts/Stretch-Sans-Font/STRRETCH SANS.ttf differ diff --git a/fonts/Stretch-Sans-Font/STRRETCH SANS.woff b/fonts/Stretch-Sans-Font/STRRETCH SANS.woff new file mode 100644 index 0000000..0613070 Binary files /dev/null and b/fonts/Stretch-Sans-Font/STRRETCH SANS.woff differ diff --git a/fonts/Vamos-Font.zip b/fonts/Vamos-Font.zip new file mode 100644 index 0000000..d9832ed Binary files /dev/null and b/fonts/Vamos-Font.zip differ diff --git a/fonts/Vamos-Font/vamos.otf b/fonts/Vamos-Font/vamos.otf new file mode 100644 index 0000000..ecf89a7 Binary files /dev/null and b/fonts/Vamos-Font/vamos.otf differ diff --git a/fragments/nav.html b/fragments/nav.html new file mode 100644 index 0000000..15dab6e --- /dev/null +++ b/fragments/nav.html @@ -0,0 +1,11 @@ + diff --git a/fragments/socials.html b/fragments/socials.html new file mode 100644 index 0000000..5f3f44a --- /dev/null +++ b/fragments/socials.html @@ -0,0 +1,7 @@ + diff --git a/images/Splash.jpg b/images/Splash.jpg new file mode 100644 index 0000000..7fc1e69 Binary files /dev/null and b/images/Splash.jpg differ diff --git a/images/davane.jpg b/images/davane.jpg new file mode 100644 index 0000000..4b4c58b Binary files /dev/null and b/images/davane.jpg differ diff --git a/images/favicon-16x16.png b/images/favicon-16x16.png new file mode 100644 index 0000000..8675468 Binary files /dev/null and b/images/favicon-16x16.png differ diff --git a/images/favicon-32x32.png b/images/favicon-32x32.png new file mode 100644 index 0000000..cd8fa15 Binary files /dev/null and b/images/favicon-32x32.png differ diff --git a/images/nicholai-compressed.jpg b/images/nicholai-compressed.jpg new file mode 100644 index 0000000..945a6ad Binary files /dev/null and b/images/nicholai-compressed.jpg differ diff --git a/images/nicholai.jpg b/images/nicholai.jpg new file mode 100644 index 0000000..c9b0a61 Binary files /dev/null and b/images/nicholai.jpg differ diff --git a/images/nicholai.png b/images/nicholai.png new file mode 100644 index 0000000..1b68986 Binary files /dev/null and b/images/nicholai.png differ diff --git a/images/parth.jpg b/images/parth.jpg new file mode 100644 index 0000000..490993a Binary files /dev/null and b/images/parth.jpg differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..0f82db1 --- /dev/null +++ b/index.html @@ -0,0 +1,312 @@ + + + + + + Biohazard VFX | VFX Studio & Post-Production + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+
+ + +
+ + +
+

Meet The Founders

+ +
+ + +
+
+
+ + + + +
+

We usually reply within 24 hours.
Email: contact@biohazardvfx.com

+
+ + + + + + + + + +
+ + + +
+

© 2025 Biohazard VFX. All Rights Reserved.

+
+ + + + + \ No newline at end of file diff --git a/js/common.js b/js/common.js new file mode 100644 index 0000000..89c3623 --- /dev/null +++ b/js/common.js @@ -0,0 +1,41 @@ +/* ───────── js/common.js ───────── */ +(() => { + function injectFragment(id, url) { + const el = document.getElementById(id); + if (!el) return; + fetch(url) + .then(r => r.text()) + .then(html => { el.outerHTML = html; }) + .catch(console.error); + } + + document.addEventListener('DOMContentLoaded', () => { + // Inject shared fragments if placeholders present + injectFragment('nav-placeholder', 'fragments/nav.html'); + injectFragment('socials-placeholder', 'fragments/socials.html'); + + // Smooth scroll for same-page anchors + document.querySelectorAll('a[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', e => { + const targetId = anchor.getAttribute('href').slice(1); + const target = document.getElementById(targetId); + if (target) { + e.preventDefault(); + target.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + }); + }); + + // Lazy-load images & iframes + document.querySelectorAll('img, iframe').forEach(el => { + if (!el.hasAttribute('loading')) el.setAttribute('loading', 'lazy'); + }); + + // Ensure nav links have aria-labels + document.querySelectorAll('header.nav nav a').forEach(link => { + if (!link.hasAttribute('aria-label')) { + link.setAttribute('aria-label', link.textContent.trim()); + } + }); + }); +})(); \ No newline at end of file diff --git a/js/home.js b/js/home.js new file mode 100644 index 0000000..433a64f --- /dev/null +++ b/js/home.js @@ -0,0 +1,37 @@ +/* ───────── js/home.js ───────── */ +document.addEventListener('DOMContentLoaded', () => { + // Hero parallax & gradient effect + const hero = document.getElementById('hero'); + const about = document.getElementById('about'); + const video = hero?.querySelector('video'); + + if (hero && about && video) { + const update = () => { + const scrollY = window.scrollY; + const viewportHeight = window.innerHeight; + const aboutTop = about.getBoundingClientRect().top; + + const gradientOpacity = Math.max(0, Math.min(1, (viewportHeight - aboutTop) / (viewportHeight * 0.0125))); + hero.style.setProperty('--gradient-opacity', gradientOpacity.toString()); + + const aboutPadding = 15 - scrollY * 0.03; + about.style.marginTop = `${aboutPadding}rem`; + + const videoOffset = Math.max(0, scrollY - viewportHeight / 2); + video.style.transform = `translateY(${videoOffset}px)`; + }; + + update(); + window.addEventListener('scroll', update, { passive: true }); + window.addEventListener('resize', update, { passive: true }); + } + + // Pipeline blurb injection (optional, safe-fail) + const pipeTarget = document.getElementById('pipeline-content'); + if (pipeTarget) { + fetch('written/pipeline.txt') + .then(r => r.text()) + .then(txt => { pipeTarget.innerHTML = `

${txt}

`; }) + .catch(console.error); + } +}); \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000..73606c1 --- /dev/null +++ b/js/main.js @@ -0,0 +1,113 @@ +/* ───────── js/main.js ───────── + Dynamically builds the project grid + injects about/contact/crew copy. +-----------------------------------------------------------------*/ +// Page loader overlay +(function(){ + const overlay=document.createElement('div'); + overlay.id='loader-overlay'; + overlay.innerHTML='
'; + document.addEventListener('DOMContentLoaded',()=>document.body.appendChild(overlay)); + window.addEventListener('load',()=>{ + overlay.classList.add('hide'); + setTimeout(()=>overlay.remove(),700); + }); +})(); + +// Mobile 100‑vh fix +function setVh(){document.documentElement.style.setProperty('--vh',window.innerHeight*0.01);}setVh();window.addEventListener('resize',setVh); + +// Header height fix +function setHeaderOffset(){ + const headerEl = document.querySelector('header.nav'); + if(!headerEl) return; // Header not in DOM yet – abort and wait + const h = headerEl.offsetHeight; + document.documentElement.style.setProperty('--header-h', `${h}px`); +} +setHeaderOffset(); +// Run once more after a short delay to catch late-injected nav fragments +setTimeout(setHeaderOffset, 500); +window.addEventListener('resize', setHeaderOffset); + +// Fade‑in intersection observer +const reveal = new IntersectionObserver((entries,o)=>{ + entries.forEach(e=>{if(e.isIntersecting){e.target.classList.add('loaded');o.unobserve(e.target);}}); +},{threshold:.3}); + +// Grab the grid once so every scope has it +const grid = document.getElementById('projects'); + +// Only run project-grid logic on pages that actually have the grid element +if(grid){ + // Build card element + function card({id,title,thumbnail,size='small'}){ + const a = document.createElement('a'); + a.href = `project.html?id=${encodeURIComponent(id)}`; + a.className = 'item'; + a.dataset.span = size; // <— MAGIC LINE + a.innerHTML = ` +

${title}

+
`; + reveal.observe(a); + return a; + } + + // Load manifest + fetch('projects/projects.json') + .then(r=>{if(!r.ok)throw new Error('manifest missing');return r.json();}) + .then(list=>{ + if(!Array.isArray(list))throw new Error('manifest must be an array'); + list.forEach(p=>grid.appendChild(card(p))); + + }) + .catch(err=>{ + console.error('Manifest issue:',err.message); + grid.innerHTML=`

No projects manifest found.

`; + + }); +} + + +// Inject About & Contact copy +['about','contact'].forEach(key=>{ + const el=document.getElementById(key); + if(!el)return; + fetch(`written/${key}_us.txt`) + .then(r=>r.ok?r.text():Promise.reject()) + .then(txt=>{ + el.innerHTML=`

${key}

${txt.replace(/\n/g,'
')}

`; + }) + .catch(()=>{}); +}); + +// Inject Crew copy +['crew'].forEach(key=>{ + const el=document.getElementById(key); + if(!el)return; + fetch(`written/${key}.txt`) + .then(r=>r.ok?r.text():Promise.reject()) + .then(txt=>{ + el.innerHTML=`

${txt.replace(/\n/g,'
')}

`; + }) + .catch(()=>{}); +}); + +// ───────── SIMPLE PARALLAX HANDLER ───────── +// Applies translateY based on scroll position to any element with a data-speed attribute. +document.addEventListener('DOMContentLoaded', () => { + const layers = Array.from(document.querySelectorAll('[data-speed]')); + if(!layers.length) return; + + const update = () => { + const scrollY = window.scrollY; + layers.forEach(el => { + const speed = parseFloat(el.dataset.speed) || 0; + // Negative so layers move opposite to scroll for depth illusion + el.style.transform = `translateY(${ -scrollY * speed }px)`; + }); + }; + + update(); + window.addEventListener('scroll', update, { passive: true }); + window.addEventListener('resize', update, { passive: true }); +}); + diff --git a/js/project.js b/js/project.js new file mode 100644 index 0000000..446b8ba --- /dev/null +++ b/js/project.js @@ -0,0 +1,39 @@ +// Grab ?id=XXX +const params=new URLSearchParams(window.location.search); +const id=params.get('id'); +const container=document.getElementById('project'); + +if(!id){ + container.textContent='No project id 🙃'; + throw new Error('Missing id param'); +} + +fetch('projects/projects.json') + .then(r=>r.json()) + .then(list=>{ + const proj=list.find(p=>p.id===id); + if(!proj) throw new Error('Unknown project'); + + container.innerHTML=` +

${proj.title}

+ +
+
+ `; + + // Pull in optional text files + ['info','credits'].forEach(key=>{ + if(!proj[key]) return; + fetch(proj[key]) + .then(r=>r.text()) + .then(txt=>{ + document.getElementById(key).innerHTML= + `

${key}

+

${txt.replace(/\n/g,'
')}

`; + }); + }); + }) + .catch(err=>{ + console.error(err); + container.innerHTML='

Project not found.

'; + }); diff --git a/js/ui.js b/js/ui.js new file mode 100644 index 0000000..85b886c --- /dev/null +++ b/js/ui.js @@ -0,0 +1,36 @@ +// js/ui.js +// Shared UI enhancements: Glass Header on scroll & Back-to-Top button. +document.addEventListener('DOMContentLoaded', () => { + const header = document.querySelector('header.nav'); + // Don't run if there's no header on the page + if (!header) return; + + // 1. Create and inject Back-to-Top button + const btt = document.createElement('div'); + btt.className = 'back-to-top'; + btt.setAttribute('aria-label', 'Scroll to top'); + btt.innerHTML = ``; + document.body.appendChild(btt); + + // 2. Click listener to scroll to top + btt.addEventListener('click', () => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }); + + // 3. Scroll listener to show/hide elements + let isTicking = false; + window.addEventListener('scroll', () => { + if (!isTicking) { + window.requestAnimationFrame(() => { + const scrollY = window.scrollY; + if (scrollY > 200) { + btt.classList.add('visible'); + } else { + btt.classList.remove('visible'); + } + isTicking = false; + }); + isTicking = true; + } + }); +}); \ No newline at end of file diff --git a/project.html b/project.html new file mode 100644 index 0000000..bcdc831 --- /dev/null +++ b/project.html @@ -0,0 +1,147 @@ + + + + + Project — Biohazard VFX + + + + + + +
+ + ← Back to Projects + +
+
+
+

© 2025 Biohazard VFX. All Rights Reserved.

+
+ + + + + diff --git a/projects/01_OTFR/credits.txt b/projects/01_OTFR/credits.txt new file mode 100644 index 0000000..cb1deea --- /dev/null +++ b/projects/01_OTFR/credits.txt @@ -0,0 +1,18 @@ +Director: DrewFilmedIt, RookDirector + +Visual Effects: Biohazard VFX + +Executive Producer: Davane +VFX Supervisor: Nicholai Vogel +Head of Production: Parth Gupta + +Prep Supervisor: Tanvir Hossain + +Lead Compositor: Parth Gupta +Compositors: Mikaiel Russ, Wing Sau Yip + +Graphic Artist: Airic Fenn + +CG Artists: Nicholai Vogel, Miguel Fernandes + +FX: LKS Visuals diff --git a/projects/01_OTFR/info.txt b/projects/01_OTFR/info.txt new file mode 100644 index 0000000..43da3d3 --- /dev/null +++ b/projects/01_OTFR/info.txt @@ -0,0 +1,2 @@ +Project: "One Take Freestyle" +Client: 1900Rugrat ft. Kodak Black \ No newline at end of file diff --git a/projects/01_OTFR/thumbnail.jpg b/projects/01_OTFR/thumbnail.jpg new file mode 100644 index 0000000..d826ee0 Binary files /dev/null and b/projects/01_OTFR/thumbnail.jpg differ diff --git a/projects/APTS/credits.txt b/projects/APTS/credits.txt new file mode 100644 index 0000000..5748273 --- /dev/null +++ b/projects/APTS/credits.txt @@ -0,0 +1,94 @@ + +Director: Joshua S. Medina + +Creative Director: Inphamous + +Producer: Tashi Bootia + +Director of Photography: Ethan Wen + +Lead Photographer: Cheef Hendrix + +Editor: Adam Kimak + +Colorist: Breezus Christ + +On-Set VFX Supervision +Production VFX Supervisors: Segre · APT3D.io + +Biohazard VFX + +Executive Producer: Davané + +VFX Producer / Compositor: Nuke FX + +VFX Supervisor: Nicholai Vogel + +Prep Supervisor: Tanvir Hossain + +Compositors: Nuke FX · Ideas Re Bulletproof · Nicholai Vogel · Tenebris Method + +CG Artist: Miguel Fernandes + +Camera & Lighting + +1st AD: N. Sossi Romano + +Production Manager: M. Z. Gower + +1st AC: David Depth + +2nd AC: Eway MK + +Steadicam: Lysd + +Gaffer: Hindsight Is 20/20 + +Key Grip: Alvin Adadevoh + +Best Boy Electric: Aiden LaBruno + +Electric: Saki DP + +Best Boy Grip: Khalid Riley + +Grip: Luca Rococo + +Art & SFX +Production Designer: B. Her Studio + +Set Dresser: Jazzman Azemoun + +SFX Artist: Seven 1KF + +Wardrobe, Hair & Make-Up +Hair / Make-Up: Icy Smalls + +Stylist: Offbeat + +Sound & Safety +Sound Mixer: Tony Caezar + +Set Medic: CSI LLC NYC + +Support Crew +Key PA: Ellis Lich + +Truck PA: Matt De Las Cuevas + +Production Assistants: Den Teen • Sam Hana • Cameron Nuessle • Benn Bustamante + +Talent & Casting +Casting Director: Ape Castings + +Lead Talent: Melissa Núñez + +Background Talent: Connor Swinney · Mon Ae · Bryxes World · The Biggest Storm + +Client +SNIPES CMO: Paula Barbosa + +Special Projects Manager: Roger Castle + +Creative Marketing Coordinator: Ramel Coleman + diff --git a/projects/APTS/info.txt b/projects/APTS/info.txt new file mode 100644 index 0000000..b8a14bf --- /dev/null +++ b/projects/APTS/info.txt @@ -0,0 +1 @@ +Project: SNIPES x Adidas — 2024 Holiday Campaign \ No newline at end of file diff --git a/projects/APTS/thumbnail.jpg b/projects/APTS/thumbnail.jpg new file mode 100644 index 0000000..83bda3c Binary files /dev/null and b/projects/APTS/thumbnail.jpg differ diff --git a/projects/ARSD/credits.txt b/projects/ARSD/credits.txt new file mode 100644 index 0000000..56a9b2b --- /dev/null +++ b/projects/ARSD/credits.txt @@ -0,0 +1,24 @@ +Directed by Chris Villa +Creative Direction Bobby Greanleaf, Chris Villa +Additional Creative Datboyvideo, Lach531, Oliver Cannon, Gibson Hazard + +Production Company SHOTCLOCK +Executive Producer Durty Harry +Director of Photography John Matysiak +Editor Chris Villa +Sound Design Joren +Colorist Walter Volpatto + +Visual Effects — Biohazard VFX +VFX Supervisor Nicholai Vogel + +Compositors Daniel Pianezza, Parth Gupta +3D Artists Miguel Fernandes, Nicholai Vogel +Graphic Design 1Nkreaper +Roto Lead Infinite VFX + +3D Animation FiftyRock +FX Beer Simulation Rick Lancaster +Graphics & Rotoscopy Hwang Production, Slavko Gavric, S9inTVFX + +Titles SBLNGR \ No newline at end of file diff --git a/projects/ARSD/info.txt b/projects/ARSD/info.txt new file mode 100644 index 0000000..22bc391 --- /dev/null +++ b/projects/ARSD/info.txt @@ -0,0 +1 @@ +Title: The Temper Trap - Sweet Dispostion (ARTBAT Remix) (Official Video) \ No newline at end of file diff --git a/projects/ARSD/thumbnail.jpg b/projects/ARSD/thumbnail.jpg new file mode 100644 index 0000000..b41dee5 Binary files /dev/null and b/projects/ARSD/thumbnail.jpg differ diff --git a/projects/ENBD/credits.txt b/projects/ENBD/credits.txt new file mode 100644 index 0000000..aa96edc --- /dev/null +++ b/projects/ENBD/credits.txt @@ -0,0 +1,122 @@ +Directed by +2eehyein (2eehyein film) + +Production House +NEWYEAR* + +Executive Producers +Yeonjin Kim +Sebong Oh + +Producers +Seungwon Lee +Donghyun Jeong + +Director of Photography +Jinhyuk Lee + +Art Department +Re.kindle / ABR + +Art Director +Minkyu Jeon + +SFX Team +DRAGON Special Effect + +Stunt Coordinators +Yoonheon Jung +Minwoo Seo + +Editing +2eehyein +Minhee Lee (2eehyein film) + +Digital Intermediate +LUCID COLOUR + +Colorist +Somi Na + +Sound +Bermuda (Hanseom Park) + + +Visual Effects by Biohazard VFX + +VFX Post Production Supervisors +Nicholai Vogel +Carlo Quicho + +Executive Producer +Davané + +Creative Director +Parth Gupta + +Modeling Studio +TWINSTATUS + +Prep Studios +MERGE FRAME VFX +INVISIBLE VFX + + + +Compositing Supervisor +Zee Khan + +CG Supervisor +Nicholai Vogel + +FX Supervisor +Shane Simpson + +Modeling Supervisor +Tony Twin + +Matchmove & Rotomation Supervisor +Srikanth Dugyala + +Rotopaint Supervisors +Tanvir Hossain +Nagendra Moond + +Render Wrangler +Hailin Hu + +Rendering TD +Jiang Chang + +Digital Artists +Shane Simpson +Wing Sau Yip +Semyon Illchenko +Parth Gupta +Zee Khan +Mikaiel Russ +Tanvir Hossain +Tony Twin +Nicholai Vogel +Michal Rech +Naffay +Emiko Mendoza +Austin Oh +Alex +Andrew Matta +Rick YaegerShane Simpson +Wing Sau Yip +Semyon Illchenko +Parth Gupta +Zee Khan +Mikaiel Russ +Tanvir Hossain +Tony Twin +Nicholai Vogel +Michal Rech +Naffay +Emiko Mendoza +Austin Oh +Alex +Andrew Matta +Rick Yaeger diff --git a/projects/ENBD/info.txt b/projects/ENBD/info.txt new file mode 100644 index 0000000..e69de29 diff --git a/projects/ENBD/thumbnail.jpg b/projects/ENBD/thumbnail.jpg new file mode 100644 index 0000000..a49ee77 Binary files /dev/null and b/projects/ENBD/thumbnail.jpg differ diff --git a/projects/HDSH/credits.txt b/projects/HDSH/credits.txt new file mode 100644 index 0000000..56a9b2b --- /dev/null +++ b/projects/HDSH/credits.txt @@ -0,0 +1,24 @@ +Directed by Chris Villa +Creative Direction Bobby Greanleaf, Chris Villa +Additional Creative Datboyvideo, Lach531, Oliver Cannon, Gibson Hazard + +Production Company SHOTCLOCK +Executive Producer Durty Harry +Director of Photography John Matysiak +Editor Chris Villa +Sound Design Joren +Colorist Walter Volpatto + +Visual Effects — Biohazard VFX +VFX Supervisor Nicholai Vogel + +Compositors Daniel Pianezza, Parth Gupta +3D Artists Miguel Fernandes, Nicholai Vogel +Graphic Design 1Nkreaper +Roto Lead Infinite VFX + +3D Animation FiftyRock +FX Beer Simulation Rick Lancaster +Graphics & Rotoscopy Hwang Production, Slavko Gavric, S9inTVFX + +Titles SBLNGR \ No newline at end of file diff --git a/projects/HDSH/info.txt b/projects/HDSH/info.txt new file mode 100644 index 0000000..2aecc5e --- /dev/null +++ b/projects/HDSH/info.txt @@ -0,0 +1 @@ +Title: Post Malone Ft. Morgan Wallen - I Had Some Help (Official Music Video) \ No newline at end of file diff --git a/projects/HDSH/thumbnail.jpg b/projects/HDSH/thumbnail.jpg new file mode 100644 index 0000000..4830957 Binary files /dev/null and b/projects/HDSH/thumbnail.jpg differ diff --git a/projects/J305/credits.txt b/projects/J305/credits.txt new file mode 100644 index 0000000..b8dc3c2 --- /dev/null +++ b/projects/J305/credits.txt @@ -0,0 +1,51 @@ +DIRECTION & PRODUCTION +Directed by OSKV (Oliver Shore & Kevin Von Puttkammer) +Executive Producers Lucas Prevost · Lopes · Galileo Mondol +Production Manager Rocka Bennet + +POST-PRODUCTION +Editors Kevin Von Puttkammer · Oliver Shore +Color House HOUSE POST +  • Colorist Connor Bailey + +VISUAL EFFECTS — Biohazard VFX +Post Producer Davane +VFX Supervisor Nicholai Vogel +VFX Coordinator Parth Gupta + +Compositing Team +Nicholai Vogel · Miguel Fernandes · Ben Morse · Davane · Zee Khan · James Carriere · Parth Gupta · Ricardo SP + +CAMERA & LIGHTING +Director of Photography Mariano Peschiera +1st AC Chris Campa +Key Grip Mauricio Gómez | Best Boy Grip Williams Díaz +Gaffer Ernest Quintana | Best Boy Electric Gerardinamir Cabrera + +ART DEPARTMENT +Production Designer Bryant —— Assistants: Emmanuel · Michael · Christian · Xavier Del Tour + +PRODUCTION ASSISTANTS +Reeco Pinnock · Jryan Gonzalez · Ashley Nicole Chin + +TALENT & LABEL +Artist Jordan Adetunji +300 Entertainment Kayla Harris · Lallie Jones +Warner Records Zak Boumlaki +Management Dan Jenkins + +STYLING & CASTING +Stylist Dallas Crumble +Wardrobe Norma Castro | Assistant: Per Norma +Casting Director E. Mills + +Models Michelle Bissainthe · Jada Arrazcaeta · Diandra Edwards · Lanabel Cotes + +ADDITIONAL POST +Post-Production Facility Clean Post Co. +House Post — Post Producer Gina Martin +House Post — Coordinator Logan Cross +Graphics SaveYourWork + +MAKING-OF +Behind-the-Scenes Edit Xander Sol \ No newline at end of file diff --git a/projects/J305/info.txt b/projects/J305/info.txt new file mode 100644 index 0000000..cc89b73 --- /dev/null +++ b/projects/J305/info.txt @@ -0,0 +1,2 @@ +Project: "305" Jordan Adetunji ft Bryson Tiller +Client: OSKV diff --git a/projects/J305/thumbnail.jpg b/projects/J305/thumbnail.jpg new file mode 100644 index 0000000..73a7f17 Binary files /dev/null and b/projects/J305/thumbnail.jpg differ diff --git a/projects/Reel/credits.txt b/projects/Reel/credits.txt new file mode 100644 index 0000000..4354e5c --- /dev/null +++ b/projects/Reel/credits.txt @@ -0,0 +1,5 @@ +Visual Effects by Biohazard VFX + +Biohazard VFX was Founded by Nicholai Vogel, Parth Gupta and Davane in 2023 + +contact@biohazardvfx.com diff --git a/projects/Reel/info.txt b/projects/Reel/info.txt new file mode 100644 index 0000000..54deb33 --- /dev/null +++ b/projects/Reel/info.txt @@ -0,0 +1 @@ +This reel showcases the highlights of Biohazard VFX's work over the past two years. \ No newline at end of file diff --git a/projects/Reel/thumbnail.jpg b/projects/Reel/thumbnail.jpg new file mode 100644 index 0000000..0ba9507 Binary files /dev/null and b/projects/Reel/thumbnail.jpg differ diff --git a/projects/projects.json b/projects/projects.json new file mode 100644 index 0000000..a917981 --- /dev/null +++ b/projects/projects.json @@ -0,0 +1,66 @@ +[ + + { + "id": "Reel", + "title": "Biohazard VFX Showreel", + "thumbnail": "projects/Reel/thumbnail.jpg", + "size": "big", + "embed": "https://f.io/2bfzI989", + "credits": "projects/Reel/credits.txt", + "info": "projects/Reel/info.txt" + }, + { + "id": "HDSH", + "title": "Post Malone Ft. Morgan Wallen - \"I Had Some Help\"", + "thumbnail": "projects/HDSH/thumbnail.jpg", + "size": "small", + "embed": "https://www.youtube.com/embed/4QIZE708gJ4?si=jYPjgJaMB-OksuYL", + "credits": "projects/HDSH/credits.txt", + "info": "projects/HDSH/info.txt" + }, + { + "id": "J305", + "title": "\"305\" Jordan Adetunji ft Bryson Tiller", + "thumbnail": "projects/J305/thumbnail.jpg", + "size": "small", + "embed": "https://www.youtube.com/embed/aeliAWeQoYA?si=lKAjxXV8NciGzxpU", + "credits": "projects/J305/credits.txt", + "info": "projects/J305/info.txt" + }, + { + "id": "ARSD", + "title": "The Temper Trap - Sweet Disposition (ARTBAT Remix)", + "thumbnail": "projects/ARSD/thumbnail.jpg", + "size": "small", + "embed": "https://www.youtube.com/embed/4OeprBdP3hY?si=BgiJ-75Jf039evq3", + "credits": "projects/ARSD/credits.txt", + "info": "projects/ARSD/info.txt" + }, + { + "id": "ENBD", + "title": "Enhypen \"Bad Desire\"", + "thumbnail": "projects/ENBD/thumbnail.jpg", + "size": "small", + "embed": "https://www.youtube.com/embed/a2Zqdo9RbNs?si=eybihPJFXvoCFcNK", + "credits": "projects/ENBD/credits.txt", + "info": "projects/ENBD/info.txt" + }, + { + "id": "APTS", + "title": "SNIPES x Adidas — 2024 Holiday Campaign", + "thumbnail": "projects/APTS/thumbnail.jpg", + "size": "small", + "embed": "https://player.vimeo.com/video/1065352037?badge=0&autopause=0&player_id=0&app_id=58479", + "credits": "projects/APTS/credits.txt", + "info": "projects/APTS/info.txt" + }, + { + "id": "01_OTFR", + "title": "1900Rugrat \"One Take Freestyle\"", + "thumbnail": "projects/01_OTFR/thumbnail.jpg", + "size": "small", + "embed": "https://nextcloud.biohazardvfx.com/s/58mKn3q5ePzN88t", + "credits": "projects/01_OTFR/credits.txt", + "info": "projects/01_OTFR/info.txt" + } +] diff --git a/videos/reel.mp4 b/videos/reel.mp4 new file mode 100644 index 0000000..41a5f8f Binary files /dev/null and b/videos/reel.mp4 differ diff --git a/written/about_us.txt b/written/about_us.txt new file mode 100644 index 0000000..9fec4c1 --- /dev/null +++ b/written/about_us.txt @@ -0,0 +1,2 @@ +Biohazard VFX is an end-to-end post production studio, a passionate collective of artists, storytellers, and students of the art-form. -all of us dedicated to creating captivating and truly meaningful visual art. + diff --git a/written/contact_us.txt b/written/contact_us.txt new file mode 100644 index 0000000..bd5298e --- /dev/null +++ b/written/contact_us.txt @@ -0,0 +1 @@ +Have a question? Contact us: contact@biohazardvfx.com \ No newline at end of file diff --git a/written/crew.txt b/written/crew.txt new file mode 100644 index 0000000..5a8ec01 --- /dev/null +++ b/written/crew.txt @@ -0,0 +1,8 @@ +Biohazard VFX was founded in 2023 by visual effects artists Nicholai Vogel, Parth Gupta and Davane. + +Our experience began in music videos and commercials, and today, we have grown to offer comprehensive services including high-level supervision and project management, advanced VFX & 3D animation, and conform/online finishing. + +Every visual piece we produce is crafted with heartfelt care and obsessive precision. From offices in Colorado Springs, Colorado; Toronto, Canada; and Mumbai, India, our team collaborates with exceptional talent worldwide, ensuring each project benefits from diverse perspectives and unmatched creativity. + +We see ourselves as partners in your vision, building a reputation based on genuine collaboration, reliability, innovation, and transparency. +Our goal is to be a beacon of light, we are paving a new path forward for visual effects. We invite you join us on this journey to explore how we can bring your story to life. \ No newline at end of file diff --git a/written/faq.json b/written/faq.json new file mode 100644 index 0000000..74710a3 --- /dev/null +++ b/written/faq.json @@ -0,0 +1,22 @@ +[ + { + "question": "Can you work with remote clients?", + "answer": "Absolutely! Our studio relies on a fully self-hosted cloud platform, and we regularly collaborate with clients worldwide." + }, + { + "question": "How do I start a project with you?", + "answer": "Either use our contact form or email us at contact@biohazardvfx.com with your project details." + }, + { + "question": "Do you offer rush services?", + "answer": "Yes! Starting out in music videos, our pipeline was built to withstand chaos. We pride ourselves on the efficiency of our pipeline and clear communication." + }, + { + "question": "What software do you use?", + "answer": "Since our studio is cloud-based, we have access to a wide array of artists and the software required to meet our clients' needs. For the nerds: our internal pipeline is built around Houdini, Solaris, Blender, and Nuke." + }, + { + "question": "How do you handle feedback and revisions?", + "answer": "We use collaborative review tools and keep you updated at every stage. Revisions are included as a part of our process." + } +] diff --git a/written/pipeline.txt b/written/pipeline.txt new file mode 100644 index 0000000..a3e7450 --- /dev/null +++ b/written/pipeline.txt @@ -0,0 +1,5 @@ +At Biohazard VFX, we've designed our pipeline to be reliable, efficient, and truly exceptional. We combine the latest technology with the incredible talent of our artists to ensure every project shines. + +As a cloud-based studio, we host our own cloud, giving us total control and ensuring your data is always secure. We're constantly innovating by building our own custom tools. This means a smoother process for our artists and a better result for you, all while helping us offer more competitive pricing by cutting out third-party fees. + +Our journey always starts with your concept, where we shape your vision. From there, our talented artists take over to bring that vision to life, ensuring every detail is perfect and every visual is stunning. \ No newline at end of file