Compare commits
3 Commits
7c7060b56d
...
28c4e08bb6
| Author | SHA1 | Date | |
|---|---|---|---|
| 28c4e08bb6 | |||
| d522489e7f | |||
| 1eff7c6227 |
34
.gitea/workflows/docker.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Build and Push Docker Image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to Gitea Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ vars.REGISTRY_URL }}
|
||||
username: ${{ secrets.REGISTRY_USERNAME }}
|
||||
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
|
||||
- name: Build and Push
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
tags: ${{ vars.REGISTRY_URL }}/${{ github.repository_owner }}/santeh-ray:latest
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
15
Dockerfile
Normal file
@@ -0,0 +1,15 @@
|
||||
FROM python:3.11-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
ENV HOST=0.0.0.0
|
||||
ENV PORT=8000
|
||||
|
||||
EXPOSE ${PORT}
|
||||
|
||||
CMD uvicorn santehray.asgi:application --host ${HOST} --port ${PORT}
|
||||
0
home/__init__.py
Normal file
3
home/admin.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
5
home/apps.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class HomeConfig(AppConfig):
|
||||
name = 'home'
|
||||
0
home/migrations/__init__.py
Normal file
3
home/models.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
3
home/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
10
home/urls.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.index, name='home'),
|
||||
path('services/', views.services, name='services'),
|
||||
path('shipping/', views.shipping, name='shipping'),
|
||||
path('warranty/', views.warranty, name='warranty'),
|
||||
path('contacts/', views.contacts, name='contacts'),
|
||||
]
|
||||
21
home/views.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
|
||||
def index(request):
|
||||
return render(request=request, template_name='home/index.html', context={})
|
||||
|
||||
|
||||
def services(request):
|
||||
return render(request=request, template_name='home/services.html', context={})
|
||||
|
||||
|
||||
def shipping(request):
|
||||
return render(request=request, template_name='home/shipping.html', context={})
|
||||
|
||||
|
||||
def warranty(request):
|
||||
return render(request=request, template_name='home/warranty.html', context={})
|
||||
|
||||
|
||||
def contacts(request):
|
||||
return render(request=request, template_name='home/contacts.html', context={})
|
||||
3
items/urls.py
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
|
||||
urlpatterns = []
|
||||
3
orders/urls.py
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
|
||||
urlpatterns = []
|
||||
@@ -15,7 +15,6 @@ from pathlib import Path
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/
|
||||
|
||||
@@ -27,7 +26,6 @@ DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
@@ -54,7 +52,9 @@ ROOT_URLCONF = 'santehray.urls'
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'DIRS': [
|
||||
BASE_DIR / 'templates',
|
||||
],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
@@ -62,13 +62,13 @@ TEMPLATES = [
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
],
|
||||
'debug': DEBUG
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'santehray.wsgi.application'
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/5.2/ref/settings/#databases
|
||||
|
||||
@@ -79,7 +79,6 @@ DATABASES = {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators
|
||||
|
||||
@@ -98,7 +97,6 @@ AUTH_PASSWORD_VALIDATORS = [
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/5.2/topics/i18n/
|
||||
|
||||
@@ -109,12 +107,16 @@ USE_I18N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/5.2/howto/static-files/
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
|
||||
# Additional locations of static files
|
||||
STATICFILES_DIRS = [
|
||||
BASE_DIR / 'static',
|
||||
]
|
||||
|
||||
# Default primary key field type
|
||||
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
|
||||
|
||||
|
||||
@@ -15,8 +15,12 @@ Including another URLconf
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from django.urls import path, include
|
||||
|
||||
urlpatterns = [
|
||||
path('', include('home.urls')),
|
||||
path('catalog/', include('items.urls')),
|
||||
path('orders/', include('orders.urls')),
|
||||
path('users/', include('users.urls')),
|
||||
path('admin/', admin.site.urls),
|
||||
]
|
||||
616
static/css/index.css
Normal file
@@ -0,0 +1,616 @@
|
||||
/* HERO */
|
||||
|
||||
.hero {
|
||||
margin-top: 50px;
|
||||
background-image: url(../img/hero.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: calc(50% - 350px) center;
|
||||
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
.hero-content {
|
||||
width: 580px;
|
||||
height: 400px;
|
||||
margin-top: 80px;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 50px;
|
||||
line-height: 60px;
|
||||
letter-spacing: 0.05em;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.hero-subtitle-container {
|
||||
margin-top: 25px;
|
||||
display: flex;
|
||||
align-content: center;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.hero-subtitle {
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
line-height: 20px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.hero-checkmark {
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.hero-button-container {
|
||||
margin-top: 30px;
|
||||
margin-left: 45px;
|
||||
}
|
||||
|
||||
.hero-button {
|
||||
display: inline-block;
|
||||
background: #63768d;
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 28px;
|
||||
line-height: 34px;
|
||||
text-align: left;
|
||||
color: #ffffff;
|
||||
padding: 20px 50px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* -- ADVANTAGES -- */
|
||||
.advantages {
|
||||
margin-top: 100px;
|
||||
}
|
||||
|
||||
.advantages-list {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.advantages-title {
|
||||
width: 300px;
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 44px;
|
||||
line-height: 1.4;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.advantages-item {
|
||||
width: 250px;
|
||||
height: 150px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.advantages-item-number {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
border-radius: 100%;
|
||||
background: #63768d;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
/* Number in circle */
|
||||
color: white;
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 30px;
|
||||
line-height: 36px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.advantages-item-title {
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
line-height: 22px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
|
||||
margin-top: 18px;
|
||||
}
|
||||
|
||||
.advantages-item-subtitle {
|
||||
margin-top: 7px;
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
line-height: 1.2;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.advantages-cards {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 120px;
|
||||
}
|
||||
|
||||
.advantages-card {
|
||||
width: 560px;
|
||||
height: 300px;
|
||||
background: #63768d;
|
||||
}
|
||||
|
||||
.advantages-card-content {
|
||||
margin: 40px 25px;
|
||||
}
|
||||
|
||||
.advantages-card-left {
|
||||
background-image: url(../img/sanitary-equipment-promo.jpg);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 101%;
|
||||
background-position-x: 2384%;
|
||||
background-position-y: -2%;
|
||||
}
|
||||
|
||||
.advantages-card-right {
|
||||
background-image: url(../img/decor-promo.jpg);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 66%;
|
||||
background-position-x: 126%;
|
||||
background-position-y: 17%;
|
||||
}
|
||||
|
||||
.advantages-card-splash {
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
line-height: 22px;
|
||||
|
||||
color: #b8f3ff;
|
||||
}
|
||||
|
||||
.advantages-card-title {
|
||||
margin-top: 20px;
|
||||
width: 291px;
|
||||
height: 84px;
|
||||
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 32px;
|
||||
line-height: 1.3;
|
||||
|
||||
color: #b8f3ff;
|
||||
}
|
||||
|
||||
.advantages-card-button {
|
||||
display: inline-block;
|
||||
margin-top: 50px;
|
||||
font-family: "Inter", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
text-align: left;
|
||||
text-decoration: underline;
|
||||
|
||||
color: #b8f3ff;
|
||||
}
|
||||
|
||||
|
||||
/* -- ABOUT -- */
|
||||
|
||||
.about-section {
|
||||
margin-top: 100px;
|
||||
}
|
||||
|
||||
.about-title {
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 44px;
|
||||
line-height: 53px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.about-left {
|
||||
background-image: url(../img/stats-image.jpg);
|
||||
height: 320px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: right;
|
||||
background-size: 600px auto;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.about-left-block {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
.about-left-subtitle {
|
||||
width: 495px;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.about-left-suggestion {
|
||||
margin-top: 10px;
|
||||
font-weight: 600;
|
||||
font-size: 24px;
|
||||
line-height: 29px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.about-left-list {
|
||||
max-width: 480px;
|
||||
}
|
||||
|
||||
.about-left-list-item {
|
||||
width: 100%;
|
||||
margin-top: 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.about-left-list-item-number {
|
||||
width: 52px;
|
||||
height: 52px;
|
||||
border-radius: 100%;
|
||||
background: #63768d;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
font-weight: 400;
|
||||
font-size: 32px;
|
||||
line-height: 31px;
|
||||
text-align: left;
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.about-left-list-item-content {
|
||||
width: 400px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.about-left-list-item-content-title {
|
||||
width: 279px;
|
||||
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.about-left-list-item-content-desc {
|
||||
margin-top: 10px;
|
||||
width: 350px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.about-right {
|
||||
background-image: url(../img/about-image.jpg);
|
||||
height: 300px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: left;
|
||||
background-size: 500px auto;
|
||||
margin-top: 20px;
|
||||
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.about-right-block {
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
.about-right-text {
|
||||
width: 569px;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.about-right-stats {
|
||||
margin-top: 40px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.about-right-stats-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.about-right-stats-item-num {
|
||||
font-weight: 400;
|
||||
font-size: 32px;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.about-right-stats-item-label {
|
||||
margin-top: 5px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
|
||||
/* -- KITCHEN BANNER -- */
|
||||
|
||||
.kitchen-banner {
|
||||
margin-top: 225px;
|
||||
height: 410px;
|
||||
background-color: #63768d;
|
||||
|
||||
display: flex;
|
||||
|
||||
background-image: url(../img/kitchen-banner.jpg);
|
||||
background-repeat: no-repeat;
|
||||
background-position: right;
|
||||
background-size: auto 110%;
|
||||
}
|
||||
|
||||
.kitchen-content {
|
||||
margin: 74px 80px;
|
||||
}
|
||||
|
||||
.kitchen-content p {
|
||||
width: 380px;
|
||||
font-weight: 400;
|
||||
font-size: 20px;
|
||||
text-align: left;
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.kitchen-content h2 {
|
||||
width: 480px;
|
||||
margin-top: 20px;
|
||||
font-weight: 400;
|
||||
font-size: 48px;
|
||||
text-align: left;
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.kitchen-content a {
|
||||
display: inline-block;
|
||||
margin-top: 45px;
|
||||
font-weight: 400;
|
||||
font-size: 24px;
|
||||
text-align: left;
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
/* POPULAR PRODUCTS */
|
||||
.products-section {
|
||||
margin-top: 120px;
|
||||
}
|
||||
|
||||
.products-title {
|
||||
font-weight: 400;
|
||||
font-size: 44px;
|
||||
line-height: 53px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.products-grid {
|
||||
margin-top: 40px;
|
||||
display: grid;
|
||||
grid-template-columns: 460px 300px 360px;
|
||||
grid-template-rows: repeat(11, 55px);
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.product {
|
||||
padding: 20px;
|
||||
background: #d9d9d9;
|
||||
}
|
||||
|
||||
.product-1 {
|
||||
grid-column: 1;
|
||||
grid-row: 1 / 7;
|
||||
}
|
||||
|
||||
.product-2 {
|
||||
grid-column: 2;
|
||||
grid-row: 1 / 5;
|
||||
}
|
||||
|
||||
.product-3 {
|
||||
grid-column: 3;
|
||||
grid-row: 1 / 8;
|
||||
}
|
||||
|
||||
.product-4 {
|
||||
grid-column: 1;
|
||||
grid-row: 7 / -1;
|
||||
}
|
||||
|
||||
.product-5 {
|
||||
grid-column: 2;
|
||||
grid-row: 5 / -1;
|
||||
}
|
||||
|
||||
.product-6 {
|
||||
grid-column: 3;
|
||||
grid-row: 8 / -1;
|
||||
}
|
||||
|
||||
.products-footer {
|
||||
display: flex;
|
||||
justify-content: end;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.products-footer a {
|
||||
margin-top: 25px;
|
||||
padding: 22px 46px;
|
||||
display: inline-block;
|
||||
background: #63768d;
|
||||
|
||||
font-weight: 500;
|
||||
font-size: 26px;
|
||||
text-align: left;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
/* -- FAQ -- */
|
||||
|
||||
.faq-section {
|
||||
margin-top: 120px;
|
||||
}
|
||||
|
||||
.faq-section h2 {
|
||||
font-weight: 400;
|
||||
font-size: 44px;
|
||||
line-height: 53px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
.faq-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.faq-item {
|
||||
margin-top: 40px;
|
||||
max-width: 530px;
|
||||
flex: 1 0 50%;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
|
||||
}
|
||||
|
||||
.faq-icon {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 100%;
|
||||
background: #63768d;
|
||||
|
||||
font-weight: 400;
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
text-align: left;
|
||||
|
||||
color: #b8f3ff;
|
||||
}
|
||||
|
||||
.faq-body {
|
||||
width: 470px;
|
||||
margin-top: 10px;
|
||||
|
||||
& > h4 {
|
||||
font-weight: 700;
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
text-align: left;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
|
||||
& > p {
|
||||
margin-top: 16px;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
text-align: left;
|
||||
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
|
||||
.faq-cta {
|
||||
margin-top: 55px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
& > a {
|
||||
padding: 15px 45px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
font-weight: 400;
|
||||
font-size: 26px;
|
||||
line-height: 31px;
|
||||
text-align: left;
|
||||
|
||||
color: #ffffff;
|
||||
|
||||
background: #63768d;
|
||||
|
||||
& > div {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
|
||||
background: #ffffff;
|
||||
|
||||
border-radius: 100%;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
text-align: left;
|
||||
|
||||
margin-right: 5px;
|
||||
|
||||
color: #63768d;
|
||||
}
|
||||
}
|
||||
}
|
||||
36
static/css/login.css
Normal file
@@ -0,0 +1,36 @@
|
||||
.login-form {
|
||||
padding: 25px;
|
||||
border: 1px solid rgba(94, 80, 125, 0.78);
|
||||
|
||||
& > h2 {
|
||||
text-align: center;
|
||||
font-weight: 400;
|
||||
font-size: 44px;
|
||||
|
||||
color: #36213e;
|
||||
}
|
||||
}
|
||||
|
||||
.form-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
line-height: 22px;
|
||||
text-align: left;
|
||||
|
||||
color: #554971;
|
||||
}
|
||||
|
||||
.form-input {
|
||||
background: #d9d9d9;
|
||||
|
||||
border: 1px solid #554971;
|
||||
|
||||
padding: 5px;
|
||||
}
|
||||
350
static/css/normalize.css
vendored
Normal file
@@ -0,0 +1,350 @@
|
||||
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/* Document
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Correct the line height in all browsers.
|
||||
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
||||
*/
|
||||
|
||||
html {
|
||||
line-height: 1.15; /* 1 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/* Sections
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the margin in all browsers.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the `main` element consistently in IE.
|
||||
*/
|
||||
|
||||
main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the font size and margin on `h1` elements within `section` and
|
||||
* `article` contexts in Chrome, Firefox, and Safari.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in Firefox.
|
||||
* 2. Show the overflow in Edge and IE.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box; /* 1 */
|
||||
height: 0; /* 1 */
|
||||
overflow: visible; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background on active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove the bottom border in Chrome 57-
|
||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none; /* 1 */
|
||||
text-decoration: underline; /* 2 */
|
||||
text-decoration: underline dotted; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: monospace, 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;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the border on images inside links in IE 10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Change the font styles in all browsers.
|
||||
* 2. Remove the margin in Firefox and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 1 */
|
||||
line-height: 1.15; /* 1 */
|
||||
margin: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the overflow in IE.
|
||||
* 1. Show the overflow in Edge.
|
||||
*/
|
||||
|
||||
button,
|
||||
input { /* 1 */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||
* 1. Remove the inheritance of text transform in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select { /* 1 */
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the inability to style clickable types in iOS and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
[type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner border and padding in Firefox.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the focus styles unset by the previous rule.
|
||||
*/
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the padding in Firefox.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
padding: 0.35em 0.75em 0.625em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the text wrapping in Edge and IE.
|
||||
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||
* 3. Remove the padding so developers are not caught out when they zero out
|
||||
* `fieldset` elements in all browsers.
|
||||
*/
|
||||
|
||||
legend {
|
||||
box-sizing: border-box; /* 1 */
|
||||
color: inherit; /* 2 */
|
||||
display: table; /* 1 */
|
||||
max-width: 100%; /* 1 */
|
||||
padding: 0; /* 3 */
|
||||
white-space: normal; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the default vertical scrollbar in IE 10+.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in IE 10.
|
||||
* 2. Remove the padding in IE 10.
|
||||
*/
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||
*/
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-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.
|
||||
*/
|
||||
|
||||
[type="search"]::-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 */
|
||||
}
|
||||
|
||||
/* Interactive
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
* Add the correct display in Edge, IE 10+, and Firefox.
|
||||
*/
|
||||
|
||||
details {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the correct display in all browsers.
|
||||
*/
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* Misc
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10+.
|
||||
*/
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10.
|
||||
*/
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
283
static/css/style.css
Normal file
@@ -0,0 +1,283 @@
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
:root {
|
||||
--dark: #36213e;
|
||||
--mid: #554971;
|
||||
--blue-gray: #63768d;
|
||||
--light-blue: #b8f3ff;
|
||||
--white: #ffffff;
|
||||
--bg: white;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Inter', sans-serif;
|
||||
color: var(--dark);
|
||||
background: var(--bg);
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
/* Container to maintain consistent width */
|
||||
.container {
|
||||
max-width: 1160px;
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* --- LIB --- */
|
||||
.flex-right {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: flex-end;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.text-align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.active-page {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.full-page {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.center-wrapper {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* ── HEADER ── */
|
||||
header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
background: var(--bg);
|
||||
border-bottom: 1px solid rgba(54, 33, 62, .08);
|
||||
box-shadow: 0 2px 20px rgba(54, 33, 62, .06);
|
||||
}
|
||||
|
||||
.header-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 12px 80px;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: 32px;
|
||||
color: var(--dark);
|
||||
white-space: nowrap;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.search-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
border: 1px solid var(--dark);
|
||||
flex: 1;
|
||||
max-width: 420px;
|
||||
margin: 0 24px;
|
||||
}
|
||||
|
||||
.search-wrap select {
|
||||
border: none;
|
||||
border-right: 1px solid var(--dark);
|
||||
padding: 10px 14px;
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-size: 13px;
|
||||
color: var(--mid);
|
||||
background: transparent;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.search-wrap input {
|
||||
flex: 1;
|
||||
border: none;
|
||||
padding: 10px 5px 10px 10px;
|
||||
font-size: 12px;
|
||||
color: var(--mid);
|
||||
outline: none;
|
||||
background: transparent;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.search-wrap input::placeholder {
|
||||
color: var(--mid);
|
||||
opacity: .6;
|
||||
}
|
||||
|
||||
.search-wrap button {
|
||||
border: none;
|
||||
background: transparent;
|
||||
padding: 10px 14px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.search-wrap button svg {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.header-icons {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 18px;
|
||||
}
|
||||
|
||||
.header-icons a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
color: var(--dark);
|
||||
transition: opacity .2s;
|
||||
}
|
||||
|
||||
.header-icons a:hover {
|
||||
opacity: .6;
|
||||
}
|
||||
|
||||
.header-icons svg {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
|
||||
.nav-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 10px 80px;
|
||||
gap: 0;
|
||||
border-top: 1px solid rgba(54, 33, 62, .07);
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.nav-bar .catalog-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: 14px;
|
||||
color: var(--mid);
|
||||
margin-right: 32px;
|
||||
cursor: pointer;
|
||||
font-weight: 400;
|
||||
transition: color .2s;
|
||||
}
|
||||
|
||||
.nav-bar .catalog-btn:hover {
|
||||
color: var(--dark);
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 28px;
|
||||
flex: 1;
|
||||
max-width: 430px;
|
||||
}
|
||||
|
||||
.nav-links a {
|
||||
font-size: 14px;
|
||||
color: var(--mid);
|
||||
transition: color .2s;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.nav-links a:hover {
|
||||
color: var(--dark);
|
||||
}
|
||||
|
||||
.phone-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: 14px;
|
||||
color: var(--mid);
|
||||
text-decoration: underline;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* ── FOOTER ── */
|
||||
footer {
|
||||
background: var(--blue-gray);
|
||||
|
||||
}
|
||||
|
||||
.footer-container {
|
||||
padding: 50px 80px 40px;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||
gap: 40px;
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
.footer-logo {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: 30px;
|
||||
color: rgba(184, 243, 255, .85);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.footer-col h4 {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: rgba(184, 243, 255, .85);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .5px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.footer-col ul {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.footer-col ul li a, .footer-col ul li {
|
||||
font-size: 16px;
|
||||
color: rgba(184, 243, 255, .8);
|
||||
transition: opacity .2s;
|
||||
}
|
||||
|
||||
.footer-col ul li a:hover {
|
||||
opacity: .65;
|
||||
}
|
||||
|
||||
/* ── RESPONSIVE ── */
|
||||
@media (max-width: 900px) {
|
||||
header, .header-top, .nav-bar {
|
||||
padding-left: 24px;
|
||||
padding-right: 24px;
|
||||
}
|
||||
|
||||
footer {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
padding: 40px 24px;
|
||||
}
|
||||
}
|
||||
BIN
static/img/about-image.jpg
Normal file
|
After Width: | Height: | Size: 546 KiB |
3
static/img/background-circle.png
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg preserveAspectRatio="none" width="100%" height="100%" overflow="visible" style="display: block;" viewBox="0 0 495 495" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle id="Ellipse 1" cx="247.5" cy="247.5" r="247.5" fill="var(--fill-0, #63768D)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 266 B |
BIN
static/img/chopping-board.jpg
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
static/img/decor-promo.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
static/img/hero.png
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
static/img/kitchen-banner.jpg
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
static/img/kitchen-sink.jpg
Normal file
|
After Width: | Height: | Size: 234 KiB |
BIN
static/img/mixer.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
static/img/rubber-mat.jpg
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
static/img/sanitary-equipment-promo.jpg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
static/img/santeh-equipment.jpg
Normal file
|
After Width: | Height: | Size: 1014 KiB |
BIN
static/img/stats-image.jpg
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
static/img/terra-mirror.jpg
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
static/img/toilet.jpg
Normal file
|
After Width: | Height: | Size: 90 KiB |
33
templates/_fragments/footer.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<!-- FOOTER FRAGMENT -->
|
||||
<footer>
|
||||
<div class="container footer-container">
|
||||
<div class="footer-col">
|
||||
<div class="footer-logo">SantehRay</div>
|
||||
</div>
|
||||
<div class="footer-col">
|
||||
<h4>ПОКУПАТЕЛЮ</h4>
|
||||
<ul>
|
||||
<li><a href="#">Каталог</a></li>
|
||||
<li><a href="#">Услуги</a></li>
|
||||
<li><a href="#">Акции</a></li>
|
||||
<li><a href="#">Новинки</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-col">
|
||||
<h4>ПОМОЩЬ</h4>
|
||||
<ul>
|
||||
<li><a href="#">Доставка и оплата</a></li>
|
||||
<li><a href="#">Гарантия и возврат</a></li>
|
||||
<li>Ответы на вопросы</li>
|
||||
<li><a href="#">Контакты</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-col">
|
||||
<h4>КОНТАКТЫ</h4>
|
||||
<ul>
|
||||
<li><a href="mailto:info@santehray.by">info@santehray.by</a></li>
|
||||
<li>+375 (29) 688-18-19</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
74
templates/_fragments/header.html
Normal file
@@ -0,0 +1,74 @@
|
||||
<!-- HEADER FRAGMENT -->
|
||||
<header>
|
||||
<div class="container">
|
||||
<div class="header-top">
|
||||
<div class="logo"><a href="/">SantehRay</a></div>
|
||||
<form action="">
|
||||
<div class="search-wrap">
|
||||
<label>
|
||||
<select>
|
||||
<option>Все категории</option>
|
||||
<option>Сантехника</option>
|
||||
<option>Декор</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<input class="search-input" type="text" placeholder="Кто ищет, тот найдет...">
|
||||
</label>
|
||||
<button>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
|
||||
class="bi bi-search" viewBox="0 0 16 16">
|
||||
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<div class="header-icons">
|
||||
<a href="">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
|
||||
class="bi bi-heart" viewBox="0 0 16 16">
|
||||
<path d="m8 2.748-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143q.09.083.176.171a3 3 0 0 1 .176-.17C12.72-3.042 23.333 4.867 8 15"></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
|
||||
class="bi bi-cart2" viewBox="0 0 16 16">
|
||||
<path d="M0 2.5A.5.5 0 0 1 .5 2H2a.5.5 0 0 1 .485.379L2.89 4H14.5a.5.5 0 0 1 .485.621l-1.5 6A.5.5 0 0 1 13 11H4a.5.5 0 0 1-.485-.379L1.61 3H.5a.5.5 0 0 1-.5-.5M3.14 5l1.25 5h8.22l1.25-5zM5 13a1 1 0 1 0 0 2 1 1 0 0 0 0-2m-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0m9-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2m-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0"></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
|
||||
class="bi bi-person" viewBox="0 0 16 16">
|
||||
<path d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6m2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0m4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4m-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10s-3.516.68-4.168 1.332c-.678.678-.83 1.418-.832 1.664z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="nav-bar">
|
||||
<a href="/catalog/" class="catalog-btn {% if active == 'catalog' %}active-page{% endif %}">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"
|
||||
stroke-width="2" width="18" height="18">
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
Каталог
|
||||
</a>
|
||||
<div class="nav-links">
|
||||
<a class="{% if active == 'home' %}active-page{% endif %}" href="/">Главная</a>
|
||||
<a class="{% if active == 'services' %}active-page{% endif %}" href="/services/">Услуги</a>
|
||||
<a class="{% if active == 'shipping' %}active-page{% endif %}" href="/shipping/">Доставка</a>
|
||||
<a class="{% if active == 'warranty' %}active-page{% endif %}" href="/warranty/">Гарантия</a>
|
||||
<a class="{% if active == 'contacts' %}active-page{% endif %}" href="/contacts/">Контакты</a>
|
||||
</div>
|
||||
<a href="tel:+375296881819" class="phone-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor"
|
||||
class="bi bi-telephone" viewBox="0 0 16 16">
|
||||
<path d="M3.654 1.328a.678.678 0 0 0-1.015-.063L1.605 2.3c-.483.484-.661 1.169-.45 1.77a17.6 17.6 0 0 0 4.168 6.608 17.6 17.6 0 0 0 6.608 4.168c.601.211 1.286.033 1.77-.45l1.034-1.034a.678.678 0 0 0-.063-1.015l-2.307-1.794a.68.68 0 0 0-.58-.122l-2.19.547a1.75 1.75 0 0 1-1.657-.459L5.482 8.062a1.75 1.75 0 0 1-.46-1.657l.548-2.19a.68.68 0 0 0-.122-.58zM1.884.511a1.745 1.745 0 0 1 2.612.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.68.68 0 0 0 .178.643l2.457 2.457a.68.68 0 0 0 .644.178l2.189-.547a1.75 1.75 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.6 18.6 0 0 1-7.01-4.42 18.6 18.6 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877z"></path>
|
||||
</svg>
|
||||
+375 (29) 688-18-19
|
||||
</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
22
templates/_layouts/base.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %}
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Santehray - {% block title %}{{ title }}{% endblock %}</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"
|
||||
rel="stylesheet">
|
||||
<link rel="stylesheet" href="{% static 'css/normalize.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'css/style.css' %}">
|
||||
{% block add_css %}
|
||||
<!-- Additional CSS -->
|
||||
{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
57
templates/home/_fragments/about.html
Normal file
@@ -0,0 +1,57 @@
|
||||
{% load static %}
|
||||
|
||||
<section class="about-section">
|
||||
<div class="container">
|
||||
<h2 class="about-title">О нас</h2>
|
||||
<div class="about-left">
|
||||
<div class="about-left-block">
|
||||
<p class="about-left-subtitle">С 2000 года мы — не просто магазин сантехники, а надёжный партнёр для
|
||||
тех, кто ценит комфорт,
|
||||
качество и
|
||||
спокойствие.</p>
|
||||
<h3 class="about-left-suggestion">Мы предлагаем:</h3>
|
||||
<div class="about-left-list">
|
||||
<div class="about-left-list-item">
|
||||
<div class="about-left-list-item-number">1</div>
|
||||
<div class="about-left-list-item-content">
|
||||
<span class="about-left-list-item-content-title">Сантехническое оборудование</span>
|
||||
<span class="about-left-list-item-content-desc">Смесители, унитазы, мойки, душевые, умывальники, система фильтрации воды</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="about-left-list-item">
|
||||
<div class="about-left-list-item-number">2</div>
|
||||
<div class="about-left-list-item-content">
|
||||
<span class="about-left-list-item-content-title">Предметы декора</span>
|
||||
<div class="about-left-list-item-content-desc">Зеркала, ролл-маты, дозаторы, корзины,
|
||||
разделочные доски, система
|
||||
разделения мусора
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-right about-right">
|
||||
<div class="about-right-block">
|
||||
<p class="about-right-text">
|
||||
Мы работаем только с проверенными поставщиками — европейскими и российскими
|
||||
брендами, чья продукция прошла испытание временем, реальными квартирами и сотнями довольных
|
||||
клиентов.</p>
|
||||
<div class="about-right-stats">
|
||||
<div class="about-right-stats-item">
|
||||
<p class="about-right-stats-item-num">20+</p>
|
||||
<p class="about-right-stats-item-label">лет работы</p>
|
||||
</div>
|
||||
<div class="about-right-stats-item">
|
||||
<span class="about-right-stats-item-num">45 000+</span>
|
||||
<span class="about-right-stats-item-label">довольных покупателей</span>
|
||||
</div>
|
||||
<div class="about-right-stats-item">
|
||||
<span class="about-right-stats-item-num">5600+</span>
|
||||
<span class="about-right-stats-item-label">товаров</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
42
templates/home/_fragments/advantages.html
Normal file
@@ -0,0 +1,42 @@
|
||||
<!-- ADVANTAGES -->
|
||||
<section class="advantages">
|
||||
<div class="container">
|
||||
<div class="advantages-list">
|
||||
<h2 class="advantages-title">ПОЧЕМУ ВЫБИРАЮТ НАС?</h2>
|
||||
<div class="advantages-item">
|
||||
<div class="advantages-item-number">1</div>
|
||||
<h3 class="advantages-item-title">КАЧЕСТВЕННЫЙ ТОВАР</h3>
|
||||
<p class="advantages-item-subtitle">Работаем с проверенными поставщиками</p>
|
||||
</div>
|
||||
<div class="advantages-item">
|
||||
<div class="advantages-item-number">2</div>
|
||||
<h3 class="advantages-item-title">ЧЕСТНАЯ ГАРАНТИЯ</h3>
|
||||
<p class="advantages-item-subtitle">Работаем с проверенными поставщиками</p>
|
||||
</div>
|
||||
<div class="advantages-item">
|
||||
<div class="advantages-item-number">3</div>
|
||||
<h3 class="advantages-item-title">БЫСТРАЯ ДОСТАВКА</h3>
|
||||
<p class="advantages-item-subtitle">Огромный выбор сантехники в наличии и доставка со склада</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advantages-cards">
|
||||
<div class="advantages-card advantages-card-left">
|
||||
<div class="advantages-card-content">
|
||||
<div class="flex-right">
|
||||
<div class="advantages-card-splash">Новинки в каталоге</div>
|
||||
<h2 class="advantages-card-title text-align-right">Сантехническое оборудование</h2>
|
||||
<a href="/catalog/#santechnics" class="advantages-card-button">Смотреть</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="advantages-card advantages-card-right">
|
||||
<div class="advantages-card-content">
|
||||
<div class="advantages-card-splash">Большая распродажа</div>
|
||||
<h2 class="advantages-card-title">Предметы декора</h2>
|
||||
<a href="/catalog/#santechnics" class="advantages-card-button">Смотреть</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
8
templates/home/_fragments/banner.html
Normal file
@@ -0,0 +1,8 @@
|
||||
<section class="kitchen-banner container">
|
||||
<div class="kitchen-content">
|
||||
<p>Успей заказать с большой выгодой и получите доставку в подарок!</p>
|
||||
<h2>ГОТОВОЕ РЕШЕНИЕ ДЛЯ КУХНИ</h2>
|
||||
<a href="#" class="active-page">Перейти</a>
|
||||
</div>
|
||||
{# <img src="{% static 'img/kitchen-banner.jpg' %}" alt="">#}
|
||||
</section>
|
||||
51
templates/home/_fragments/faq.html
Normal file
@@ -0,0 +1,51 @@
|
||||
<section class="faq-section container">
|
||||
<h2>ОТВЕТЫ НА ВОПРОСЫ</h2>
|
||||
<div class="faq-grid">
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-icon">?</div>
|
||||
<div class="faq-body">
|
||||
<h4>Могу ли я отказаться от заказа при доставке?</h4>
|
||||
<p>Да, вы можете отказаться приобретать модель. В таком случае, просим уведомить специалиста
|
||||
магазина о отказе, не нарушать заводскую упаковку товара, чтобы он не утратил товарный вид. Но
|
||||
вы должны будете оплатить доставку товара, даже в случае отказа.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-icon">?</div>
|
||||
<div class="faq-body">
|
||||
<h4>Куда обращаться по гарантии?</h4>
|
||||
<p>В случае обнаружения недостатка товара при получении либо при его использовании в течении
|
||||
гарантийного срока, необходимо обратиться с письменной претензией на почту info@santehray.by или
|
||||
в наш магазин. Далее с вами свяжутся для уточнения подробностей.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-icon">?</div>
|
||||
<div class="faq-body">
|
||||
<h4>Можно ли покупать товары в рассрочку?</h4>
|
||||
<p>Да. У нас есть система кредитования, где вы можете приобрести модель в рассрочку полностью или
|
||||
частично. Для этого нужно обратиться в наш магазин и узнать подробности.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-icon">?</div>
|
||||
<div class="faq-body">
|
||||
<h4>Можно ли где-то лично посмотреть товары?</h4>
|
||||
<p>У нас есть физический магазин, который находится по адресу: Беларусь, г. Минск, ул. Тимирязева,
|
||||
д. 123, к.1, пав. 59, там вы сможете ознакомится со всем ассортиментом.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="faq-cta">
|
||||
<a href="#">
|
||||
<div>?</div>
|
||||
ЗАДАТЬ ВОПРОС
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
25
templates/home/_fragments/hero.html
Normal file
@@ -0,0 +1,25 @@
|
||||
{% load static %}
|
||||
<!-- HERO -->
|
||||
<section class="hero">
|
||||
<div class="container">
|
||||
<div class="flex-right">
|
||||
<div class="hero-content">
|
||||
<h1 class="hero-title">ДОБАВЬТЕ ЭСТЕТИЧНОСТИ<br>В СВОЙ ИНТЕРЬЕР</h1>
|
||||
<div class="hero-subtitle-container">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="35" height="35" fill="currentColor"
|
||||
class="bi bi-check-circle hero-checkmark" viewBox="0 0 16 16">
|
||||
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"></path>
|
||||
<path d="m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05"></path>
|
||||
</svg>
|
||||
<p class="hero-subtitle">Подбор сантехнического оборудования на заказ.
|
||||
<br>А также огромный выбор инсталляций и декора
|
||||
<br>в наличии на складах города с быстрой доставкой
|
||||
</p>
|
||||
</div>
|
||||
<div class="hero-button-container">
|
||||
<a href="/catalog/" class="hero-button">ПЕРЕЙТИ В КАТАЛОГ</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
194
templates/home/_fragments/popular-products.html
Normal file
@@ -0,0 +1,194 @@
|
||||
{% load static %}
|
||||
|
||||
<section class="products-section container">
|
||||
<h2 class="products-title">ПОПУЛЯРНЫЕ ТОВАРЫ</h2>
|
||||
<div class="products-grid">
|
||||
<article class="product product-1">
|
||||
<div class="product-actions">
|
||||
<button title="В избранное">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
|
||||
class="bi bi-heart" viewBox="0 0 16 16">
|
||||
<path d="m8 2.748-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143q.09.083.176.171a3 3 0 0 1 .176-.17C12.72-3.042 23.333 4.867 8 15"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<button title="В корзину">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
|
||||
class="bi bi-cart2" viewBox="0 0 16 16">
|
||||
<path d="M0 2.5A.5.5 0 0 1 .5 2H2a.5.5 0 0 1 .485.379L2.89 4H14.5a.5.5 0 0 1 .485.621l-1.5 6A.5.5 0 0 1 13 11H4a.5.5 0 0 1-.485-.379L1.61 3H.5a.5.5 0 0 1-.5-.5M3.14 5l1.25 5h8.22l1.25-5zM5 13a1 1 0 1 0 0 2 1 1 0 0 0 0-2m-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0m9-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2m-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="product product-2">
|
||||
|
||||
</article>
|
||||
|
||||
<article class="product product-3">
|
||||
|
||||
</article>
|
||||
|
||||
<article class="product product-4">
|
||||
|
||||
</article>
|
||||
|
||||
<article class="product product-5">
|
||||
|
||||
</article>
|
||||
|
||||
<article class="product product-6">
|
||||
|
||||
</article>
|
||||
</div>
|
||||
{% comment %}
|
||||
<!-- Card 1 — tall -->
|
||||
<div class="product-card tall">
|
||||
<img class="product-card-img" src="{% static 'img/kitchen-sink.jpg' %}" alt="Кухонная мойка">
|
||||
|
||||
<div class="product-info">
|
||||
<div class="p-name">Кухонная мойка</div>
|
||||
<div class="p-sub">Искусственный камень, врезная на столешницу</div>
|
||||
<div class="p-price">1600 руб</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card 2 -->
|
||||
<div class="product-card">
|
||||
<img class="product-card-img" src="{% static 'img/chopping-board.jpg' %}" alt="Разделочная доска"
|
||||
style="aspect-ratio:4/3;">
|
||||
<div class="product-actions">
|
||||
<button title="В избранное">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button title="В корзину">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/>
|
||||
<line x1="3" y1="6" x2="21" y2="6"/>
|
||||
<path d="M16 10a4 4 0 0 1-8 0"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<div class="p-name">Разделочная доска</div>
|
||||
<div class="p-sub">Нержавеющая сталь</div>
|
||||
<div class="p-price">50 руб</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card 3 — tall -->
|
||||
<div class="product-card tall">
|
||||
<img class="product-card-img" src="{% static 'img/terra-mirror.jpg' %}" alt="Зеркало Terra">
|
||||
<div class="product-actions">
|
||||
<button title="В избранное">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button title="В корзину">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/>
|
||||
<line x1="3" y1="6" x2="21" y2="6"/>
|
||||
<path d="M16 10a4 4 0 0 1-8 0"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<div class="p-name">Зеркало Terra</div>
|
||||
<div class="p-sub">Холодная подсветка, фронтальная</div>
|
||||
<div class="p-price">200 руб</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card 4 -->
|
||||
<div class="product-card">
|
||||
<img class="product-card-img" src="{% static 'img/toilet.jpg' %}" alt="Унитаз"
|
||||
style="aspect-ratio:4/3;">
|
||||
<div class="product-actions">
|
||||
<button title="В избранное">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button title="В корзину">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/>
|
||||
<line x1="3" y1="6" x2="21" y2="6"/>
|
||||
<path d="M16 10a4 4 0 0 1-8 0"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<div class="p-name">Унитаз</div>
|
||||
<div class="p-sub">Напольный с бачком, безободковый</div>
|
||||
<div class="p-price">1600 руб</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card 5 (коврик) -->
|
||||
<div class="product-card">
|
||||
<img class="product-card-img" src="{% static 'img/rubber-mat.jpg' %}" alt="Коврик"
|
||||
style="aspect-ratio:4/3;">
|
||||
<div class="product-actions">
|
||||
<button title="В избранное">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button title="В корзину">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/>
|
||||
<line x1="3" y1="6" x2="21" y2="6"/>
|
||||
<path d="M16 10a4 4 0 0 1-8 0"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<div class="p-name">Коврик для посуды</div>
|
||||
<div class="p-sub">Мгновенно впитывает воду</div>
|
||||
<div class="p-price">20 руб</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card 6 (смеситель) -->
|
||||
<div class="product-card">
|
||||
<img class="product-card-img" src="{% static 'img/mixer.jpg' %}" alt="Смеситель"
|
||||
style="aspect-ratio:4/3;">
|
||||
<div class="product-actions">
|
||||
<button title="В избранное">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button title="В корзину">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2">
|
||||
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/>
|
||||
<line x1="3" y1="6" x2="21" y2="6"/>
|
||||
<path d="M16 10a4 4 0 0 1-8 0"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<div class="p-name">Смеситель</div>
|
||||
<div class="p-sub">Однорычажный смеситель</div>
|
||||
<div class="p-price">340 руб</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>{% endcomment %}
|
||||
|
||||
<div class="products-footer">
|
||||
<a href="#" class="btn-primary">ПЕРЕЙТИ В КАТАЛОГ</a>
|
||||
</div>
|
||||
</section>
|
||||
16
templates/home/contacts.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% extends "_layouts/base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Главная{% endblock %}
|
||||
|
||||
{% block add_css %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include "_fragments/header.html" %}
|
||||
|
||||
{# TODO #}
|
||||
В разработке
|
||||
{% include "_fragments/footer.html" %}
|
||||
{% endblock %}
|
||||
27
templates/home/index.html
Normal file
@@ -0,0 +1,27 @@
|
||||
{% extends "_layouts/base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Главная{% endblock %}
|
||||
|
||||
{% block add_css %}
|
||||
<link rel="stylesheet" href="{% static "css/index.css" %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- HEADER -->
|
||||
{% include "_fragments/header.html" with active="home" %}
|
||||
|
||||
{% include "home/_fragments/hero.html" %}
|
||||
|
||||
{% include 'home/_fragments/advantages.html' %}
|
||||
|
||||
{% include 'home/_fragments/about.html' %}
|
||||
|
||||
{% include 'home/_fragments/banner.html' %}
|
||||
|
||||
{% include 'home/_fragments/popular-products.html' %}
|
||||
|
||||
{% include 'home/_fragments/faq.html' %}
|
||||
|
||||
{% include "_fragments/footer.html" %}
|
||||
{% endblock %}
|
||||
16
templates/home/shipping.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% extends "_layouts/base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Главная{% endblock %}
|
||||
|
||||
{% block add_css %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include "_fragments/header.html" %}
|
||||
|
||||
{# TODO #}
|
||||
В разработке
|
||||
{% include "_fragments/footer.html" %}
|
||||
{% endblock %}
|
||||
16
templates/home/warranty.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% extends "_layouts/base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Главная{% endblock %}
|
||||
|
||||
{% block add_css %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include "_fragments/header.html" %}
|
||||
|
||||
{# TODO #}
|
||||
В разработке
|
||||
{% include "_fragments/footer.html" %}
|
||||
{% endblock %}
|
||||
39
templates/users/login.html
Normal file
@@ -0,0 +1,39 @@
|
||||
{% extends '_layouts/base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Вход{% endblock %}
|
||||
|
||||
{% block add_css %}
|
||||
<link rel="stylesheet" href="{% static 'css/login.css' %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="full-page">
|
||||
{% include "_fragments/header.html" %}
|
||||
|
||||
<div class="center-wrapper">
|
||||
<form class="login-form" action="">
|
||||
<h2>ВХОД</h2>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="login">Логин</label>
|
||||
<input class="form-input" type="text" id="login">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="password">Пароль</label>
|
||||
<input class="form-input" type="password" id="password">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div>
|
||||
<input class="form-input" type="checkbox" id="persist">
|
||||
<label class="form-label" for="persist">Оставаться в системе</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit">Войти</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% include "_fragments/footer.html" %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
0
templates/users/profile.html
Normal file
0
templates/users/register.html
Normal file
9
users/urls.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from django.urls import path
|
||||
|
||||
from users import views
|
||||
|
||||
urlpatterns = [
|
||||
path('login/', views.login, name='login'),
|
||||
path('register/', views.register, name='register'),
|
||||
path('profile/', views.profile, name='profile')
|
||||
]
|
||||
@@ -1,3 +1,14 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
|
||||
# Create your views here.
|
||||
def login(request):
|
||||
return render(request, 'users/login.html', context={})
|
||||
|
||||
|
||||
def register(request):
|
||||
return render(request, 'users/register.html', context={})
|
||||
|
||||
|
||||
def profile(request):
|
||||
return render(request, 'users/profile.html', context={})
|
||||
|
||||