Rename project identity from RazorPagesMovie to BewerbungsSeite
Deploy Staging / deploy (push) Successful in 1m44s
@@ -0,0 +1,3 @@
|
||||
namespace BewerbungsSeite.Api.V1.Contact;
|
||||
|
||||
public record ContactDto(string? Name, string? Email, string? Phone, string? Subject, string? Message);
|
||||
@@ -0,0 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>BewerbungsSeite</RootNamespace>
|
||||
<AssemblyName>BewerbungsSeite</AssemblyName>
|
||||
<UserSecretsId>02763b00-6256-4663-b3cd-9c520c4b3f91</UserSecretsId>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.28">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,39 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using BewerbungsSeite.Api.V1.Contact;
|
||||
using BewerbungsSeite.Data;
|
||||
using BewerbungsSeite.Models;
|
||||
using BewerbungsSeite.Services;
|
||||
|
||||
namespace BewerbungsSeite.Controllers.Api.V1;
|
||||
|
||||
[ApiController]
|
||||
[Route("api/v1/[controller]")]
|
||||
public class ContactController(RazorPagesMovieContext context, IContactMessageNotificationQueue notificationQueue) : ControllerBase
|
||||
{
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> Post(ContactDto request)
|
||||
{
|
||||
var contactMessage = new ContactMessage
|
||||
{
|
||||
Name = request.Name ?? string.Empty,
|
||||
Email = request.Email ?? string.Empty,
|
||||
Phone = string.IsNullOrWhiteSpace(request.Phone) ? null : request.Phone,
|
||||
Subject = request.Subject ?? string.Empty,
|
||||
Message = request.Message ?? string.Empty
|
||||
};
|
||||
|
||||
var validationResults = new List<ValidationResult>();
|
||||
if (!Validator.TryValidateObject(contactMessage, new ValidationContext(contactMessage), validationResults, validateAllProperties: true))
|
||||
{
|
||||
return BadRequest(new { error = "Bitte alle Pflichtfelder korrekt ausfüllen." });
|
||||
}
|
||||
|
||||
context.ContactMessage.Add(contactMessage);
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
notificationQueue.Enqueue(contactMessage.Id);
|
||||
|
||||
return Ok(new { success = true });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace BewerbungsSeite.Data;
|
||||
|
||||
public class RazorPagesMovieContext(DbContextOptions<RazorPagesMovieContext> options) : DbContext(options)
|
||||
{
|
||||
public DbSet<BewerbungsSeite.Models.AdminUser> AdminUser { get; set; } = default!;
|
||||
public DbSet<BewerbungsSeite.Models.ContactMessage> ContactMessage { get; set; } = default!;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
|
||||
WORKDIR /app
|
||||
EXPOSE 8080
|
||||
EXPOSE 8081
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
WORKDIR /src
|
||||
COPY ["BewerbungWebseite/BewerbungsSeite.csproj", "BewerbungWebseite/"]
|
||||
RUN dotnet restore "./BewerbungWebseite/BewerbungsSeite.csproj"
|
||||
COPY . .
|
||||
WORKDIR "/src/BewerbungWebseite"
|
||||
RUN dotnet build "./BewerbungsSeite.csproj" -c $BUILD_CONFIGURATION -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
ARG BUILD_CONFIGURATION=Release
|
||||
RUN dotnet publish "./BewerbungsSeite.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
ENTRYPOINT ["dotnet", "BewerbungsSeite.dll"]
|
||||
@@ -0,0 +1,55 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260627202538_InitialCreate")]
|
||||
partial class InitialCreate
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18,2)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class InitialCreate : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Movie",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Title = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
||||
ReleaseDate = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||
Genre = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
||||
Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Movie", x => x.Id);
|
||||
});
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "Movie");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260627205340_Rating")]
|
||||
partial class Rating
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18, 2)");
|
||||
|
||||
b.Property<string>("Rating")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class Rating : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Title",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: false,
|
||||
defaultValue: "",
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)",
|
||||
oldNullable: true);
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Genre",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: false,
|
||||
defaultValue: "",
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)",
|
||||
oldNullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "Rating",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: false,
|
||||
defaultValue: "");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "Rating",
|
||||
table: "Movie");
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Title",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: true,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)");
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Genre",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: true,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260627210009_New_DataAnnotations")]
|
||||
partial class New_DataAnnotations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.IsRequired()
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18, 2)");
|
||||
|
||||
b.Property<string>("Rating")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5)
|
||||
.HasColumnType("nvarchar(5)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasMaxLength(60)
|
||||
.HasColumnType("nvarchar(60)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class New_DataAnnotations : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Title",
|
||||
table: "Movie",
|
||||
type: "nvarchar(60)",
|
||||
maxLength: 60,
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)");
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Rating",
|
||||
table: "Movie",
|
||||
type: "nvarchar(5)",
|
||||
maxLength: 5,
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)");
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Genre",
|
||||
table: "Movie",
|
||||
type: "nvarchar(30)",
|
||||
maxLength: 30,
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Title",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(60)",
|
||||
oldMaxLength: 60);
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Rating",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(5)",
|
||||
oldMaxLength: 5);
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Genre",
|
||||
table: "Movie",
|
||||
type: "nvarchar(max)",
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(30)",
|
||||
oldMaxLength: 30);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260818121135_AddAdminUserAndContactMessage")]
|
||||
partial class AddAdminUserAndContactMessage
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.AdminUser", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("PasswordHash")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("AdminUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.ContactMessage", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Message")
|
||||
.IsRequired()
|
||||
.HasMaxLength(4000)
|
||||
.HasColumnType("nvarchar(4000)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<string>("Phone")
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<DateTime>("SentAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Subject")
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.IsRequired()
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18, 2)");
|
||||
|
||||
b.Property<string>("Rating")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5)
|
||||
.HasColumnType("nvarchar(5)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasMaxLength(60)
|
||||
.HasColumnType("nvarchar(60)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddAdminUserAndContactMessage : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "AdminUser",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Username = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
|
||||
PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_AdminUser", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "ContactMessage",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Name = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
|
||||
Email = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
|
||||
Phone = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: true),
|
||||
Subject = table.Column<string>(type: "nvarchar(150)", maxLength: 150, nullable: true),
|
||||
Message = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: false),
|
||||
SentAt = table.Column<DateTime>(type: "datetime2", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_ContactMessage", x => x.Id);
|
||||
});
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "AdminUser");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "ContactMessage");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260818134749_AddNotificationSentToContactMessage")]
|
||||
partial class AddNotificationSentToContactMessage
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.AdminUser", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("PasswordHash")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("AdminUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.ContactMessage", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Message")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5000)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<bool>("NotificationSent")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<string>("Phone")
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<DateTime>("SentAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Subject")
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.IsRequired()
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18, 2)");
|
||||
|
||||
b.Property<string>("Rating")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5)
|
||||
.HasColumnType("nvarchar(5)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasMaxLength(60)
|
||||
.HasColumnType("nvarchar(60)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddNotificationSentToContactMessage : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Message",
|
||||
table: "ContactMessage",
|
||||
type: "nvarchar(max)",
|
||||
maxLength: 5000,
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(4000)",
|
||||
oldMaxLength: 4000);
|
||||
|
||||
migrationBuilder.AddColumn<bool>(
|
||||
name: "NotificationSent",
|
||||
table: "ContactMessage",
|
||||
type: "bit",
|
||||
nullable: false,
|
||||
defaultValue: false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "NotificationSent",
|
||||
table: "ContactMessage");
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Message",
|
||||
table: "ContactMessage",
|
||||
type: "nvarchar(4000)",
|
||||
maxLength: 4000,
|
||||
nullable: false,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(max)",
|
||||
oldMaxLength: 5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260819120324_ChangeAdminUserAndContactMessageIdToGuid")]
|
||||
partial class ChangeAdminUserAndContactMessageIdToGuid
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.AdminUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("PasswordHash")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("AdminUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.ContactMessage", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Message")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5000)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<bool>("NotificationSent")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<string>("Phone")
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<DateTime>("SentAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Subject")
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.IsRequired()
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18, 2)");
|
||||
|
||||
b.Property<string>("Rating")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5)
|
||||
.HasColumnType("nvarchar(5)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasMaxLength(60)
|
||||
.HasColumnType("nvarchar(60)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class ChangeAdminUserAndContactMessageIdToGuid : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropPrimaryKey(
|
||||
name: "PK_ContactMessage",
|
||||
table: "ContactMessage");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "Id",
|
||||
table: "ContactMessage");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "Id",
|
||||
table: "ContactMessage",
|
||||
type: "uniqueidentifier",
|
||||
nullable: false,
|
||||
defaultValueSql: "NEWID()");
|
||||
|
||||
migrationBuilder.AddPrimaryKey(
|
||||
name: "PK_ContactMessage",
|
||||
table: "ContactMessage",
|
||||
column: "Id");
|
||||
|
||||
migrationBuilder.DropPrimaryKey(
|
||||
name: "PK_AdminUser",
|
||||
table: "AdminUser");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "Id",
|
||||
table: "AdminUser");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "Id",
|
||||
table: "AdminUser",
|
||||
type: "uniqueidentifier",
|
||||
nullable: false,
|
||||
defaultValueSql: "NEWID()");
|
||||
|
||||
migrationBuilder.AddPrimaryKey(
|
||||
name: "PK_AdminUser",
|
||||
table: "AdminUser",
|
||||
column: "Id");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropPrimaryKey(
|
||||
name: "PK_ContactMessage",
|
||||
table: "ContactMessage");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "Id",
|
||||
table: "ContactMessage");
|
||||
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "Id",
|
||||
table: "ContactMessage",
|
||||
type: "int",
|
||||
nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1");
|
||||
|
||||
migrationBuilder.AddPrimaryKey(
|
||||
name: "PK_ContactMessage",
|
||||
table: "ContactMessage",
|
||||
column: "Id");
|
||||
|
||||
migrationBuilder.DropPrimaryKey(
|
||||
name: "PK_AdminUser",
|
||||
table: "AdminUser");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "Id",
|
||||
table: "AdminUser");
|
||||
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "Id",
|
||||
table: "AdminUser",
|
||||
type: "int",
|
||||
nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1");
|
||||
|
||||
migrationBuilder.AddPrimaryKey(
|
||||
name: "PK_AdminUser",
|
||||
table: "AdminUser",
|
||||
column: "Id");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260821123359_MakeContactMessageSubjectRequired")]
|
||||
partial class MakeContactMessageSubjectRequired
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.AdminUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("PasswordHash")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("AdminUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.ContactMessage", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Message")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5000)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<bool>("NotificationSent")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<string>("Phone")
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<DateTime>("SentAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Subject")
|
||||
.IsRequired()
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.Movie", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.IsRequired()
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<decimal>("Price")
|
||||
.HasColumnType("decimal(18, 2)");
|
||||
|
||||
b.Property<string>("Rating")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5)
|
||||
.HasColumnType("nvarchar(5)");
|
||||
|
||||
b.Property<DateTime>("ReleaseDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.IsRequired()
|
||||
.HasMaxLength(60)
|
||||
.HasColumnType("nvarchar(60)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Movie");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class MakeContactMessageSubjectRequired : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.Sql("UPDATE ContactMessage SET Subject = '' WHERE Subject IS NULL;");
|
||||
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Subject",
|
||||
table: "ContactMessage",
|
||||
type: "nvarchar(150)",
|
||||
maxLength: 150,
|
||||
nullable: false,
|
||||
defaultValue: "",
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(150)",
|
||||
oldMaxLength: 150,
|
||||
oldNullable: true);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<string>(
|
||||
name: "Subject",
|
||||
table: "ContactMessage",
|
||||
type: "nvarchar(150)",
|
||||
maxLength: 150,
|
||||
nullable: true,
|
||||
oldClrType: typeof(string),
|
||||
oldType: "nvarchar(150)",
|
||||
oldMaxLength: 150);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
[Migration("20260826122916_DropMovieTable")]
|
||||
partial class DropMovieTable
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.AdminUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("PasswordHash")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("AdminUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.ContactMessage", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Message")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5000)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<bool>("NotificationSent")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<string>("Phone")
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<DateTime>("SentAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Subject")
|
||||
.IsRequired()
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class DropMovieTable : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "Movie");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Movie",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Genre = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false),
|
||||
Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
|
||||
Rating = table.Column<string>(type: "nvarchar(5)", maxLength: 5, nullable: false),
|
||||
ReleaseDate = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||
Title = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Movie", x => x.Id);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace BewerbungsSeite.Migrations
|
||||
{
|
||||
[DbContext(typeof(RazorPagesMovieContext))]
|
||||
partial class RazorPagesMovieContextModelSnapshot : ModelSnapshot
|
||||
{
|
||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.28")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.AdminUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("PasswordHash")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Username")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("AdminUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("BewerbungsSeite.Models.ContactMessage", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("nvarchar(200)");
|
||||
|
||||
b.Property<string>("Message")
|
||||
.IsRequired()
|
||||
.HasMaxLength(5000)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<bool>("NotificationSent")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<string>("Phone")
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<DateTime>("SentAt")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("Subject")
|
||||
.IsRequired()
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("ContactMessage");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace BewerbungsSeite.Models;
|
||||
|
||||
public class AdminUser
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[StringLength(100)]
|
||||
public string Username { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public string PasswordHash { get; set; } = string.Empty;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace BewerbungsSeite.Models;
|
||||
|
||||
public class ContactMessage
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[StringLength(100)]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
[Display(Name = "E-Mail")]
|
||||
[Required]
|
||||
[EmailAddress]
|
||||
[StringLength(200)]
|
||||
public string Email { get; set; } = string.Empty;
|
||||
|
||||
[Display(Name = "Telefon")]
|
||||
[Phone]
|
||||
[StringLength(30)]
|
||||
public string? Phone { get; set; }
|
||||
|
||||
[Display(Name = "Betreff")]
|
||||
[Required]
|
||||
[StringLength(150)]
|
||||
public string Subject { get; set; } = string.Empty;
|
||||
|
||||
[Display(Name = "Nachricht")]
|
||||
[Required]
|
||||
[StringLength(5000)]
|
||||
public string Message { get; set; } = string.Empty;
|
||||
|
||||
[Display(Name = "Gesendet am")]
|
||||
[DataType(DataType.DateTime)]
|
||||
public DateTime SentAt { get; set; } = DateTime.Now;
|
||||
|
||||
public bool NotificationSent { get; set; } = false;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
@page
|
||||
@model BewerbungsSeite.Pages.Admin.IndexModel
|
||||
@{
|
||||
ViewData["Title"] = "Admin";
|
||||
}
|
||||
|
||||
<h1>Welcome, @User.Identity?.Name</h1>
|
||||
|
||||
<form method="post" asp-page-handler="Logout">
|
||||
<button type="submit" class="btn btn-secondary">Logout</button>
|
||||
</form>
|
||||
@@ -0,0 +1,19 @@
|
||||
using Microsoft.AspNetCore.Authentication;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace BewerbungsSeite.Pages.Admin;
|
||||
|
||||
public class IndexModel : PageModel
|
||||
{
|
||||
public void OnGet()
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnPostLogoutAsync()
|
||||
{
|
||||
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
return RedirectToPage("/Login");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
@page
|
||||
@model ErrorModel
|
||||
@{
|
||||
ViewData["Title"] = "Error";
|
||||
}
|
||||
|
||||
<h1 class="text-danger">Error.</h1>
|
||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||
|
||||
@if (Model.ShowRequestId)
|
||||
{
|
||||
<p>
|
||||
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||
</p>
|
||||
}
|
||||
|
||||
<h3>Development Mode</h3>
|
||||
<p>
|
||||
Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
|
||||
</p>
|
||||
<p>
|
||||
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||
It can result in displaying sensitive information from exceptions to end users.
|
||||
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||
and restarting the app.
|
||||
</p>
|
||||
@@ -0,0 +1,28 @@
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace BewerbungsSeite.Pages
|
||||
{
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
[IgnoreAntiforgeryToken]
|
||||
public class ErrorModel : PageModel
|
||||
{
|
||||
public string? RequestId { get; set; }
|
||||
|
||||
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||
|
||||
private readonly ILogger<ErrorModel> _logger;
|
||||
|
||||
public ErrorModel(ILogger<ErrorModel> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void OnGet()
|
||||
{
|
||||
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace BewerbungsSeite.Pages
|
||||
{
|
||||
public class IndexModel : PageModel
|
||||
{
|
||||
public void OnGet()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
@page
|
||||
@model BewerbungsSeite.Pages.LoginModel
|
||||
@{
|
||||
ViewData["Title"] = "Login";
|
||||
}
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-4">
|
||||
<h1>Admin Login</h1>
|
||||
|
||||
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
|
||||
{
|
||||
<div class="alert alert-danger">@Model.ErrorMessage</div>
|
||||
}
|
||||
|
||||
<form method="post">
|
||||
<div class="mb-3">
|
||||
<label asp-for="Username" class="form-label"></label>
|
||||
<input asp-for="Username" class="form-control" autofocus />
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label asp-for="Password" class="form-label"></label>
|
||||
<input asp-for="Password" type="password" class="form-control" />
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Login</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,53 @@
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNetCore.Authentication;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using BewerbungsSeite.Data;
|
||||
using BewerbungsSeite.Models;
|
||||
|
||||
namespace BewerbungsSeite.Pages;
|
||||
|
||||
public class LoginModel : PageModel
|
||||
{
|
||||
private readonly RazorPagesMovieContext _context;
|
||||
|
||||
public LoginModel(RazorPagesMovieContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
[BindProperty]
|
||||
public string Username { get; set; } = string.Empty;
|
||||
|
||||
[BindProperty]
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
||||
public string? ErrorMessage { get; set; }
|
||||
|
||||
public void OnGet()
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnPostAsync(string? returnUrl)
|
||||
{
|
||||
var user = await _context.AdminUser.SingleOrDefaultAsync(u => u.Username == Username);
|
||||
var hasher = new PasswordHasher<AdminUser>();
|
||||
|
||||
if (user is null || hasher.VerifyHashedPassword(user, user.PasswordHash, Password) == PasswordVerificationResult.Failed)
|
||||
{
|
||||
ErrorMessage = "Benutzername oder Passwort ist falsch.";
|
||||
return Page();
|
||||
}
|
||||
|
||||
var identity = new ClaimsIdentity(
|
||||
new[] { new Claim(ClaimTypes.Name, user.Username) },
|
||||
CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
|
||||
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));
|
||||
|
||||
return LocalRedirect(returnUrl ?? "/Admin");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>@Html.Raw(ViewData["Title"])</title>
|
||||
<link rel="icon" type="image/png" href="~/images/fav-icon/icon.png" />
|
||||
|
||||
<link rel="stylesheet" href="~/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="~/css/owl.carousel.min.css" />
|
||||
<link rel="stylesheet" href="~/css/nivo-slider.css" />
|
||||
<link rel="stylesheet" href="~/css/animate.css" />
|
||||
<link rel="stylesheet" href="~/css/animated-text.css" />
|
||||
<link rel="stylesheet" href="~/css/all.min.css" />
|
||||
<link rel="stylesheet" href="~/css/flaticon.css" />
|
||||
<link rel="stylesheet" href="~/css/theme-default.css" />
|
||||
<link rel="stylesheet" href="~/css/meanmenu.min.css" />
|
||||
<link rel="stylesheet" href="~/css/style.css" />
|
||||
|
||||
<link rel="stylesheet" href="~/css/owl.transitions.css" />
|
||||
<link rel="stylesheet" href="~/css/widget.css" />
|
||||
<link rel="stylesheet" href="~/css/responsive.css" />
|
||||
<link rel="stylesheet" href="~/css/slick.css" />
|
||||
<link rel="stylesheet" href="~/css/slick-theme.css" />
|
||||
|
||||
<style>
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
@await RenderSectionAsync("Styles", required: false)
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="sticky-header" class="techno_nav_manu style-two portfolio-header">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg-4">
|
||||
<a class="portfolio-brand" href="#hero">Francesco Lorenzo D'Amico</a>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<nav class="techno_menu text-center">
|
||||
<ul class="nav_scroll">
|
||||
<li><a href="#hero">Start</a></li>
|
||||
<li><a href="#about">Über mich</a></li>
|
||||
<li><a href="#skills">Kompetenzen</a></li>
|
||||
<li><a href="#projects">Projekte</a></li>
|
||||
<li><a href="#goals">Ziele</a></li>
|
||||
<li><a href="#experience">Erfahrung</a></li>
|
||||
<li><a href="#documents">Dokumente</a></li>
|
||||
<li><a href="#contact">Kontakt</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mobile-menu-area d-sm-block d-md-block d-lg-none">
|
||||
<div class="mobile-menu">
|
||||
<nav class="techno_menu">
|
||||
<ul class="nav_scroll">
|
||||
<li><a href="#hero">Start</a></li>
|
||||
<li><a href="#about">Über mich</a></li>
|
||||
<li><a href="#skills">Kompetenzen</a></li>
|
||||
<li><a href="#projects">Projekte</a></li>
|
||||
<li><a href="#goals">Ziele</a></li>
|
||||
<li><a href="#experience">Erfahrung</a></li>
|
||||
<li><a href="#documents">Dokumente</a></li>
|
||||
<li><a href="#contact">Kontakt</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@RenderBody()
|
||||
|
||||
<footer class="footer-middle portfolio-footer">
|
||||
<div class="container">
|
||||
<div class="row footer-bottom">
|
||||
<div class="col-lg-12">
|
||||
<div class="footer-bottom-content">
|
||||
<div class="footer-bottom-content-copy">
|
||||
<p>© 2026 Francesco Lorenzo D'Amico</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<div class="scroll-area">
|
||||
<div class="top-wrap">
|
||||
<div class="go-top-btn-wraper">
|
||||
<div class="go-top go-top-button">
|
||||
<i class="fas fa-arrow-up"></i>
|
||||
<i class="fas fa-arrow-up"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="~/js/jquery-1.9.0.min.js"></script>
|
||||
<script src="~/js/bootstrap.min.js"></script>
|
||||
<script src="~/js/owl.carousel.min.js"></script>
|
||||
<script src="~/js/jquery.counterup.min.js"></script>
|
||||
<script src="~/js/waypoints.min.js"></script>
|
||||
<script src="~/js/wow.js"></script>
|
||||
<script src="~/js/imagesloaded.pkgd.min.js"></script>
|
||||
<script src="~/js/ajax-mail.js"></script>
|
||||
<script src="~/js/animated-text.js"></script>
|
||||
<script src="~/js/isotope.pkgd.min.js"></script>
|
||||
<script src="~/js/jquery.nivo.slider.pack.js"></script>
|
||||
<script src="~/js/jquery.meanmenu.js"></script>
|
||||
<script src="~/js/popper.min.js"></script>
|
||||
<script src="~/js/jquery.scrollUp.js"></script>
|
||||
<script src="~/js/theme.js"></script>
|
||||
<script src="~/js/slick.js"></script>
|
||||
<script src="~/js/slick.min.js"></script>
|
||||
<script src="~/js/jquery.barfiller.js"></script>
|
||||
|
||||
<script>
|
||||
$(window).on("scroll", function () {
|
||||
var scrolled = $(window).scrollTop();
|
||||
if (scrolled > 300) $(".go-top").addClass("active");
|
||||
if (scrolled < 300) $(".go-top").removeClass("active");
|
||||
});
|
||||
|
||||
$(".go-top").on("click", function () {
|
||||
$("html, body").animate({ scrollTop: "0" }, 1200);
|
||||
});
|
||||
</script>
|
||||
|
||||
@await RenderSectionAsync("Scripts", required: false)
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,48 @@
|
||||
/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
||||
for details on configuring this project to bundle and minify static web assets. */
|
||||
|
||||
a.navbar-brand {
|
||||
white-space: normal;
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0077cc;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.border-top {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
}
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
|
||||
.box-shadow {
|
||||
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
|
||||
}
|
||||
|
||||
button.accept-policy {
|
||||
font-size: 1rem;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
line-height: 60px;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
@using BewerbungsSeite
|
||||
@namespace BewerbungsSeite.Pages
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@@ -0,0 +1,3 @@
|
||||
@{
|
||||
Layout = "_Layout";
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using BewerbungsSeite.Data;
|
||||
using BewerbungsSeite.Models;
|
||||
using BewerbungsSeite.Services;
|
||||
using System.Text.Encodings.Web;
|
||||
using System.Text.Unicode;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
if (builder.Environment.IsDevelopment())
|
||||
{
|
||||
builder.Configuration.AddJsonFile("appsettings.Local.json", optional: true, reloadOnChange: true);
|
||||
}
|
||||
|
||||
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
|
||||
options.UseSqlServer(builder.Configuration.GetConnectionString("BewerbungsSeite") ?? throw new InvalidOperationException("Connection string 'BewerbungsSeite' not found.")));
|
||||
|
||||
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
|
||||
.AddCookie(options =>
|
||||
{
|
||||
options.LoginPath = "/Login";
|
||||
options.AccessDeniedPath = "/Login";
|
||||
});
|
||||
builder.Services.AddAuthorization();
|
||||
|
||||
builder.Services.AddRazorPages(options =>
|
||||
{
|
||||
options.Conventions.AuthorizeFolder("/Admin");
|
||||
});
|
||||
builder.Services.AddControllers();
|
||||
|
||||
builder.Services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));
|
||||
|
||||
builder.Services.AddHttpClient();
|
||||
builder.Services.AddSingleton<IContactMessageNotificationQueue, ContactMessageNotificationQueue>();
|
||||
builder.Services.AddHostedService<ContactMessageNotificationService>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
using (var scope = app.Services.CreateScope())
|
||||
{
|
||||
var services = scope.ServiceProvider;
|
||||
var context = services.GetRequiredService<RazorPagesMovieContext>();
|
||||
|
||||
context.Database.Migrate();
|
||||
|
||||
SeedData.Initialize(services);
|
||||
}
|
||||
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
app.UseStaticFiles();
|
||||
app.UseRouting();
|
||||
app.UseAuthentication();
|
||||
app.UseAuthorization();
|
||||
app.MapRazorPages();
|
||||
app.MapControllers();
|
||||
|
||||
app.Run();
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"dotnetRunMessages": true,
|
||||
"applicationUrl": "http://localhost:5223"
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"dotnetRunMessages": true,
|
||||
"applicationUrl": "https://localhost:7055;http://localhost:5223"
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"Container (Dockerfile)": {
|
||||
"commandName": "Docker",
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_HTTPS_PORTS": "8081",
|
||||
"ASPNETCORE_HTTP_PORTS": "8080"
|
||||
},
|
||||
"publishAllPorts": true,
|
||||
"useSSL": true
|
||||
}
|
||||
},
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:38323",
|
||||
"sslPort": 44354
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"mssql1": {
|
||||
"type": "mssql",
|
||||
"connectionId": "ConnectionStrings:BewerbungsSeite"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"mssql1": {
|
||||
"type": "mssql.local",
|
||||
"connectionId": "ConnectionStrings:BewerbungsSeite"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
namespace BewerbungsSeite.Models;
|
||||
|
||||
public static class SeedData
|
||||
{
|
||||
public static void Initialize(IServiceProvider serviceProvider)
|
||||
{
|
||||
using (var context = new RazorPagesMovieContext(
|
||||
serviceProvider.GetRequiredService<DbContextOptions<RazorPagesMovieContext>>()))
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException("Null RazorPagesMovieContext");
|
||||
}
|
||||
|
||||
if (!context.AdminUser.Any())
|
||||
{
|
||||
var accounts = serviceProvider.GetRequiredService<IConfiguration>()
|
||||
.GetSection("AdminAccounts")
|
||||
.Get<List<AdminAccountSeed>>() ?? new List<AdminAccountSeed>();
|
||||
|
||||
var hasher = new PasswordHasher<AdminUser>();
|
||||
|
||||
foreach (var account in accounts)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(account.Username) || string.IsNullOrWhiteSpace(account.Password))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var user = new AdminUser { Username = account.Username };
|
||||
user.PasswordHash = hasher.HashPassword(user, account.Password);
|
||||
context.AdminUser.Add(user);
|
||||
}
|
||||
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class AdminAccountSeed
|
||||
{
|
||||
public string Username { get; set; } = string.Empty;
|
||||
public string Password { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
using System.Net.Http.Json;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using BewerbungsSeite.Data;
|
||||
|
||||
namespace BewerbungsSeite.Services;
|
||||
|
||||
public class ContactMessageNotificationService : BackgroundService
|
||||
{
|
||||
private static readonly TimeSpan FallbackSweepInterval = TimeSpan.FromMinutes(2);
|
||||
|
||||
private readonly IServiceScopeFactory _scopeFactory;
|
||||
private readonly IHttpClientFactory _httpClientFactory;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IContactMessageNotificationQueue _queue;
|
||||
private readonly IHostEnvironment _hostEnvironment;
|
||||
private readonly ILogger<ContactMessageNotificationService> _logger;
|
||||
|
||||
public ContactMessageNotificationService(
|
||||
IServiceScopeFactory scopeFactory,
|
||||
IHttpClientFactory httpClientFactory,
|
||||
IConfiguration configuration,
|
||||
IContactMessageNotificationQueue queue,
|
||||
IHostEnvironment hostEnvironment,
|
||||
ILogger<ContactMessageNotificationService> logger)
|
||||
{
|
||||
_scopeFactory = scopeFactory;
|
||||
_httpClientFactory = httpClientFactory;
|
||||
_configuration = configuration;
|
||||
_queue = queue;
|
||||
_hostEnvironment = hostEnvironment;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
var consumerTask = ConsumeQueueAsync(stoppingToken);
|
||||
var fallbackSweepTask = RunFallbackSweepAsync(stoppingToken);
|
||||
|
||||
await Task.WhenAll(consumerTask, fallbackSweepTask);
|
||||
}
|
||||
|
||||
private async Task ConsumeQueueAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
await foreach (var contactMessageId in _queue.DequeueAllAsync(stoppingToken))
|
||||
{
|
||||
try
|
||||
{
|
||||
await SendNotificationAsync(contactMessageId, stoppingToken);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_queue.Release(contactMessageId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task RunFallbackSweepAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
while (!stoppingToken.IsCancellationRequested)
|
||||
{
|
||||
await EnqueueUnsentFromDatabaseAsync(stoppingToken);
|
||||
|
||||
try
|
||||
{
|
||||
await Task.Delay(FallbackSweepInterval, stoppingToken);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// Dienst wird beendet.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task EnqueueUnsentFromDatabaseAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
using var scope = _scopeFactory.CreateScope();
|
||||
var context = scope.ServiceProvider.GetRequiredService<RazorPagesMovieContext>();
|
||||
|
||||
var offeneIds = await context.ContactMessage
|
||||
.Where(c => !c.NotificationSent)
|
||||
.OrderBy(c => c.SentAt)
|
||||
.Select(c => c.Id)
|
||||
.ToListAsync(stoppingToken);
|
||||
|
||||
foreach (var id in offeneIds)
|
||||
{
|
||||
_queue.Enqueue(id);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task SendNotificationAsync(Guid contactMessageId, CancellationToken stoppingToken)
|
||||
{
|
||||
var botToken = _configuration["Telegram:BotToken"];
|
||||
var chatId = _configuration["Telegram:ChatId"];
|
||||
|
||||
if (string.IsNullOrWhiteSpace(botToken) || string.IsNullOrWhiteSpace(chatId))
|
||||
{
|
||||
_logger.LogWarning("Telegram:BotToken oder Telegram:ChatId ist nicht konfiguriert – Benachrichtigung wird übersprungen.");
|
||||
return;
|
||||
}
|
||||
|
||||
using var scope = _scopeFactory.CreateScope();
|
||||
var context = scope.ServiceProvider.GetRequiredService<RazorPagesMovieContext>();
|
||||
|
||||
var eintrag = await context.ContactMessage.FindAsync(new object?[] { contactMessageId }, stoppingToken);
|
||||
if (eintrag is null || eintrag.NotificationSent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var text = $"[{GetEnvironmentTag()}] Neue Kontaktanfrage von {eintrag.Name}\n"
|
||||
+ $"E-Mail: {eintrag.Email}\n"
|
||||
+ (string.IsNullOrWhiteSpace(eintrag.Phone) ? "" : $"Telefon: {eintrag.Phone}\n")
|
||||
+ (string.IsNullOrWhiteSpace(eintrag.Subject) ? "" : $"Betreff: {eintrag.Subject}\n")
|
||||
+ $"\n{eintrag.Message}";
|
||||
|
||||
var httpClient = _httpClientFactory.CreateClient();
|
||||
var sendMessageUrl = $"https://api.telegram.org/bot{botToken}/sendMessage";
|
||||
|
||||
try
|
||||
{
|
||||
var response = await httpClient.PostAsJsonAsync(
|
||||
sendMessageUrl,
|
||||
new { chat_id = chatId, text },
|
||||
stoppingToken);
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
eintrag.NotificationSent = true;
|
||||
await context.SaveChangesAsync(stoppingToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogWarning("Telegram-Versand fehlgeschlagen für ContactMessage {Id}: {StatusCode}", eintrag.Id, response.StatusCode);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Telegram-Versand fehlgeschlagen für ContactMessage {Id}", eintrag.Id);
|
||||
}
|
||||
}
|
||||
|
||||
private string GetEnvironmentTag() => _hostEnvironment.EnvironmentName switch
|
||||
{
|
||||
"Development" => "DEV",
|
||||
"Staging" => "TEST",
|
||||
"Production" => "PROD",
|
||||
var other => other.ToUpperInvariant()
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Threading.Channels;
|
||||
|
||||
namespace BewerbungsSeite.Services;
|
||||
|
||||
public interface IContactMessageNotificationQueue
|
||||
{
|
||||
void Enqueue(Guid contactMessageId);
|
||||
|
||||
IAsyncEnumerable<Guid> DequeueAllAsync(CancellationToken cancellationToken);
|
||||
|
||||
void Release(Guid contactMessageId);
|
||||
}
|
||||
|
||||
public class ContactMessageNotificationQueue : IContactMessageNotificationQueue
|
||||
{
|
||||
private readonly Channel<Guid> _channel = Channel.CreateUnbounded<Guid>();
|
||||
private readonly ConcurrentDictionary<Guid, byte> _inFlight = new();
|
||||
|
||||
public void Enqueue(Guid contactMessageId)
|
||||
{
|
||||
if (_inFlight.TryAdd(contactMessageId, 0))
|
||||
{
|
||||
_channel.Writer.TryWrite(contactMessageId);
|
||||
}
|
||||
}
|
||||
|
||||
public IAsyncEnumerable<Guid> DequeueAllAsync(CancellationToken cancellationToken) =>
|
||||
_channel.Reader.ReadAllAsync(cancellationToken);
|
||||
|
||||
public void Release(Guid contactMessageId) => _inFlight.TryRemove(contactMessageId, out _);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"DetailedErrors": true,
|
||||
"ConnectionStrings": {
|
||||
"BewerbungsSeite": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesMovieContext-bc;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=true"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Microsoft.AspNetCore": "Information"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"BewerbungsSeite": "Server=sqlserver,1433;Database=RazorPagesMovieContext;User Id=sa;Password=YourPassword123!;TrustServerCertificate=True"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Warning",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"BewerbungsSeite": "Server=sqlserver,1433;Database=RazorPagesMovieContext;User Id=sa;Password=YourPassword123!;TrustServerCertificate=True"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Warning",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
services:
|
||||
sqlserver:
|
||||
image: mcr.microsoft.com/mssql/server:2022-latest
|
||||
container_name: sqlserver
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- ACCEPT_EULA=Y
|
||||
- SA_PASSWORD=YourPassword123!
|
||||
ports:
|
||||
- "1700:1433"
|
||||
volumes:
|
||||
- /mnt/PoolHDD/AppData/razorpages-movie/sqlserver:/var/opt/mssql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P YourPassword123! -Q 'SELECT 1' -No"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 30s
|
||||
networks:
|
||||
- movienet
|
||||
|
||||
razorpagesmovie:
|
||||
image: francesco448/razorpagesmovie:latest
|
||||
container_name: razorpages-movie
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9001:8080"
|
||||
volumes:
|
||||
- ./app:/app
|
||||
working_dir: /app
|
||||
environment:
|
||||
- ASPNETCORE_ENVIRONMENT=Production
|
||||
- TZ=Europe/Zurich
|
||||
depends_on:
|
||||
sqlserver:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- movienet
|
||||
|
||||
networks:
|
||||
movienet:
|
||||
driver: bridge
|
||||
@@ -0,0 +1,935 @@
|
||||
/*
|
||||
Flaticon icon font: Flaticon
|
||||
Creation date: 27/11/2019 09:49
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: "Flaticon";
|
||||
src: url("../fonts/Flaticon.woff2") format("woff2"), url("../fonts/Flaticon.woff") format("woff");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
[class^="flaticon-"]:before,
|
||||
[class*=" flaticon-"]:before,
|
||||
[class^="flaticon-"]:after,
|
||||
[class*=" flaticon-"]:after {
|
||||
font-family: Flaticon;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.flaticon-map:before {
|
||||
content: "\f100";
|
||||
}
|
||||
|
||||
.flaticon-mail:before {
|
||||
content: "\f101";
|
||||
}
|
||||
|
||||
.flaticon-call-answer:before {
|
||||
content: "\f102";
|
||||
}
|
||||
|
||||
.flaticon-chat:before {
|
||||
content: "\f103";
|
||||
}
|
||||
|
||||
.flaticon-left-arrow:before {
|
||||
content: "\f104";
|
||||
}
|
||||
|
||||
.flaticon-right-arrow:before {
|
||||
content: "\f105";
|
||||
}
|
||||
|
||||
.flaticon-back:before {
|
||||
content: "\f106";
|
||||
}
|
||||
|
||||
.flaticon-next:before {
|
||||
content: "\f107";
|
||||
}
|
||||
|
||||
.flaticon-play-button:before {
|
||||
content: "\f108";
|
||||
}
|
||||
|
||||
.flaticon-play-button-1:before {
|
||||
content: "\f109";
|
||||
}
|
||||
|
||||
.flaticon-upload:before {
|
||||
content: "\f10a";
|
||||
}
|
||||
|
||||
.flaticon-back-1:before {
|
||||
content: "\f10b";
|
||||
}
|
||||
|
||||
.flaticon-responsive:before {
|
||||
content: "\f10c";
|
||||
}
|
||||
|
||||
.flaticon-add:before {
|
||||
content: "\f10d";
|
||||
}
|
||||
|
||||
.flaticon-play-button-2:before {
|
||||
content: "\f10e";
|
||||
}
|
||||
|
||||
.flaticon-android:before {
|
||||
content: "\f10f";
|
||||
}
|
||||
|
||||
.flaticon-fire:before {
|
||||
content: "\f110";
|
||||
}
|
||||
|
||||
.flaticon-layers:before {
|
||||
content: "\f111";
|
||||
}
|
||||
|
||||
.flaticon-computer:before {
|
||||
content: "\f112";
|
||||
}
|
||||
|
||||
.flaticon-chip:before {
|
||||
content: "\f113";
|
||||
}
|
||||
|
||||
.flaticon-cogwheels:before {
|
||||
content: "\f114";
|
||||
}
|
||||
|
||||
.flaticon-support:before {
|
||||
content: "\f115";
|
||||
}
|
||||
|
||||
.flaticon-web:before {
|
||||
content: "\f116";
|
||||
}
|
||||
|
||||
.flaticon-headset:before {
|
||||
content: "\f117";
|
||||
}
|
||||
|
||||
.flaticon-facebook:before {
|
||||
content: "\f118";
|
||||
}
|
||||
|
||||
.flaticon-drop-of-liquid:before {
|
||||
content: "\f119";
|
||||
}
|
||||
|
||||
.flaticon-drop:before {
|
||||
content: "\f11a";
|
||||
}
|
||||
|
||||
.flaticon-placeholder:before {
|
||||
content: "\f11b";
|
||||
}
|
||||
|
||||
.flaticon-shield:before {
|
||||
content: "\f11c";
|
||||
}
|
||||
|
||||
.flaticon-fountain-pen:before {
|
||||
content: "\f11d";
|
||||
}
|
||||
|
||||
.flaticon-fountain-pen-1:before {
|
||||
content: "\f11e";
|
||||
}
|
||||
|
||||
.flaticon-settings:before {
|
||||
content: "\f11f";
|
||||
}
|
||||
|
||||
.flaticon-phone-call:before {
|
||||
content: "\f120";
|
||||
}
|
||||
|
||||
.flaticon-call:before {
|
||||
content: "\f121";
|
||||
}
|
||||
|
||||
.flaticon-settings-1:before {
|
||||
content: "\f122";
|
||||
}
|
||||
|
||||
.flaticon-placeholder-1:before {
|
||||
content: "\f123";
|
||||
}
|
||||
|
||||
.flaticon-pen:before {
|
||||
content: "\f124";
|
||||
}
|
||||
|
||||
.flaticon-analytics:before {
|
||||
content: "\f125";
|
||||
}
|
||||
|
||||
.flaticon-monitor:before {
|
||||
content: "\f126";
|
||||
}
|
||||
|
||||
.flaticon-email:before {
|
||||
content: "\f127";
|
||||
}
|
||||
|
||||
.flaticon-speech-bubble:before {
|
||||
content: "\f128";
|
||||
}
|
||||
|
||||
.flaticon-suitcase:before {
|
||||
content: "\f129";
|
||||
}
|
||||
|
||||
.flaticon-communications:before {
|
||||
content: "\f12a";
|
||||
}
|
||||
|
||||
.flaticon-cash:before {
|
||||
content: "\f12b";
|
||||
}
|
||||
|
||||
.flaticon-twitter:before {
|
||||
content: "\f12c";
|
||||
}
|
||||
|
||||
.flaticon-twitter-2:before {
|
||||
content: "\f12d";
|
||||
}
|
||||
|
||||
.flaticon-instagram-logo:before {
|
||||
content: "\f12e";
|
||||
}
|
||||
|
||||
.flaticon-instagram-1:before {
|
||||
content: "\f12f";
|
||||
}
|
||||
|
||||
.flaticon-whatsapp-1:before {
|
||||
content: "\f130";
|
||||
}
|
||||
|
||||
.flaticon-linkedin-2:before {
|
||||
content: "\f131";
|
||||
}
|
||||
|
||||
.flaticon-twitter-1:before {
|
||||
content: "\f132";
|
||||
}
|
||||
|
||||
.flaticon-facebook-3:before {
|
||||
content: "\f133";
|
||||
}
|
||||
|
||||
.flaticon-whatsapp-2:before {
|
||||
content: "\f134";
|
||||
}
|
||||
|
||||
.flaticon-xiaomi:before {
|
||||
content: "\f135";
|
||||
}
|
||||
|
||||
.flaticon-odnoklassniki:before {
|
||||
content: "\f136";
|
||||
}
|
||||
|
||||
.flaticon-pinterest:before {
|
||||
content: "\f137";
|
||||
}
|
||||
|
||||
.flaticon-pinterest-1:before {
|
||||
content: "\f138";
|
||||
}
|
||||
|
||||
.flaticon-wifi:before {
|
||||
content: "\f139";
|
||||
}
|
||||
|
||||
.flaticon-light-bulb:before {
|
||||
content: "\f13a";
|
||||
}
|
||||
|
||||
.flaticon-project-management:before {
|
||||
content: "\f13b";
|
||||
}
|
||||
|
||||
.flaticon-monitor-1:before {
|
||||
content: "\f13c";
|
||||
}
|
||||
|
||||
.flaticon-camera:before {
|
||||
content: "\f13d";
|
||||
}
|
||||
|
||||
.flaticon-user:before {
|
||||
content: "\f13e";
|
||||
}
|
||||
|
||||
.flaticon-advertising:before {
|
||||
content: "\f13f";
|
||||
}
|
||||
|
||||
.flaticon-select:before {
|
||||
content: "\f140";
|
||||
}
|
||||
|
||||
.flaticon-snowflake:before {
|
||||
content: "\f141";
|
||||
}
|
||||
|
||||
.flaticon-snowflake-1:before {
|
||||
content: "\f142";
|
||||
}
|
||||
|
||||
.flaticon-travel-agency:before {
|
||||
content: "\f143";
|
||||
}
|
||||
|
||||
.flaticon-bauble:before {
|
||||
content: "\f144";
|
||||
}
|
||||
|
||||
.flaticon-temporary-agency:before {
|
||||
content: "\f145";
|
||||
}
|
||||
|
||||
.flaticon-star:before {
|
||||
content: "\f146";
|
||||
}
|
||||
|
||||
.flaticon-snow-globe:before {
|
||||
content: "\f147";
|
||||
}
|
||||
|
||||
.flaticon-christmas-tree:before {
|
||||
content: "\f148";
|
||||
}
|
||||
|
||||
.flaticon-gift:before {
|
||||
content: "\f149";
|
||||
}
|
||||
|
||||
.flaticon-mortgage:before {
|
||||
content: "\f14a";
|
||||
}
|
||||
|
||||
.flaticon-monitoring:before {
|
||||
content: "\f14b";
|
||||
}
|
||||
|
||||
.flaticon-network-1:before {
|
||||
content: "\f14c";
|
||||
}
|
||||
|
||||
.flaticon-neural:before {
|
||||
content: "\f14d";
|
||||
}
|
||||
|
||||
.flaticon-networking:before {
|
||||
content: "\f14e";
|
||||
}
|
||||
|
||||
.flaticon-cloud-computing:before {
|
||||
content: "\f14f";
|
||||
}
|
||||
|
||||
.flaticon-cloud-computing-1:before {
|
||||
content: "\f150";
|
||||
}
|
||||
|
||||
.flaticon-microchip:before {
|
||||
content: "\f151";
|
||||
}
|
||||
|
||||
.flaticon-social-care:before {
|
||||
content: "\f152";
|
||||
}
|
||||
|
||||
.flaticon-help:before {
|
||||
content: "\f153";
|
||||
}
|
||||
|
||||
.flaticon-begging:before {
|
||||
content: "\f154";
|
||||
}
|
||||
|
||||
.flaticon-customer-service:before {
|
||||
content: "\f155";
|
||||
}
|
||||
|
||||
.flaticon-support-2:before {
|
||||
content: "\f156";
|
||||
}
|
||||
|
||||
.flaticon-support-3:before {
|
||||
content: "\f157";
|
||||
}
|
||||
|
||||
.flaticon-customer-service-1:before {
|
||||
content: "\f158";
|
||||
}
|
||||
|
||||
.flaticon-customer-support:before {
|
||||
content: "\f159";
|
||||
}
|
||||
|
||||
.flaticon-headphones:before {
|
||||
content: "\f15a";
|
||||
}
|
||||
|
||||
.flaticon-social-care-1:before {
|
||||
content: "\f15b";
|
||||
}
|
||||
|
||||
.flaticon-care:before {
|
||||
content: "\f15c";
|
||||
}
|
||||
|
||||
.flaticon-user-1:before {
|
||||
content: "\f15d";
|
||||
}
|
||||
|
||||
.flaticon-phone:before {
|
||||
content: "\f15e";
|
||||
}
|
||||
|
||||
.flaticon-search:before {
|
||||
content: "\f15f";
|
||||
}
|
||||
|
||||
.flaticon-facebook-4:before {
|
||||
content: "\f160";
|
||||
}
|
||||
|
||||
.flaticon-pin:before {
|
||||
content: "\f161";
|
||||
}
|
||||
|
||||
.flaticon-user-2:before {
|
||||
content: "\f162";
|
||||
}
|
||||
|
||||
.flaticon-internet:before {
|
||||
content: "\f163";
|
||||
}
|
||||
|
||||
.flaticon-user-3:before {
|
||||
content: "\f164";
|
||||
}
|
||||
|
||||
.flaticon-chat-1:before {
|
||||
content: "\f165";
|
||||
}
|
||||
|
||||
.flaticon-team:before {
|
||||
content: "\f166";
|
||||
}
|
||||
|
||||
.flaticon-connection:before {
|
||||
content: "\f167";
|
||||
}
|
||||
|
||||
.flaticon-bar-chart:before {
|
||||
content: "\f168";
|
||||
}
|
||||
|
||||
.flaticon-money:before {
|
||||
content: "\f169";
|
||||
}
|
||||
|
||||
.flaticon-file:before {
|
||||
content: "\f16a";
|
||||
}
|
||||
|
||||
.flaticon-linkedin-3:before {
|
||||
content: "\f16b";
|
||||
}
|
||||
|
||||
.flaticon-pinterest-2:before {
|
||||
content: "\f16c";
|
||||
}
|
||||
|
||||
.flaticon-google-browser:before {
|
||||
content: "\f16d";
|
||||
}
|
||||
|
||||
.flaticon-gmail-1:before {
|
||||
content: "\f16e";
|
||||
}
|
||||
|
||||
.flaticon-gmail-3:before {
|
||||
content: "\f16f";
|
||||
}
|
||||
|
||||
.flaticon-vimeo:before {
|
||||
content: "\f170";
|
||||
}
|
||||
|
||||
.flaticon-vimeo-2:before {
|
||||
content: "\f171";
|
||||
}
|
||||
|
||||
.flaticon-skype:before {
|
||||
content: "\f172";
|
||||
}
|
||||
|
||||
.flaticon-skype-1:before {
|
||||
content: "\f173";
|
||||
}
|
||||
|
||||
.flaticon-skype-2:before {
|
||||
content: "\f174";
|
||||
}
|
||||
|
||||
.flaticon-skype-3:before {
|
||||
content: "\f175";
|
||||
}
|
||||
|
||||
.flaticon-google-plus-logo:before {
|
||||
content: "\f176";
|
||||
}
|
||||
|
||||
.flaticon-like:before {
|
||||
content: "\f177";
|
||||
}
|
||||
|
||||
.flaticon-clock:before {
|
||||
content: "\f178";
|
||||
}
|
||||
|
||||
.flaticon-loupe:before {
|
||||
content: "\f179";
|
||||
}
|
||||
|
||||
.flaticon-money-1:before {
|
||||
content: "\f17a";
|
||||
}
|
||||
|
||||
.flaticon-hand-shake:before {
|
||||
content: "\f17b";
|
||||
}
|
||||
|
||||
.flaticon-team-1:before {
|
||||
content: "\f17c";
|
||||
}
|
||||
|
||||
.flaticon-money-2:before {
|
||||
content: "\f17d";
|
||||
}
|
||||
|
||||
.flaticon-man:before {
|
||||
content: "\f17e";
|
||||
}
|
||||
|
||||
.flaticon-value:before {
|
||||
content: "\f17f";
|
||||
}
|
||||
|
||||
.flaticon-share:before {
|
||||
content: "\f180";
|
||||
}
|
||||
|
||||
.flaticon-time:before {
|
||||
content: "\f181";
|
||||
}
|
||||
|
||||
.flaticon-school:before {
|
||||
content: "\f182";
|
||||
}
|
||||
|
||||
.flaticon-chart:before {
|
||||
content: "\f183";
|
||||
}
|
||||
|
||||
.flaticon-data:before {
|
||||
content: "\f184";
|
||||
}
|
||||
|
||||
.flaticon-photo:before {
|
||||
content: "\f185";
|
||||
}
|
||||
|
||||
.flaticon-internet-1:before {
|
||||
content: "\f186";
|
||||
}
|
||||
|
||||
.flaticon-money-3:before {
|
||||
content: "\f187";
|
||||
}
|
||||
|
||||
.flaticon-payment:before {
|
||||
content: "\f188";
|
||||
}
|
||||
|
||||
.flaticon-pin-1:before {
|
||||
content: "\f189";
|
||||
}
|
||||
|
||||
.flaticon-time-1:before {
|
||||
content: "\f18a";
|
||||
}
|
||||
|
||||
.flaticon-idea:before {
|
||||
content: "\f18b";
|
||||
}
|
||||
|
||||
.flaticon-download:before {
|
||||
content: "\f18c";
|
||||
}
|
||||
|
||||
.flaticon-growth:before {
|
||||
content: "\f18d";
|
||||
}
|
||||
|
||||
.flaticon-multimedia:before {
|
||||
content: "\f18e";
|
||||
}
|
||||
|
||||
.flaticon-network-2:before {
|
||||
content: "\f18f";
|
||||
}
|
||||
|
||||
.flaticon-next-1:before {
|
||||
content: "\f190";
|
||||
}
|
||||
|
||||
.flaticon-origami:before {
|
||||
content: "\f191";
|
||||
}
|
||||
|
||||
.flaticon-share-1:before {
|
||||
content: "\f192";
|
||||
}
|
||||
|
||||
.flaticon-clock-1:before {
|
||||
content: "\f193";
|
||||
}
|
||||
|
||||
.flaticon-refresh:before {
|
||||
content: "\f194";
|
||||
}
|
||||
|
||||
.flaticon-avatar:before {
|
||||
content: "\f195";
|
||||
}
|
||||
|
||||
.flaticon-support-4:before {
|
||||
content: "\f196";
|
||||
}
|
||||
|
||||
.flaticon-cursor:before {
|
||||
content: "\f197";
|
||||
}
|
||||
|
||||
.flaticon-brain:before {
|
||||
content: "\f198";
|
||||
}
|
||||
|
||||
.flaticon-laptop:before {
|
||||
content: "\f199";
|
||||
}
|
||||
|
||||
.flaticon-arrow:before {
|
||||
content: "\f19a";
|
||||
}
|
||||
|
||||
.flaticon-mortarboard:before {
|
||||
content: "\f19b";
|
||||
}
|
||||
|
||||
.flaticon-avatar-1:before {
|
||||
content: "\f19c";
|
||||
}
|
||||
|
||||
.flaticon-chat-2:before {
|
||||
content: "\f19d";
|
||||
}
|
||||
|
||||
.flaticon-question:before {
|
||||
content: "\f19e";
|
||||
}
|
||||
|
||||
.flaticon-test:before {
|
||||
content: "\f19f";
|
||||
}
|
||||
|
||||
.flaticon-doctor:before {
|
||||
content: "\f1a0";
|
||||
}
|
||||
|
||||
.flaticon-support-5:before {
|
||||
content: "\f1a1";
|
||||
}
|
||||
|
||||
.flaticon-map-1:before {
|
||||
content: "\f1a2";
|
||||
}
|
||||
|
||||
.flaticon-eye:before {
|
||||
content: "\f1a3";
|
||||
}
|
||||
|
||||
.flaticon-money-4:before {
|
||||
content: "\f1a4";
|
||||
}
|
||||
|
||||
.flaticon-world:before {
|
||||
content: "\f1a5";
|
||||
}
|
||||
|
||||
.flaticon-school-1:before {
|
||||
content: "\f1a6";
|
||||
}
|
||||
|
||||
.flaticon-chat-3:before {
|
||||
content: "\f1a7";
|
||||
}
|
||||
|
||||
.flaticon-idea-1:before {
|
||||
content: "\f1a8";
|
||||
}
|
||||
|
||||
.flaticon-support-6:before {
|
||||
content: "\f1a9";
|
||||
}
|
||||
|
||||
.flaticon-diamond:before {
|
||||
content: "\f1aa";
|
||||
}
|
||||
|
||||
.flaticon-time-2:before {
|
||||
content: "\f1ab";
|
||||
}
|
||||
|
||||
.flaticon-bag:before {
|
||||
content: "\f1ac";
|
||||
}
|
||||
|
||||
.flaticon-contract:before {
|
||||
content: "\f1ad";
|
||||
}
|
||||
|
||||
.flaticon-report:before {
|
||||
content: "\f1ae";
|
||||
}
|
||||
|
||||
.flaticon-folder:before {
|
||||
content: "\f1af";
|
||||
}
|
||||
|
||||
.flaticon-truck:before {
|
||||
content: "\f1b0";
|
||||
}
|
||||
|
||||
.flaticon-document:before {
|
||||
content: "\f1b1";
|
||||
}
|
||||
|
||||
.flaticon-plane:before {
|
||||
content: "\f1b2";
|
||||
}
|
||||
|
||||
.flaticon-time-3:before {
|
||||
content: "\f1b3";
|
||||
}
|
||||
|
||||
.flaticon-trash:before {
|
||||
content: "\f1b4";
|
||||
}
|
||||
|
||||
.flaticon-pin-2:before {
|
||||
content: "\f1b5";
|
||||
}
|
||||
|
||||
.flaticon-think:before {
|
||||
content: "\f1b6";
|
||||
}
|
||||
|
||||
.flaticon-idea-2:before {
|
||||
content: "\f1b7";
|
||||
}
|
||||
|
||||
.flaticon-download-1:before {
|
||||
content: "\f1b8";
|
||||
}
|
||||
|
||||
.flaticon-bell:before {
|
||||
content: "\f1b9";
|
||||
}
|
||||
|
||||
.flaticon-lock:before {
|
||||
content: "\f1ba";
|
||||
}
|
||||
|
||||
.flaticon-upload-1:before {
|
||||
content: "\f1bb";
|
||||
}
|
||||
|
||||
.flaticon-cinema:before {
|
||||
content: "\f1bc";
|
||||
}
|
||||
|
||||
.flaticon-goal:before {
|
||||
content: "\f1bd";
|
||||
}
|
||||
|
||||
.flaticon-work:before {
|
||||
content: "\f1be";
|
||||
}
|
||||
|
||||
.flaticon-design:before {
|
||||
content: "\f1bf";
|
||||
}
|
||||
|
||||
.flaticon-search-1:before {
|
||||
content: "\f1c0";
|
||||
}
|
||||
|
||||
.flaticon-food:before {
|
||||
content: "\f1c1";
|
||||
}
|
||||
|
||||
.flaticon-alert:before {
|
||||
content: "\f1c2";
|
||||
}
|
||||
|
||||
.flaticon-brain-1:before {
|
||||
content: "\f1c3";
|
||||
}
|
||||
|
||||
.flaticon-book:before {
|
||||
content: "\f1c4";
|
||||
}
|
||||
|
||||
.flaticon-time-4:before {
|
||||
content: "\f1c5";
|
||||
}
|
||||
|
||||
.flaticon-shield-1:before {
|
||||
content: "\f1c6";
|
||||
}
|
||||
|
||||
.flaticon-time-5:before {
|
||||
content: "\f1c7";
|
||||
}
|
||||
|
||||
.flaticon-man-1:before {
|
||||
content: "\f1c8";
|
||||
}
|
||||
|
||||
.flaticon-brain-2:before {
|
||||
content: "\f1c9";
|
||||
}
|
||||
|
||||
.flaticon-water:before {
|
||||
content: "\f1ca";
|
||||
}
|
||||
|
||||
.flaticon-content:before {
|
||||
content: "\f1cb";
|
||||
}
|
||||
|
||||
.flaticon-data-1:before {
|
||||
content: "\f1cc";
|
||||
}
|
||||
|
||||
.flaticon-like-1:before {
|
||||
content: "\f1cd";
|
||||
}
|
||||
|
||||
.flaticon-time-6:before {
|
||||
content: "\f1ce";
|
||||
}
|
||||
|
||||
.flaticon-sign:before {
|
||||
content: "\f1cf";
|
||||
}
|
||||
|
||||
.flaticon-book-1:before {
|
||||
content: "\f1d0";
|
||||
}
|
||||
|
||||
.flaticon-adjust:before {
|
||||
content: "\f1d1";
|
||||
}
|
||||
|
||||
.flaticon-menu:before {
|
||||
content: "\f1d2";
|
||||
}
|
||||
|
||||
.flaticon-calendar:before {
|
||||
content: "\f1d3";
|
||||
}
|
||||
|
||||
.flaticon-eye-1:before {
|
||||
content: "\f1d4";
|
||||
}
|
||||
|
||||
.flaticon-clock-2:before {
|
||||
content: "\f1d5";
|
||||
}
|
||||
|
||||
.flaticon-share-2:before {
|
||||
content: "\f1d6";
|
||||
}
|
||||
|
||||
.flaticon-fingerprint:before {
|
||||
content: "\f1d7";
|
||||
}
|
||||
|
||||
.flaticon-signal:before {
|
||||
content: "\f1d8";
|
||||
}
|
||||
|
||||
.flaticon-lock-1:before {
|
||||
content: "\f1d9";
|
||||
}
|
||||
|
||||
.flaticon-water-1:before {
|
||||
content: "\f1da";
|
||||
}
|
||||
|
||||
.flaticon-code:before {
|
||||
content: "\f1db";
|
||||
}
|
||||
|
||||
.flaticon-repeat:before {
|
||||
content: "\f1dc";
|
||||
}
|
||||
|
||||
.flaticon-map-2:before {
|
||||
content: "\f1dd";
|
||||
}
|
||||
|
||||
.flaticon-message:before {
|
||||
content: "\f1de";
|
||||
}
|
||||
|
||||
.flaticon-network-3:before {
|
||||
content: "\f1df";
|
||||
}
|
||||
|
||||
.flaticon-more:before {
|
||||
content: "\f1e0";
|
||||
}
|
||||
|
||||
.flaticon-random:before {
|
||||
content: "\f1e1";
|
||||
}
|
||||
|
||||
.flaticon-sign-1:before {
|
||||
content: "\f1e2";
|
||||
}
|
||||
|
||||
.flaticon-mail-1:before {
|
||||
content: "\f1e3";
|
||||
}
|
||||
|
||||
.flaticon-adjust-1:before {
|
||||
content: "\f1e4";
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
a.meanmenu-reveal{display:none}
|
||||
.mean-container .mean-bar {
|
||||
background: #E91F4F;
|
||||
float: left;
|
||||
min-height: 60px;
|
||||
padding: 4px 0 0;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
z-index: 999999;
|
||||
}
|
||||
.mean-container a.meanmenu-reveal{width:22px;height:22px;padding:18px;top:0;right:0;cursor:pointer;color:#fff;text-decoration:none;font-size:16px;text-indent:-9999em;line-height:22px;font-size:1px;display:block;font-family:Arial,Helvetica,sans-serif;font-weight:700;float: right;}
|
||||
.mean-container a.meanmenu-reveal span{display:block;background:#fff;height:3px;margin-top:3px}
|
||||
.mean-container .mean-nav{float:left;width:100%;background:#0c1923}
|
||||
.mean-container .mean-nav ul{padding:0;margin:0;width:100%;list-style-type:none}
|
||||
.mean-container .mean-nav ul li {
|
||||
background: #f8f8f8 none repeat scroll 0 0;
|
||||
float: left;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
border-top: 1px solid#ddd;
|
||||
}
|
||||
.mean-container .mean-nav ul li a {
|
||||
background: #f8f8f8 none repeat scroll 0 0;
|
||||
color: #666666;
|
||||
display: block;
|
||||
float: left;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 1em 5%;
|
||||
text-align: left;
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
width: 90%;
|
||||
font-weight: bold;
|
||||
}
|
||||
.mobile-menu-area {
|
||||
background: #262626;
|
||||
}
|
||||
.mean-container .mean-nav ul li li a {
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.25);
|
||||
opacity: 0.75;
|
||||
padding: 1em 10%;
|
||||
text-shadow: none !important;
|
||||
visibility: visible;
|
||||
width: 80%;
|
||||
font-weight: normal;
|
||||
text-transform: capitalize;
|
||||
color: #444;
|
||||
}
|
||||
.mean-container .mean-nav ul li.mean-last a{border-bottom:0;margin-bottom:0}
|
||||
.mean-container .mean-nav ul li li li a{width:70%;padding:1em 15%}
|
||||
.mean-container .mean-nav ul li li li li a{width:60%;padding:1em 20%}
|
||||
.mean-container .mean-nav ul li li li li li a{width:50%;padding:1em 25%}
|
||||
.mean-container .mean-nav ul li a:hover {
|
||||
background: #f8f8f8 none repeat scroll 0 0;
|
||||
color: #F47E1E;
|
||||
}
|
||||
.mean-container .mean-nav ul li a.mean-expand{
|
||||
width:26px;
|
||||
height: 15px;
|
||||
margin-top: 1px;
|
||||
padding: 12px !important;
|
||||
text-align:center;
|
||||
position:absolute;
|
||||
right:0;top:0;
|
||||
z-index:2;
|
||||
font-weight:700;
|
||||
background:rgba(255,255,255,.1);
|
||||
border:0!important;
|
||||
background: #F8F8F8;
|
||||
}
|
||||
.mean-container .mean-nav ul li a.mean-expand:hover {
|
||||
background: #f8f8f8;
|
||||
}
|
||||
.mean-container .mean-push{float:left;width:100%;padding:0;margin:0;clear:both}
|
||||
.mean-nav .wrapper{width:100%;padding:0;margin:0}
|
||||
.mean-container .mean-bar,.mean-container .mean-bar *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}
|
||||
.mean-remove{display:none!important}
|
||||
.mean-container .mean-bar::after {
|
||||
color: #ffffff;
|
||||
content: "MENU";
|
||||
font-size: 21px;
|
||||
left: 5%;
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------
|
||||
39. Mobile menu
|
||||
----------------------------------*/
|
||||
.mean-container .mean-bar::after {
|
||||
display: none;
|
||||
}
|
||||
.mean-container .mean-nav ul li a:hover {
|
||||
color: #0762f8;
|
||||
border-radius: 0;
|
||||
}
|
||||
.mean-container a.meanmenu-reveal span {
|
||||
background: #fff;
|
||||
}
|
||||
.mobile-menu-area {
|
||||
background: #fff none repeat scroll 0 0;
|
||||
}
|
||||
.mean-container .mean-nav ul li a {
|
||||
background: #fff;
|
||||
color: #444;
|
||||
display: block;
|
||||
}
|
||||
.mean-container .mean-nav ul li a.mean-expand {
|
||||
background: none;
|
||||
top: -4px;
|
||||
}
|
||||
.mean-container .mean-nav ul li a.mean-expand:hover {
|
||||
background: none;
|
||||
}
|
||||
.mean-container .mean-nav ul li {
|
||||
background: #444;
|
||||
}
|
||||
.mean-container .mean-nav ul li li a {
|
||||
color: #151948;
|
||||
opacity: .90;
|
||||
border-top: 0;
|
||||
}
|
||||
.mean-container a.meanmenu-reveal {
|
||||
color: #fff;
|
||||
}
|
||||
.meanmenu-reveal.meanclose:hover {
|
||||
color: #fff !important;
|
||||
}
|
||||
.mean-container a.meanmenu-reveal:hover span {
|
||||
background: #fff;
|
||||
}
|
||||
.mean-container .mean-bar::before {
|
||||
color: #fff;
|
||||
content: "Techno";
|
||||
font-size: 22px;
|
||||
font-weight: 800;
|
||||
left: 10px;
|
||||
position: absolute;
|
||||
top: 18px;
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* jQuery Nivo Slider v3.2
|
||||
* http://nivo.dev7studios.com
|
||||
*
|
||||
* Copyright 2012, Dev7studios
|
||||
* Free to use and abuse under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*/
|
||||
|
||||
/* The Nivo Slider styles */
|
||||
.nivoSlider {
|
||||
position:relative;
|
||||
width:100%;
|
||||
height:auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.nivoSlider img {
|
||||
position:absolute;
|
||||
top:0px;
|
||||
left:0px;
|
||||
max-width: none;
|
||||
}
|
||||
.nivo-main-image {
|
||||
display: block !important;
|
||||
position: relative !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
/* If an image is wrapped in a link */
|
||||
.nivoSlider a.nivo-imageLink {
|
||||
position:absolute;
|
||||
top:0px;
|
||||
left:0px;
|
||||
width:100%;
|
||||
height:100%;
|
||||
border:0;
|
||||
padding:0;
|
||||
margin:0;
|
||||
z-index:6;
|
||||
display:none;
|
||||
background:white;
|
||||
filter:alpha(opacity=0);
|
||||
opacity:0;
|
||||
}
|
||||
/* The slices and boxes in the Slider */
|
||||
.nivo-slice {
|
||||
display:block;
|
||||
position:absolute;
|
||||
z-index:5;
|
||||
height:100%;
|
||||
top:0;
|
||||
}
|
||||
.nivo-box {
|
||||
display:block;
|
||||
position:absolute;
|
||||
z-index:5;
|
||||
overflow:hidden;
|
||||
}
|
||||
.nivo-box img { display:block; }
|
||||
|
||||
/* Caption styles */
|
||||
.nivo-caption {
|
||||
position:absolute;
|
||||
left:0px;
|
||||
bottom:0px;
|
||||
background:#000;
|
||||
color:#fff;
|
||||
width:100%;
|
||||
z-index:8;
|
||||
padding: 5px 10px;
|
||||
opacity: 0.8;
|
||||
overflow: hidden;
|
||||
display: none;
|
||||
-moz-opacity: 0.8;
|
||||
filter:alpha(opacity=8);
|
||||
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
||||
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
||||
box-sizing: border-box; /* Opera/IE 8+ */
|
||||
}
|
||||
.nivo-caption p {
|
||||
padding:5px;
|
||||
margin:0;
|
||||
}
|
||||
.nivo-caption a {
|
||||
display:inline !important;
|
||||
}
|
||||
.nivo-html-caption {
|
||||
display:none;
|
||||
}
|
||||
/* Direction nav styles (e.g. Next & Prev) */
|
||||
.nivo-directionNav a {
|
||||
position:absolute;
|
||||
top:45%;
|
||||
z-index:9;
|
||||
cursor:pointer;
|
||||
}
|
||||
.nivo-prevNav {
|
||||
left:0px;
|
||||
}
|
||||
.nivo-nextNav {
|
||||
right:0px;
|
||||
}
|
||||
/* Control nav styles (e.g. 1,2,3...) */
|
||||
.nivo-controlNav {
|
||||
text-align:center;
|
||||
padding: 15px 0;
|
||||
}
|
||||
.nivo-controlNav a {
|
||||
cursor:pointer;
|
||||
}
|
||||
.nivo-controlNav a.active {
|
||||
font-weight:bold;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
/**
|
||||
* Owl Carousel v2.2.1
|
||||
* Copyright 2013-2025 David Deutsch
|
||||
* Licensed under ()
|
||||
*/
|
||||
.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}
|
||||
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* Owl Carousel CSS3 Transitions
|
||||
* v1.3.2
|
||||
*/
|
||||
|
||||
.owl-origin {
|
||||
-webkit-perspective: 1200px;
|
||||
-webkit-perspective-origin-x : 50%;
|
||||
-webkit-perspective-origin-y : 50%;
|
||||
-moz-perspective : 1200px;
|
||||
-moz-perspective-origin-x : 50%;
|
||||
-moz-perspective-origin-y : 50%;
|
||||
perspective : 1200px;
|
||||
}
|
||||
/* fade */
|
||||
.owl-fade-out {
|
||||
z-index: 10;
|
||||
-webkit-animation: fadeOut .7s both ease;
|
||||
-moz-animation: fadeOut .7s both ease;
|
||||
animation: fadeOut .7s both ease;
|
||||
}
|
||||
.owl-fade-in {
|
||||
-webkit-animation: fadeIn .7s both ease;
|
||||
-moz-animation: fadeIn .7s both ease;
|
||||
animation: fadeIn .7s both ease;
|
||||
}
|
||||
/* backSlide */
|
||||
.owl-backSlide-out {
|
||||
-webkit-animation: backSlideOut 1s both ease;
|
||||
-moz-animation: backSlideOut 1s both ease;
|
||||
animation: backSlideOut 1s both ease;
|
||||
}
|
||||
.owl-backSlide-in {
|
||||
-webkit-animation: backSlideIn 1s both ease;
|
||||
-moz-animation: backSlideIn 1s both ease;
|
||||
animation: backSlideIn 1s both ease;
|
||||
}
|
||||
/* goDown */
|
||||
.owl-goDown-out {
|
||||
-webkit-animation: scaleToFade .7s ease both;
|
||||
-moz-animation: scaleToFade .7s ease both;
|
||||
animation: scaleToFade .7s ease both;
|
||||
}
|
||||
.owl-goDown-in {
|
||||
-webkit-animation: goDown .6s ease both;
|
||||
-moz-animation: goDown .6s ease both;
|
||||
animation: goDown .6s ease both;
|
||||
}
|
||||
/* scaleUp */
|
||||
.owl-fadeUp-in {
|
||||
-webkit-animation: scaleUpFrom .5s ease both;
|
||||
-moz-animation: scaleUpFrom .5s ease both;
|
||||
animation: scaleUpFrom .5s ease both;
|
||||
}
|
||||
|
||||
.owl-fadeUp-out {
|
||||
-webkit-animation: scaleUpTo .5s ease both;
|
||||
-moz-animation: scaleUpTo .5s ease both;
|
||||
animation: scaleUpTo .5s ease both;
|
||||
}
|
||||
/* Keyframes */
|
||||
/*empty*/
|
||||
@-webkit-keyframes empty {
|
||||
0% {opacity: 1}
|
||||
}
|
||||
@-moz-keyframes empty {
|
||||
0% {opacity: 1}
|
||||
}
|
||||
@keyframes empty {
|
||||
0% {opacity: 1}
|
||||
}
|
||||
@-webkit-keyframes fadeIn {
|
||||
0% { opacity:0; }
|
||||
100% { opacity:1; }
|
||||
}
|
||||
@-moz-keyframes fadeIn {
|
||||
0% { opacity:0; }
|
||||
100% { opacity:1; }
|
||||
}
|
||||
@keyframes fadeIn {
|
||||
0% { opacity:0; }
|
||||
100% { opacity:1; }
|
||||
}
|
||||
@-webkit-keyframes fadeOut {
|
||||
0% { opacity:1; }
|
||||
100% { opacity:0; }
|
||||
}
|
||||
@-moz-keyframes fadeOut {
|
||||
0% { opacity:1; }
|
||||
100% { opacity:0; }
|
||||
}
|
||||
@keyframes fadeOut {
|
||||
0% { opacity:1; }
|
||||
100% { opacity:0; }
|
||||
}
|
||||
@-webkit-keyframes backSlideOut {
|
||||
25% { opacity: .5; -webkit-transform: translateZ(-500px); }
|
||||
75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
|
||||
100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
|
||||
}
|
||||
@-moz-keyframes backSlideOut {
|
||||
25% { opacity: .5; -moz-transform: translateZ(-500px); }
|
||||
75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
|
||||
100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
|
||||
}
|
||||
@keyframes backSlideOut {
|
||||
25% { opacity: .5; transform: translateZ(-500px); }
|
||||
75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
|
||||
100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
|
||||
}
|
||||
@-webkit-keyframes backSlideIn {
|
||||
0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); }
|
||||
75% { opacity: .5; -webkit-transform: translateZ(-500px); }
|
||||
100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); }
|
||||
}
|
||||
@-moz-keyframes backSlideIn {
|
||||
0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); }
|
||||
75% { opacity: .5; -moz-transform: translateZ(-500px); }
|
||||
100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); }
|
||||
}
|
||||
@keyframes backSlideIn {
|
||||
0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); }
|
||||
75% { opacity: .5; transform: translateZ(-500px); }
|
||||
100% { opacity: 1; transform: translateZ(0) translateX(0); }
|
||||
}
|
||||
@-webkit-keyframes scaleToFade {
|
||||
to { opacity: 0; -webkit-transform: scale(.8); }
|
||||
}
|
||||
@-moz-keyframes scaleToFade {
|
||||
to { opacity: 0; -moz-transform: scale(.8); }
|
||||
}
|
||||
@keyframes scaleToFade {
|
||||
to { opacity: 0; transform: scale(.8); }
|
||||
}
|
||||
@-webkit-keyframes goDown {
|
||||
from { -webkit-transform: translateY(-100%); }
|
||||
}
|
||||
@-moz-keyframes goDown {
|
||||
from { -moz-transform: translateY(-100%); }
|
||||
}
|
||||
@keyframes goDown {
|
||||
from { transform: translateY(-100%); }
|
||||
}
|
||||
|
||||
@-webkit-keyframes scaleUpFrom {
|
||||
from { opacity: 0; -webkit-transform: scale(1.5); }
|
||||
}
|
||||
@-moz-keyframes scaleUpFrom {
|
||||
from { opacity: 0; -moz-transform: scale(1.5); }
|
||||
}
|
||||
@keyframes scaleUpFrom {
|
||||
from { opacity: 0; transform: scale(1.5); }
|
||||
}
|
||||
|
||||
@-webkit-keyframes scaleUpTo {
|
||||
to { opacity: 0; -webkit-transform: scale(1.5); }
|
||||
}
|
||||
@-moz-keyframes scaleUpTo {
|
||||
to { opacity: 0; -moz-transform: scale(1.5); }
|
||||
}
|
||||
@keyframes scaleUpTo {
|
||||
to { opacity: 0; transform: scale(1.5); }
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
@charset 'UTF-8';
|
||||
/* Slider */
|
||||
.slick-loading .slick-list
|
||||
{
|
||||
background: #fff url('./ajax-loader.gif') center center no-repeat;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
@font-face
|
||||
{
|
||||
font-family: 'slick';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
src: url('./fonts/slick.eot');
|
||||
src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
|
||||
}
|
||||
/* Arrows */
|
||||
.slick-prev,
|
||||
.slick-next
|
||||
{
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover,
|
||||
.slick-prev:focus,
|
||||
.slick-next:hover,
|
||||
.slick-next:focus
|
||||
{
|
||||
color: transparent;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover:before,
|
||||
.slick-prev:focus:before,
|
||||
.slick-next:hover:before,
|
||||
.slick-next:focus:before
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-prev.slick-disabled:before,
|
||||
.slick-next.slick-disabled:before
|
||||
{
|
||||
opacity: .25;
|
||||
}
|
||||
|
||||
.slick-prev:before,
|
||||
.slick-next:before
|
||||
{
|
||||
font-family: 'slick';
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
|
||||
opacity: .75;
|
||||
color: white;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.slick-prev
|
||||
{
|
||||
left: -25px;
|
||||
}
|
||||
[dir='rtl'] .slick-prev
|
||||
{
|
||||
right: -25px;
|
||||
left: auto;
|
||||
}
|
||||
.slick-prev:before
|
||||
{
|
||||
content: '←';
|
||||
}
|
||||
[dir='rtl'] .slick-prev:before
|
||||
{
|
||||
content: '→';
|
||||
}
|
||||
|
||||
.slick-next
|
||||
{
|
||||
right: -25px;
|
||||
}
|
||||
[dir='rtl'] .slick-next
|
||||
{
|
||||
right: auto;
|
||||
left: -25px;
|
||||
}
|
||||
.slick-next:before
|
||||
{
|
||||
content: '→';
|
||||
}
|
||||
[dir='rtl'] .slick-next:before
|
||||
{
|
||||
content: '←';
|
||||
}
|
||||
|
||||
/* Dots */
|
||||
.slick-dotted.slick-slider
|
||||
{
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.slick-dots
|
||||
{
|
||||
position: absolute;
|
||||
bottom: -25px;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
list-style: none;
|
||||
|
||||
text-align: center;
|
||||
}
|
||||
.slick-dots li
|
||||
{
|
||||
position: relative;
|
||||
|
||||
display: inline-block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button
|
||||
{
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 5px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: 0;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-dots li button:hover,
|
||||
.slick-dots li button:focus
|
||||
{
|
||||
outline: none;
|
||||
}
|
||||
.slick-dots li button:hover:before,
|
||||
.slick-dots li button:focus:before
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-dots li button:before
|
||||
{
|
||||
font-family: 'slick';
|
||||
font-size: 6px;
|
||||
line-height: 20px;
|
||||
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
|
||||
content: '•';
|
||||
text-align: center;
|
||||
|
||||
opacity: .25;
|
||||
color: black;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.slick-dots li.slick-active button:before
|
||||
{
|
||||
opacity: .75;
|
||||
color: black;
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
/* Slider */
|
||||
.slick-slider
|
||||
{
|
||||
position: relative;
|
||||
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-khtml-user-select: none;
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
.slick-list
|
||||
{
|
||||
position: relative;
|
||||
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.slick-list:focus
|
||||
{
|
||||
outline: none;
|
||||
}
|
||||
.slick-list.dragging
|
||||
{
|
||||
cursor: pointer;
|
||||
cursor: hand;
|
||||
}
|
||||
|
||||
.slick-slider .slick-track,
|
||||
.slick-slider .slick-list
|
||||
{
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
-o-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.slick-track
|
||||
{
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.slick-track:before,
|
||||
.slick-track:after
|
||||
{
|
||||
display: table;
|
||||
|
||||
content: '';
|
||||
}
|
||||
.slick-track:after
|
||||
{
|
||||
clear: both;
|
||||
}
|
||||
.slick-loading .slick-track
|
||||
{
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.slick-slide
|
||||
{
|
||||
display: none;
|
||||
float: left;
|
||||
|
||||
height: 100%;
|
||||
min-height: 1px;
|
||||
}
|
||||
[dir='rtl'] .slick-slide
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
.slick-slide img
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
.slick-slide.slick-loading img
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
.slick-slide.dragging img
|
||||
{
|
||||
pointer-events: none;
|
||||
}
|
||||
.slick-initialized .slick-slide
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
.slick-loading .slick-slide
|
||||
{
|
||||
visibility: hidden;
|
||||
}
|
||||
.slick-vertical .slick-slide
|
||||
{
|
||||
display: block;
|
||||
|
||||
height: auto;
|
||||
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
.slick-arrow.slick-hidden {
|
||||
display: none;
|
||||
}
|
||||
@@ -0,0 +1,516 @@
|
||||
/*
|
||||
font-family: 'Rajdhani', sans-serif;
|
||||
font-family: 'Rubik', sans-serif;
|
||||
|
||||
*/
|
||||
@import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@300;400;500;700&family=Rubik:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
|
||||
|
||||
html, body {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
color: #33354b;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
line-height: 28px;
|
||||
text-align: left;
|
||||
font-family: 'Rubik', sans-serif;
|
||||
}
|
||||
|
||||
p {
|
||||
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
color: #151423;
|
||||
font-family: 'Rajdhani', sans-serif;
|
||||
font-style: normal;
|
||||
margin-bottom: 0;
|
||||
margin-top: 11px;
|
||||
line-height: 1.2;
|
||||
font-weight: 700;
|
||||
-webkit-transition: .5s;
|
||||
transition: .5s;
|
||||
}
|
||||
a{
|
||||
-webkit-transition: all 0.3s ease-out 0s;
|
||||
transition: all 0.3s ease-out 0s;
|
||||
}
|
||||
a{
|
||||
color: #33354b;
|
||||
}
|
||||
a:focus,
|
||||
.btn:focus {
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
a:focus,
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
.uppercase {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.capitalize {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
h1 a,
|
||||
h2 a,
|
||||
h3 a,
|
||||
h4 a,
|
||||
h5 a,
|
||||
h6 a {
|
||||
color: inherit;
|
||||
-webkit-transition: .5s;
|
||||
transition: .5s;
|
||||
}
|
||||
h1 {
|
||||
font-size:45px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 35px;
|
||||
|
||||
}
|
||||
h3 {
|
||||
font-size: 30px;
|
||||
}
|
||||
h4 {
|
||||
font-size: 24px;
|
||||
}
|
||||
h5 {
|
||||
font-size: 20px;
|
||||
}
|
||||
h6 {
|
||||
font-size: 18px;
|
||||
}
|
||||
.white h1,
|
||||
.white h2,
|
||||
.white h3,
|
||||
.white h4,
|
||||
.white h5,
|
||||
.white h6 {
|
||||
color: #fff;
|
||||
}
|
||||
.white p {
|
||||
color: #fff;
|
||||
}
|
||||
.white i {
|
||||
color: #fff;
|
||||
}
|
||||
ul {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
li {
|
||||
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
|
||||
}
|
||||
input:focus,
|
||||
button:focus
|
||||
{
|
||||
border-color:transparent;
|
||||
outline-color:transparent;
|
||||
}
|
||||
textarea:focus{
|
||||
background: rgba(252,150,21,0.2);
|
||||
border-color:transparent;
|
||||
outline-color:transparent;
|
||||
box-shadow: 0 0 0 0.2rem rgb(252 150 21 / 50%);
|
||||
}
|
||||
hr {
|
||||
margin: 60px 0;
|
||||
padding: 0px;
|
||||
border-bottom: 1px solid #eceff8;
|
||||
border-top: 0px;
|
||||
}
|
||||
hr.style-2 {
|
||||
border-bottom: 1px dashed #f10;
|
||||
}
|
||||
hr.mp-0 {
|
||||
margin: 0;
|
||||
border-bottom: 1px solid #eceff8;
|
||||
}
|
||||
hr.mtb-40 {
|
||||
margin: 40px 0;
|
||||
border-bottom: 1px solid #eceff8;
|
||||
border-top: 0px;
|
||||
}
|
||||
label {
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
a,i, cite, em, var, address, dfn,ol,li,ul{
|
||||
font-style:normal;
|
||||
font-weight:400;
|
||||
}
|
||||
/* Default Background */
|
||||
.bg_color {
|
||||
background: #43baff;
|
||||
}
|
||||
.bg_color2 {
|
||||
background: #211e3b !important;
|
||||
}
|
||||
.white_bg{
|
||||
background: #fff;
|
||||
}
|
||||
.bg_fixed {
|
||||
background-attachment: fixed;
|
||||
}
|
||||
.bg_before{
|
||||
position:relative;
|
||||
}
|
||||
.bg_before:before{
|
||||
position:absolute;
|
||||
content:"";
|
||||
left:0;
|
||||
top:0;
|
||||
height:100%;
|
||||
width:100%;
|
||||
background:rgba(12,90,219,0.3);
|
||||
}
|
||||
.nagative_mb {
|
||||
position: relative;
|
||||
margin-bottom: -180px;
|
||||
z-index: 1;
|
||||
}
|
||||
*::-moz-selection {
|
||||
background: #4fc1f0;
|
||||
color: #fff;
|
||||
text-shadow: none;
|
||||
}
|
||||
::-moz-selection {
|
||||
background: #4fc1f0;
|
||||
color: #fff;
|
||||
text-shadow: none;
|
||||
}
|
||||
::selection {
|
||||
background: #4fc1f0;
|
||||
color: #fff;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: #9da4a8;
|
||||
font-size: 15px;
|
||||
}
|
||||
::-webkit-input-placeholder {
|
||||
/* Chrome/Opera/Safari */
|
||||
|
||||
color: #9da4a8;
|
||||
}
|
||||
::-moz-placeholder {
|
||||
/* Firefox 19+ */
|
||||
color: #9da4a8;
|
||||
}
|
||||
:-ms-input-placeholder {
|
||||
/* IE 10+ */
|
||||
|
||||
color: #9da4a8;
|
||||
}
|
||||
:-moz-placeholder {
|
||||
/* Firefox 18- */
|
||||
|
||||
color: #9da4a8;
|
||||
}
|
||||
/* Contact Area */
|
||||
.counter_area ::-moz-selection {
|
||||
contact_area: #001d23;
|
||||
text-shadow: none;
|
||||
}
|
||||
.contact_area ::-moz-selection {
|
||||
color: #001d23;
|
||||
text-shadow: none;
|
||||
}
|
||||
.contact_area ::selection {
|
||||
color: #001d23;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.contact_area ::placeholder {
|
||||
color: #001d23;
|
||||
font-size: 16px;
|
||||
}
|
||||
.contact_area ::-webkit-input-placeholder {
|
||||
/* Chrome/Opera/Safari */
|
||||
color: #001d23;
|
||||
}
|
||||
.contact_area ::-moz-placeholder {
|
||||
/* Firefox 19+ */
|
||||
color: #001d23;
|
||||
}
|
||||
.contact_area :-ms-input-placeholder {
|
||||
/* IE 10+ */
|
||||
color: #001d23;
|
||||
}
|
||||
.contact_area :-moz-placeholder {
|
||||
/* Firefox 18- */
|
||||
color: #001d23;
|
||||
}
|
||||
.blog_reply ::-moz-selection {
|
||||
color: #151948;
|
||||
}
|
||||
.blog_reply ::-moz-selection {
|
||||
color: #151948;
|
||||
}
|
||||
.blog_reply ::selection {
|
||||
color: #151948;
|
||||
}
|
||||
.blog_reply::placeholder {
|
||||
color: #151948;
|
||||
}
|
||||
.blog_reply ::-webkit-input-placeholder {
|
||||
/* Chrome/Opera/Safari */
|
||||
color: #151948;
|
||||
}
|
||||
.blog_reply ::-moz-placeholder {
|
||||
/* Firefox 19+ */
|
||||
color: #151948;
|
||||
}
|
||||
.blog_reply :-ms-input-placeholder {
|
||||
/* IE 10+ */
|
||||
color: #151948;
|
||||
}
|
||||
.blog_reply :-moz-placeholder {
|
||||
/* Firefox 18- */
|
||||
color: #151948;
|
||||
}
|
||||
/* Padding Top Css */
|
||||
.pt-350{padding-top:350px;}
|
||||
.pt-300{padding-top:300px;}
|
||||
.pt-280{padding-top:280px;}
|
||||
.pt-250{padding-top:250px;}
|
||||
.pt-220{padding-top:220px;}
|
||||
.pt-190{padding-top:190px;}
|
||||
.pt-180{padding-top:180px;}
|
||||
.pt-170{padding-top:170px;}
|
||||
.pt-160{padding-top:160px;}
|
||||
.pt-150{padding-top:150px;}
|
||||
.pt-140{padding-top:140px;}
|
||||
.pt-130{padding-top:130px;}
|
||||
.pt-120{padding-top:120px;}
|
||||
.pt-115{padding-top:115px;}
|
||||
.pt-110{padding-top:110px;}
|
||||
.pt-100{padding-top:100px;}
|
||||
.pt-95{padding-top:95px;}
|
||||
.pt-90{padding-top:90px;}
|
||||
.pt-85{padding-top:85px;}
|
||||
.pt-80{padding-top:80px;}
|
||||
.pt-75{padding-top:75px;}
|
||||
.pt-70{padding-top:70px;}
|
||||
.pt-65{padding-top:65px;}
|
||||
.pt-60{padding-top:60px;}
|
||||
.pt-55{padding-top:55px;}
|
||||
.pt-50{padding-top:50px;}
|
||||
.pt-45{padding-top:45px;}
|
||||
.pt-40{padding-top:40px;}
|
||||
.pt-35{padding-top:35px;}
|
||||
.pt-30{padding-top:30px;}
|
||||
.pt-25{padding-top:25px;}
|
||||
.pt-20{padding-top:20px;}
|
||||
.pt-15{padding-top:15px;}
|
||||
.pt-10{padding-top:10px;}
|
||||
/* Padding Bottom Css */
|
||||
.pb-350{padding-bottom:350px;}
|
||||
.pb-250{padding-bottom:250px;}
|
||||
.pb-210{padding-bottom:210px;}
|
||||
.pb-200{padding-bottom:200px;}
|
||||
.pb-180{padding-bottom:180px;}
|
||||
.pb-170{padding-bottom:170px;}
|
||||
.pb-160{padding-bottom:160px;}
|
||||
.pb-150{padding-bottom:150px;}
|
||||
.pb-140{padding-bottom:140px;}
|
||||
.pb-135{padding-bottom:135px;}
|
||||
.pb-130{padding-bottom:130px;}
|
||||
.pb-120{padding-bottom:120px;}
|
||||
.pb-110{padding-bottom:110px;}
|
||||
.pb-100{padding-bottom:100px;}
|
||||
.pb-95{padding-bottom:95px;}
|
||||
.pb-90{padding-bottom:90px;}
|
||||
.pb-85{padding-bottom:85px;}
|
||||
.pb-80{padding-bottom:80px;}
|
||||
.pb-75{padding-bottom:75px;}
|
||||
.pb-70{padding-bottom:70px;}
|
||||
.pb-65{padding-bottom:65px;}
|
||||
.pb-60{padding-bottom:60px;}
|
||||
.pb-55{padding-bottom:55px;}
|
||||
.pb-50{padding-bottom:50px;}
|
||||
.pb-45{padding-bottom:45px;}
|
||||
.pb-40{padding-bottom:40px;}
|
||||
.pb-35{padding-bottom:35px;}
|
||||
.pb-30{padding-bottom:30px;}
|
||||
.pb-25{padding-bottom:25px;}
|
||||
.pb-20{padding-bottom:20px;}
|
||||
.pb-15{padding-bottom:15px;}
|
||||
.pb-10{padding-bottom:10px;}
|
||||
/* Padding Left Css */
|
||||
.pl-120{padding-left:120px;}
|
||||
.pl-110{padding-left:110px;}
|
||||
.pl-100{padding-left:100px;}
|
||||
.pl-90{padding-left:90px;}
|
||||
.pl-80{padding-left:80px;}
|
||||
.pl-70{padding-left:70px;}
|
||||
.pl-60{padding-left:60px;}
|
||||
.pl-50{padding-left:50px;}
|
||||
.pl-40{padding-left:40px;}
|
||||
.pl-35{padding-left:35px;}
|
||||
.pl-30{padding-left:30px;}
|
||||
.pl-25{padding-left:25px;}
|
||||
.pl-20{padding-left:20px;}
|
||||
.pl-15{padding-left:15px;}
|
||||
.pl-10{padding-left:10px;}
|
||||
/* Padding Right Css */
|
||||
.pr-120{padding-right:120px;}
|
||||
.pr-110{padding-right:110px;}
|
||||
.pr-100{padding-right:100px;}
|
||||
.pr-90{padding-right:90px;}
|
||||
.pr-80{padding-right:80px;}
|
||||
.pr-70{padding-right:70px;}
|
||||
.pr-60{padding-right:60px;}
|
||||
.pr-50{padding-right:50px;}
|
||||
.pr-40{padding-right:40px;}
|
||||
.pr-35{padding-right:35px;}
|
||||
.pr-30{padding-right:30px;}
|
||||
.pr-25{padding-right:25px;}
|
||||
.pr-20{padding-right:20px;}
|
||||
.pr-15{padding-right:15px;}
|
||||
.pr-10{padding-right:10px;}
|
||||
|
||||
/* Margin Top Css */
|
||||
.mt-200{margin-top:200px;}
|
||||
.mt-190{margin-top:190px;}
|
||||
.mt-180{margin-top:180px;}
|
||||
.mt-170{margin-top:170px;}
|
||||
.mt-160{margin-top:160px;}
|
||||
.mt-150{margin-top:150px;}
|
||||
.mt-140{margin-top:140px;}
|
||||
.mt-130{margin-top:130px;}
|
||||
.mt-120{margin-top:120px;}
|
||||
.mt-110{margin-top:110px;}
|
||||
.mt-100{margin-top:100px;}
|
||||
.mt-95{margin-top:95px;}
|
||||
.mt-90{margin-top:90px;}
|
||||
.mt-80{margin-top:80px;}
|
||||
.mt-75{margin-top:75px;}
|
||||
.mt-70{margin-top:70px;}
|
||||
.mt-65{margin-top:65px;}
|
||||
.mt-60{margin-top:60px;}
|
||||
.mt-55{margin-top:55px;}
|
||||
.mt-50{margin-top:50px;}
|
||||
.mt-45{margin-top:45px;}
|
||||
.mt-40{margin-top:40px;}
|
||||
.mt-35{margin-top:35px;}
|
||||
.mt-30{margin-top:30px;}
|
||||
.mt-25{margin-top:25px;}
|
||||
.mt-20{margin-top:20px;}
|
||||
.mt-15{margin-top:15px;}
|
||||
.mt-10{margin-top:10px;}
|
||||
|
||||
/* Margin Bottom Css */
|
||||
.mb-200{margin-bottom:200px;}
|
||||
.mb-190{margin-bottom:190px;}
|
||||
.mb-180{margin-bottom:180px;}
|
||||
.mb-170{margin-bottom:170px;}
|
||||
.mb-160{margin-bottom:160px;}
|
||||
.mb-150{margin-bottom:150px;}
|
||||
.mb-140{margin-bottom:140px;}
|
||||
.mb-130{margin-bottom:130px;}
|
||||
.mb-120{margin-bottom:120px;}
|
||||
.mb-110{margin-bottom:110px;}
|
||||
.mb-100{margin-bottom:100px;}
|
||||
.mb-95{margin-bottom:95px;}
|
||||
.mb-90{margin-bottom:90px;}
|
||||
.mb-80{margin-bottom:80px;}
|
||||
.mb-75{margin-bottom:75px;}
|
||||
.mb-70{margin-bottom:70px;}
|
||||
.mb-65{margin-bottom:65px;}
|
||||
.mb-60{margin-bottom:60px;}
|
||||
.mb-55{margin-bottom:55px;}
|
||||
.mb-50{margin-bottom:50px;}
|
||||
.mb-45{margin-bottom:45px;}
|
||||
.mb-40{margin-bottom:40px;}
|
||||
.mb-35{margin-bottom:35px;}
|
||||
.mb-30{margin-bottom:30px;}
|
||||
.mb-25{margin-bottom:25px;}
|
||||
.mb-20{margin-bottom:20px;}
|
||||
.mb-15{margin-bottom:15px;}
|
||||
.mb-10{margin-bottom:10px;}
|
||||
|
||||
/* Margin Left Css */
|
||||
.ml-200{margin-left:200px;}
|
||||
.ml-190{margin-left:190px;}
|
||||
.ml-180{margin-left:180px;}
|
||||
.ml-170{margin-left:170px;}
|
||||
.ml-160{margin-left:160px;}
|
||||
.ml-150{margin-left:150px;}
|
||||
.ml-140{margin-left:140px;}
|
||||
.ml-130{margin-left:130px;}
|
||||
.ml-120{margin-left:120px;}
|
||||
.ml-110{margin-left:110px;}
|
||||
.ml-100{margin-left:100px;}
|
||||
.ml-95{margin-left:95px;}
|
||||
.ml-90{margin-left:90px;}
|
||||
.ml-80{margin-left:80px;}
|
||||
.ml-75{margin-left:75px;}
|
||||
.ml-70{margin-left:70px;}
|
||||
.ml-65{margin-left:65px;}
|
||||
.ml-60{margin-left:60px;}
|
||||
.ml-55{margin-left:55px;}
|
||||
.ml-50{margin-left:50px;}
|
||||
.ml-45{margin-left:45px;}
|
||||
.ml-40{margin-left:40px;}
|
||||
.ml-35{margin-left:35px;}
|
||||
.ml-30{margin-left:30px;}
|
||||
.ml-25{margin-left:25px;}
|
||||
.ml-20{margin-left:20px;}
|
||||
.ml-15{margin-left:15px;}
|
||||
.ml-10{margin-left:10px;}
|
||||
|
||||
/* Margin Right Css */
|
||||
.mr-200{margin-right:200px;}
|
||||
.mr-190{margin-right:190px;}
|
||||
.mr-180{margin-right:180px;}
|
||||
.mr-170{margin-right:170px;}
|
||||
.mr-160{margin-right:160px;}
|
||||
.mr-150{margin-right:150px;}
|
||||
.mr-140{margin-right:140px;}
|
||||
.mr-130{margin-right:130px;}
|
||||
.mr-120{margin-right:120px;}
|
||||
.mr-110{margin-right:110px;}
|
||||
.mr-100{margin-right:100px;}
|
||||
.mr-95{margin-right:95px;}
|
||||
.mr-90{margin-right:90px;}
|
||||
.mr-80{margin-right:80px;}
|
||||
.mr-75{margin-right:75px;}
|
||||
.mr-70{margin-right:70px;}
|
||||
.mr-65{margin-right:65px;}
|
||||
.mr-60{margin-right:60px;}
|
||||
.mr-55{margin-right:55px;}
|
||||
.mr-50{margin-right:50px;}
|
||||
.mr-45{margin-right:45px;}
|
||||
.mr-40{margin-right:40px;}
|
||||
.mr-35{margin-right:35px;}
|
||||
.mr-30{margin-right:30px;}
|
||||
.mr-25{margin-right:25px;}
|
||||
.mr-20{margin-right:20px;}
|
||||
.mr-15{margin-right:15px;}
|
||||
.mr-10{margin-right:10px;}
|
||||
|
After Width: | Height: | Size: 5.3 KiB |
@@ -0,0 +1,935 @@
|
||||
/*
|
||||
Flaticon icon font: Flaticon
|
||||
Creation date: 27/11/2019 09:49
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: "Flaticon";
|
||||
src: url("../fonts/Flaticon.woff2") format("woff2"), url("../fonts/Flaticon.woff") format("woff");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
[class^="flaticon-"]:before,
|
||||
[class*=" flaticon-"]:before,
|
||||
[class^="flaticon-"]:after,
|
||||
[class*=" flaticon-"]:after {
|
||||
font-family: Flaticon;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.flaticon-map:before {
|
||||
content: "\f100";
|
||||
}
|
||||
|
||||
.flaticon-mail:before {
|
||||
content: "\f101";
|
||||
}
|
||||
|
||||
.flaticon-call-answer:before {
|
||||
content: "\f102";
|
||||
}
|
||||
|
||||
.flaticon-chat:before {
|
||||
content: "\f103";
|
||||
}
|
||||
|
||||
.flaticon-left-arrow:before {
|
||||
content: "\f104";
|
||||
}
|
||||
|
||||
.flaticon-right-arrow:before {
|
||||
content: "\f105";
|
||||
}
|
||||
|
||||
.flaticon-back:before {
|
||||
content: "\f106";
|
||||
}
|
||||
|
||||
.flaticon-next:before {
|
||||
content: "\f107";
|
||||
}
|
||||
|
||||
.flaticon-play-button:before {
|
||||
content: "\f108";
|
||||
}
|
||||
|
||||
.flaticon-play-button-1:before {
|
||||
content: "\f109";
|
||||
}
|
||||
|
||||
.flaticon-upload:before {
|
||||
content: "\f10a";
|
||||
}
|
||||
|
||||
.flaticon-back-1:before {
|
||||
content: "\f10b";
|
||||
}
|
||||
|
||||
.flaticon-responsive:before {
|
||||
content: "\f10c";
|
||||
}
|
||||
|
||||
.flaticon-add:before {
|
||||
content: "\f10d";
|
||||
}
|
||||
|
||||
.flaticon-play-button-2:before {
|
||||
content: "\f10e";
|
||||
}
|
||||
|
||||
.flaticon-android:before {
|
||||
content: "\f10f";
|
||||
}
|
||||
|
||||
.flaticon-fire:before {
|
||||
content: "\f110";
|
||||
}
|
||||
|
||||
.flaticon-layers:before {
|
||||
content: "\f111";
|
||||
}
|
||||
|
||||
.flaticon-computer:before {
|
||||
content: "\f112";
|
||||
}
|
||||
|
||||
.flaticon-chip:before {
|
||||
content: "\f113";
|
||||
}
|
||||
|
||||
.flaticon-cogwheels:before {
|
||||
content: "\f114";
|
||||
}
|
||||
|
||||
.flaticon-support:before {
|
||||
content: "\f115";
|
||||
}
|
||||
|
||||
.flaticon-web:before {
|
||||
content: "\f116";
|
||||
}
|
||||
|
||||
.flaticon-headset:before {
|
||||
content: "\f117";
|
||||
}
|
||||
|
||||
.flaticon-facebook:before {
|
||||
content: "\f118";
|
||||
}
|
||||
|
||||
.flaticon-drop-of-liquid:before {
|
||||
content: "\f119";
|
||||
}
|
||||
|
||||
.flaticon-drop:before {
|
||||
content: "\f11a";
|
||||
}
|
||||
|
||||
.flaticon-placeholder:before {
|
||||
content: "\f11b";
|
||||
}
|
||||
|
||||
.flaticon-shield:before {
|
||||
content: "\f11c";
|
||||
}
|
||||
|
||||
.flaticon-fountain-pen:before {
|
||||
content: "\f11d";
|
||||
}
|
||||
|
||||
.flaticon-fountain-pen-1:before {
|
||||
content: "\f11e";
|
||||
}
|
||||
|
||||
.flaticon-settings:before {
|
||||
content: "\f11f";
|
||||
}
|
||||
|
||||
.flaticon-phone-call:before {
|
||||
content: "\f120";
|
||||
}
|
||||
|
||||
.flaticon-call:before {
|
||||
content: "\f121";
|
||||
}
|
||||
|
||||
.flaticon-settings-1:before {
|
||||
content: "\f122";
|
||||
}
|
||||
|
||||
.flaticon-placeholder-1:before {
|
||||
content: "\f123";
|
||||
}
|
||||
|
||||
.flaticon-pen:before {
|
||||
content: "\f124";
|
||||
}
|
||||
|
||||
.flaticon-analytics:before {
|
||||
content: "\f125";
|
||||
}
|
||||
|
||||
.flaticon-monitor:before {
|
||||
content: "\f126";
|
||||
}
|
||||
|
||||
.flaticon-email:before {
|
||||
content: "\f127";
|
||||
}
|
||||
|
||||
.flaticon-speech-bubble:before {
|
||||
content: "\f128";
|
||||
}
|
||||
|
||||
.flaticon-suitcase:before {
|
||||
content: "\f129";
|
||||
}
|
||||
|
||||
.flaticon-communications:before {
|
||||
content: "\f12a";
|
||||
}
|
||||
|
||||
.flaticon-cash:before {
|
||||
content: "\f12b";
|
||||
}
|
||||
|
||||
.flaticon-twitter:before {
|
||||
content: "\f12c";
|
||||
}
|
||||
|
||||
.flaticon-twitter-2:before {
|
||||
content: "\f12d";
|
||||
}
|
||||
|
||||
.flaticon-instagram-logo:before {
|
||||
content: "\f12e";
|
||||
}
|
||||
|
||||
.flaticon-instagram-1:before {
|
||||
content: "\f12f";
|
||||
}
|
||||
|
||||
.flaticon-whatsapp-1:before {
|
||||
content: "\f130";
|
||||
}
|
||||
|
||||
.flaticon-linkedin-2:before {
|
||||
content: "\f131";
|
||||
}
|
||||
|
||||
.flaticon-twitter-1:before {
|
||||
content: "\f132";
|
||||
}
|
||||
|
||||
.flaticon-facebook-3:before {
|
||||
content: "\f133";
|
||||
}
|
||||
|
||||
.flaticon-whatsapp-2:before {
|
||||
content: "\f134";
|
||||
}
|
||||
|
||||
.flaticon-xiaomi:before {
|
||||
content: "\f135";
|
||||
}
|
||||
|
||||
.flaticon-odnoklassniki:before {
|
||||
content: "\f136";
|
||||
}
|
||||
|
||||
.flaticon-pinterest:before {
|
||||
content: "\f137";
|
||||
}
|
||||
|
||||
.flaticon-pinterest-1:before {
|
||||
content: "\f138";
|
||||
}
|
||||
|
||||
.flaticon-wifi:before {
|
||||
content: "\f139";
|
||||
}
|
||||
|
||||
.flaticon-light-bulb:before {
|
||||
content: "\f13a";
|
||||
}
|
||||
|
||||
.flaticon-project-management:before {
|
||||
content: "\f13b";
|
||||
}
|
||||
|
||||
.flaticon-monitor-1:before {
|
||||
content: "\f13c";
|
||||
}
|
||||
|
||||
.flaticon-camera:before {
|
||||
content: "\f13d";
|
||||
}
|
||||
|
||||
.flaticon-user:before {
|
||||
content: "\f13e";
|
||||
}
|
||||
|
||||
.flaticon-advertising:before {
|
||||
content: "\f13f";
|
||||
}
|
||||
|
||||
.flaticon-select:before {
|
||||
content: "\f140";
|
||||
}
|
||||
|
||||
.flaticon-snowflake:before {
|
||||
content: "\f141";
|
||||
}
|
||||
|
||||
.flaticon-snowflake-1:before {
|
||||
content: "\f142";
|
||||
}
|
||||
|
||||
.flaticon-travel-agency:before {
|
||||
content: "\f143";
|
||||
}
|
||||
|
||||
.flaticon-bauble:before {
|
||||
content: "\f144";
|
||||
}
|
||||
|
||||
.flaticon-temporary-agency:before {
|
||||
content: "\f145";
|
||||
}
|
||||
|
||||
.flaticon-star:before {
|
||||
content: "\f146";
|
||||
}
|
||||
|
||||
.flaticon-snow-globe:before {
|
||||
content: "\f147";
|
||||
}
|
||||
|
||||
.flaticon-christmas-tree:before {
|
||||
content: "\f148";
|
||||
}
|
||||
|
||||
.flaticon-gift:before {
|
||||
content: "\f149";
|
||||
}
|
||||
|
||||
.flaticon-mortgage:before {
|
||||
content: "\f14a";
|
||||
}
|
||||
|
||||
.flaticon-monitoring:before {
|
||||
content: "\f14b";
|
||||
}
|
||||
|
||||
.flaticon-network-1:before {
|
||||
content: "\f14c";
|
||||
}
|
||||
|
||||
.flaticon-neural:before {
|
||||
content: "\f14d";
|
||||
}
|
||||
|
||||
.flaticon-networking:before {
|
||||
content: "\f14e";
|
||||
}
|
||||
|
||||
.flaticon-cloud-computing:before {
|
||||
content: "\f14f";
|
||||
}
|
||||
|
||||
.flaticon-cloud-computing-1:before {
|
||||
content: "\f150";
|
||||
}
|
||||
|
||||
.flaticon-microchip:before {
|
||||
content: "\f151";
|
||||
}
|
||||
|
||||
.flaticon-social-care:before {
|
||||
content: "\f152";
|
||||
}
|
||||
|
||||
.flaticon-help:before {
|
||||
content: "\f153";
|
||||
}
|
||||
|
||||
.flaticon-begging:before {
|
||||
content: "\f154";
|
||||
}
|
||||
|
||||
.flaticon-customer-service:before {
|
||||
content: "\f155";
|
||||
}
|
||||
|
||||
.flaticon-support-2:before {
|
||||
content: "\f156";
|
||||
}
|
||||
|
||||
.flaticon-support-3:before {
|
||||
content: "\f157";
|
||||
}
|
||||
|
||||
.flaticon-customer-service-1:before {
|
||||
content: "\f158";
|
||||
}
|
||||
|
||||
.flaticon-customer-support:before {
|
||||
content: "\f159";
|
||||
}
|
||||
|
||||
.flaticon-headphones:before {
|
||||
content: "\f15a";
|
||||
}
|
||||
|
||||
.flaticon-social-care-1:before {
|
||||
content: "\f15b";
|
||||
}
|
||||
|
||||
.flaticon-care:before {
|
||||
content: "\f15c";
|
||||
}
|
||||
|
||||
.flaticon-user-1:before {
|
||||
content: "\f15d";
|
||||
}
|
||||
|
||||
.flaticon-phone:before {
|
||||
content: "\f15e";
|
||||
}
|
||||
|
||||
.flaticon-search:before {
|
||||
content: "\f15f";
|
||||
}
|
||||
|
||||
.flaticon-facebook-4:before {
|
||||
content: "\f160";
|
||||
}
|
||||
|
||||
.flaticon-pin:before {
|
||||
content: "\f161";
|
||||
}
|
||||
|
||||
.flaticon-user-2:before {
|
||||
content: "\f162";
|
||||
}
|
||||
|
||||
.flaticon-internet:before {
|
||||
content: "\f163";
|
||||
}
|
||||
|
||||
.flaticon-user-3:before {
|
||||
content: "\f164";
|
||||
}
|
||||
|
||||
.flaticon-chat-1:before {
|
||||
content: "\f165";
|
||||
}
|
||||
|
||||
.flaticon-team:before {
|
||||
content: "\f166";
|
||||
}
|
||||
|
||||
.flaticon-connection:before {
|
||||
content: "\f167";
|
||||
}
|
||||
|
||||
.flaticon-bar-chart:before {
|
||||
content: "\f168";
|
||||
}
|
||||
|
||||
.flaticon-money:before {
|
||||
content: "\f169";
|
||||
}
|
||||
|
||||
.flaticon-file:before {
|
||||
content: "\f16a";
|
||||
}
|
||||
|
||||
.flaticon-linkedin-3:before {
|
||||
content: "\f16b";
|
||||
}
|
||||
|
||||
.flaticon-pinterest-2:before {
|
||||
content: "\f16c";
|
||||
}
|
||||
|
||||
.flaticon-google-browser:before {
|
||||
content: "\f16d";
|
||||
}
|
||||
|
||||
.flaticon-gmail-1:before {
|
||||
content: "\f16e";
|
||||
}
|
||||
|
||||
.flaticon-gmail-3:before {
|
||||
content: "\f16f";
|
||||
}
|
||||
|
||||
.flaticon-vimeo:before {
|
||||
content: "\f170";
|
||||
}
|
||||
|
||||
.flaticon-vimeo-2:before {
|
||||
content: "\f171";
|
||||
}
|
||||
|
||||
.flaticon-skype:before {
|
||||
content: "\f172";
|
||||
}
|
||||
|
||||
.flaticon-skype-1:before {
|
||||
content: "\f173";
|
||||
}
|
||||
|
||||
.flaticon-skype-2:before {
|
||||
content: "\f174";
|
||||
}
|
||||
|
||||
.flaticon-skype-3:before {
|
||||
content: "\f175";
|
||||
}
|
||||
|
||||
.flaticon-google-plus-logo:before {
|
||||
content: "\f176";
|
||||
}
|
||||
|
||||
.flaticon-like:before {
|
||||
content: "\f177";
|
||||
}
|
||||
|
||||
.flaticon-clock:before {
|
||||
content: "\f178";
|
||||
}
|
||||
|
||||
.flaticon-loupe:before {
|
||||
content: "\f179";
|
||||
}
|
||||
|
||||
.flaticon-money-1:before {
|
||||
content: "\f17a";
|
||||
}
|
||||
|
||||
.flaticon-hand-shake:before {
|
||||
content: "\f17b";
|
||||
}
|
||||
|
||||
.flaticon-team-1:before {
|
||||
content: "\f17c";
|
||||
}
|
||||
|
||||
.flaticon-money-2:before {
|
||||
content: "\f17d";
|
||||
}
|
||||
|
||||
.flaticon-man:before {
|
||||
content: "\f17e";
|
||||
}
|
||||
|
||||
.flaticon-value:before {
|
||||
content: "\f17f";
|
||||
}
|
||||
|
||||
.flaticon-share:before {
|
||||
content: "\f180";
|
||||
}
|
||||
|
||||
.flaticon-time:before {
|
||||
content: "\f181";
|
||||
}
|
||||
|
||||
.flaticon-school:before {
|
||||
content: "\f182";
|
||||
}
|
||||
|
||||
.flaticon-chart:before {
|
||||
content: "\f183";
|
||||
}
|
||||
|
||||
.flaticon-data:before {
|
||||
content: "\f184";
|
||||
}
|
||||
|
||||
.flaticon-photo:before {
|
||||
content: "\f185";
|
||||
}
|
||||
|
||||
.flaticon-internet-1:before {
|
||||
content: "\f186";
|
||||
}
|
||||
|
||||
.flaticon-money-3:before {
|
||||
content: "\f187";
|
||||
}
|
||||
|
||||
.flaticon-payment:before {
|
||||
content: "\f188";
|
||||
}
|
||||
|
||||
.flaticon-pin-1:before {
|
||||
content: "\f189";
|
||||
}
|
||||
|
||||
.flaticon-time-1:before {
|
||||
content: "\f18a";
|
||||
}
|
||||
|
||||
.flaticon-idea:before {
|
||||
content: "\f18b";
|
||||
}
|
||||
|
||||
.flaticon-download:before {
|
||||
content: "\f18c";
|
||||
}
|
||||
|
||||
.flaticon-growth:before {
|
||||
content: "\f18d";
|
||||
}
|
||||
|
||||
.flaticon-multimedia:before {
|
||||
content: "\f18e";
|
||||
}
|
||||
|
||||
.flaticon-network-2:before {
|
||||
content: "\f18f";
|
||||
}
|
||||
|
||||
.flaticon-next-1:before {
|
||||
content: "\f190";
|
||||
}
|
||||
|
||||
.flaticon-origami:before {
|
||||
content: "\f191";
|
||||
}
|
||||
|
||||
.flaticon-share-1:before {
|
||||
content: "\f192";
|
||||
}
|
||||
|
||||
.flaticon-clock-1:before {
|
||||
content: "\f193";
|
||||
}
|
||||
|
||||
.flaticon-refresh:before {
|
||||
content: "\f194";
|
||||
}
|
||||
|
||||
.flaticon-avatar:before {
|
||||
content: "\f195";
|
||||
}
|
||||
|
||||
.flaticon-support-4:before {
|
||||
content: "\f196";
|
||||
}
|
||||
|
||||
.flaticon-cursor:before {
|
||||
content: "\f197";
|
||||
}
|
||||
|
||||
.flaticon-brain:before {
|
||||
content: "\f198";
|
||||
}
|
||||
|
||||
.flaticon-laptop:before {
|
||||
content: "\f199";
|
||||
}
|
||||
|
||||
.flaticon-arrow:before {
|
||||
content: "\f19a";
|
||||
}
|
||||
|
||||
.flaticon-mortarboard:before {
|
||||
content: "\f19b";
|
||||
}
|
||||
|
||||
.flaticon-avatar-1:before {
|
||||
content: "\f19c";
|
||||
}
|
||||
|
||||
.flaticon-chat-2:before {
|
||||
content: "\f19d";
|
||||
}
|
||||
|
||||
.flaticon-question:before {
|
||||
content: "\f19e";
|
||||
}
|
||||
|
||||
.flaticon-test:before {
|
||||
content: "\f19f";
|
||||
}
|
||||
|
||||
.flaticon-doctor:before {
|
||||
content: "\f1a0";
|
||||
}
|
||||
|
||||
.flaticon-support-5:before {
|
||||
content: "\f1a1";
|
||||
}
|
||||
|
||||
.flaticon-map-1:before {
|
||||
content: "\f1a2";
|
||||
}
|
||||
|
||||
.flaticon-eye:before {
|
||||
content: "\f1a3";
|
||||
}
|
||||
|
||||
.flaticon-money-4:before {
|
||||
content: "\f1a4";
|
||||
}
|
||||
|
||||
.flaticon-world:before {
|
||||
content: "\f1a5";
|
||||
}
|
||||
|
||||
.flaticon-school-1:before {
|
||||
content: "\f1a6";
|
||||
}
|
||||
|
||||
.flaticon-chat-3:before {
|
||||
content: "\f1a7";
|
||||
}
|
||||
|
||||
.flaticon-idea-1:before {
|
||||
content: "\f1a8";
|
||||
}
|
||||
|
||||
.flaticon-support-6:before {
|
||||
content: "\f1a9";
|
||||
}
|
||||
|
||||
.flaticon-diamond:before {
|
||||
content: "\f1aa";
|
||||
}
|
||||
|
||||
.flaticon-time-2:before {
|
||||
content: "\f1ab";
|
||||
}
|
||||
|
||||
.flaticon-bag:before {
|
||||
content: "\f1ac";
|
||||
}
|
||||
|
||||
.flaticon-contract:before {
|
||||
content: "\f1ad";
|
||||
}
|
||||
|
||||
.flaticon-report:before {
|
||||
content: "\f1ae";
|
||||
}
|
||||
|
||||
.flaticon-folder:before {
|
||||
content: "\f1af";
|
||||
}
|
||||
|
||||
.flaticon-truck:before {
|
||||
content: "\f1b0";
|
||||
}
|
||||
|
||||
.flaticon-document:before {
|
||||
content: "\f1b1";
|
||||
}
|
||||
|
||||
.flaticon-plane:before {
|
||||
content: "\f1b2";
|
||||
}
|
||||
|
||||
.flaticon-time-3:before {
|
||||
content: "\f1b3";
|
||||
}
|
||||
|
||||
.flaticon-trash:before {
|
||||
content: "\f1b4";
|
||||
}
|
||||
|
||||
.flaticon-pin-2:before {
|
||||
content: "\f1b5";
|
||||
}
|
||||
|
||||
.flaticon-think:before {
|
||||
content: "\f1b6";
|
||||
}
|
||||
|
||||
.flaticon-idea-2:before {
|
||||
content: "\f1b7";
|
||||
}
|
||||
|
||||
.flaticon-download-1:before {
|
||||
content: "\f1b8";
|
||||
}
|
||||
|
||||
.flaticon-bell:before {
|
||||
content: "\f1b9";
|
||||
}
|
||||
|
||||
.flaticon-lock:before {
|
||||
content: "\f1ba";
|
||||
}
|
||||
|
||||
.flaticon-upload-1:before {
|
||||
content: "\f1bb";
|
||||
}
|
||||
|
||||
.flaticon-cinema:before {
|
||||
content: "\f1bc";
|
||||
}
|
||||
|
||||
.flaticon-goal:before {
|
||||
content: "\f1bd";
|
||||
}
|
||||
|
||||
.flaticon-work:before {
|
||||
content: "\f1be";
|
||||
}
|
||||
|
||||
.flaticon-design:before {
|
||||
content: "\f1bf";
|
||||
}
|
||||
|
||||
.flaticon-search-1:before {
|
||||
content: "\f1c0";
|
||||
}
|
||||
|
||||
.flaticon-food:before {
|
||||
content: "\f1c1";
|
||||
}
|
||||
|
||||
.flaticon-alert:before {
|
||||
content: "\f1c2";
|
||||
}
|
||||
|
||||
.flaticon-brain-1:before {
|
||||
content: "\f1c3";
|
||||
}
|
||||
|
||||
.flaticon-book:before {
|
||||
content: "\f1c4";
|
||||
}
|
||||
|
||||
.flaticon-time-4:before {
|
||||
content: "\f1c5";
|
||||
}
|
||||
|
||||
.flaticon-shield-1:before {
|
||||
content: "\f1c6";
|
||||
}
|
||||
|
||||
.flaticon-time-5:before {
|
||||
content: "\f1c7";
|
||||
}
|
||||
|
||||
.flaticon-man-1:before {
|
||||
content: "\f1c8";
|
||||
}
|
||||
|
||||
.flaticon-brain-2:before {
|
||||
content: "\f1c9";
|
||||
}
|
||||
|
||||
.flaticon-water:before {
|
||||
content: "\f1ca";
|
||||
}
|
||||
|
||||
.flaticon-content:before {
|
||||
content: "\f1cb";
|
||||
}
|
||||
|
||||
.flaticon-data-1:before {
|
||||
content: "\f1cc";
|
||||
}
|
||||
|
||||
.flaticon-like-1:before {
|
||||
content: "\f1cd";
|
||||
}
|
||||
|
||||
.flaticon-time-6:before {
|
||||
content: "\f1ce";
|
||||
}
|
||||
|
||||
.flaticon-sign:before {
|
||||
content: "\f1cf";
|
||||
}
|
||||
|
||||
.flaticon-book-1:before {
|
||||
content: "\f1d0";
|
||||
}
|
||||
|
||||
.flaticon-adjust:before {
|
||||
content: "\f1d1";
|
||||
}
|
||||
|
||||
.flaticon-menu:before {
|
||||
content: "\f1d2";
|
||||
}
|
||||
|
||||
.flaticon-calendar:before {
|
||||
content: "\f1d3";
|
||||
}
|
||||
|
||||
.flaticon-eye-1:before {
|
||||
content: "\f1d4";
|
||||
}
|
||||
|
||||
.flaticon-clock-2:before {
|
||||
content: "\f1d5";
|
||||
}
|
||||
|
||||
.flaticon-share-2:before {
|
||||
content: "\f1d6";
|
||||
}
|
||||
|
||||
.flaticon-fingerprint:before {
|
||||
content: "\f1d7";
|
||||
}
|
||||
|
||||
.flaticon-signal:before {
|
||||
content: "\f1d8";
|
||||
}
|
||||
|
||||
.flaticon-lock-1:before {
|
||||
content: "\f1d9";
|
||||
}
|
||||
|
||||
.flaticon-water-1:before {
|
||||
content: "\f1da";
|
||||
}
|
||||
|
||||
.flaticon-code:before {
|
||||
content: "\f1db";
|
||||
}
|
||||
|
||||
.flaticon-repeat:before {
|
||||
content: "\f1dc";
|
||||
}
|
||||
|
||||
.flaticon-map-2:before {
|
||||
content: "\f1dd";
|
||||
}
|
||||
|
||||
.flaticon-message:before {
|
||||
content: "\f1de";
|
||||
}
|
||||
|
||||
.flaticon-network-3:before {
|
||||
content: "\f1df";
|
||||
}
|
||||
|
||||
.flaticon-more:before {
|
||||
content: "\f1e0";
|
||||
}
|
||||
|
||||
.flaticon-random:before {
|
||||
content: "\f1e1";
|
||||
}
|
||||
|
||||
.flaticon-sign-1:before {
|
||||
content: "\f1e2";
|
||||
}
|
||||
|
||||
.flaticon-mail-1:before {
|
||||
content: "\f1e3";
|
||||
}
|
||||
|
||||
.flaticon-adjust-1:before {
|
||||
content: "\f1e4";
|
||||
}
|
||||
|
After Width: | Height: | Size: 416 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 432 KiB |
|
After Width: | Height: | Size: 747 KiB |