Configure BTCPay with external nodes via Tor
- Set up Tor container for SOCKS proxy (port 9050) - Configured Monero wallet with remote onion node - Bitcoin node continues syncing in background (60% complete) - Created documentation for wallet configuration steps - All external connections routed through Tor for privacy BTCPay requires manual wallet configuration through web interface: - Bitcoin: Need to add xpub/zpub for watch-only wallet - Monero: Need to add address and view key System ready for payment acceptance once wallets configured.
This commit is contained in:
BIN
publish/AutoMapper.dll
Executable file
BIN
publish/AutoMapper.dll
Executable file
Binary file not shown.
BIN
publish/BTCPayServer.Client.dll
Executable file
BIN
publish/BTCPayServer.Client.dll
Executable file
Binary file not shown.
BIN
publish/BTCPayServer.Lightning.Common.dll
Executable file
BIN
publish/BTCPayServer.Lightning.Common.dll
Executable file
Binary file not shown.
BIN
publish/BouncyCastle.Crypto.dll
Executable file
BIN
publish/BouncyCastle.Crypto.dll
Executable file
Binary file not shown.
BIN
publish/FluentValidation.AspNetCore.dll
Executable file
BIN
publish/FluentValidation.AspNetCore.dll
Executable file
Binary file not shown.
BIN
publish/FluentValidation.DependencyInjectionExtensions.dll
Executable file
BIN
publish/FluentValidation.DependencyInjectionExtensions.dll
Executable file
Binary file not shown.
BIN
publish/FluentValidation.dll
Executable file
BIN
publish/FluentValidation.dll
Executable file
Binary file not shown.
BIN
publish/LittleShop
Executable file
BIN
publish/LittleShop
Executable file
Binary file not shown.
1531
publish/LittleShop.deps.json
Normal file
1531
publish/LittleShop.deps.json
Normal file
File diff suppressed because it is too large
Load Diff
BIN
publish/LittleShop.dll
Normal file
BIN
publish/LittleShop.dll
Normal file
Binary file not shown.
BIN
publish/LittleShop.pdb
Normal file
BIN
publish/LittleShop.pdb
Normal file
Binary file not shown.
21
publish/LittleShop.runtimeconfig.json
Normal file
21
publish/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
|
||||
}
|
||||
}
|
||||
}
|
||||
1
publish/LittleShop.staticwebassets.endpoints.json
Normal file
1
publish/LittleShop.staticwebassets.endpoints.json
Normal file
File diff suppressed because one or more lines are too long
BIN
publish/Microsoft.AspNetCore.Authentication.JwtBearer.dll
Executable file
BIN
publish/Microsoft.AspNetCore.Authentication.JwtBearer.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll
Executable file
BIN
publish/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Data.Sqlite.dll
Executable file
BIN
publish/Microsoft.Data.Sqlite.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.EntityFrameworkCore.Abstractions.dll
Executable file
BIN
publish/Microsoft.EntityFrameworkCore.Abstractions.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.EntityFrameworkCore.InMemory.dll
Executable file
BIN
publish/Microsoft.EntityFrameworkCore.InMemory.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.EntityFrameworkCore.Relational.dll
Executable file
BIN
publish/Microsoft.EntityFrameworkCore.Relational.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.EntityFrameworkCore.Sqlite.dll
Executable file
BIN
publish/Microsoft.EntityFrameworkCore.Sqlite.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.EntityFrameworkCore.dll
Executable file
BIN
publish/Microsoft.EntityFrameworkCore.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.Caching.Abstractions.dll
Executable file
BIN
publish/Microsoft.Extensions.Caching.Abstractions.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.Caching.Memory.dll
Executable file
BIN
publish/Microsoft.Extensions.Caching.Memory.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.DependencyInjection.Abstractions.dll
Executable file
BIN
publish/Microsoft.Extensions.DependencyInjection.Abstractions.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.DependencyInjection.dll
Executable file
BIN
publish/Microsoft.Extensions.DependencyInjection.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.DependencyModel.dll
Executable file
BIN
publish/Microsoft.Extensions.DependencyModel.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.Logging.Abstractions.dll
Executable file
BIN
publish/Microsoft.Extensions.Logging.Abstractions.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.Logging.dll
Executable file
BIN
publish/Microsoft.Extensions.Logging.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.Options.dll
Executable file
BIN
publish/Microsoft.Extensions.Options.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.Extensions.Primitives.dll
Executable file
BIN
publish/Microsoft.Extensions.Primitives.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.IdentityModel.Abstractions.dll
Executable file
BIN
publish/Microsoft.IdentityModel.Abstractions.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.IdentityModel.JsonWebTokens.dll
Executable file
BIN
publish/Microsoft.IdentityModel.JsonWebTokens.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.IdentityModel.Logging.dll
Executable file
BIN
publish/Microsoft.IdentityModel.Logging.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
Executable file
BIN
publish/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.IdentityModel.Protocols.dll
Executable file
BIN
publish/Microsoft.IdentityModel.Protocols.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.IdentityModel.Tokens.dll
Executable file
BIN
publish/Microsoft.IdentityModel.Tokens.dll
Executable file
Binary file not shown.
BIN
publish/Microsoft.OpenApi.dll
Executable file
BIN
publish/Microsoft.OpenApi.dll
Executable file
Binary file not shown.
BIN
publish/NBitcoin.dll
Executable file
BIN
publish/NBitcoin.dll
Executable file
Binary file not shown.
BIN
publish/Newtonsoft.Json.dll
Executable file
BIN
publish/Newtonsoft.Json.dll
Executable file
Binary file not shown.
BIN
publish/SQLitePCLRaw.batteries_v2.dll
Executable file
BIN
publish/SQLitePCLRaw.batteries_v2.dll
Executable file
Binary file not shown.
BIN
publish/SQLitePCLRaw.core.dll
Executable file
BIN
publish/SQLitePCLRaw.core.dll
Executable file
Binary file not shown.
BIN
publish/SQLitePCLRaw.provider.e_sqlite3.dll
Executable file
BIN
publish/SQLitePCLRaw.provider.e_sqlite3.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.AspNetCore.dll
Executable file
BIN
publish/Serilog.AspNetCore.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.Extensions.Hosting.dll
Executable file
BIN
publish/Serilog.Extensions.Hosting.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.Extensions.Logging.dll
Executable file
BIN
publish/Serilog.Extensions.Logging.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.Formatting.Compact.dll
Executable file
BIN
publish/Serilog.Formatting.Compact.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.Settings.Configuration.dll
Executable file
BIN
publish/Serilog.Settings.Configuration.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.Sinks.Console.dll
Executable file
BIN
publish/Serilog.Sinks.Console.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.Sinks.Debug.dll
Executable file
BIN
publish/Serilog.Sinks.Debug.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.Sinks.File.dll
Executable file
BIN
publish/Serilog.Sinks.File.dll
Executable file
Binary file not shown.
BIN
publish/Serilog.dll
Executable file
BIN
publish/Serilog.dll
Executable file
Binary file not shown.
BIN
publish/Swashbuckle.AspNetCore.Swagger.dll
Executable file
BIN
publish/Swashbuckle.AspNetCore.Swagger.dll
Executable file
Binary file not shown.
BIN
publish/Swashbuckle.AspNetCore.SwaggerGen.dll
Executable file
BIN
publish/Swashbuckle.AspNetCore.SwaggerGen.dll
Executable file
Binary file not shown.
BIN
publish/Swashbuckle.AspNetCore.SwaggerUI.dll
Executable file
BIN
publish/Swashbuckle.AspNetCore.SwaggerUI.dll
Executable file
Binary file not shown.
BIN
publish/System.IdentityModel.Tokens.Jwt.dll
Executable file
BIN
publish/System.IdentityModel.Tokens.Jwt.dll
Executable file
Binary file not shown.
2447
publish/TestAgent_Results/authentication_analysis.json
Normal file
2447
publish/TestAgent_Results/authentication_analysis.json
Normal file
File diff suppressed because it is too large
Load Diff
6861
publish/TestAgent_Results/coverage_analysis.json
Normal file
6861
publish/TestAgent_Results/coverage_analysis.json
Normal file
File diff suppressed because it is too large
Load Diff
2940
publish/TestAgent_Results/endpoint_discovery.json
Normal file
2940
publish/TestAgent_Results/endpoint_discovery.json
Normal file
File diff suppressed because it is too large
Load Diff
1386
publish/TestAgent_Results/error_detection.json
Normal file
1386
publish/TestAgent_Results/error_detection.json
Normal file
File diff suppressed because it is too large
Load Diff
31
publish/TestAgent_Results/executive_summary.json
Normal file
31
publish/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"
|
||||
]
|
||||
}
|
||||
79
publish/TestAgent_Results/intelligent_analysis.json
Normal file
79
publish/TestAgent_Results/intelligent_analysis.json
Normal file
@@ -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
publish/TestAgent_Results/project_structure.json
Normal file
1669
publish/TestAgent_Results/project_structure.json
Normal file
File diff suppressed because it is too large
Load Diff
17
publish/TestAgent_Results/visual_testing.json
Normal file
17
publish/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
publish/WebPush.dll
Executable file
BIN
publish/WebPush.dll
Executable file
Binary file not shown.
46
publish/appsettings.Hostinger.json
Normal file
46
publish/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": "994589c8b514531f867dd24c83a02b6381a5f4a2",
|
||||
"StoreId": "AoxXjM9NJT6P9C1MErkaawXaSchz8sFPYdQ9FyhmQz33",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
52
publish/appsettings.Production.json
Normal file
52
publish/appsettings.Production.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"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}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
38
publish/appsettings.json
Normal file
38
publish/appsettings.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Data Source=littleshop.db"
|
||||
},
|
||||
"Jwt": {
|
||||
"Key": "YourSuperSecretKeyThatIsAtLeast32CharactersLong!",
|
||||
"Issuer": "LittleShop",
|
||||
"Audience": "LittleShop",
|
||||
"ExpiryInHours": 24
|
||||
},
|
||||
"BTCPayServer": {
|
||||
"BaseUrl": "https://pay.silverlabs.uk",
|
||||
"ApiKey": "994589c8b514531f867dd24c83a02b6381a5f4a2",
|
||||
"StoreId": "AoxXjM9NJT6P9C1MErkaawXaSchz8sFPYdQ9FyhmQz33",
|
||||
"WebhookSecret": ""
|
||||
},
|
||||
"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": "*"
|
||||
}
|
||||
BIN
publish/runtimes/browser-wasm/nativeassets/net9.0/e_sqlite3.a
Executable file
BIN
publish/runtimes/browser-wasm/nativeassets/net9.0/e_sqlite3.a
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-arm/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-arm/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-arm64/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-arm64/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-armel/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-armel/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-mips64/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-mips64/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-musl-arm/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-musl-arm/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-musl-arm64/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-musl-arm64/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-musl-s390x/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-musl-s390x/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-musl-x64/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-musl-x64/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-ppc64le/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-ppc64le/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-s390x/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-s390x/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-x64/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-x64/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/linux-x86/native/libe_sqlite3.so
Executable file
BIN
publish/runtimes/linux-x86/native/libe_sqlite3.so
Executable file
Binary file not shown.
BIN
publish/runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib
Executable file
BIN
publish/runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib
Executable file
Binary file not shown.
BIN
publish/runtimes/maccatalyst-x64/native/libe_sqlite3.dylib
Executable file
BIN
publish/runtimes/maccatalyst-x64/native/libe_sqlite3.dylib
Executable file
Binary file not shown.
BIN
publish/runtimes/osx-arm64/native/libe_sqlite3.dylib
Executable file
BIN
publish/runtimes/osx-arm64/native/libe_sqlite3.dylib
Executable file
Binary file not shown.
BIN
publish/runtimes/osx-x64/native/libe_sqlite3.dylib
Executable file
BIN
publish/runtimes/osx-x64/native/libe_sqlite3.dylib
Executable file
Binary file not shown.
BIN
publish/runtimes/win-arm/native/e_sqlite3.dll
Executable file
BIN
publish/runtimes/win-arm/native/e_sqlite3.dll
Executable file
Binary file not shown.
BIN
publish/runtimes/win-arm64/native/e_sqlite3.dll
Executable file
BIN
publish/runtimes/win-arm64/native/e_sqlite3.dll
Executable file
Binary file not shown.
BIN
publish/runtimes/win-x64/native/e_sqlite3.dll
Executable file
BIN
publish/runtimes/win-x64/native/e_sqlite3.dll
Executable file
Binary file not shown.
BIN
publish/runtimes/win-x86/native/e_sqlite3.dll
Executable file
BIN
publish/runtimes/win-x86/native/e_sqlite3.dll
Executable file
Binary file not shown.
11
publish/web.config
Normal file
11
publish/web.config
Normal file
@@ -0,0 +1,11 @@
|
||||
<?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>
|
||||
415
publish/wwwroot/css/corporate-steel-theme.css
Normal file
415
publish/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
publish/wwwroot/css/corporate-steel-theme.css.br
Normal file
BIN
publish/wwwroot/css/corporate-steel-theme.css.br
Normal file
Binary file not shown.
BIN
publish/wwwroot/css/corporate-steel-theme.css.gz
Normal file
BIN
publish/wwwroot/css/corporate-steel-theme.css.gz
Normal file
Binary file not shown.
444
publish/wwwroot/css/modern-admin.css
Normal file
444
publish/wwwroot/css/modern-admin.css
Normal file
@@ -0,0 +1,444 @@
|
||||
/*
|
||||
* Modern Clean Admin Theme
|
||||
* Mobile-first, professional, and user-friendly
|
||||
*/
|
||||
|
||||
:root {
|
||||
/* Modern Color Palette */
|
||||
--primary-blue: #2563eb;
|
||||
--primary-purple: #7c3aed;
|
||||
--success-green: #059669;
|
||||
--warning-orange: #d97706;
|
||||
--danger-red: #dc2626;
|
||||
|
||||
/* Neutral Greys */
|
||||
--grey-50: #f9fafb;
|
||||
--grey-100: #f3f4f6;
|
||||
--grey-200: #e5e7eb;
|
||||
--grey-300: #d1d5db;
|
||||
--grey-400: #9ca3af;
|
||||
--grey-500: #6b7280;
|
||||
--grey-600: #4b5563;
|
||||
--grey-700: #374151;
|
||||
--grey-800: #1f2937;
|
||||
--grey-900: #111827;
|
||||
|
||||
/* Spacing */
|
||||
--spacing-xs: 0.25rem;
|
||||
--spacing-sm: 0.5rem;
|
||||
--spacing-md: 1rem;
|
||||
--spacing-lg: 1.5rem;
|
||||
--spacing-xl: 2rem;
|
||||
|
||||
/* Border Radius */
|
||||
--radius-sm: 0.375rem;
|
||||
--radius-md: 0.5rem;
|
||||
--radius-lg: 0.75rem;
|
||||
--radius-xl: 1rem;
|
||||
|
||||
/* Shadows */
|
||||
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
||||
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
||||
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||||
|
||||
/* Typography */
|
||||
--font-sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
||||
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
|
||||
}
|
||||
|
||||
/* Global Styles */
|
||||
body {
|
||||
font-family: var(--font-sans);
|
||||
background-color: var(--grey-50);
|
||||
color: var(--grey-900);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Modern Card Styling */
|
||||
.card {
|
||||
border: 1px solid var(--grey-200);
|
||||
border-radius: var(--radius-lg);
|
||||
box-shadow: var(--shadow-sm);
|
||||
background: white;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
box-shadow: var(--shadow-md);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.card-header {
|
||||
background: var(--grey-50);
|
||||
border-bottom: 1px solid var(--grey-200);
|
||||
padding: var(--spacing-lg);
|
||||
font-weight: 600;
|
||||
color: var(--grey-700);
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: var(--spacing-lg);
|
||||
}
|
||||
|
||||
/* Modern Button Styling */
|
||||
.btn {
|
||||
border-radius: var(--radius-md);
|
||||
font-weight: 500;
|
||||
padding: 0.625rem 1.25rem;
|
||||
transition: all 0.2s ease;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background: linear-gradient(135deg, var(--primary-blue) 0%, var(--primary-purple) 100%);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background: linear-gradient(135deg, #1d4ed8 0%, #6d28d9 100%);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
background: var(--success-green);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-success:hover {
|
||||
background: #047857;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn-outline-primary {
|
||||
border: 2px solid var(--primary-blue);
|
||||
color: var(--primary-blue);
|
||||
background: white;
|
||||
}
|
||||
|
||||
.btn-outline-primary:hover {
|
||||
background: var(--primary-blue);
|
||||
color: white;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn-sm {
|
||||
padding: 0.5rem 1rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
/* Modern Navigation */
|
||||
.navbar {
|
||||
background: white !important;
|
||||
border-bottom: 1px solid var(--grey-200);
|
||||
box-shadow: var(--shadow-sm);
|
||||
padding: var(--spacing-md) 0;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
color: var(--grey-900) !important;
|
||||
font-weight: 700;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link {
|
||||
color: var(--grey-600) !important;
|
||||
font-weight: 500;
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: var(--radius-md);
|
||||
margin: 0 0.25rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link:hover {
|
||||
color: var(--primary-blue) !important;
|
||||
background: var(--grey-50);
|
||||
}
|
||||
|
||||
/* Form Controls */
|
||||
.form-control,
|
||||
.form-select {
|
||||
border: 2px solid var(--grey-200);
|
||||
border-radius: var(--radius-md);
|
||||
padding: 0.75rem 1rem;
|
||||
transition: all 0.2s ease;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.form-control:focus,
|
||||
.form-select:focus {
|
||||
border-color: var(--primary-blue);
|
||||
box-shadow: 0 0 0 0.25rem rgba(37, 99, 235, 0.1);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
font-weight: 600;
|
||||
color: var(--grey-700);
|
||||
margin-bottom: var(--spacing-sm);
|
||||
}
|
||||
|
||||
/* Table Styling */
|
||||
.table {
|
||||
background: white;
|
||||
border-radius: var(--radius-lg);
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
background: var(--grey-50);
|
||||
border-bottom: 2px solid var(--grey-200);
|
||||
font-weight: 600;
|
||||
color: var(--grey-700);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.table tbody td {
|
||||
padding: 1rem;
|
||||
border-bottom: 1px solid var(--grey-100);
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.table tbody tr:hover {
|
||||
background: var(--grey-50);
|
||||
}
|
||||
|
||||
/* Status Badges */
|
||||
.badge {
|
||||
font-weight: 500;
|
||||
padding: 0.5rem 0.75rem;
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
|
||||
.bg-success {
|
||||
background-color: var(--success-green) !important;
|
||||
}
|
||||
|
||||
.bg-warning {
|
||||
background-color: var(--warning-orange) !important;
|
||||
}
|
||||
|
||||
.bg-danger {
|
||||
background-color: var(--danger-red) !important;
|
||||
}
|
||||
|
||||
.bg-info {
|
||||
background-color: var(--primary-blue) !important;
|
||||
}
|
||||
|
||||
/* Page Headers */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: var(--grey-900);
|
||||
font-weight: 700;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2rem;
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
/* Mobile Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.container-fluid {
|
||||
padding: var(--spacing-md);
|
||||
}
|
||||
|
||||
.card {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
border-radius: var(--radius-md);
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: var(--spacing-md);
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: var(--spacing-md);
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 100%;
|
||||
margin-bottom: var(--spacing-sm);
|
||||
}
|
||||
|
||||
.btn:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Mobile Table - Stack on Small Screens */
|
||||
@media (max-width: 768px) {
|
||||
.table-responsive {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table {
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.table thead {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table tbody,
|
||||
.table tbody tr,
|
||||
.table tbody td {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.table tbody tr {
|
||||
background: white;
|
||||
border: 1px solid var(--grey-200);
|
||||
border-radius: var(--radius-md);
|
||||
margin-bottom: var(--spacing-md);
|
||||
padding: var(--spacing-md);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.table tbody td {
|
||||
border: none;
|
||||
padding: var(--spacing-sm) 0;
|
||||
position: relative;
|
||||
padding-left: 40%;
|
||||
}
|
||||
|
||||
.table tbody td:before {
|
||||
content: attr(data-label) ": ";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 35%;
|
||||
font-weight: 600;
|
||||
color: var(--grey-600);
|
||||
}
|
||||
}
|
||||
|
||||
/* Mobile Navigation */
|
||||
.navbar-toggler {
|
||||
border: none;
|
||||
padding: 0.25rem 0.5rem;
|
||||
}
|
||||
|
||||
.navbar-collapse {
|
||||
margin-top: var(--spacing-md);
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link {
|
||||
padding: var(--spacing-md);
|
||||
margin: var(--spacing-xs) 0;
|
||||
background: var(--grey-50);
|
||||
border-radius: var(--radius-md);
|
||||
}
|
||||
}
|
||||
|
||||
/* Modern Form Layout */
|
||||
.row .col-md-6 .form-group,
|
||||
.row .col-md-6 .mb-3 {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
/* Action Buttons */
|
||||
.d-flex.justify-content-between .btn {
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
/* Loading States */
|
||||
.btn:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* Focus States for Accessibility */
|
||||
.btn:focus,
|
||||
.form-control:focus,
|
||||
.form-select:focus {
|
||||
outline: 2px solid var(--primary-blue);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/* Toast/Alert Improvements */
|
||||
.alert {
|
||||
border: none;
|
||||
border-radius: var(--radius-md);
|
||||
border-left: 4px solid;
|
||||
}
|
||||
|
||||
.alert-success {
|
||||
background: #ecfdf5;
|
||||
color: #065f46;
|
||||
border-left-color: var(--success-green);
|
||||
}
|
||||
|
||||
.alert-danger {
|
||||
background: #fef2f2;
|
||||
color: #991b1b;
|
||||
border-left-color: var(--danger-red);
|
||||
}
|
||||
|
||||
.alert-warning {
|
||||
background: #fffbeb;
|
||||
color: #92400e;
|
||||
border-left-color: var(--warning-orange);
|
||||
}
|
||||
|
||||
/* Clean List Styling */
|
||||
.list-group-item {
|
||||
border: 1px solid var(--grey-200);
|
||||
background: white;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.list-group-item:hover {
|
||||
background: var(--grey-50);
|
||||
transform: translateX(4px);
|
||||
}
|
||||
|
||||
.list-group-item-action {
|
||||
color: var(--grey-700);
|
||||
}
|
||||
|
||||
.list-group-item-action:hover {
|
||||
color: var(--primary-blue);
|
||||
}
|
||||
|
||||
/* Typography Improvements */
|
||||
.text-muted {
|
||||
color: var(--grey-500) !important;
|
||||
}
|
||||
|
||||
code {
|
||||
background: var(--grey-100);
|
||||
color: var(--grey-800);
|
||||
padding: 0.125rem 0.375rem;
|
||||
border-radius: var(--radius-sm);
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
/* Utility Classes */
|
||||
.rounded-modern {
|
||||
border-radius: var(--radius-lg) !important;
|
||||
}
|
||||
|
||||
.shadow-modern {
|
||||
box-shadow: var(--shadow-md) !important;
|
||||
}
|
||||
|
||||
.bg-gradient-primary {
|
||||
background: linear-gradient(135deg, var(--primary-blue) 0%, var(--primary-purple) 100%) !important;
|
||||
}
|
||||
|
||||
/* Print Styles */
|
||||
@media print {
|
||||
.navbar,
|
||||
.btn,
|
||||
.card-header {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.card {
|
||||
border: 1px solid #ccc !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
}
|
||||
BIN
publish/wwwroot/css/modern-admin.css.br
Normal file
BIN
publish/wwwroot/css/modern-admin.css.br
Normal file
Binary file not shown.
BIN
publish/wwwroot/css/modern-admin.css.gz
Normal file
BIN
publish/wwwroot/css/modern-admin.css.gz
Normal file
Binary file not shown.
534
publish/wwwroot/css/radzen-tech-theme.css
Normal file
534
publish/wwwroot/css/radzen-tech-theme.css
Normal file
@@ -0,0 +1,534 @@
|
||||
/*
|
||||
* 🤖 RADZEN TECH HOLOGRAPHIC THEME 🤖
|
||||
* Dark Purple Metallic with Holographic Effects
|
||||
* Pixel Perfect Robot/Tech Aesthetic
|
||||
*/
|
||||
|
||||
:root {
|
||||
/* Core Theme Colors */
|
||||
--tech-primary: #8A2BE2; /* Blue Violet */
|
||||
--tech-secondary: #9932CC; /* Dark Orchid */
|
||||
--tech-accent: #DA70D6; /* Orchid */
|
||||
--tech-highlight: #FF00FF; /* Magenta */
|
||||
--tech-neon: #00FFFF; /* Cyan */
|
||||
|
||||
/* Dark Base Colors */
|
||||
--tech-dark-base: #0D0014; /* Ultra Dark Purple */
|
||||
--tech-dark-surface: #1A0A2E; /* Dark Purple */
|
||||
--tech-dark-card: #16213E; /* Dark Blue Purple */
|
||||
--tech-dark-accent: #0F3460; /* Deep Blue */
|
||||
|
||||
/* Metallic Colors */
|
||||
--tech-metallic-silver: #C0C0C0;
|
||||
--tech-metallic-gold: #FFD700;
|
||||
--tech-metallic-copper: #B87333;
|
||||
--tech-metallic-chrome: #E5E5E5;
|
||||
|
||||
/* Holographic Gradient */
|
||||
--holographic-gradient: linear-gradient(45deg,
|
||||
#FF0080 0%,
|
||||
#7928CA 25%,
|
||||
#0070F3 50%,
|
||||
#00DFD8 75%,
|
||||
#FF0080 100%);
|
||||
|
||||
/* Glow Effects */
|
||||
--tech-glow-primary: 0 0 20px rgba(138, 43, 226, 0.8);
|
||||
--tech-glow-secondary: 0 0 30px rgba(153, 50, 204, 0.6);
|
||||
--tech-glow-accent: 0 0 15px rgba(218, 112, 214, 0.9);
|
||||
--tech-glow-neon: 0 0 25px rgba(0, 255, 255, 0.7);
|
||||
|
||||
/* Animation Timings */
|
||||
--tech-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
--tech-transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
--tech-transition-glow: 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
/* Holographic Animation Keyframes */
|
||||
@keyframes holographic-shift {
|
||||
0% { background-position: 0% 50%; }
|
||||
25% { background-position: 100% 50%; }
|
||||
50% { background-position: 100% 0%; }
|
||||
75% { background-position: 0% 0%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
@keyframes tech-pulse {
|
||||
0%, 100% {
|
||||
transform: scale(1);
|
||||
box-shadow: var(--tech-glow-primary);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
box-shadow: var(--tech-glow-secondary);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes neon-flicker {
|
||||
0%, 100% { opacity: 1; }
|
||||
2% { opacity: 0.8; }
|
||||
4% { opacity: 1; }
|
||||
8% { opacity: 0.9; }
|
||||
10% { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes data-stream {
|
||||
0% { transform: translateY(-100%); opacity: 0; }
|
||||
10% { opacity: 1; }
|
||||
90% { opacity: 1; }
|
||||
100% { transform: translateY(100vh); opacity: 0; }
|
||||
}
|
||||
|
||||
/* Global Dark Theme Base */
|
||||
body {
|
||||
background: var(--tech-dark-base) !important;
|
||||
background-image:
|
||||
radial-gradient(circle at 25% 25%, rgba(138, 43, 226, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 75% 75%, rgba(153, 50, 204, 0.1) 0%, transparent 50%),
|
||||
linear-gradient(45deg, transparent 45%, rgba(0, 255, 255, 0.03) 50%, transparent 55%);
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
font-family: 'Segoe UI', 'Roboto Mono', 'Courier New', monospace !important;
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
/* Radzen Component Overrides */
|
||||
.rz-card {
|
||||
background: linear-gradient(135deg,
|
||||
var(--tech-dark-surface) 0%,
|
||||
var(--tech-dark-card) 100%) !important;
|
||||
border: 1px solid rgba(138, 43, 226, 0.3) !important;
|
||||
border-radius: 12px !important;
|
||||
box-shadow:
|
||||
0 8px 32px rgba(13, 0, 20, 0.8),
|
||||
inset 0 1px 0 rgba(218, 112, 214, 0.2),
|
||||
0 0 0 1px rgba(138, 43, 226, 0.1) !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
transition: all var(--tech-transition-smooth) !important;
|
||||
backdrop-filter: blur(20px) !important;
|
||||
}
|
||||
|
||||
.rz-card:hover {
|
||||
transform: translateY(-2px) !important;
|
||||
box-shadow:
|
||||
0 16px 64px rgba(13, 0, 20, 0.9),
|
||||
inset 0 1px 0 rgba(218, 112, 214, 0.4),
|
||||
var(--tech-glow-primary) !important;
|
||||
border-color: var(--tech-primary) !important;
|
||||
}
|
||||
|
||||
.rz-card-header {
|
||||
background: linear-gradient(90deg,
|
||||
rgba(138, 43, 226, 0.2) 0%,
|
||||
rgba(153, 50, 204, 0.1) 100%) !important;
|
||||
border-bottom: 1px solid rgba(218, 112, 214, 0.3) !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
font-weight: 600 !important;
|
||||
padding: 1rem 1.5rem !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.rz-card-header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background: var(--holographic-gradient);
|
||||
background-size: 200% 100%;
|
||||
animation: holographic-shift 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.rz-card-body {
|
||||
padding: 1.5rem !important;
|
||||
background: rgba(22, 33, 62, 0.3) !important;
|
||||
}
|
||||
|
||||
/* Radzen Buttons */
|
||||
.rz-button {
|
||||
background: linear-gradient(135deg,
|
||||
var(--tech-primary) 0%,
|
||||
var(--tech-secondary) 100%) !important;
|
||||
border: 1px solid var(--tech-accent) !important;
|
||||
border-radius: 8px !important;
|
||||
color: white !important;
|
||||
font-weight: 600 !important;
|
||||
text-transform: uppercase !important;
|
||||
letter-spacing: 0.5px !important;
|
||||
transition: all var(--tech-transition-smooth) !important;
|
||||
position: relative !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.rz-button::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -2px;
|
||||
left: -2px;
|
||||
right: -2px;
|
||||
bottom: -2px;
|
||||
background: var(--holographic-gradient);
|
||||
background-size: 200% 200%;
|
||||
border-radius: inherit;
|
||||
z-index: -1;
|
||||
opacity: 0;
|
||||
transition: opacity var(--tech-transition-smooth);
|
||||
animation: holographic-shift 2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.rz-button:hover::before {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.rz-button:hover {
|
||||
transform: translateY(-1px) !important;
|
||||
/* box-shadow: var(--tech-glow-primary) !important; */
|
||||
/* text-shadow: 0 0 10px rgba(255, 255, 255, 0.8) !important; */
|
||||
}
|
||||
|
||||
.rz-button:active {
|
||||
transform: scale(0.98) !important;
|
||||
}
|
||||
|
||||
.rz-button-primary {
|
||||
background: linear-gradient(135deg,
|
||||
var(--tech-primary) 0%,
|
||||
var(--tech-highlight) 100%) !important;
|
||||
}
|
||||
|
||||
.rz-button-secondary {
|
||||
background: linear-gradient(135deg,
|
||||
var(--tech-dark-accent) 0%,
|
||||
var(--tech-secondary) 100%) !important;
|
||||
}
|
||||
|
||||
/* Radzen Data Grid */
|
||||
.rz-datatable,
|
||||
.rz-grid {
|
||||
background: var(--tech-dark-surface) !important;
|
||||
border: 1px solid rgba(138, 43, 226, 0.3) !important;
|
||||
border-radius: 12px !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.rz-datatable-header,
|
||||
.rz-grid-header {
|
||||
background: linear-gradient(90deg,
|
||||
var(--tech-dark-card) 0%,
|
||||
var(--tech-dark-accent) 100%) !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
font-weight: 600 !important;
|
||||
border-bottom: 2px solid var(--tech-primary) !important;
|
||||
}
|
||||
|
||||
.rz-datatable-header th,
|
||||
.rz-grid-header th {
|
||||
border-right: 1px solid rgba(138, 43, 226, 0.2) !important;
|
||||
padding: 1rem !important;
|
||||
text-transform: uppercase !important;
|
||||
letter-spacing: 0.5px !important;
|
||||
font-size: 0.85rem !important;
|
||||
}
|
||||
|
||||
.rz-datatable-data tr,
|
||||
.rz-grid-table tr {
|
||||
background: rgba(26, 10, 46, 0.5) !important;
|
||||
border-bottom: 1px solid rgba(218, 112, 214, 0.1) !important;
|
||||
transition: all var(--tech-transition-fast) !important;
|
||||
}
|
||||
|
||||
.rz-datatable-data tr:hover,
|
||||
.rz-grid-table tr:hover {
|
||||
background: rgba(138, 43, 226, 0.1) !important;
|
||||
box-shadow: inset 0 0 20px rgba(218, 112, 214, 0.1) !important;
|
||||
}
|
||||
|
||||
.rz-datatable-data td,
|
||||
.rz-grid-table td {
|
||||
border-right: 1px solid rgba(138, 43, 226, 0.1) !important;
|
||||
padding: 1rem !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
}
|
||||
|
||||
/* Radzen Form Controls */
|
||||
.rz-textbox,
|
||||
.rz-dropdown,
|
||||
.rz-multiselect,
|
||||
.rz-textarea {
|
||||
background: rgba(22, 33, 62, 0.8) !important;
|
||||
border: 2px solid rgba(138, 43, 226, 0.3) !important;
|
||||
border-radius: 8px !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
padding: 0.75rem 1rem !important;
|
||||
transition: all var(--tech-transition-smooth) !important;
|
||||
backdrop-filter: blur(10px) !important;
|
||||
}
|
||||
|
||||
.rz-textbox:focus,
|
||||
.rz-dropdown:focus,
|
||||
.rz-multiselect:focus,
|
||||
.rz-textarea:focus {
|
||||
border-color: var(--tech-primary) !important;
|
||||
box-shadow:
|
||||
var(--tech-glow-primary),
|
||||
inset 0 0 20px rgba(138, 43, 226, 0.1) !important;
|
||||
outline: none !important;
|
||||
background: rgba(22, 33, 62, 1) !important;
|
||||
}
|
||||
|
||||
.rz-textbox::placeholder,
|
||||
.rz-dropdown::placeholder,
|
||||
.rz-textarea::placeholder {
|
||||
color: rgba(192, 192, 192, 0.6) !important;
|
||||
font-style: italic !important;
|
||||
}
|
||||
|
||||
/* Radzen Navigation */
|
||||
.rz-navigation {
|
||||
background: linear-gradient(180deg,
|
||||
var(--tech-dark-surface) 0%,
|
||||
var(--tech-dark-base) 100%) !important;
|
||||
border-right: 1px solid rgba(138, 43, 226, 0.3) !important;
|
||||
backdrop-filter: blur(20px) !important;
|
||||
}
|
||||
|
||||
.rz-navigation-item {
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
padding: 0.75rem 1.5rem !important;
|
||||
transition: all var(--tech-transition-fast) !important;
|
||||
border-radius: 0 25px 25px 0 !important;
|
||||
margin: 0.25rem 0 !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.rz-navigation-item:hover {
|
||||
background: linear-gradient(90deg,
|
||||
rgba(138, 43, 226, 0.2) 0%,
|
||||
rgba(153, 50, 204, 0.1) 100%) !important;
|
||||
color: var(--tech-accent) !important;
|
||||
transform: translateX(5px) !important;
|
||||
}
|
||||
|
||||
.rz-navigation-item.rz-state-active {
|
||||
background: linear-gradient(90deg,
|
||||
var(--tech-primary) 0%,
|
||||
var(--tech-secondary) 100%) !important;
|
||||
color: white !important;
|
||||
box-shadow: var(--tech-glow-primary) !important;
|
||||
}
|
||||
|
||||
.rz-navigation-item.rz-state-active::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
right: -1px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 3px;
|
||||
background: var(--tech-neon);
|
||||
box-shadow: var(--tech-glow-neon);
|
||||
animation: neon-flicker 2s infinite;
|
||||
}
|
||||
|
||||
/* Radzen Panels */
|
||||
.rz-panel {
|
||||
background: var(--tech-dark-surface) !important;
|
||||
border: 1px solid rgba(138, 43, 226, 0.3) !important;
|
||||
border-radius: 12px !important;
|
||||
box-shadow: 0 8px 32px rgba(13, 0, 20, 0.6) !important;
|
||||
backdrop-filter: blur(20px) !important;
|
||||
}
|
||||
|
||||
.rz-panel-header {
|
||||
background: linear-gradient(90deg,
|
||||
var(--tech-dark-card) 0%,
|
||||
var(--tech-dark-accent) 100%) !important;
|
||||
border-bottom: 1px solid rgba(218, 112, 214, 0.3) !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
font-weight: 600 !important;
|
||||
padding: 1rem 1.5rem !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
/* Radzen Dialogs */
|
||||
.rz-dialog {
|
||||
background: linear-gradient(135deg,
|
||||
var(--tech-dark-surface) 0%,
|
||||
var(--tech-dark-card) 100%) !important;
|
||||
border: 2px solid var(--tech-primary) !important;
|
||||
border-radius: 16px !important;
|
||||
box-shadow:
|
||||
0 20px 60px rgba(13, 0, 20, 0.9),
|
||||
var(--tech-glow-primary) !important;
|
||||
backdrop-filter: blur(30px) !important;
|
||||
}
|
||||
|
||||
.rz-dialog-header {
|
||||
background: linear-gradient(90deg,
|
||||
rgba(138, 43, 226, 0.3) 0%,
|
||||
rgba(153, 50, 204, 0.2) 100%) !important;
|
||||
border-bottom: 1px solid rgba(218, 112, 214, 0.4) !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
font-weight: 700 !important;
|
||||
text-transform: uppercase !important;
|
||||
letter-spacing: 1px !important;
|
||||
}
|
||||
|
||||
/* Radzen Notifications */
|
||||
.rz-notification {
|
||||
background: linear-gradient(135deg,
|
||||
var(--tech-dark-surface) 0%,
|
||||
var(--tech-dark-card) 100%) !important;
|
||||
border: 1px solid var(--tech-primary) !important;
|
||||
border-radius: 12px !important;
|
||||
color: var(--tech-metallic-chrome) !important;
|
||||
box-shadow:
|
||||
0 8px 32px rgba(13, 0, 20, 0.8),
|
||||
var(--tech-glow-primary) !important;
|
||||
backdrop-filter: blur(20px) !important;
|
||||
}
|
||||
|
||||
.rz-notification-success {
|
||||
border-color: var(--tech-neon) !important;
|
||||
box-shadow: var(--tech-glow-neon) !important;
|
||||
}
|
||||
|
||||
.rz-notification-error {
|
||||
border-color: var(--tech-highlight) !important;
|
||||
box-shadow: 0 0 25px rgba(255, 0, 255, 0.7) !important;
|
||||
}
|
||||
|
||||
/* Holographic Border Effect */
|
||||
.tech-holographic-border {
|
||||
position: relative;
|
||||
border: 2px solid transparent !important;
|
||||
background: linear-gradient(var(--tech-dark-surface), var(--tech-dark-surface)) padding-box,
|
||||
var(--holographic-gradient) border-box !important;
|
||||
background-size: 200% 200%;
|
||||
animation: holographic-shift 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
/* Tech Grid Pattern Overlay */
|
||||
.tech-grid-overlay {
|
||||
background-image:
|
||||
linear-gradient(rgba(138, 43, 226, 0.1) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(138, 43, 226, 0.1) 1px, transparent 1px);
|
||||
background-size: 20px 20px;
|
||||
}
|
||||
|
||||
/* Scrollbar Styling */
|
||||
::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
background: var(--tech-dark-base);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: rgba(26, 10, 46, 0.5);
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: linear-gradient(180deg,
|
||||
var(--tech-primary) 0%,
|
||||
var(--tech-secondary) 100%);
|
||||
border-radius: 6px;
|
||||
border: 1px solid rgba(218, 112, 214, 0.3);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: linear-gradient(180deg,
|
||||
var(--tech-accent) 0%,
|
||||
var(--tech-highlight) 100%);
|
||||
box-shadow: var(--tech-glow-accent);
|
||||
}
|
||||
|
||||
/* Loading Spinner Override */
|
||||
.rz-spinner {
|
||||
border: 3px solid rgba(138, 43, 226, 0.3);
|
||||
border-top: 3px solid var(--tech-primary);
|
||||
box-shadow: var(--tech-glow-primary);
|
||||
}
|
||||
|
||||
/* Mobile Responsive Adjustments */
|
||||
@media (max-width: 768px) {
|
||||
.rz-card {
|
||||
margin: 0.5rem !important;
|
||||
border-radius: 8px !important;
|
||||
}
|
||||
|
||||
.rz-button {
|
||||
padding: 0.75rem 1.5rem !important;
|
||||
font-size: 0.9rem !important;
|
||||
}
|
||||
|
||||
.rz-navigation-item {
|
||||
padding: 1rem !important;
|
||||
border-radius: 0 20px 20px 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Print Styles */
|
||||
@media print {
|
||||
body {
|
||||
background: white !important;
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.rz-card {
|
||||
background: white !important;
|
||||
border: 1px solid #ccc !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* High Contrast Mode */
|
||||
@media (prefers-contrast: high) {
|
||||
:root {
|
||||
--tech-primary: #FF00FF;
|
||||
--tech-secondary: #00FFFF;
|
||||
--tech-accent: #FFFF00;
|
||||
}
|
||||
}
|
||||
|
||||
/* Reduced Motion */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
* {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Dark Theme Class for Radzen */
|
||||
.dark-theme {
|
||||
--rz-primary: var(--tech-primary);
|
||||
--rz-secondary: var(--tech-secondary);
|
||||
--rz-success: var(--tech-neon);
|
||||
--rz-info: var(--tech-accent);
|
||||
--rz-warning: var(--tech-metallic-gold);
|
||||
--rz-danger: var(--tech-highlight);
|
||||
--rz-dark: var(--tech-dark-base);
|
||||
--rz-light: var(--tech-metallic-chrome);
|
||||
}
|
||||
|
||||
/* Tech Enhancement Classes */
|
||||
.tech-glow {
|
||||
box-shadow: var(--tech-glow-primary) !important;
|
||||
animation: tech-pulse 2s infinite !important;
|
||||
}
|
||||
|
||||
.tech-holographic {
|
||||
background: var(--holographic-gradient) !important;
|
||||
background-size: 200% 200% !important;
|
||||
animation: holographic-shift 3s ease-in-out infinite !important;
|
||||
-webkit-background-clip: text !important;
|
||||
background-clip: text !important;
|
||||
color: transparent !important;
|
||||
}
|
||||
|
||||
.tech-neon {
|
||||
color: var(--tech-neon) !important;
|
||||
text-shadow: var(--tech-glow-neon) !important;
|
||||
animation: neon-flicker 2s infinite !important;
|
||||
}
|
||||
BIN
publish/wwwroot/css/radzen-tech-theme.css.br
Normal file
BIN
publish/wwwroot/css/radzen-tech-theme.css.br
Normal file
Binary file not shown.
BIN
publish/wwwroot/css/radzen-tech-theme.css.gz
Normal file
BIN
publish/wwwroot/css/radzen-tech-theme.css.gz
Normal file
Binary file not shown.
1
publish/wwwroot/favicon.ico
Normal file
1
publish/wwwroot/favicon.ico
Normal file
@@ -0,0 +1 @@
|
||||
AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
BIN
publish/wwwroot/favicon.ico.br
Normal file
BIN
publish/wwwroot/favicon.ico.br
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user