fix roter valid-error-effekt
This commit is contained in:
Binary file not shown.
@@ -35,7 +35,109 @@ class NennungView {
|
|||||||
p { +"Turnier-Nr.: ${turnier.number}" }
|
p { +"Turnier-Nr.: ${turnier.number}" }
|
||||||
}
|
}
|
||||||
|
|
||||||
form(action = "/nennung/${turnier.number}/submit", method = FormMethod.post, classes = "registration-form") {
|
form(
|
||||||
|
action = "/nennung/${turnier.number}/submit",
|
||||||
|
method = FormMethod.post,
|
||||||
|
classes = "registration-form needs-validation"
|
||||||
|
) {
|
||||||
|
attributes["onsubmit"] = "return validateForm(this)"
|
||||||
|
style {
|
||||||
|
unsafe {
|
||||||
|
+"""
|
||||||
|
.validation-error {
|
||||||
|
border: 2px solid red !important;
|
||||||
|
background-color: rgba(255, 0, 0, 0.05) !important;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
script {
|
||||||
|
unsafe {
|
||||||
|
+"""
|
||||||
|
function validateForm(form) {
|
||||||
|
|
||||||
|
// Check if rider name is provided
|
||||||
|
var riderName = form.querySelector('input[name="riderName"]').value.trim();
|
||||||
|
if (riderName === '') {
|
||||||
|
// Focus on the rider name field
|
||||||
|
var riderNameField = form.querySelector('input[name="riderName"]');
|
||||||
|
riderNameField.focus();
|
||||||
|
// Highlight the field
|
||||||
|
riderNameField.classList.add('validation-error');
|
||||||
|
setTimeout(function() {
|
||||||
|
riderNameField.classList.remove('validation-error');
|
||||||
|
}, 2000);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if horse name is provided
|
||||||
|
var horseName = form.querySelector('input[name="horseName"]').value.trim();
|
||||||
|
if (horseName === '') {
|
||||||
|
// Focus on the horse name field
|
||||||
|
var horseNameField = form.querySelector('input[name="horseName"]');
|
||||||
|
horseNameField.focus();
|
||||||
|
// Highlight the field
|
||||||
|
horseNameField.classList.add('validation-error');
|
||||||
|
setTimeout(function() {
|
||||||
|
horseNameField.classList.remove('validation-error');
|
||||||
|
}, 2000);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if at least one contact method is provided
|
||||||
|
var email = form.querySelector('input[name="email"]').value.trim();
|
||||||
|
var phone = form.querySelector('input[name="phone"]').value.trim();
|
||||||
|
if (email === '' && phone === '') {
|
||||||
|
// Focus on the email field
|
||||||
|
var emailField = form.querySelector('input[name="email"]');
|
||||||
|
emailField.focus();
|
||||||
|
// Highlight both email and phone fields
|
||||||
|
emailField.classList.add('validation-error');
|
||||||
|
var phoneField = form.querySelector('input[name="phone"]');
|
||||||
|
phoneField.classList.add('validation-error');
|
||||||
|
setTimeout(function() {
|
||||||
|
emailField.classList.remove('validation-error');
|
||||||
|
phoneField.classList.remove('validation-error');
|
||||||
|
}, 2000);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if at least one competition is selected
|
||||||
|
var checkboxes = form.querySelectorAll('input[name="selectedEvents"]');
|
||||||
|
var checked = false;
|
||||||
|
for (var i = 0; i < checkboxes.length; i++) {
|
||||||
|
if (checkboxes[i].checked) {
|
||||||
|
checked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!checked) {
|
||||||
|
// Focus on the competitions section
|
||||||
|
var competitionsSections = form.querySelectorAll('div.form-section h3');
|
||||||
|
var competitionsSection = null;
|
||||||
|
for (var i = 0; i < competitionsSections.length; i++) {
|
||||||
|
if (competitionsSections[i].textContent === 'Bewerbe') {
|
||||||
|
competitionsSection = competitionsSections[i].parentNode;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (competitionsSection) {
|
||||||
|
competitionsSection.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||||
|
// Highlight the section
|
||||||
|
competitionsSection.classList.add('validation-error');
|
||||||
|
setTimeout(function() {
|
||||||
|
competitionsSection.classList.remove('validation-error');
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
div(classes = "form-section mb-4") {
|
div(classes = "form-section mb-4") {
|
||||||
h3 { +"Teilnehmer-Informationen" }
|
h3 { +"Teilnehmer-Informationen" }
|
||||||
|
|
||||||
@@ -48,6 +150,10 @@ class NennungView {
|
|||||||
input(type = InputType.text, name = "riderName", classes = "form-control") {
|
input(type = InputType.text, name = "riderName", classes = "form-control") {
|
||||||
attributes["required"] = "required"
|
attributes["required"] = "required"
|
||||||
attributes["placeholder"] = "Vor- und Nachname"
|
attributes["placeholder"] = "Vor- und Nachname"
|
||||||
|
attributes["class"] = "form-control"
|
||||||
|
attributes["oninvalid"] =
|
||||||
|
"this.setCustomValidity('Fügen Sie den Namen des Reiters ein!')"
|
||||||
|
attributes["oninput"] = "this.setCustomValidity('')"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,7 +164,11 @@ class NennungView {
|
|||||||
label(classes = "required") { +"Kopf-Nr./Pferd" }
|
label(classes = "required") { +"Kopf-Nr./Pferd" }
|
||||||
input(type = InputType.text, name = "horseName", classes = "form-control") {
|
input(type = InputType.text, name = "horseName", classes = "form-control") {
|
||||||
attributes["required"] = "required"
|
attributes["required"] = "required"
|
||||||
attributes["placeholder"] = "Name des Pferdes"
|
attributes["placeholder"] = "Kopf-Nr. / Name des Pferdes"
|
||||||
|
attributes["class"] = "form-control"
|
||||||
|
attributes["oninvalid"] =
|
||||||
|
"this.setCustomValidity('Fügen Sie die Kopf-Nr. und oder den Pferdenamen ein!')"
|
||||||
|
attributes["oninput"] = "this.setCustomValidity('')"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,10 +177,13 @@ class NennungView {
|
|||||||
div(classes = "competition-item") {
|
div(classes = "competition-item") {
|
||||||
div(classes = "participant-details") {
|
div(classes = "participant-details") {
|
||||||
div(classes = "form-group") {
|
div(classes = "form-group") {
|
||||||
label { +"E-Mail" }
|
label(classes = "required") { +"E-Mail" }
|
||||||
input(type = InputType.email, name = "email") {
|
input(type = InputType.email, name = "email") {
|
||||||
attributes["placeholder"] = "ihre@email.com"
|
attributes["placeholder"] = "ihre@email.com"
|
||||||
attributes["class"] = "form-control"
|
attributes["class"] = "form-control"
|
||||||
|
attributes["oninvalid"] =
|
||||||
|
"this.setCustomValidity('Fügen Sie Ihre E-Mail Adresse oder Telefon-Nr. ein!')"
|
||||||
|
attributes["oninput"] = "this.setCustomValidity('')"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,17 +193,20 @@ class NennungView {
|
|||||||
div(classes = "competition-item") {
|
div(classes = "competition-item") {
|
||||||
div(classes = "participant-details") {
|
div(classes = "participant-details") {
|
||||||
div(classes = "form-group") {
|
div(classes = "form-group") {
|
||||||
label { +"Telefon-Nr." }
|
label(classes = "required") { +"Telefon-Nr." }
|
||||||
input(type = InputType.tel, name = "phone") {
|
input(type = InputType.tel, name = "phone") {
|
||||||
attributes["placeholder"] = "Ihre Telefonnummer"
|
attributes["placeholder"] = "Ihre Telefonnummer"
|
||||||
attributes["class"] = "form-control"
|
attributes["class"] = "form-control"
|
||||||
|
attributes["oninvalid"] =
|
||||||
|
"this.setCustomValidity('Fügen Sie Ihre E-Mail Adresse oder Telefon-Nr. ein!')"
|
||||||
|
attributes["oninput"] = "this.setCustomValidity('')"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
p(classes = "form-hint") { +"Bitte geben Sie mindestens eine Kontaktmöglichkeit an (E-Mail oder Telefon)." }
|
p(classes = "form-hint") { +"Bitte geben Sie mindestens eine Kontaktmöglichkeit an (E-Mail oder Telefon). Sie müssen nicht beide Felder ausfüllen." }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Competitions list
|
// Competitions list
|
||||||
@@ -104,7 +220,11 @@ class NennungView {
|
|||||||
turnier.bewerbe.forEach { bewerb ->
|
turnier.bewerbe.forEach { bewerb ->
|
||||||
div(classes = "competition-item") {
|
div(classes = "competition-item") {
|
||||||
label(classes = "form-check") {
|
label(classes = "form-check") {
|
||||||
input(type = InputType.checkBox, name = "selectedEvents", classes = "form-check-input") {
|
input(
|
||||||
|
type = InputType.checkBox,
|
||||||
|
name = "selectedEvents",
|
||||||
|
classes = "form-check-input"
|
||||||
|
) {
|
||||||
attributes["value"] = bewerb.nummer.toString()
|
attributes["value"] = bewerb.nummer.toString()
|
||||||
}
|
}
|
||||||
span(classes = "competition-details") {
|
span(classes = "competition-details") {
|
||||||
@@ -157,7 +277,13 @@ class NennungView {
|
|||||||
* @param horseName The name of the horse
|
* @param horseName The name of the horse
|
||||||
* @param selectedEvents The list of selected competition IDs
|
* @param selectedEvents The list of selected competition IDs
|
||||||
*/
|
*/
|
||||||
suspend fun renderConfirmationPage(call: ApplicationCall, turnier: Turnier, riderName: String, horseName: String, selectedEvents: List<String>) {
|
suspend fun renderConfirmationPage(
|
||||||
|
call: ApplicationCall,
|
||||||
|
turnier: Turnier,
|
||||||
|
riderName: String,
|
||||||
|
horseName: String,
|
||||||
|
selectedEvents: List<String>
|
||||||
|
) {
|
||||||
call.respondHtml(HttpStatusCode.OK) {
|
call.respondHtml(HttpStatusCode.OK) {
|
||||||
layoutTemplate.apply {
|
layoutTemplate.apply {
|
||||||
applyLayout(
|
applyLayout(
|
||||||
@@ -175,11 +301,11 @@ class NennungView {
|
|||||||
h2 { +"Vielen Dank für Ihre Nennung!" }
|
h2 { +"Vielen Dank für Ihre Nennung!" }
|
||||||
|
|
||||||
div(classes = "confirmation-details") {
|
div(classes = "confirmation-details") {
|
||||||
p {
|
p(classes = "confirmation-message") { +"Ihre Nennung für " }
|
||||||
+"Ihre Nennung für "
|
|
||||||
strong { +turnier.name }
|
p(classes = "confirmation-message") { strong { +turnier.name } }
|
||||||
+" wurde erfolgreich übermittelt."
|
|
||||||
}
|
p(classes = "confirmation-message") { +" wurde erfolgreich übermittelt." }
|
||||||
|
|
||||||
div(classes = "detail-item") {
|
div(classes = "detail-item") {
|
||||||
span(classes = "detail-label") { +"Reiter:" }
|
span(classes = "detail-label") { +"Reiter:" }
|
||||||
@@ -200,8 +326,8 @@ class NennungView {
|
|||||||
selectedEvents.forEach { eventId ->
|
selectedEvents.forEach { eventId ->
|
||||||
val bewerb = turnier.bewerbe.find { it.nummer.toString() == eventId }
|
val bewerb = turnier.bewerbe.find { it.nummer.toString() == eventId }
|
||||||
if (bewerb != null) {
|
if (bewerb != null) {
|
||||||
li {
|
span(classes = "detail-value") {
|
||||||
+"${bewerb.nummer}. ${bewerb.titel} - ${bewerb.klasse}"
|
+"${bewerb.nummer} . ${bewerb.titel} - ${bewerb.klasse}"
|
||||||
if (bewerb.task != null) {
|
if (bewerb.task != null) {
|
||||||
+" - ${bewerb.task}"
|
+" - ${bewerb.task}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* Base styles - Modern and accessible */
|
/* Base styles - Modern and accessible */
|
||||||
body {
|
body {
|
||||||
font-family: 'Inter', 'Roboto', 'Segoe UI', system-ui, -apple-system, sans-serif;
|
font-family: 'Helvetica', 'Arial', sans-serif;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
background-color: var(--neutral-50);
|
background-color: var(--neutral-50);
|
||||||
line-height: 1.7;
|
line-height: 1.7;
|
||||||
|
|||||||
@@ -25,21 +25,21 @@
|
|||||||
/* Primary button */
|
/* Primary button */
|
||||||
.btn-primary, .button {
|
.btn-primary, .button {
|
||||||
background-color: var(--primary-color);
|
background-color: var(--primary-color);
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Secondary button */
|
/* Secondary button */
|
||||||
.btn-secondary, .button-secondary {
|
.btn-secondary, .button-secondary {
|
||||||
background-color: var(--secondary-color);
|
background-color: var(--secondary-color);
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Accent button */
|
/* Accent button */
|
||||||
.btn-accent, .button-accent {
|
.btn-accent, .button-accent {
|
||||||
background-color: var(--accent-color);
|
background-color: var(--accent-color);
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
|
|
||||||
.btn:focus, .button:focus {
|
.btn:focus, .button:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.3);
|
box-shadow: 0 0 0 3px rgba(43, 103, 119, 0.3); /* Light version of primary color #2b6777 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ripple effect for buttons */
|
/* Ripple effect for buttons */
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);
|
background-image: radial-gradient(circle, var(--container-bg) 10%, transparent 10.01%);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 50%;
|
background-position: 50%;
|
||||||
transform: scale(10, 10);
|
transform: scale(10, 10);
|
||||||
@@ -175,9 +175,9 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
width: 1rem;
|
width: 1rem;
|
||||||
height: 1rem;
|
height: 1rem;
|
||||||
border: 2px solid rgba(255, 255, 255, 0.3);
|
border: 2px solid rgba(255, 255, 255, 0.3); /* Semi-transparent border */
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border-top-color: white;
|
border-top-color: var(--container-bg);
|
||||||
animation: spin 0.8s linear infinite;
|
animation: spin 0.8s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
background-color: #fff;
|
background-color: var(--container-bg);
|
||||||
background-clip: padding-box;
|
background-clip: padding-box;
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
.form-control:focus {
|
.form-control:focus {
|
||||||
border-color: var(--primary-color);
|
border-color: var(--primary-color);
|
||||||
outline: 0;
|
outline: 0;
|
||||||
box-shadow: 0 0 0 0.25rem rgba(67, 97, 238, 0.25);
|
box-shadow: 0 0 0 0.25rem rgba(43, 103, 119, 0.25); /* Light version of primary color #2b6777 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-control::placeholder {
|
.form-control::placeholder {
|
||||||
@@ -95,8 +95,8 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
background-color: #fff;
|
background-color: var(--container-bg);
|
||||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%232b6777' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: right 1rem center;
|
background-position: right 1rem center;
|
||||||
background-size: 16px 12px;
|
background-size: 16px 12px;
|
||||||
@@ -109,7 +109,7 @@
|
|||||||
.form-select:focus {
|
.form-select:focus {
|
||||||
border-color: var(--primary-color);
|
border-color: var(--primary-color);
|
||||||
outline: 0;
|
outline: 0;
|
||||||
box-shadow: 0 0 0 0.25rem rgba(67, 97, 238, 0.25);
|
box-shadow: 0 0 0 0.25rem rgba(43, 103, 119, 0.25); /* Light version of primary color #2b6777 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Checkbox and radio styling */
|
/* Checkbox and radio styling */
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
margin-top: 0.125em;
|
margin-top: 0.125em;
|
||||||
margin-left: -1.75em;
|
margin-left: -1.75em;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
background-color: #fff;
|
background-color: var(--container-bg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
@@ -149,17 +149,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.form-check-input:checked[type="checkbox"] {
|
.form-check-input:checked[type="checkbox"] {
|
||||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-check-input:checked[type="radio"] {
|
.form-check-input:checked[type="radio"] {
|
||||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23ffffff'/%3e%3c/svg%3e");
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-check-input:focus {
|
.form-check-input:focus {
|
||||||
border-color: var(--primary-color);
|
border-color: var(--primary-color);
|
||||||
outline: 0;
|
outline: 0;
|
||||||
box-shadow: 0 0 0 0.25rem rgba(67, 97, 238, 0.25);
|
box-shadow: 0 0 0 0.25rem rgba(43, 103, 119, 0.25); /* Light version of primary color #2b6777 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Switch styling */
|
/* Switch styling */
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
.form-switch .form-check-input {
|
.form-switch .form-check-input {
|
||||||
width: 2em;
|
width: 2em;
|
||||||
margin-left: -2.5em;
|
margin-left: -2.5em;
|
||||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%2843, 103, 119, 0.25%29'/%3e%3c/svg%3e"); /* Using primary color with transparency */
|
||||||
background-position: left center;
|
background-position: left center;
|
||||||
border-radius: 2em;
|
border-radius: 2em;
|
||||||
transition: background-position 0.15s ease-in-out;
|
transition: background-position 0.15s ease-in-out;
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
|
|
||||||
.form-switch .form-check-input:checked {
|
.form-switch .form-check-input:checked {
|
||||||
background-position: right center;
|
background-position: right center;
|
||||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Required field indicator */
|
/* Required field indicator */
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
.was-validated .form-control:valid, .form-control.is-valid {
|
.was-validated .form-control:valid, .form-control.is-valid {
|
||||||
border-color: var(--success-color);
|
border-color: var(--success-color);
|
||||||
padding-right: calc(1.5em + 0.75rem);
|
padding-right: calc(1.5em + 0.75rem);
|
||||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2338b000' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2352ab98' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); /* Using success color #52ab98 */
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: right calc(0.375em + 0.1875rem) center;
|
background-position: right calc(0.375em + 0.1875rem) center;
|
||||||
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
||||||
@@ -201,7 +201,7 @@
|
|||||||
.was-validated .form-control:invalid, .form-control.is-invalid {
|
.was-validated .form-control:invalid, .form-control.is-invalid {
|
||||||
border-color: var(--error-color);
|
border-color: var(--error-color);
|
||||||
padding-right: calc(1.5em + 0.75rem);
|
padding-right: calc(1.5em + 0.75rem);
|
||||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d90429'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d90429' stroke='none'/%3e%3c/svg%3e");
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%232b6777'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%232b6777' stroke='none'/%3e%3c/svg%3e"); /* Using error color #2b6777 */
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: right calc(0.375em + 0.1875rem) center;
|
background-position: right calc(0.375em + 0.1875rem) center;
|
||||||
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
||||||
@@ -250,7 +250,7 @@
|
|||||||
color: var(--primary-color);
|
color: var(--primary-color);
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-family: 'Inter', 'Roboto', 'Segoe UI', system-ui, -apple-system, sans-serif;
|
font-family: 'Helvetica', 'Arial', sans-serif;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,7 +306,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.form-range:focus::-webkit-slider-thumb {
|
.form-range:focus::-webkit-slider-thumb {
|
||||||
box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(67, 97, 238, 0.25);
|
box-shadow: 0 0 0 1px var(--container-bg), 0 0 0 0.25rem rgba(43, 103, 119, 0.25); /* Light version of primary color #2b6777 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-range::-webkit-slider-thumb {
|
.form-range::-webkit-slider-thumb {
|
||||||
|
|||||||
@@ -14,14 +14,14 @@
|
|||||||
padding: 0.5rem 0;
|
padding: 0.5rem 0;
|
||||||
box-shadow: var(--box-shadow-lg);
|
box-shadow: var(--box-shadow-lg);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
background-color: rgba(255, 255, 255, 0.95);
|
background-color: rgba(255, 255, 255, 0.95); /* Using rgba for transparency */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enhanced navbar brand */
|
/* Enhanced navbar brand */
|
||||||
.navbar-brand {
|
.navbar-brand {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
letter-spacing: -0.01em;
|
letter-spacing: -0.01em;
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar-brand:hover {
|
.navbar-brand:hover {
|
||||||
color: rgba(255, 255, 255, 0.9);
|
color: rgba(255, 255, 255, 0.9); /* Using rgba for hover effect */
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-brand i {
|
.navbar-brand i {
|
||||||
@@ -71,13 +71,13 @@
|
|||||||
.nav-link {
|
.nav-link {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
padding: 0.5rem 1rem;
|
padding: 0.5rem 1rem;
|
||||||
color: rgba(255, 255, 255, 0.85);
|
color: rgba(255, 255, 255, 0.85); /* Using rgba for transparency */
|
||||||
position: relative;
|
position: relative;
|
||||||
transition: color var(--transition-fast);
|
transition: color var(--transition-fast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-link:hover, .nav-link:focus {
|
.nav-link:hover, .nav-link:focus {
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Animated underline effect */
|
/* Animated underline effect */
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
height: 2px;
|
height: 2px;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
transition: all var(--transition);
|
transition: all var(--transition);
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.nav-link.active {
|
.nav-link.active {
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
|
|
||||||
.dropdown-item.active {
|
.dropdown-item.active {
|
||||||
background-color: var(--primary-color);
|
background-color: var(--primary-color);
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item i {
|
.dropdown-item i {
|
||||||
@@ -148,7 +148,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item.active i {
|
.dropdown-item.active i {
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes fadeIn {
|
@keyframes fadeIn {
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
|
|
||||||
/* Navbar color variants */
|
/* Navbar color variants */
|
||||||
.navbar-light {
|
.navbar-light {
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-light .navbar-brand,
|
.navbar-light .navbar-brand,
|
||||||
@@ -233,7 +233,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar-light .navbar-collapse {
|
.navbar-light .navbar-collapse {
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-nav {
|
.navbar-nav {
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.table-hover tbody tr:hover {
|
.table-hover tbody tr:hover {
|
||||||
background-color: rgba(67, 97, 238, 0.05);
|
background-color: rgba(43, 103, 119, 0.05); /* Light version of primary color #2b6777 */
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
|
|
||||||
.table-modern thead th {
|
.table-modern thead th {
|
||||||
background-color: var(--primary-color);
|
background-color: var(--primary-color);
|
||||||
color: white;
|
color: var(--container-bg);
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-responsive-card td {
|
.table-responsive-card td {
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
.list-modern li {
|
.list-modern li {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
margin-bottom: 0.5rem;
|
margin-bottom: 0.5rem;
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
transition: all var(--transition-fast);
|
transition: all var(--transition-fast);
|
||||||
@@ -243,7 +243,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.competition-list li:hover {
|
.competition-list li:hover {
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
transform: translateX(3px);
|
transform: translateX(3px);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
transition: all var(--transition);
|
transition: all var(--transition);
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
box-shadow: var(--box-shadow);
|
box-shadow: var(--box-shadow);
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-right: 0.5rem;
|
margin-right: 0.5rem;
|
||||||
background-color: rgba(67, 97, 238, 0.1);
|
background-color: rgba(43, 103, 119, 0.1); /* Light version of primary color #2b6777 */
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -254,7 +254,7 @@
|
|||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
transition: all var(--transition-fast);
|
transition: all var(--transition-fast);
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
box-shadow: var(--box-shadow-sm);
|
box-shadow: var(--box-shadow-sm);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -263,12 +263,20 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.competition-item:hover {
|
.competition-item:hover {
|
||||||
background-color: rgba(67, 97, 238, 0.03);
|
background-color: rgba(43, 103, 119, 0.03); /* Light version of primary color #2b6777 */
|
||||||
box-shadow: var(--box-shadow);
|
box-shadow: var(--box-shadow);
|
||||||
transform: translateY(-5px);
|
transform: translateY(-5px);
|
||||||
border-color: var(--primary-color);
|
border-color: var(--primary-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Disable hover effect for specific fields */
|
||||||
|
.competition-item.no-hover:hover {
|
||||||
|
transform: none;
|
||||||
|
box-shadow: var(--box-shadow-sm);
|
||||||
|
border-color: var(--border-color);
|
||||||
|
background-color: var(--container-bg);
|
||||||
|
}
|
||||||
|
|
||||||
/* Custom form check styling */
|
/* Custom form check styling */
|
||||||
.competition-item .form-check {
|
.competition-item .form-check {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -290,7 +298,7 @@
|
|||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
transition: all var(--transition-fast);
|
transition: all var(--transition-fast);
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.competition-item .form-check-input:checked {
|
.competition-item .form-check-input:checked {
|
||||||
@@ -304,7 +312,7 @@
|
|||||||
|
|
||||||
.competition-item .form-check-input:focus {
|
.competition-item .form-check-input:focus {
|
||||||
outline: 0;
|
outline: 0;
|
||||||
box-shadow: 0 0 0 0.25rem rgba(67, 97, 238, 0.25);
|
box-shadow: 0 0 0 0.25rem rgba(43, 103, 119, 0.25); /* Light version of primary color #2b6777 */
|
||||||
border-color: var(--primary-hover);
|
border-color: var(--primary-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,7 +322,7 @@
|
|||||||
|
|
||||||
.competition-details {
|
.competition-details {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
font-family: 'Inter', 'Roboto', 'Segoe UI', system-ui, -apple-system, sans-serif;
|
font-family: 'Helvetica', 'Arial', sans-serif;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
@@ -331,7 +339,7 @@
|
|||||||
/* Participant details section */
|
/* Participant details section */
|
||||||
.participant-details {
|
.participant-details {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-family: 'Inter', 'Roboto', 'Segoe UI', system-ui, -apple-system, sans-serif;
|
font-family: 'Helvetica', 'Arial', sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.participant-details .form-label {
|
.participant-details .form-label {
|
||||||
@@ -344,7 +352,7 @@
|
|||||||
|
|
||||||
.participant-details input,
|
.participant-details input,
|
||||||
.participant-details textarea {
|
.participant-details textarea {
|
||||||
font-family: 'Inter', 'Roboto', 'Segoe UI', system-ui, -apple-system, sans-serif;
|
font-family: 'Helvetica', 'Arial', sans-serif;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
@@ -359,7 +367,7 @@
|
|||||||
max-width: 700px;
|
max-width: 700px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
border-radius: var(--border-radius-lg);
|
border-radius: var(--border-radius-lg);
|
||||||
padding: 3rem 2rem;
|
padding: 3rem 2rem;
|
||||||
box-shadow: var(--box-shadow);
|
box-shadow: var(--box-shadow);
|
||||||
@@ -387,7 +395,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.confirmation-icon i {
|
.confirmation-icon i {
|
||||||
background-color: rgba(56, 176, 0, 0.1);
|
background-color: rgba(82, 171, 152, 0.1); /* Light version of success color #52ab98 */
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -396,13 +404,13 @@
|
|||||||
|
|
||||||
@keyframes pulse {
|
@keyframes pulse {
|
||||||
0% {
|
0% {
|
||||||
box-shadow: 0 0 0 0 rgba(56, 176, 0, 0.4);
|
box-shadow: 0 0 0 0 rgba(82, 171, 152, 0.4); /* Success color #52ab98 with opacity */
|
||||||
}
|
}
|
||||||
70% {
|
70% {
|
||||||
box-shadow: 0 0 0 15px rgba(56, 176, 0, 0);
|
box-shadow: 0 0 0 15px rgba(82, 171, 152, 0); /* Success color #52ab98 with zero opacity */
|
||||||
}
|
}
|
||||||
100% {
|
100% {
|
||||||
box-shadow: 0 0 0 0 rgba(56, 176, 0, 0);
|
box-shadow: 0 0 0 0 rgba(82, 171, 152, 0); /* Success color #52ab98 with zero opacity */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,7 +440,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.detail-item:hover {
|
.detail-item:hover {
|
||||||
background-color: white;
|
background-color: var(--container-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-item:last-child {
|
.detail-item:last-child {
|
||||||
|
|||||||
@@ -1,26 +1,26 @@
|
|||||||
:root {
|
:root {
|
||||||
/* Modern color palette */
|
/* Modern color palette */
|
||||||
--primary-color: #4361ee;
|
--primary-color: #2b6777;
|
||||||
--primary-hover: #3a56d4;
|
--primary-hover: #255a68;
|
||||||
--secondary-color: #7209b7;
|
--secondary-color: #c8d8e4;
|
||||||
--secondary-hover: #6008a0;
|
--secondary-hover: #b9c9d5;
|
||||||
--accent-color: #f72585;
|
--accent-color: #52ab98;
|
||||||
--text-color: #555555;
|
--text-color: #2b6777;
|
||||||
--light-text: #6c757d;
|
--light-text: #52ab98;
|
||||||
--lighter-text: #adb5bd;
|
--lighter-text: #c8d8e4;
|
||||||
--border-color: #e9ecef;
|
--border-color: #c8d8e4;
|
||||||
--light-bg: #f8f9fa;
|
--light-bg: #f2f2f2;
|
||||||
--container-bg: #fff;
|
--container-bg: #ffffff;
|
||||||
--success-color: #38b000;
|
--success-color: #52ab98;
|
||||||
--warning-color: #ffbe0b;
|
--warning-color: #c8d8e4;
|
||||||
--error-color: #d90429;
|
--error-color: #2b6777;
|
||||||
--info-color: #4cc9f0;
|
--info-color: #c8d8e4;
|
||||||
|
|
||||||
/* Neutral shades for backgrounds */
|
/* Neutral shades for backgrounds */
|
||||||
--neutral-50: #fafafa;
|
--neutral-50: #ffffff;
|
||||||
--neutral-100: #f5f5f5;
|
--neutral-100: #f2f2f2;
|
||||||
--neutral-200: #e5e5e5;
|
--neutral-200: #e6e6e6;
|
||||||
--neutral-300: #d4d4d4;
|
--neutral-300: #c8d8e4;
|
||||||
|
|
||||||
/* Design tokens */
|
/* Design tokens */
|
||||||
--border-radius-sm: 0.25rem;
|
--border-radius-sm: 0.25rem;
|
||||||
|
|||||||
Reference in New Issue
Block a user