Add production deployment infrastructure
- Created comprehensive deployment package with production builds - Added deployment scripts for Linux and Docker environments - Generated Dockerfiles for containerized deployment - Included nginx reverse proxy configuration - Added systemd service definitions for native Linux deployment - Created docker-compose.production.yml for orchestration - Comprehensive deployment documentation in README.md - Both LittleShop and TeleBot production builds included - Ready for deployment to Hostinger VPS server 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b8bda63cfa
commit
13aa20ffa4
BIN
Deploy/LittleShop/AutoMapper.dll
Normal file
BIN
Deploy/LittleShop/AutoMapper.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/BTCPayServer.Client.dll
Normal file
BIN
Deploy/LittleShop/BTCPayServer.Client.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/BTCPayServer.Lightning.Common.dll
Normal file
BIN
Deploy/LittleShop/BTCPayServer.Lightning.Common.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/BouncyCastle.Crypto.dll
Normal file
BIN
Deploy/LittleShop/BouncyCastle.Crypto.dll
Normal file
Binary file not shown.
31
Deploy/LittleShop/Dockerfile
Normal file
31
Deploy/LittleShop/Dockerfile
Normal file
@ -0,0 +1,31 @@
|
||||
# LittleShop Production Dockerfile
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
|
||||
WORKDIR /app
|
||||
EXPOSE 8080
|
||||
|
||||
# Create non-root user
|
||||
RUN addgroup --system --gid 1001 littleshop \
|
||||
&& adduser --system --uid 1001 --ingroup littleshop littleshop
|
||||
|
||||
# Create necessary directories
|
||||
RUN mkdir -p /app/data /app/logs /app/wwwroot/uploads \
|
||||
&& chown -R littleshop:littleshop /app
|
||||
|
||||
# Copy published application
|
||||
COPY . .
|
||||
|
||||
# Set ownership
|
||||
RUN chown -R littleshop:littleshop /app
|
||||
|
||||
# Switch to non-root user
|
||||
USER littleshop
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/health || exit 1
|
||||
|
||||
# Set environment variables
|
||||
ENV ASPNETCORE_ENVIRONMENT=Production
|
||||
ENV ASPNETCORE_URLS=http://+:8080
|
||||
|
||||
ENTRYPOINT ["./LittleShop"]
|
||||
BIN
Deploy/LittleShop/FluentValidation.AspNetCore.dll
Normal file
BIN
Deploy/LittleShop/FluentValidation.AspNetCore.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
Deploy/LittleShop/FluentValidation.dll
Normal file
BIN
Deploy/LittleShop/FluentValidation.dll
Normal file
Binary file not shown.
1603
Deploy/LittleShop/LittleShop.deps.json
Normal file
1603
Deploy/LittleShop/LittleShop.deps.json
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Deploy/LittleShop/LittleShop.dll
Normal file
BIN
Deploy/LittleShop/LittleShop.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/LittleShop.exe
Normal file
BIN
Deploy/LittleShop/LittleShop.exe
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/LittleShop.pdb
Normal file
BIN
Deploy/LittleShop/LittleShop.pdb
Normal file
Binary file not shown.
21
Deploy/LittleShop/LittleShop.runtimeconfig.json
Normal file
21
Deploy/LittleShop/LittleShop.runtimeconfig.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net9.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "9.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "9.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
11434
Deploy/LittleShop/LittleShop.staticwebassets.endpoints.json
Normal file
11434
Deploy/LittleShop/LittleShop.staticwebassets.endpoints.json
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Data.Sqlite.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Data.Sqlite.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.Abstractions.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.Abstractions.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.InMemory.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.InMemory.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.Relational.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.Relational.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.Sqlite.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.Sqlite.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.EntityFrameworkCore.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.Caching.Abstractions.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.Caching.Abstractions.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.Caching.Memory.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.Caching.Memory.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.DependencyInjection.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.DependencyInjection.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.DependencyModel.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.DependencyModel.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.Hosting.Abstractions.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.Hosting.Abstractions.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.Logging.Abstractions.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.Logging.Abstractions.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.Logging.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.Logging.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.Options.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.Options.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.Extensions.Primitives.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.Extensions.Primitives.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Abstractions.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Abstractions.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.IdentityModel.JsonWebTokens.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.IdentityModel.JsonWebTokens.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Logging.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Logging.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Protocols.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Protocols.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Tokens.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.IdentityModel.Tokens.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Microsoft.OpenApi.dll
Normal file
BIN
Deploy/LittleShop/Microsoft.OpenApi.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/NBitcoin.dll
Normal file
BIN
Deploy/LittleShop/NBitcoin.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Newtonsoft.Json.dll
Normal file
BIN
Deploy/LittleShop/Newtonsoft.Json.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/SQLitePCLRaw.batteries_v2.dll
Normal file
BIN
Deploy/LittleShop/SQLitePCLRaw.batteries_v2.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/SQLitePCLRaw.core.dll
Normal file
BIN
Deploy/LittleShop/SQLitePCLRaw.core.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/SQLitePCLRaw.provider.e_sqlite3.dll
Normal file
BIN
Deploy/LittleShop/SQLitePCLRaw.provider.e_sqlite3.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.AspNetCore.dll
Normal file
BIN
Deploy/LittleShop/Serilog.AspNetCore.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.Extensions.Hosting.dll
Normal file
BIN
Deploy/LittleShop/Serilog.Extensions.Hosting.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.Extensions.Logging.dll
Normal file
BIN
Deploy/LittleShop/Serilog.Extensions.Logging.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.Formatting.Compact.dll
Normal file
BIN
Deploy/LittleShop/Serilog.Formatting.Compact.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.Settings.Configuration.dll
Normal file
BIN
Deploy/LittleShop/Serilog.Settings.Configuration.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.Sinks.Console.dll
Normal file
BIN
Deploy/LittleShop/Serilog.Sinks.Console.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.Sinks.Debug.dll
Normal file
BIN
Deploy/LittleShop/Serilog.Sinks.Debug.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.Sinks.File.dll
Normal file
BIN
Deploy/LittleShop/Serilog.Sinks.File.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Serilog.dll
Normal file
BIN
Deploy/LittleShop/Serilog.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Swashbuckle.AspNetCore.Swagger.dll
Normal file
BIN
Deploy/LittleShop/Swashbuckle.AspNetCore.Swagger.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Swashbuckle.AspNetCore.SwaggerGen.dll
Normal file
BIN
Deploy/LittleShop/Swashbuckle.AspNetCore.SwaggerGen.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/Swashbuckle.AspNetCore.SwaggerUI.dll
Normal file
BIN
Deploy/LittleShop/Swashbuckle.AspNetCore.SwaggerUI.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/System.IdentityModel.Tokens.Jwt.dll
Normal file
BIN
Deploy/LittleShop/System.IdentityModel.Tokens.Jwt.dll
Normal file
Binary file not shown.
2447
Deploy/LittleShop/TestAgent_Results/authentication_analysis.json
Normal file
2447
Deploy/LittleShop/TestAgent_Results/authentication_analysis.json
Normal file
File diff suppressed because it is too large
Load Diff
6861
Deploy/LittleShop/TestAgent_Results/coverage_analysis.json
Normal file
6861
Deploy/LittleShop/TestAgent_Results/coverage_analysis.json
Normal file
File diff suppressed because it is too large
Load Diff
2940
Deploy/LittleShop/TestAgent_Results/endpoint_discovery.json
Normal file
2940
Deploy/LittleShop/TestAgent_Results/endpoint_discovery.json
Normal file
File diff suppressed because it is too large
Load Diff
1386
Deploy/LittleShop/TestAgent_Results/error_detection.json
Normal file
1386
Deploy/LittleShop/TestAgent_Results/error_detection.json
Normal file
File diff suppressed because it is too large
Load Diff
31
Deploy/LittleShop/TestAgent_Results/executive_summary.json
Normal file
31
Deploy/LittleShop/TestAgent_Results/executive_summary.json
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"ProjectPath": "C:\\Production\\Source\\LittleShop\\LittleShop",
|
||||
"ProjectType": "Project (ASP.NET Core)",
|
||||
"TotalEndpoints": 115,
|
||||
"AuthenticatedEndpoints": 78,
|
||||
"TestableStates": 3,
|
||||
"IdentifiedGaps": 224,
|
||||
"SuggestedTests": 190,
|
||||
"DeadLinks": 0,
|
||||
"HttpErrors": 97,
|
||||
"VisualIssues": 0,
|
||||
"SecurityInsights": 1,
|
||||
"PerformanceInsights": 1,
|
||||
"OverallTestCoverage": 16.956521739130434,
|
||||
"VisualConsistencyScore": 0,
|
||||
"CriticalRecommendations": [
|
||||
"CRITICAL: Test coverage is only 17.0% - implement comprehensive test suite",
|
||||
"HIGH: Address 97 HTTP errors in the application",
|
||||
"MEDIUM: Improve visual consistency - current score 0.0%",
|
||||
"HIGH: Address 224 testing gaps for comprehensive coverage"
|
||||
],
|
||||
"GeneratedFiles": [
|
||||
"C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\project_structure.json",
|
||||
"C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\authentication_analysis.json",
|
||||
"C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\endpoint_discovery.json",
|
||||
"C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\coverage_analysis.json",
|
||||
"C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\error_detection.json",
|
||||
"C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\visual_testing.json",
|
||||
"C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\intelligent_analysis.json"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,79 @@
|
||||
{
|
||||
"BusinessLogicInsights": [
|
||||
{
|
||||
"Component": "Claude CLI Integration",
|
||||
"Insight": "Error analyzing business logic: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.",
|
||||
"Complexity": "Unknown",
|
||||
"PotentialIssues": [],
|
||||
"TestingRecommendations": [],
|
||||
"Priority": "Medium"
|
||||
}
|
||||
],
|
||||
"TestScenarioSuggestions": [
|
||||
{
|
||||
"ScenarioName": "Claude CLI Integration Error",
|
||||
"Description": "Error generating test scenarios: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.",
|
||||
"TestType": "",
|
||||
"Steps": [],
|
||||
"ExpectedOutcomes": [],
|
||||
"Priority": "Medium",
|
||||
"RequiredData": [],
|
||||
"Dependencies": []
|
||||
}
|
||||
],
|
||||
"SecurityInsights": [
|
||||
{
|
||||
"VulnerabilityType": "Analysis Error",
|
||||
"Location": "",
|
||||
"Description": "Error analyzing security: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.",
|
||||
"Severity": "Medium",
|
||||
"Recommendations": [],
|
||||
"TestingApproaches": []
|
||||
}
|
||||
],
|
||||
"PerformanceInsights": [
|
||||
{
|
||||
"Component": "Analysis Error",
|
||||
"PotentialBottleneck": "Error analyzing performance: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.",
|
||||
"Impact": "Unknown",
|
||||
"OptimizationSuggestions": [],
|
||||
"TestingStrategies": []
|
||||
}
|
||||
],
|
||||
"ArchitecturalRecommendations": [
|
||||
{
|
||||
"Category": "Analysis Error",
|
||||
"Recommendation": "Error generating architectural recommendations: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.",
|
||||
"Rationale": "",
|
||||
"Impact": "Unknown",
|
||||
"ImplementationSteps": []
|
||||
}
|
||||
],
|
||||
"GeneratedTestCases": [
|
||||
{
|
||||
"TestName": "Claude CLI Integration Error",
|
||||
"TestCategory": "Error",
|
||||
"Description": "Error generating test cases: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.",
|
||||
"TestCode": "",
|
||||
"TestData": [],
|
||||
"ExpectedOutcome": "",
|
||||
"Reasoning": ""
|
||||
}
|
||||
],
|
||||
"Summary": {
|
||||
"TotalInsights": 4,
|
||||
"HighPriorityItems": 0,
|
||||
"GeneratedTestCases": 1,
|
||||
"SecurityIssuesFound": 1,
|
||||
"PerformanceOptimizations": 1,
|
||||
"KeyFindings": [
|
||||
"Performance optimization opportunities identified"
|
||||
],
|
||||
"NextSteps": [
|
||||
"Review and prioritize security recommendations",
|
||||
"Implement generated test cases",
|
||||
"Address high-priority business logic testing gaps",
|
||||
"Consider architectural improvements for better testability"
|
||||
]
|
||||
}
|
||||
}
|
||||
1669
Deploy/LittleShop/TestAgent_Results/project_structure.json
Normal file
1669
Deploy/LittleShop/TestAgent_Results/project_structure.json
Normal file
File diff suppressed because it is too large
Load Diff
17
Deploy/LittleShop/TestAgent_Results/visual_testing.json
Normal file
17
Deploy/LittleShop/TestAgent_Results/visual_testing.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"ConsistencyTests": [],
|
||||
"AuthStateComparisons": [],
|
||||
"ResponsiveTests": [],
|
||||
"ComponentTests": [],
|
||||
"Regressions": [],
|
||||
"Summary": {
|
||||
"TotalTests": 0,
|
||||
"PassedTests": 0,
|
||||
"FailedTests": 0,
|
||||
"ConsistencyViolations": 0,
|
||||
"ResponsiveIssues": 0,
|
||||
"VisualRegressions": 0,
|
||||
"OverallScore": 0,
|
||||
"Recommendations": []
|
||||
}
|
||||
}
|
||||
BIN
Deploy/LittleShop/WebPush.dll
Normal file
BIN
Deploy/LittleShop/WebPush.dll
Normal file
Binary file not shown.
26
Deploy/LittleShop/appsettings.Development.json
Normal file
26
Deploy/LittleShop/appsettings.Development.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Microsoft.AspNetCore": "Debug",
|
||||
"LittleShop": "Debug"
|
||||
}
|
||||
},
|
||||
"Security": {
|
||||
"AllowInsecureSSL": true,
|
||||
"EnableDetailedErrors": true
|
||||
},
|
||||
"CORS": {
|
||||
"AllowedOrigins": [
|
||||
"http://localhost:3000",
|
||||
"http://localhost:5173",
|
||||
"http://localhost:5000",
|
||||
"http://localhost:5001",
|
||||
"https://localhost:5001"
|
||||
]
|
||||
},
|
||||
"TeleBot": {
|
||||
"ApiUrl": "http://localhost:8080",
|
||||
"ApiKey": "development-key-replace-in-production"
|
||||
}
|
||||
}
|
||||
46
Deploy/LittleShop/appsettings.Hostinger.json
Normal file
46
Deploy/LittleShop/appsettings.Hostinger.json
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Data Source=/app/data/littleshop.db"
|
||||
},
|
||||
"Jwt": {
|
||||
"Key": "YourSuperSecretKeyThatIsAtLeast32CharactersLong!",
|
||||
"Issuer": "LittleShop",
|
||||
"Audience": "LittleShop",
|
||||
"ExpiryInHours": 24
|
||||
},
|
||||
"BTCPayServer": {
|
||||
"BaseUrl": "https://thebankofdebbie.giize.com",
|
||||
"ApiKey": "db920209c0101efdbd1c6b6d1c99a48e3ba9d0de",
|
||||
"StoreId": "CvdvHoncGLM7TdMYRAG6Z15YuxQfxeMWRYwi9gvPhh5R",
|
||||
"WebhookSecret": "your-webhook-secret-here"
|
||||
},
|
||||
"RoyalMail": {
|
||||
"ClientId": "",
|
||||
"ClientSecret": "",
|
||||
"BaseUrl": "https://api.royalmail.net/",
|
||||
"SenderAddress1": "SilverLabs Ltd, 123 Business Street",
|
||||
"SenderCity": "London",
|
||||
"SenderPostCode": "SW1A 1AA",
|
||||
"SenderCountry": "United Kingdom"
|
||||
},
|
||||
"WebPush": {
|
||||
"VapidPublicKey": "BMc6fFJZ8oIQKQzcl3kMnP9tTsjrm3oI_VxLt3lAGYUMWGInzDKn7jqclEoZzjvXy1QXGFb3dIun8mVBwh-QuS4",
|
||||
"VapidPrivateKey": "dYuuagbz2CzCnPDFUpO_qkGLBgnN3MEFZQnjXNkc1MY",
|
||||
"Subject": "mailto:admin@littleshop.local"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"BTCPayServer": "Debug"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"Kestrel": {
|
||||
"Endpoints": {
|
||||
"Http": {
|
||||
"Url": "http://0.0.0.0:8080"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
56
Deploy/LittleShop/appsettings.Production.json
Normal file
56
Deploy/LittleShop/appsettings.Production.json
Normal file
@ -0,0 +1,56 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"Microsoft.EntityFrameworkCore": "Warning"
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Data Source=littleshop.db"
|
||||
},
|
||||
"Jwt": {
|
||||
"Key": "${JWT_SECRET_KEY}",
|
||||
"Issuer": "LittleShop",
|
||||
"Audience": "LittleShop-API",
|
||||
"ExpiryMinutes": 60
|
||||
},
|
||||
"BTCPayServer": {
|
||||
"ServerUrl": "${BTCPAY_SERVER_URL}",
|
||||
"StoreId": "${BTCPAY_STORE_ID}",
|
||||
"ApiKey": "${BTCPAY_API_KEY}",
|
||||
"WebhookSecret": "${BTCPAY_WEBHOOK_SECRET}"
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"Urls": "http://+:8080",
|
||||
"ForwardedHeaders": {
|
||||
"ForwardedProtoHeaderName": "X-Forwarded-Proto",
|
||||
"ForwardedForHeaderName": "X-Forwarded-For",
|
||||
"ForwardedHostHeaderName": "X-Forwarded-Host"
|
||||
},
|
||||
"TeleBot": {
|
||||
"ApiUrl": "${TELEBOT_API_URL}",
|
||||
"ApiKey": "${TELEBOT_API_KEY}"
|
||||
},
|
||||
"Serilog": {
|
||||
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
|
||||
"MinimumLevel": "Information",
|
||||
"WriteTo": [
|
||||
{
|
||||
"Name": "Console",
|
||||
"Args": {
|
||||
"outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "File",
|
||||
"Args": {
|
||||
"path": "/app/logs/littleshop-.log",
|
||||
"rollingInterval": "Day",
|
||||
"retainedFileCountLimit": 7,
|
||||
"outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
40
Deploy/LittleShop/appsettings.json
Normal file
40
Deploy/LittleShop/appsettings.json
Normal file
@ -0,0 +1,40 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Data Source=littleshop.db"
|
||||
},
|
||||
"Jwt": {
|
||||
"Key": "ThisIsASuperSecretKeyForJWTAuthenticationThatIsDefinitelyLongerThan32Characters!",
|
||||
"Issuer": "LittleShop",
|
||||
"Audience": "LittleShop",
|
||||
"ExpiryInHours": 24
|
||||
},
|
||||
"SilverPay": {
|
||||
"BaseUrl": "http://31.97.57.205:8001",
|
||||
"ApiKey": "sp_live_key_2025_production",
|
||||
"WebhookSecret": "webhook_secret_2025",
|
||||
"DefaultWebhookUrl": "http://localhost:8080/api/orders/payments/webhook",
|
||||
"AllowUnsignedWebhooks": true,
|
||||
"UseMockService": false
|
||||
},
|
||||
"RoyalMail": {
|
||||
"ClientId": "",
|
||||
"ClientSecret": "",
|
||||
"BaseUrl": "https://api.royalmail.net/",
|
||||
"SenderAddress1": "SilverLabs Ltd, 123 Business Street",
|
||||
"SenderCity": "London",
|
||||
"SenderPostCode": "SW1A 1AA",
|
||||
"SenderCountry": "United Kingdom"
|
||||
},
|
||||
"WebPush": {
|
||||
"VapidPublicKey": "BMc6fFJZ8oIQKQzcl3kMnP9tTsjrm3oI_VxLt3lAGYUMWGInzDKn7jqclEoZzjvXy1QXGFb3dIun8mVBwh-QuS4",
|
||||
"VapidPrivateKey": "dYuuagbz2CzCnPDFUpO_qkGLBgnN3MEFZQnjXNkc1MY",
|
||||
"Subject": "mailto:admin@littleshop.local"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-arm/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-arm/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-arm64/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-arm64/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-armel/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-armel/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-mips64/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-mips64/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-musl-arm/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-musl-arm/native/libe_sqlite3.so
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-musl-x64/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-musl-x64/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-ppc64le/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-ppc64le/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-s390x/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-s390x/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-x64/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-x64/native/libe_sqlite3.so
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/linux-x86/native/libe_sqlite3.so
Normal file
BIN
Deploy/LittleShop/runtimes/linux-x86/native/libe_sqlite3.so
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/osx-arm64/native/libe_sqlite3.dylib
Normal file
BIN
Deploy/LittleShop/runtimes/osx-arm64/native/libe_sqlite3.dylib
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/osx-x64/native/libe_sqlite3.dylib
Normal file
BIN
Deploy/LittleShop/runtimes/osx-x64/native/libe_sqlite3.dylib
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/win-arm/native/e_sqlite3.dll
Normal file
BIN
Deploy/LittleShop/runtimes/win-arm/native/e_sqlite3.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/win-arm64/native/e_sqlite3.dll
Normal file
BIN
Deploy/LittleShop/runtimes/win-arm64/native/e_sqlite3.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/win-x64/native/e_sqlite3.dll
Normal file
BIN
Deploy/LittleShop/runtimes/win-x64/native/e_sqlite3.dll
Normal file
Binary file not shown.
BIN
Deploy/LittleShop/runtimes/win-x86/native/e_sqlite3.dll
Normal file
BIN
Deploy/LittleShop/runtimes/win-x86/native/e_sqlite3.dll
Normal file
Binary file not shown.
12
Deploy/LittleShop/web.config
Normal file
12
Deploy/LittleShop/web.config
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<location path="." inheritInChildApplications="false">
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
|
||||
</handlers>
|
||||
<aspNetCore processPath="dotnet" arguments=".\LittleShop.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
|
||||
</system.webServer>
|
||||
</location>
|
||||
</configuration>
|
||||
<!--ProjectGuid: 45F90A9D-4B8B-48D8-8D80-7B2335DD9072-->
|
||||
415
Deploy/LittleShop/wwwroot/css/corporate-steel-theme.css
Normal file
415
Deploy/LittleShop/wwwroot/css/corporate-steel-theme.css
Normal file
@ -0,0 +1,415 @@
|
||||
/*
|
||||
* 🏢 CORPORATE STEEL THEME 🏢
|
||||
* Professional dark theme with subtle metallic accents
|
||||
* Clean, corporate aesthetic with steel/metal textures
|
||||
*/
|
||||
|
||||
:root {
|
||||
/* Corporate Color Palette */
|
||||
--corp-primary: #6A4C93; /* Muted Purple */
|
||||
--corp-secondary: #8B5A8C; /* Soft Purple */
|
||||
--corp-accent: #9B69B0; /* Light Purple */
|
||||
|
||||
/* Steel/Metal Colors */
|
||||
--steel-dark: #1C1C1E; /* Dark Steel */
|
||||
--steel-medium: #2C2C2E; /* Medium Steel */
|
||||
--steel-light: #3A3A3C; /* Light Steel */
|
||||
--steel-accent: #48484A; /* Steel Accent */
|
||||
|
||||
/* Text Colors */
|
||||
--text-primary: #FFFFFF; /* White */
|
||||
--text-secondary: #E5E5E7; /* Light Grey */
|
||||
--text-muted: #AEAEB2; /* Muted Grey */
|
||||
|
||||
/* Subtle Gradients */
|
||||
--steel-gradient: linear-gradient(135deg,
|
||||
var(--steel-dark) 0%,
|
||||
var(--steel-medium) 50%,
|
||||
var(--steel-light) 100%);
|
||||
|
||||
--purple-gradient: linear-gradient(135deg,
|
||||
var(--corp-primary) 0%,
|
||||
var(--corp-secondary) 100%);
|
||||
|
||||
/* Shadows */
|
||||
--shadow-subtle: 0 2px 8px rgba(0, 0, 0, 0.3);
|
||||
--shadow-medium: 0 4px 16px rgba(0, 0, 0, 0.4);
|
||||
--shadow-strong: 0 8px 32px rgba(0, 0, 0, 0.5);
|
||||
|
||||
/* Transitions */
|
||||
--transition-smooth: 0.2s ease;
|
||||
}
|
||||
|
||||
/* Global Corporate Base */
|
||||
body {
|
||||
background: var(--steel-dark) !important;
|
||||
background-image:
|
||||
linear-gradient(45deg, transparent 49%, rgba(106, 76, 147, 0.03) 50%, transparent 51%),
|
||||
linear-gradient(-45deg, transparent 49%, rgba(139, 90, 140, 0.02) 50%, transparent 51%);
|
||||
background-size: 20px 20px, 24px 24px;
|
||||
color: var(--text-primary) !important;
|
||||
font-family: 'Segoe UI', 'Roboto', 'Arial', sans-serif !important;
|
||||
font-weight: 400;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Card Styling */
|
||||
.card,
|
||||
.rz-card {
|
||||
background: var(--steel-gradient) !important;
|
||||
border: 1px solid var(--steel-accent) !important;
|
||||
border-radius: 8px !important;
|
||||
box-shadow: var(--shadow-medium) !important;
|
||||
color: var(--text-primary) !important;
|
||||
transition: all var(--transition-smooth) !important;
|
||||
}
|
||||
|
||||
.card:hover,
|
||||
.rz-card:hover {
|
||||
transform: translateY(-2px) !important;
|
||||
box-shadow: var(--shadow-strong) !important;
|
||||
border-color: var(--corp-accent) !important;
|
||||
}
|
||||
|
||||
.card-header,
|
||||
.rz-card-header {
|
||||
background: linear-gradient(90deg,
|
||||
var(--steel-medium) 0%,
|
||||
var(--steel-light) 100%) !important;
|
||||
border-bottom: 1px solid var(--steel-accent) !important;
|
||||
color: var(--text-primary) !important;
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
.card-body,
|
||||
.rz-card-body {
|
||||
background: var(--steel-medium) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
/* Button Styling */
|
||||
.btn,
|
||||
.rz-button {
|
||||
background: var(--purple-gradient) !important;
|
||||
border: 1px solid var(--corp-accent) !important;
|
||||
border-radius: 6px !important;
|
||||
color: var(--text-primary) !important;
|
||||
font-weight: 500 !important;
|
||||
transition: all var(--transition-smooth) !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.btn:hover,
|
||||
.rz-button:hover {
|
||||
background: linear-gradient(135deg,
|
||||
var(--corp-secondary) 0%,
|
||||
var(--corp-accent) 100%) !important;
|
||||
border-color: var(--corp-accent) !important;
|
||||
transform: translateY(-1px) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
.btn:active,
|
||||
.rz-button:active {
|
||||
transform: scale(0.98) !important;
|
||||
}
|
||||
|
||||
/* Navigation */
|
||||
.navbar-dark {
|
||||
background: var(--steel-gradient) !important;
|
||||
border-bottom: 1px solid var(--steel-accent) !important;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
color: var(--text-primary) !important;
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
color: var(--text-secondary) !important;
|
||||
transition: all var(--transition-smooth) !important;
|
||||
}
|
||||
|
||||
.nav-link:hover {
|
||||
color: var(--corp-accent) !important;
|
||||
}
|
||||
|
||||
/* Form Controls */
|
||||
.form-control,
|
||||
.form-select,
|
||||
.rz-textbox,
|
||||
.rz-dropdown {
|
||||
background: var(--steel-medium) !important;
|
||||
border: 2px solid var(--steel-accent) !important;
|
||||
border-radius: 6px !important;
|
||||
color: var(--text-primary) !important;
|
||||
transition: all var(--transition-smooth) !important;
|
||||
}
|
||||
|
||||
.form-control:focus,
|
||||
.form-select:focus,
|
||||
.rz-textbox:focus,
|
||||
.rz-dropdown:focus {
|
||||
background: var(--steel-light) !important;
|
||||
border-color: var(--corp-primary) !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(106, 76, 147, 0.25) !important;
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
color: var(--text-secondary) !important;
|
||||
font-weight: 500 !important;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
.table {
|
||||
background: var(--steel-medium) !important;
|
||||
color: var(--text-primary) !important;
|
||||
border-radius: 8px !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.table th {
|
||||
background: var(--steel-light) !important;
|
||||
color: var(--text-primary) !important;
|
||||
border-bottom: 2px solid var(--steel-accent) !important;
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
.table td {
|
||||
border-bottom: 1px solid var(--steel-accent) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
.table tbody tr:hover {
|
||||
background: rgba(106, 76, 147, 0.1) !important;
|
||||
}
|
||||
|
||||
/* Mobile Navigation */
|
||||
.mobile-header {
|
||||
background: var(--steel-gradient) !important;
|
||||
border-bottom: 1px solid var(--steel-accent) !important;
|
||||
}
|
||||
|
||||
.mobile-bottom-nav {
|
||||
background: var(--steel-medium) !important;
|
||||
border-top: 1px solid var(--steel-accent) !important;
|
||||
}
|
||||
|
||||
.mobile-nav-item {
|
||||
color: var(--text-secondary) !important;
|
||||
transition: all var(--transition-smooth) !important;
|
||||
}
|
||||
|
||||
.mobile-nav-item:hover {
|
||||
color: var(--corp-accent) !important;
|
||||
background: rgba(106, 76, 147, 0.1) !important;
|
||||
}
|
||||
|
||||
.mobile-nav-item.active {
|
||||
color: var(--text-primary) !important;
|
||||
background: var(--purple-gradient) !important;
|
||||
}
|
||||
|
||||
.mobile-sidebar {
|
||||
background: var(--steel-gradient) !important;
|
||||
border-right: 1px solid var(--steel-accent) !important;
|
||||
}
|
||||
|
||||
.mobile-sidebar-header {
|
||||
background: var(--purple-gradient) !important;
|
||||
}
|
||||
|
||||
.mobile-sidebar-link {
|
||||
color: var(--text-secondary) !important;
|
||||
transition: all var(--transition-smooth) !important;
|
||||
}
|
||||
|
||||
.mobile-sidebar-link:hover {
|
||||
background: rgba(106, 76, 147, 0.1) !important;
|
||||
color: var(--corp-accent) !important;
|
||||
}
|
||||
|
||||
.mobile-sidebar-link.active {
|
||||
background: var(--purple-gradient) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
/* Alerts and Notifications */
|
||||
.alert {
|
||||
background: var(--steel-medium) !important;
|
||||
border: 1px solid var(--steel-accent) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
.alert-success {
|
||||
border-color: #28a745 !important;
|
||||
background: linear-gradient(135deg, var(--steel-medium), rgba(40, 167, 69, 0.1)) !important;
|
||||
}
|
||||
|
||||
.alert-danger {
|
||||
border-color: #dc3545 !important;
|
||||
background: linear-gradient(135deg, var(--steel-medium), rgba(220, 53, 69, 0.1)) !important;
|
||||
}
|
||||
|
||||
.alert-warning {
|
||||
border-color: #ffc107 !important;
|
||||
background: linear-gradient(135deg, var(--steel-medium), rgba(255, 193, 7, 0.1)) !important;
|
||||
}
|
||||
|
||||
/* Mobile Cards */
|
||||
.mobile-card,
|
||||
.order-card {
|
||||
background: var(--steel-gradient) !important;
|
||||
border: 1px solid var(--steel-accent) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
.mobile-card-header,
|
||||
.order-header {
|
||||
background: var(--steel-light) !important;
|
||||
color: var(--text-primary) !important;
|
||||
border-bottom: 1px solid var(--steel-accent) !important;
|
||||
}
|
||||
|
||||
.mobile-card-body,
|
||||
.order-body {
|
||||
background: var(--steel-medium) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
.mobile-card-footer {
|
||||
background: var(--steel-light) !important;
|
||||
color: var(--text-primary) !important;
|
||||
border-top: 1px solid var(--steel-accent) !important;
|
||||
}
|
||||
|
||||
/* Status Badges */
|
||||
.status-badge {
|
||||
background: var(--steel-light) !important;
|
||||
color: var(--text-primary) !important;
|
||||
border: 1px solid var(--steel-accent) !important;
|
||||
}
|
||||
|
||||
.status-badge.pending {
|
||||
background: linear-gradient(135deg, var(--steel-light), rgba(255, 193, 7, 0.2)) !important;
|
||||
color: #ffc107 !important;
|
||||
}
|
||||
|
||||
.status-badge.processing {
|
||||
background: linear-gradient(135deg, var(--steel-light), rgba(23, 162, 184, 0.2)) !important;
|
||||
color: #17a2b8 !important;
|
||||
}
|
||||
|
||||
.status-badge.shipped {
|
||||
background: linear-gradient(135deg, var(--steel-light), rgba(40, 167, 69, 0.2)) !important;
|
||||
color: #28a745 !important;
|
||||
}
|
||||
|
||||
/* Breadcrumbs and Links */
|
||||
a {
|
||||
color: var(--corp-accent) !important;
|
||||
transition: color var(--transition-smooth) !important;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
/* Dropdowns */
|
||||
.dropdown-menu {
|
||||
background: var(--steel-medium) !important;
|
||||
border: 1px solid var(--steel-accent) !important;
|
||||
box-shadow: var(--shadow-medium) !important;
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
color: var(--text-secondary) !important;
|
||||
transition: all var(--transition-smooth) !important;
|
||||
}
|
||||
|
||||
.dropdown-item:hover {
|
||||
background: rgba(106, 76, 147, 0.2) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
/* List Groups */
|
||||
.list-group-item {
|
||||
background: var(--steel-medium) !important;
|
||||
border: 1px solid var(--steel-accent) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
.list-group-item:hover {
|
||||
background: var(--steel-light) !important;
|
||||
}
|
||||
|
||||
/* Override any remaining Bootstrap defaults */
|
||||
.container,
|
||||
.container-fluid {
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: var(--text-primary) !important;
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
p {
|
||||
color: var(--text-secondary) !important;
|
||||
}
|
||||
|
||||
/* Subtle Steel Texture */
|
||||
.steel-texture {
|
||||
background-image:
|
||||
linear-gradient(45deg, rgba(255,255,255,0.02) 25%, transparent 25%),
|
||||
linear-gradient(-45deg, rgba(255,255,255,0.02) 25%, transparent 25%),
|
||||
linear-gradient(45deg, transparent 75%, rgba(255,255,255,0.02) 75%),
|
||||
linear-gradient(-45deg, transparent 75%, rgba(255,255,255,0.02) 75%);
|
||||
background-size: 4px 4px;
|
||||
background-position: 0 0, 0 2px, 2px -2px, -2px 0px;
|
||||
}
|
||||
|
||||
/* Corporate Professional Styling */
|
||||
.corporate-card {
|
||||
background: var(--steel-gradient) !important;
|
||||
border: 1px solid var(--steel-accent) !important;
|
||||
border-radius: 8px !important;
|
||||
box-shadow: var(--shadow-subtle) !important;
|
||||
}
|
||||
|
||||
.corporate-card:hover {
|
||||
box-shadow: var(--shadow-medium) !important;
|
||||
transform: translateY(-1px) !important;
|
||||
}
|
||||
|
||||
/* Remove any epileptic-inducing effects */
|
||||
* {
|
||||
animation: none !important;
|
||||
}
|
||||
|
||||
/* Clean scrollbars */
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
background: var(--steel-dark);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: var(--steel-medium);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: var(--steel-light);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--corp-primary);
|
||||
}
|
||||
|
||||
/* Professional Focus States */
|
||||
.form-control:focus,
|
||||
.form-select:focus {
|
||||
border-color: var(--corp-primary) !important;
|
||||
box-shadow: 0 0 0 0.2rem rgba(106, 76, 147, 0.25) !important;
|
||||
}
|
||||
BIN
Deploy/LittleShop/wwwroot/css/corporate-steel-theme.css.br
Normal file
BIN
Deploy/LittleShop/wwwroot/css/corporate-steel-theme.css.br
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user