From 3b8c8af842541795e1e3aef0c55f3d2b7b79dafd Mon Sep 17 00:00:00 2001 From: Subhamoy Biswas Date: Tue, 4 Jul 2023 00:59:51 +0530 Subject: [PATCH] First commit...!! --- .gitignore | 3 + htdocs/assets/_footer.php | 41 + htdocs/assets/_header.php | 71 + htdocs/assets/_integrate.php | 7 + htdocs/assets/extra-style.css | 63 + htdocs/assets/images/endsec-bgpattern.svg | 8 + htdocs/assets/images/left-blobs.svg | 8 + htdocs/assets/images/neosubhamoy.svg | 28 + htdocs/assets/images/right-blobs.svg | 8 + htdocs/assets/js/vanilla-tilt.js | 498 +++++++ htdocs/assets/style.css | 1544 +++++++++++++++++++++ htdocs/blog.php | 17 + htdocs/contact.php | 17 + htdocs/index.php | 244 ++++ htdocs/projects.php | 17 + package.json | 16 + src/input.css | 3 + tailwind.config.js | 24 + 18 files changed, 2617 insertions(+) create mode 100644 .gitignore create mode 100644 htdocs/assets/_footer.php create mode 100644 htdocs/assets/_header.php create mode 100644 htdocs/assets/_integrate.php create mode 100644 htdocs/assets/extra-style.css create mode 100644 htdocs/assets/images/endsec-bgpattern.svg create mode 100644 htdocs/assets/images/left-blobs.svg create mode 100644 htdocs/assets/images/neosubhamoy.svg create mode 100644 htdocs/assets/images/right-blobs.svg create mode 100644 htdocs/assets/js/vanilla-tilt.js create mode 100644 htdocs/assets/style.css create mode 100644 htdocs/blog.php create mode 100644 htdocs/contact.php create mode 100644 htdocs/index.php create mode 100644 htdocs/projects.php create mode 100644 package.json create mode 100644 src/input.css create mode 100644 tailwind.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..750a6c1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +package-lock.json +node_modules/ +.vscode/ \ No newline at end of file diff --git a/htdocs/assets/_footer.php b/htdocs/assets/_footer.php new file mode 100644 index 0000000..094f607 --- /dev/null +++ b/htdocs/assets/_footer.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/htdocs/assets/_header.php b/htdocs/assets/_header.php new file mode 100644 index 0000000..74c8783 --- /dev/null +++ b/htdocs/assets/_header.php @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/htdocs/assets/_integrate.php b/htdocs/assets/_integrate.php new file mode 100644 index 0000000..2ad1e47 --- /dev/null +++ b/htdocs/assets/_integrate.php @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/htdocs/assets/extra-style.css b/htdocs/assets/extra-style.css new file mode 100644 index 0000000..4c2975c --- /dev/null +++ b/htdocs/assets/extra-style.css @@ -0,0 +1,63 @@ +::-webkit-scrollbar { + width: 4px; + } + +::-webkit-scrollbar-track { +background: #0F172A; +} + +::-webkit-scrollbar-thumb { +background: rgba(56, 189, 248, 0.30); +} + +::-webkit-scrollbar-thumb:hover { +background: #38BDF8; +} + + + +@keyframes scroll { + 0% { + transform: translateY(0); + } + 30% { + transform: translateY(100px); + } +} + +.animate-scroll { + animation: scroll ease 1.5s infinite; +} + +@keyframes slide-up { + 0% { + opacity: 1; + transform: translateY(0); + } + 100% { + opacity: 0; + transform: translateY(-100%); + } +} + +.animate-slide-up { + animation: slide-up 0.5s ease-in-out; +} + +.aboutcontainer:hover::before { + opacity: 1; +} + +.aboutcontainer::before { + background: radial-gradient(600px circle at var(--mouse-x) var(--mouse-y), rgba(255,255,255,0.06), transparent 40%); + border-radius: inherit; + content: ""; + height: 100%; + width: 100%; + position: absolute; + left: 0px; + top: 0px; + z-index: 2; + opacity: 0; + transition: opacity 500ms; +} \ No newline at end of file diff --git a/htdocs/assets/images/endsec-bgpattern.svg b/htdocs/assets/images/endsec-bgpattern.svg new file mode 100644 index 0000000..7fd9469 --- /dev/null +++ b/htdocs/assets/images/endsec-bgpattern.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/htdocs/assets/images/left-blobs.svg b/htdocs/assets/images/left-blobs.svg new file mode 100644 index 0000000..b41ecb0 --- /dev/null +++ b/htdocs/assets/images/left-blobs.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/htdocs/assets/images/neosubhamoy.svg b/htdocs/assets/images/neosubhamoy.svg new file mode 100644 index 0000000..c831d9e --- /dev/null +++ b/htdocs/assets/images/neosubhamoy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/htdocs/assets/images/right-blobs.svg b/htdocs/assets/images/right-blobs.svg new file mode 100644 index 0000000..532168b --- /dev/null +++ b/htdocs/assets/images/right-blobs.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/htdocs/assets/js/vanilla-tilt.js b/htdocs/assets/js/vanilla-tilt.js new file mode 100644 index 0000000..ce4db4d --- /dev/null +++ b/htdocs/assets/js/vanilla-tilt.js @@ -0,0 +1,498 @@ +var VanillaTilt = (function () { + 'use strict'; + + /** + * Created by Sergiu ศ˜andor (micku7zu) on 1/27/2017. + * Original idea: https://github.com/gijsroge/tilt.js + * MIT License. + * Version 1.8.0 + */ + + class VanillaTilt { + constructor(element, settings = {}) { + if (!(element instanceof Node)) { + throw ("Can't initialize VanillaTilt because " + element + " is not a Node."); + } + + this.width = null; + this.height = null; + this.clientWidth = null; + this.clientHeight = null; + this.left = null; + this.top = null; + + // for Gyroscope sampling + this.gammazero = null; + this.betazero = null; + this.lastgammazero = null; + this.lastbetazero = null; + + this.transitionTimeout = null; + this.updateCall = null; + this.event = null; + + this.updateBind = this.update.bind(this); + this.resetBind = this.reset.bind(this); + + this.element = element; + this.settings = this.extendSettings(settings); + + this.reverse = this.settings.reverse ? -1 : 1; + this.resetToStart = VanillaTilt.isSettingTrue(this.settings["reset-to-start"]); + this.glare = VanillaTilt.isSettingTrue(this.settings.glare); + this.glarePrerender = VanillaTilt.isSettingTrue(this.settings["glare-prerender"]); + this.fullPageListening = VanillaTilt.isSettingTrue(this.settings["full-page-listening"]); + this.gyroscope = VanillaTilt.isSettingTrue(this.settings.gyroscope); + this.gyroscopeSamples = this.settings.gyroscopeSamples; + + this.elementListener = this.getElementListener(); + + if (this.glare) { + this.prepareGlare(); + } + + if (this.fullPageListening) { + this.updateClientSize(); + } + + this.addEventListeners(); + this.reset(); + + if (this.resetToStart === false) { + this.settings.startX = 0; + this.settings.startY = 0; + } + } + + static isSettingTrue(setting) { + return setting === "" || setting === true || setting === 1; + } + + /** + * Method returns element what will be listen mouse events + * @return {Node} + */ + getElementListener() { + if (this.fullPageListening) { + return window.document; + } + + if (typeof this.settings["mouse-event-element"] === "string") { + const mouseEventElement = document.querySelector(this.settings["mouse-event-element"]); + + if (mouseEventElement) { + return mouseEventElement; + } + } + + if (this.settings["mouse-event-element"] instanceof Node) { + return this.settings["mouse-event-element"]; + } + + return this.element; + } + + /** + * Method set listen methods for this.elementListener + * @return {Node} + */ + addEventListeners() { + this.onMouseEnterBind = this.onMouseEnter.bind(this); + this.onMouseMoveBind = this.onMouseMove.bind(this); + this.onMouseLeaveBind = this.onMouseLeave.bind(this); + this.onWindowResizeBind = this.onWindowResize.bind(this); + this.onDeviceOrientationBind = this.onDeviceOrientation.bind(this); + + this.elementListener.addEventListener("mouseenter", this.onMouseEnterBind); + this.elementListener.addEventListener("mouseleave", this.onMouseLeaveBind); + this.elementListener.addEventListener("mousemove", this.onMouseMoveBind); + + if (this.glare || this.fullPageListening) { + window.addEventListener("resize", this.onWindowResizeBind); + } + + if (this.gyroscope) { + window.addEventListener("deviceorientation", this.onDeviceOrientationBind); + } + } + + /** + * Method remove event listeners from current this.elementListener + */ + removeEventListeners() { + this.elementListener.removeEventListener("mouseenter", this.onMouseEnterBind); + this.elementListener.removeEventListener("mouseleave", this.onMouseLeaveBind); + this.elementListener.removeEventListener("mousemove", this.onMouseMoveBind); + + if (this.gyroscope) { + window.removeEventListener("deviceorientation", this.onDeviceOrientationBind); + } + + if (this.glare || this.fullPageListening) { + window.removeEventListener("resize", this.onWindowResizeBind); + } + } + + destroy() { + clearTimeout(this.transitionTimeout); + if (this.updateCall !== null) { + cancelAnimationFrame(this.updateCall); + } + + this.reset(); + + this.removeEventListeners(); + this.element.vanillaTilt = null; + delete this.element.vanillaTilt; + + this.element = null; + } + + onDeviceOrientation(event) { + if (event.gamma === null || event.beta === null) { + return; + } + + this.updateElementPosition(); + + if (this.gyroscopeSamples > 0) { + this.lastgammazero = this.gammazero; + this.lastbetazero = this.betazero; + + if (this.gammazero === null) { + this.gammazero = event.gamma; + this.betazero = event.beta; + } else { + this.gammazero = (event.gamma + this.lastgammazero) / 2; + this.betazero = (event.beta + this.lastbetazero) / 2; + } + + this.gyroscopeSamples -= 1; + } + + const totalAngleX = this.settings.gyroscopeMaxAngleX - this.settings.gyroscopeMinAngleX; + const totalAngleY = this.settings.gyroscopeMaxAngleY - this.settings.gyroscopeMinAngleY; + + const degreesPerPixelX = totalAngleX / this.width; + const degreesPerPixelY = totalAngleY / this.height; + + const angleX = event.gamma - (this.settings.gyroscopeMinAngleX + this.gammazero); + const angleY = event.beta - (this.settings.gyroscopeMinAngleY + this.betazero); + + const posX = angleX / degreesPerPixelX; + const posY = angleY / degreesPerPixelY; + + if (this.updateCall !== null) { + cancelAnimationFrame(this.updateCall); + } + + this.event = { + clientX: posX + this.left, + clientY: posY + this.top, + }; + + this.updateCall = requestAnimationFrame(this.updateBind); + } + + onMouseEnter() { + this.updateElementPosition(); + this.element.style.willChange = "transform"; + this.setTransition(); + } + + onMouseMove(event) { + if (this.updateCall !== null) { + cancelAnimationFrame(this.updateCall); + } + + this.event = event; + this.updateCall = requestAnimationFrame(this.updateBind); + } + + onMouseLeave() { + this.setTransition(); + + if (this.settings.reset) { + requestAnimationFrame(this.resetBind); + } + } + + reset() { + this.onMouseEnter(); + + if (this.fullPageListening) { + this.event = { + clientX: (this.settings.startX + this.settings.max) / (2 * this.settings.max) * this.clientWidth, + clientY: (this.settings.startY + this.settings.max) / (2 * this.settings.max) * this.clientHeight + }; + } else { + this.event = { + clientX: this.left + ((this.settings.startX + this.settings.max) / (2 * this.settings.max) * this.width), + clientY: this.top + ((this.settings.startY + this.settings.max) / (2 * this.settings.max) * this.height) + }; + } + + let backupScale = this.settings.scale; + this.settings.scale = 1; + this.update(); + this.settings.scale = backupScale; + this.resetGlare(); + } + + resetGlare() { + if (this.glare) { + this.glareElement.style.transform = "rotate(180deg) translate(-50%, -50%)"; + this.glareElement.style.opacity = "0"; + } + } + + getValues() { + let x, y; + + if (this.fullPageListening) { + x = this.event.clientX / this.clientWidth; + y = this.event.clientY / this.clientHeight; + } else { + x = (this.event.clientX - this.left) / this.width; + y = (this.event.clientY - this.top) / this.height; + } + + x = Math.min(Math.max(x, 0), 1); + y = Math.min(Math.max(y, 0), 1); + + let tiltX = (this.reverse * (this.settings.max - x * this.settings.max * 2)).toFixed(2); + let tiltY = (this.reverse * (y * this.settings.max * 2 - this.settings.max)).toFixed(2); + let angle = Math.atan2(this.event.clientX - (this.left + this.width / 2), -(this.event.clientY - (this.top + this.height / 2))) * (180 / Math.PI); + + return { + tiltX: tiltX, + tiltY: tiltY, + percentageX: x * 100, + percentageY: y * 100, + angle: angle + }; + } + + updateElementPosition() { + let rect = this.element.getBoundingClientRect(); + + this.width = this.element.offsetWidth; + this.height = this.element.offsetHeight; + this.left = rect.left; + this.top = rect.top; + } + + update() { + let values = this.getValues(); + + this.element.style.transform = "perspective(" + this.settings.perspective + "px) " + + "rotateX(" + (this.settings.axis === "x" ? 0 : values.tiltY) + "deg) " + + "rotateY(" + (this.settings.axis === "y" ? 0 : values.tiltX) + "deg) " + + "scale3d(" + this.settings.scale + ", " + this.settings.scale + ", " + this.settings.scale + ")"; + + if (this.glare) { + this.glareElement.style.transform = `rotate(${values.angle}deg) translate(-50%, -50%)`; + this.glareElement.style.opacity = `${values.percentageY * this.settings["max-glare"] / 100}`; + } + + this.element.dispatchEvent(new CustomEvent("tiltChange", { + "detail": values + })); + + this.updateCall = null; + } + + /** + * Appends the glare element (if glarePrerender equals false) + * and sets the default style + */ + prepareGlare() { + // If option pre-render is enabled we assume all html/css is present for an optimal glare effect. + if (!this.glarePrerender) { + // Create glare element + const jsTiltGlare = document.createElement("div"); + jsTiltGlare.classList.add("js-tilt-glare"); + + const jsTiltGlareInner = document.createElement("div"); + jsTiltGlareInner.classList.add("js-tilt-glare-inner"); + + jsTiltGlare.appendChild(jsTiltGlareInner); + this.element.appendChild(jsTiltGlare); + } + + this.glareElementWrapper = this.element.querySelector(".js-tilt-glare"); + this.glareElement = this.element.querySelector(".js-tilt-glare-inner"); + + if (this.glarePrerender) { + return; + } + + Object.assign(this.glareElementWrapper.style, { + "position": "absolute", + "top": "0", + "left": "0", + "width": "100%", + "height": "100%", + "overflow": "hidden", + "pointer-events": "none", + "border-radius": "inherit" + }); + + Object.assign(this.glareElement.style, { + "position": "absolute", + "top": "50%", + "left": "50%", + "pointer-events": "none", + "background-image": `linear-gradient(0deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%)`, + "transform": "rotate(180deg) translate(-50%, -50%)", + "transform-origin": "0% 0%", + "opacity": "0" + }); + + this.updateGlareSize(); + } + + updateGlareSize() { + if (this.glare) { + const glareSize = (this.element.offsetWidth > this.element.offsetHeight ? this.element.offsetWidth : this.element.offsetHeight) * 2; + + Object.assign(this.glareElement.style, { + "width": `${glareSize}px`, + "height": `${glareSize}px`, + }); + } + } + + updateClientSize() { + this.clientWidth = window.innerWidth + || document.documentElement.clientWidth + || document.body.clientWidth; + + this.clientHeight = window.innerHeight + || document.documentElement.clientHeight + || document.body.clientHeight; + } + + onWindowResize() { + this.updateGlareSize(); + this.updateClientSize(); + } + + setTransition() { + clearTimeout(this.transitionTimeout); + this.element.style.transition = this.settings.speed + "ms " + this.settings.easing; + if (this.glare) this.glareElement.style.transition = `opacity ${this.settings.speed}ms ${this.settings.easing}`; + + this.transitionTimeout = setTimeout(() => { + this.element.style.transition = ""; + if (this.glare) { + this.glareElement.style.transition = ""; + } + }, this.settings.speed); + + } + + /** + * Method return patched settings of instance + * @param {boolean} settings.reverse - reverse the tilt direction + * @param {number} settings.max - max tilt rotation (degrees) + * @param {startX} settings.startX - the starting tilt on the X axis, in degrees. Default: 0 + * @param {startY} settings.startY - the starting tilt on the Y axis, in degrees. Default: 0 + * @param {number} settings.perspective - Transform perspective, the lower the more extreme the tilt gets + * @param {string} settings.easing - Easing on enter/exit + * @param {number} settings.scale - 2 = 200%, 1.5 = 150%, etc.. + * @param {number} settings.speed - Speed of the enter/exit transition + * @param {boolean} settings.transition - Set a transition on enter/exit + * @param {string|null} settings.axis - What axis should be enabled. Can be "x" or "y" + * @param {boolean} settings.glare - if it should have a "glare" effect + * @param {number} settings.max-glare - the maximum "glare" opacity (1 = 100%, 0.5 = 50%) + * @param {boolean} settings.glare-prerender - false = VanillaTilt creates the glare elements for you, otherwise + * @param {boolean} settings.full-page-listening - If true, parallax effect will listen to mouse move events on the whole document, not only the selected element + * @param {string|object} settings.mouse-event-element - String selector or link to HTML-element what will be listen mouse events + * @param {boolean} settings.reset - false = If the tilt effect has to be reset on exit + * @param {boolean} settings.reset-to-start - true = On reset event (mouse leave) will return to initial start angle (if startX or startY is set) + * @param {gyroscope} settings.gyroscope - Enable tilting by deviceorientation events + * @param {gyroscopeSensitivity} settings.gyroscopeSensitivity - Between 0 and 1 - The angle at which max tilt position is reached. 1 = 90deg, 0.5 = 45deg, etc.. + * @param {gyroscopeSamples} settings.gyroscopeSamples - How many gyroscope moves to decide the starting position. + */ + extendSettings(settings) { + let defaultSettings = { + reverse: false, + max: 15, + startX: 0, + startY: 0, + perspective: 1000, + easing: "cubic-bezier(.03,.98,.52,.99)", + scale: 1, + speed: 300, + transition: true, + axis: null, + glare: false, + "max-glare": 1, + "glare-prerender": false, + "full-page-listening": false, + "mouse-event-element": null, + reset: true, + "reset-to-start": true, + gyroscope: true, + gyroscopeMinAngleX: -45, + gyroscopeMaxAngleX: 45, + gyroscopeMinAngleY: -45, + gyroscopeMaxAngleY: 45, + gyroscopeSamples: 10 + }; + + let newSettings = {}; + for (var property in defaultSettings) { + if (property in settings) { + newSettings[property] = settings[property]; + } else if (this.element.hasAttribute("data-tilt-" + property)) { + let attribute = this.element.getAttribute("data-tilt-" + property); + try { + newSettings[property] = JSON.parse(attribute); + } catch (e) { + newSettings[property] = attribute; + } + + } else { + newSettings[property] = defaultSettings[property]; + } + } + + return newSettings; + } + + static init(elements, settings) { + if (elements instanceof Node) { + elements = [elements]; + } + + if (elements instanceof NodeList) { + elements = [].slice.call(elements); + } + + if (!(elements instanceof Array)) { + return; + } + + elements.forEach((element) => { + if (!("vanillaTilt" in element)) { + element.vanillaTilt = new VanillaTilt(element, settings); + } + }); + } + } + + if (typeof document !== "undefined") { + /* expose the class to window */ + window.VanillaTilt = VanillaTilt; + + /** + * Auto load + */ + VanillaTilt.init(document.querySelectorAll("[data-tilt]")); + } + + return VanillaTilt; + + }()); \ No newline at end of file diff --git a/htdocs/assets/style.css b/htdocs/assets/style.css new file mode 100644 index 0000000..3c572b2 --- /dev/null +++ b/htdocs/assets/style.css @@ -0,0 +1,1544 @@ +/* +! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: currentColor; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.static { + position: static; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.bottom-0 { + bottom: 0px; +} + +.bottom-\[-10rem\] { + bottom: -10rem; +} + +.bottom-\[5\.5rem\] { + bottom: 5.5rem; +} + +.left-0 { + left: 0px; +} + +.left-2 { + left: 0.5rem; +} + +.left-\[2\.5rem\] { + left: 2.5rem; +} + +.left-\[3\.2rem\] { + left: 3.2rem; +} + +.right-0 { + right: 0px; +} + +.right-\[3\.3rem\] { + right: 3.3rem; +} + +.right-\[3rem\] { + right: 3rem; +} + +.top-0 { + top: 0px; +} + +.top-\[-2\.5rem\] { + top: -2.5rem; +} + +.top-\[10rem\] { + top: 10rem; +} + +.top-\[20\.5rem\] { + top: 20.5rem; +} + +.top-\[4\.7rem\] { + top: 4.7rem; +} + +.z-10 { + z-index: 10; +} + +.z-20 { + z-index: 20; +} + +.z-50 { + z-index: 50; +} + +.z-\[100\] { + z-index: 100; +} + +.mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} + +.mx-3 { + margin-left: 0.75rem; + margin-right: 0.75rem; +} + +.mx-5 { + margin-left: 1.25rem; + margin-right: 1.25rem; +} + +.mx-6 { + margin-left: 1.5rem; + margin-right: 1.5rem; +} + +.my-1 { + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} + +.my-3 { + margin-top: 0.75rem; + margin-bottom: 0.75rem; +} + +.my-7 { + margin-top: 1.75rem; + margin-bottom: 1.75rem; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-10 { + margin-bottom: 2.5rem; +} + +.mb-12 { + margin-bottom: 3rem; +} + +.mb-20 { + margin-bottom: 5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mb-5 { + margin-bottom: 1.25rem; +} + +.mb-6 { + margin-bottom: 1.5rem; +} + +.mb-7 { + margin-bottom: 1.75rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + +.mb-\[12rem\] { + margin-bottom: 12rem; +} + +.mb-\[2rem\] { + margin-bottom: 2rem; +} + +.ml-2 { + margin-left: 0.5rem; +} + +.ml-5 { + margin-left: 1.25rem; +} + +.ml-6 { + margin-left: 1.5rem; +} + +.ml-8 { + margin-left: 2rem; +} + +.ml-\[0\.59rem\] { + margin-left: 0.59rem; +} + +.mr-3 { + margin-right: 0.75rem; +} + +.mr-4 { + margin-right: 1rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-10 { + margin-top: 2.5rem; +} + +.mt-12 { + margin-top: 3rem; +} + +.mt-16 { + margin-top: 4rem; +} + +.mt-3 { + margin-top: 0.75rem; +} + +.mt-5 { + margin-top: 1.25rem; +} + +.mt-7 { + margin-top: 1.75rem; +} + +.mt-\[10rem\] { + margin-top: 10rem; +} + +.mt-\[2\.2rem\] { + margin-top: 2.2rem; +} + +.flex { + display: flex; +} + +.hidden { + display: none; +} + +.h-20 { + height: 5rem; +} + +.h-\[200px\] { + height: 200px; +} + +.h-\[2px\] { + height: 2px; +} + +.h-\[30px\] { + height: 30px; +} + +.h-\[35px\] { + height: 35px; +} + +.h-\[40px\] { + height: 40px; +} + +.h-\[50px\] { + height: 50px; +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.w-0 { + width: 0px; +} + +.w-\[200px\] { + width: 200px; +} + +.w-\[250px\] { + width: 250px; +} + +.w-\[300px\] { + width: 300px; +} + +.w-\[30px\] { + width: 30px; +} + +.w-\[35px\] { + width: 35px; +} + +.w-\[40px\] { + width: 40px; +} + +.w-\[50\%\] { + width: 50%; +} + +.w-\[50px\] { + width: 50px; +} + +.w-\[70\%\] { + width: 70%; +} + +.w-\[70px\] { + width: 70px; +} + +.w-\[90px\] { + width: 90px; +} + +.w-fit { + width: -moz-fit-content; + width: fit-content; +} + +.w-full { + width: 100%; +} + +.w-screen { + width: 100vw; +} + +.rotate-\[15deg\] { + --tw-rotate: 15deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.animate-spin { + animation: spin 1s linear infinite; +} + +.cursor-pointer { + cursor: pointer; +} + +.resize { + resize: both; +} + +.flex-col { + flex-direction: column; +} + +.flex-col-reverse { + flex-direction: column-reverse; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.items-start { + align-items: flex-start; +} + +.items-center { + align-items: center; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +.overflow-hidden { + overflow: hidden; +} + +.whitespace-nowrap { + white-space: nowrap; +} + +.rounded-\[50\%\] { + border-radius: 50%; +} + +.rounded-full { + border-radius: 9999px; +} + +.rounded-lg { + border-radius: 0.5rem; +} + +.border-\[2px\] { + border-width: 2px; +} + +.border-\[5px\] { + border-width: 5px; +} + +.border-b-\[2px\] { + border-bottom-width: 2px; +} + +.border-l-\[1px\] { + border-left-width: 1px; +} + +.border-t-\[5px\] { + border-top-width: 5px; +} + +.border-accent_primary { + --tw-border-opacity: 1; + border-color: rgb(56 189 248 / var(--tw-border-opacity)); +} + +.border-accent_primary_transparent { + border-color: rgba(56, 189, 248, 0.30); +} + +.border-accent_secondary_transparent { + border-color: rgba(255, 255, 255, 0.30); +} + +.border-t-accent_primary { + --tw-border-opacity: 1; + border-top-color: rgb(56 189 248 / var(--tw-border-opacity)); +} + +.bg-accent_primary { + --tw-bg-opacity: 1; + background-color: rgb(56 189 248 / var(--tw-bg-opacity)); +} + +.bg-bg_primary { + --tw-bg-opacity: 1; + background-color: rgb(15 23 42 / var(--tw-bg-opacity)); +} + +.bg-bg_secondary { + --tw-bg-opacity: 1; + background-color: rgb(30 41 59 / var(--tw-bg-opacity)); +} + +.p-10 { + padding: 2.5rem; +} + +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.px-5 { + padding-left: 1.25rem; + padding-right: 1.25rem; +} + +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.px-7 { + padding-left: 1.75rem; + padding-right: 1.75rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-5 { + padding-top: 1.25rem; + padding-bottom: 1.25rem; +} + +.py-\[0\.30rem\] { + padding-top: 0.30rem; + padding-bottom: 0.30rem; +} + +.font-cormorant { + font-family: "Cormorant Upright", serif; +} + +.font-lexend { + font-family: "Lexend Deca", sans-serif; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.font-bold { + font-weight: 700; +} + +.text-accent_four { + --tw-text-opacity: 1; + color: rgb(172 203 222 / var(--tw-text-opacity)); +} + +.text-accent_primary { + --tw-text-opacity: 1; + color: rgb(56 189 248 / var(--tw-text-opacity)); +} + +.text-accent_secondary { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.text-accent_three { + --tw-text-opacity: 1; + color: rgb(217 217 217 / var(--tw-text-opacity)); +} + +.text-bg_primary { + --tw-text-opacity: 1; + color: rgb(15 23 42 / var(--tw-text-opacity)); +} + +.opacity-20 { + opacity: 0.2; +} + +.opacity-50 { + opacity: 0.5; +} + +.shadow-\[0px_0px_100px_10px\] { + --tw-shadow: 0px 0px 100px 10px; + --tw-shadow-colored: 0px 0px 100px 10px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0px_0px_120px_10px\] { + --tw-shadow: 0px 0px 120px 10px; + --tw-shadow-colored: 0px 0px 120px 10px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0px_0px_120px_20px\] { + --tw-shadow: 0px 0px 120px 20px; + --tw-shadow-colored: 0px 0px 120px 20px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0px_0px_150px_20px\] { + --tw-shadow: 0px 0px 150px 20px; + --tw-shadow-colored: 0px 0px 150px 20px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0px_0px_200px_30px\] { + --tw-shadow: 0px 0px 200px 30px; + --tw-shadow-colored: 0px 0px 200px 30px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0px_0px_300px_15px\] { + --tw-shadow: 0px 0px 300px 15px; + --tw-shadow-colored: 0px 0px 300px 15px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-accent_primary_transparent { + --tw-shadow-color: rgba(56, 189, 248, 0.30); + --tw-shadow: var(--tw-shadow-colored); +} + +.blur-2xl { + --tw-blur: blur(40px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.blur-3xl { + --tw-blur: blur(64px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-100 { + transition-duration: 100ms; +} + +.duration-300 { + transition-duration: 300ms; +} + +.duration-500 { + transition-duration: 500ms; +} + +.hover\:scale-125:hover { + --tw-scale-x: 1.25; + --tw-scale-y: 1.25; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:rounded-lg:hover { + border-radius: 0.5rem; +} + +.hover\:border-accent_primary:hover { + --tw-border-opacity: 1; + border-color: rgb(56 189 248 / var(--tw-border-opacity)); +} + +.hover\:bg-accent_secondary:hover { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.hover\:text-accent_secondary:hover { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.hover\:shadow-lg:hover { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.hover\:shadow-accent_primary_transparent:hover { + --tw-shadow-color: rgba(56, 189, 248, 0.30); + --tw-shadow: var(--tw-shadow-colored); +} + +.hover\:shadow-accent_secondary_transparent:hover { + --tw-shadow-color: rgba(255, 255, 255, 0.30); + --tw-shadow: var(--tw-shadow-colored); +} + +.group:hover .group-hover\:w-full { + width: 100%; +} + +@media (min-width: 1024px) { + .lg\:bottom-\[-6rem\] { + bottom: -6rem; + } + + .lg\:bottom-\[9\.5rem\] { + bottom: 9.5rem; + } + + .lg\:left-8 { + left: 2rem; + } + + .lg\:left-\[4\.7rem\] { + left: 4.7rem; + } + + .lg\:left-auto { + left: auto; + } + + .lg\:right-\[-7rem\] { + right: -7rem; + } + + .lg\:right-\[27rem\] { + right: 27rem; + } + + .lg\:right-\[3\.5rem\] { + right: 3.5rem; + } + + .lg\:right-\[5\.5rem\] { + right: 5.5rem; + } + + .lg\:top-\[-3\.7rem\] { + top: -3.7rem; + } + + .lg\:top-\[13rem\] { + top: 13rem; + } + + .lg\:top-\[27rem\] { + top: 27rem; + } + + .lg\:top-\[8\.2rem\] { + top: 8.2rem; + } + + .lg\:my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + } + + .lg\:my-6 { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + } + + .lg\:mb-0 { + margin-bottom: 0px; + } + + .lg\:mb-1 { + margin-bottom: 0.25rem; + } + + .lg\:mb-16 { + margin-bottom: 4rem; + } + + .lg\:mb-2 { + margin-bottom: 0.5rem; + } + + .lg\:mb-3 { + margin-bottom: 0.75rem; + } + + .lg\:ml-4 { + margin-left: 1rem; + } + + .lg\:mr-10 { + margin-right: 2.5rem; + } + + .lg\:mr-\[6\.5rem\] { + margin-right: 6.5rem; + } + + .lg\:mt-0 { + margin-top: 0px; + } + + .lg\:mt-1 { + margin-top: 0.25rem; + } + + .lg\:mt-16 { + margin-top: 4rem; + } + + .lg\:mt-2 { + margin-top: 0.5rem; + } + + .lg\:mt-\[2\.5rem\] { + margin-top: 2.5rem; + } + + .lg\:mt-\[7rem\] { + margin-top: 7rem; + } + + .lg\:block { + display: block; + } + + .lg\:flex { + display: flex; + } + + .lg\:hidden { + display: none; + } + + .lg\:h-\[230px\] { + height: 230px; + } + + .lg\:w-\[100px\] { + width: 100px; + } + + .lg\:w-\[120px\] { + width: 120px; + } + + .lg\:w-\[230px\] { + width: 230px; + } + + .lg\:w-\[25\%\] { + width: 25%; + } + + .lg\:w-\[330px\] { + width: 330px; + } + + .lg\:w-\[350px\] { + width: 350px; + } + + .lg\:rotate-0 { + --tw-rotate: 0deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + } + + .lg\:flex-row { + flex-direction: row; + } + + .lg\:flex-nowrap { + flex-wrap: nowrap; + } + + .lg\:justify-end { + justify-content: flex-end; + } + + .lg\:justify-between { + justify-content: space-between; + } + + .lg\:whitespace-nowrap { + white-space: nowrap; + } + + .lg\:px-0 { + padding-left: 0px; + padding-right: 0px; + } + + .lg\:px-\[3\.5rem\] { + padding-left: 3.5rem; + padding-right: 3.5rem; + } + + .lg\:px-\[4\.5rem\] { + padding-left: 4.5rem; + padding-right: 4.5rem; + } + + .lg\:py-9 { + padding-top: 2.25rem; + padding-bottom: 2.25rem; + } + + .lg\:text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; + } + + .lg\:text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; + } + + .lg\:text-6xl { + font-size: 3.75rem; + line-height: 1; + } + + .lg\:text-xl { + font-size: 1.25rem; + line-height: 1.75rem; + } + + .lg\:blur-lg { + --tw-blur: blur(16px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + } +} + +@media (min-width: 1536px) { + .\32xl\:bottom-\[9rem\] { + bottom: 9rem; + } + + .\32xl\:left-\[5\.3rem\] { + left: 5.3rem; + } + + .\32xl\:right-\[-13rem\] { + right: -13rem; + } + + .\32xl\:right-\[27rem\] { + right: 27rem; + } + + .\32xl\:right-\[4rem\] { + right: 4rem; + } + + .\32xl\:right-\[5\.5rem\] { + right: 5.5rem; + } + + .\32xl\:top-\[15rem\] { + top: 15rem; + } + + .\32xl\:top-\[28\.5rem\] { + top: 28.5rem; + } + + .\32xl\:top-\[7rem\] { + top: 7rem; + } + + .\32xl\:mb-10 { + margin-bottom: 2.5rem; + } + + .\32xl\:mt-16 { + margin-top: 4rem; + } + + .\32xl\:mt-24 { + margin-top: 6rem; + } +} \ No newline at end of file diff --git a/htdocs/blog.php b/htdocs/blog.php new file mode 100644 index 0000000..2e38aad --- /dev/null +++ b/htdocs/blog.php @@ -0,0 +1,17 @@ + + + + + + + My Blog - @neo_subhamoy + + + + +
+ +
+ + + \ No newline at end of file diff --git a/htdocs/contact.php b/htdocs/contact.php new file mode 100644 index 0000000..f8f334c --- /dev/null +++ b/htdocs/contact.php @@ -0,0 +1,17 @@ + + + + + + + Contact Me - @neo_subhamoy + + + + +
+ +
+ + + \ No newline at end of file diff --git a/htdocs/index.php b/htdocs/index.php new file mode 100644 index 0000000..2e57ba5 --- /dev/null +++ b/htdocs/index.php @@ -0,0 +1,244 @@ + + + + + + + @neo_subhamoy - official website + + + +
+ +
+
+
+

+

I'm Subhamoy Biswas

+

Full Stacked Web Designer and Android Developer

+

Based on Kolkata, India

+
+ + + + + +
+ +
+
+
+ neosubhamoy +
+
+
+ left-blobs +
+
+ right-blobs +
+
+
+
+
+

About Me

+

Hey there! I'm Subhamoy, an 18-year-old tech enthusiast, Self-taught Full Stacked Web, Android Developer and UI/UX Designer. Crafting modern Websites and Android apps for more than 5 years. Delivering industry grade user experiences that are not only visually stunning but also intuitive. Coding is my passion, and I pour my heart and soul into every line of code I write and every pixel I place. The digital realm is my canvas, and I'm determined to leave a lasting impact. So, get ready to witness the extraordinary, redefined future of technology with me

+
+

My Skills and Expertise

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

On a mission to!

+

make the web more interesting.

+
Wanna join the journey with me?  
email to: admin@neosubhamoy.xyz
+
+ patterns +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/htdocs/projects.php b/htdocs/projects.php new file mode 100644 index 0000000..92dae10 --- /dev/null +++ b/htdocs/projects.php @@ -0,0 +1,17 @@ + + + + + + + My Projects - @neo_subhamoy + + + + +
+ +
+ + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..3af6107 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "neosubhamoy", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "tailwindcss -i ./src/input.css -o ./htdocs/assets/style.css --watch" + }, + "keywords": [], + "author": "neo_subhamoy", + "license": "ISC", + "devDependencies": { + "tailwindcss": "^3.3.2" + } +} diff --git a/src/input.css b/src/input.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/src/input.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..858f638 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,24 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./htdocs/**/*.{php,html,js}"], + theme: { + fontFamily: { + 'poppins': ['"Poppins"', 'sans-serif'], + 'lexend': ['"Lexend Deca"', 'sans-serif'], + 'cormorant': ['"Cormorant Upright"', 'serif'] + }, + colors: { + bg_primary: '#0F172A', + bg_secondary: '#1E293B', + accent_primary: '#38BDF8', + accent_secondary: '#FFFFFF', + accent_three: '#D9D9D9', + accent_four: '#ACCBDE', + accent_primary_transparent: 'rgba(56, 189, 248, 0.30)', + accent_secondary_transparent: 'rgba(255, 255, 255, 0.30)' + }, + extend: {}, + }, + plugins: [], +} +