UNPKG

threed-garden

Version:

ThreeD Garden: WebGL 3D Environment Interface for Next.JS React TypeScript Three.JS React-Three Physics, 2D Paper.JS; APIs: Apollo GraphQL, WordPress; CSS: Tailwind, Radix-UI; Libraries: FarmBot 3D; AI: OpenAI, DeepSeek

443 lines (388 loc) 8.46 kB
/* body { margin: 0; } */ .garden-bed-3d-model { height: 100vh; width: 100vw; position: relative; cursor: grab; &:active { cursor: grabbing; } } .gear { position: absolute; top: 1rem; right: 1rem; width: 1rem; cursor: pointer; background: rgba(255, 255, 255, 0.4); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 5px; padding: 7px; border-radius: 5px; backdrop-filter: blur(5px); opacity: 0; &:hover { opacity: 1; } } .overlay { position: absolute; bottom: 0; left: 0; right: 0; top: 0; pointer-events: none; user-select: none; .settings-bar { display: flex; justify-content: center; bottom: 0; left: 0; right: 0; position: absolute; gap: 1.25rem; padding: 1rem; overflow-x: scroll; background: linear-gradient(0deg, rgba(0, 0, 0, 0.5), transparent); @media screen and (max-width: 768px) { justify-content: left; pointer-events: all; } .setting-section { pointer-events: all; } .setting-title { color: #f4f4f4; font-family: 'Inknut Antiqua'; text-shadow: 0 0 10px black; line-height: 1.8rem; text-align: center; } .row { background: rgba(255, 255, 255, 0.6); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 10px; border-radius: 25px; height: 40px; padding: 5px; display: flex; justify-content: space-evenly; backdrop-filter: blur(5px); gap: 5px; } button { padding: 0 1rem; border-radius: 25px; font-family: 'Cabin'; font-weight: bold; border: none; background: none; white-space: nowrap; color: #222; &.outdoor.active, &.lab.active, &.genesis.active, &.standard.active, &.mobile.active { background: rgba(255, 255, 255, 0.6); } &.genesis-xl.active { background: linear-gradient(315deg, #22a36d, #4ea3ed); color: #f4f4f4; } &.winter.active { background: linear-gradient(-15deg, #152e40, #3e8dc2); color: #f4f4f4; } &.spring.active { background: linear-gradient(15deg, #055b08, #49cc78); color: #f4f4f4; } &.summer.active { background: linear-gradient(-15deg, #d87f09, #f5e40a); } &.fall.active { background: linear-gradient(15deg, #502402, #c69075); color: #f4f4f4 } &:hover { cursor: pointer; background: rgba(255, 255, 255, 0.3); } &.disabled { color: gray; &:hover { cursor: not-allowed; background: none; } } } } } .tool-tip { position: absolute; bottom: 6.5rem; left: 0; right: 0; width: fit-content; margin: auto; color: #f4f4f4; font-family: 'Cabin', Arial; background: rgba(120, 0, 0, 0.65); padding: 0.75rem 1rem; border-radius: 5px; text-align: center; pointer-events: none; backdrop-filter: blur(5px); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 5px; @media screen and (max-width: 768px) { margin: 0 1rem; } } .all-configs { position: absolute; top: 1rem; right: 1rem; width: 22rem; background: #434343; text-align: left; padding: 1rem; font-family: 'Cabin', Arial; border-radius: 5px; max-height: 30rem; overflow-y: scroll; .close { position: absolute; top: 0.5rem; right: 1rem; cursor: pointer; font-size: 1rem; margin: 0; padding: 0.5rem 0.75rem; background: none; border-radius: 5px; &:hover { background: #555; } } .spacer { margin-top: 1rem; } details { color: #f4f4f4; label { font-weight: bold; } } summary { cursor: pointer; padding: 1rem; margin: -1rem; &:hover { background: #333; } } .config-row { display: grid; grid-template-columns: min-content minmax(30%, 200px) auto; margin-bottom: 0.25rem; span { width: 8rem; padding-left: 1rem; color: #ccc; } input[type="checkbox"] { width: 1.1rem; height: 1.1rem; justify-self: left; cursor: pointer; } input[type="number"] { width: 100%; max-width: 4rem; } input[type="radio"] { width: 1.1rem; height: 1.1rem; cursor: pointer; } .options { width: 100%; justify-content: space-between; } input[type="range"] { width: 8rem; margin-left: -2rem; cursor: pointer; } } } .promo-info { color: #f4f4f4; text-align: right; position: absolute; top: 3rem; right: 4rem; pointer-events: none; text-shadow: 0 0 3.5rem black, 0 0 1rem black; display: grid; gap: 1rem; justify-items: right; .title { font-family: 'Inknut Antiqua'; font-size: 3.5rem; line-height: 5rem; margin: 0; } .description { font-family: 'Cabin'; font-weight: normal; font-size: 1.25rem; max-width: 40vw; margin: 0; line-height: 1.7rem; .short { display: none; } .full { display: inline; } } .buy-button { pointer-events: all; background: #00a579e0; border-radius: 7px; box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 10px; backdrop-filter: blur(5px); font-size: 1.5rem; line-height: 4rem; padding: 0 1.75rem; text-shadow: none; font-family: 'Cabin'; text-transform: uppercase; text-decoration: none; color: #f4f4f4; display: flex; gap: 0.4rem; align-items: center; p { margin: 0; } .genesis-xl { background: linear-gradient(315deg, #22a36d, #4ea3ed); box-shadow: 0 0 8px rgba(0, 0, 0, 0.25); color: #f4f4f4; border-radius: 50%; height: 2.5rem; width: 2.5rem; line-height: 2.5rem; text-align: center; font-size: 80%; vertical-align: middle; } &:hover { background: #00bb89e5; } } } .beacon-info { width: 500px; font-size: 20px; background: white; background: rgba(255, 255, 255, 0.8); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 10px; border-radius: 10px; padding: 25px; backdrop-filter: blur(5px); text-align: left; user-select: none; p { font-family: 'Cabin'; margin-bottom: 0; } iframe { margin-top: 20px; width: 100%; height: auto; border-radius: 5px; aspect-ratio: 16 / 9; } .header { display: flex; justify-content: space-between; h2 { font-family: 'Inknut Antiqua'; margin: 0; line-height: 100%; } .exit-button { width: 30px; height: 30px; aspect-ratio: 1 / 1; border-radius: 50%; filter: grayscale(100%); font-size: 12px; line-height: 30px; text-align: center; background: rgba(255, 255, 255, 0.4); box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 10px; &:hover { cursor: pointer; background: rgba(255, 255, 255, 0.6); } } } } @media screen and (max-width: 768px) { .beacon-info-wrapper { position: absolute; bottom: 0; left: 0; right: 0; display: grid; align-items: end; transform: none!important; * { transform: none!important; } .beacon-info { width: initial; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; overflow: scroll; height: 25vh; font-size: 100%; } } .promo-info { top: 1rem; right: 1rem; gap: 0.5rem; .title { font-size: 1.5rem; line-height: 2rem; } .description { font-size: 1rem; max-width: 80vw; line-height: 1.5rem; .short { display: inline; } .full { display: none; } } .buy-button { font-size: 0.85rem; line-height: 2.2rem; padding: 0 0.75rem; border-radius: 5px; .genesis-xl { height: 1.5rem; width: 1.5rem; line-height: 1.5rem; } } } }