Initial import of Din Beste Hjelper site

CodeIgniter 3 app for dinbestehjelper.no. Excludes vendor/, local backup
folders (new/, archive/, archived/) and DB dumps (*.sql) via .gitignore.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P16ttGUge8zj91dm6WrmEb
This commit is contained in:
Astral04
2026-08-04 12:52:43 +00:00
co-authored by Claude Opus 4.8
commit 4e1a69c8d4
542 changed files with 214158 additions and 0 deletions
+20
View File
File diff suppressed because one or more lines are too long
+305
View File
@@ -0,0 +1,305 @@
.dayHasEvent{
padding:5px;
border-radius:10px;
background-color: #e8c393;
color:black;
}
.calendarContent{
display:inline-block;
height: 30rem;
width: max-content;
min-width: 600px;
background-color: white;
border-radius: 25px;
overflow: hidden;
padding: 35px 50px 0px 50px;
}
.calendar {
display:inline-block;
height: 30rem;
width: max-content;
background-color: white;
border-radius: 25px;
overflow: hidden;
padding: 35px 50px 0px 50px;
}
.calendar {
box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px;
}
.calendar-header {
background: #9e8462;
display: flex;
justify-content: space-between;
border-radius: 7px;
align-items: center;
font-weight: 700;
color: #ffffff;
padding: 10px;
};
.calendar-body {
padding: 10px;
}
.calendar-week-days {
display: grid;
grid-template-columns: repeat(7, 1fr);
font-weight: 600;
cursor: pointer;
color: rgb(104, 104, 104);
}
.calendar-week-days div:hover {
color: black;
transform: scale(1.2);
transition: all .2s ease-in-out;
}
.calendar-week-days div {
display: grid;
place-items: center;
color: #9e8462;
height: 50px;
}
.calendar-days {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 2px;
color: #0A0921;
}
.calendar-days div {
width: 37px;
height: 33px;
display: flex;
align-items: center;
justify-content: center;
padding: 5px;
position: relative;
cursor: pointer;
animation: to-top 1s forwards;
}
.month-picker {
padding: 5px 10px;
border-radius: 10px;
cursor: pointer;
}
.year-picker {
display: flex;
align-items: center;
}
.year-change {
height: 30px;
width: 30px;
border-radius: 50%;
display: grid;
place-items: center;
margin: 0px 10px;
cursor: pointer;
}
.year-change:hover {
background-color: #9e8462;
transition: all .2s ease-in-out;
transform: scale(1.12);
}
.calendar-footer {
padding: 10px;
display: flex;
justify-content: flex-end;
align-items: center;
}
#year:hover {
cursor: pointer;
transform: scale(1.2);
transition: all 0.2 ease-in-out;
}
.calendar-days div span {
position: absolute;
}
.calendar-days div:hover {
transition: width 0.2s ease-in-out, height 0.2s ease-in-out;
background-color: #e5cdaf;
border-radius: 20%;
color: #f8fbff;
}
.calendar-days div.current-date {
color: #f8fbff;
background-color: #9e8462;
border-radius: 20%;
}
.month-list {
position: relative;
left: 0;
top: -215px;
background-color: #ebebeb;
color: #151426;
display: grid;
grid-template-columns: repeat(3, auto);
gap: 5px;
border-radius: 20px;
}
.month-list>div {
display: grid;
place-content: center;
margin: 5px 10px;
transition: all 0.2s ease-in-out;
}
.month-list>div>div {
border-radius: 15px;
padding: 10px;
cursor: pointer;
}
.month-list>div>div:hover {
background-color: #9e8462;
color: #f8fbff;
transform: scale(0.9);
transition: all 0.2s ease-in-out;
}
.month-list.show {
visibility: visible;
pointer-events: visible;
transition: 0.6s ease-in-out;
animation: to-left .71s forwards;
}
.month-list.hideonce {
visibility: hidden;
}
.month-list.hide {
animation: to-right 1s forwards;
visibility: none;
pointer-events: none;
}
.date-time-formate {
height: 4rem;
width: 100%;
font-family: Dubai Light, Century Gothic;
position: relative;
display: flex;
top: 50px;
justify-content: center;
align-items: center;
}
.day-text-formate {
font-family: Microsoft JhengHei UI;
font-size: 1.4rem;
padding-right: 5%;
border-right: 3px solid #9e8462;
}
.date-time-value {
display: block;
position: relative;
text-align: center;
padding-left: 5%;
}
.time-formate {
font-size: 1.5rem;
}
.time-formate.hideTime {
animation: hidetime 1.5s forwards;
}
.day-text-formate.hidetime {
animation: hidetime 1.5s forwards;
}
.date-formate.hideTime {
animation: hidetime 1.5s forwards;
}
.day-text-formate.showtime {
animation: showtime 1s forwards;
}
.time-formate.showtime {
animation: showtime 1s forwards;
}
.date-formate.showtime {
animation: showtime 1s forwards;
}
@keyframes to-top {
0% {
transform: translateY(0);
opacity: 0;
}
100% {
transform: translateY(100%);
opacity: 1;
}
}
@keyframes to-left {
0% {
transform: translatex(230%);
opacity: 1;
}
100% {
transform: translatex(0);
opacity: 1;
}
}
@keyframes to-right {
10% {
transform: translatex(0);
opacity: 1;
}
100% {
transform: translatex(-150%);
opacity: 1;
}
}
@keyframes showtime {
0% {
transform: translatex(250%);
opacity: 1;
}
100% {
transform: translatex(0%);
opacity: 1;
}
}
@keyframes hidetime {
0% {
transform: translatex(0%);
opacity: 1;
}
100% {
transform: translatex(-370%);
opacity: 1;
}
}
File diff suppressed because one or more lines are too long
+12962
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+10290
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+15
View File
@@ -0,0 +1,15 @@
/*
Phantom by Pixelarity
pixelarity.com | hello@pixelarity.com
License: pixelarity.com/license
*/
/* Tiles */
body.is-preload .tiles article {
-moz-transform: none;
-webkit-transform: none;
-ms-transform: none;
transform: none;
opacity: 1;
}
+156
View File
@@ -0,0 +1,156 @@
/* Small devices (landscape phones, 320px and up) */
@media (min-width: 320px) {
.totalPanelContainer, #totalPanel {
width: 100%;
max-width:440px;
}
.bookingPhone, .bookingEmail, .bookingName{
margin: 0 1em;
width: 92%!important;
padding: 0;
max-width: 500px;
}
.totalPrice, .totalSelectedTime {
width: 100%;
}
.serviceTable {
width: 90%!important;
}
.bookingContainer {
width: auto;
}
.totalPanelContainer {
width: auto;
}
html.rd-navbar-fixed-linked .page {
padding-top: 0;
}
.bookingContainer {
margin-top: 0;
}
html.rd-navbar-fixed-linked .page {
padding-top: 0;
}
.bookingEmailTitle, .bookingPhoneTitle {
text-align: center;
}
.g-recaptcha {
top: 62px;
}
#bookingStep3 {
min-height: 590px;
}
}
/* Small devices (landscape phones, 375px and up) */
@media (min-width: 375px) {
}
/* Small devices (landscape phones, 576px and up) */
@media (min-width: 576px) {
.totalPanelContainer {
width: 95%;
}
}
/* Medium devices (tablets, 768px and up) */
@media (min-width: 768px) {
.serviceTable {
width: 90%!important;
}
.bookingPhone, .bookingEmail, .bookingName{
width: 100%!important;
margin: 0 auto;
}
.g-recaptcha {
top: -30px;
}
.bookingContainer {
width: 700px;
}
.totalPanelContainer {
width: 440px;
}
.bookingContainer {
margin-top: 115px;
}
html.rd-navbar-fixed-linked .page {
padding-top: 56px;
}
.bookingEmailTitle, .bookingPhoneTitle {
text-align: right;
width: 200px;
}
.g-recaptcha {
top: 8px;
}
#bookingStep3 {
min-height: 540px;
}
.bookingName, .bookingEmail, .bookingPhone {
width: 250px;
}
}
/* Large devices (desktops, 992px and up) */
@media (min-width: 992px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (min-width: 1200px) {
}
/* Extra large devices (large desktops, 2000px and up) */
@media (min-width: 2000px) {
}
/* Extra large devices (large desktops, 2500px and up) */
@media (min-width: 2500px) {
}
/* Extra large devices (large desktops, 3000px and up) */
@media (min-width: 3500px) {
}
/* Extra large devices (large desktops, 4500px and up) */
@media (min-width: 4500px) {
}
/* Extra large devices (large desktops, 5000px and up) */
@media (min-width: 5000px) {
}
+962
View File
@@ -0,0 +1,962 @@
.steps-indicator {
right: 0;
bottom: 0;
left: 0;
margin: 0;
padding: 20px 0 0 0;
height: 30px;
list-style: none;
}
.steps-indicator li {
position: relative;
float: left;
margin: 0;
padding: 0;
padding-top: 10px;
text-align: center;
line-height: 15px;
}
.steps-indicator.steps-3 li {
width: calc(100%/3);
}
.steps-indicator li.current, .steps-indicator li.editing {
pointer-events: none;
}
.steps-indicator {
height: 100px;
position:relative;
}
.bookingContainer{
margin:0 auto;
margin-top: 115px;
/*display:inline-block;*/
width:700px;
position:relative;
}
.stepTitleContainer{
}
.stepCircle{
height:20px;
width:20px;
margin:5px auto;
border-radius:15px;
background-color: lightgray;
}
.activeStep{
background-color:rgb(9, 94, 13);
}
.stepLine{
position:absolute;
top: 47%;
left: 50%;
right: -116px;
z-index: -100;
width: 100%;
border: 1px solid lightgray;
}
.stepTitle{
text-align:center;
font-size:15px;
}
.bookingTitle{
font-size:20px;
text-align: center;
text-transform: uppercase;
margin-bottom:20px;
font-weight:bold;
}
.bookingTable{
}
.inner{
text-align: center;
}
.BookingStepContainer{
display:none;
position:relative;
min-height: 355px;
margin-bottom: 50px;
}
#bookingStep1{
display:block;
}
.bookingButtonContainer{
position: absolute;
bottom: 10px;
left: 10px;
right: 10px;
height: 45px;
}
.bookingButtonContainer button{
position: absolute;
padding: 15px;
height: auto;
background-color: lightgray;
line-height: 15px;
}
.leftButton{
left:0;
}
.rightButton{
right:0;
}
.bookingSubmit{
position: absolute;
padding: 15px!important;
height: auto!important;
line-height: 15px!important;
-moz-appearance: auto;
-webkit-appearance: auto;
-ms-appearance: auto;
appearance: auto;
position: absolute;
top: 0px;
}
.bookingButton{
position: absolute;
padding: 15px!important;
height: auto!important;
line-height: 15px!important;
}
#datepicker{
width: 300px;
}
.availableTimesContainerTitle{
}
.bookingResultsWrapper{
display:none;
}
#bookingStep3 p{
margin: 0 0 1em 0;
}
.availableTimes{
margin-bottom: 70px;
}
.availableBookingTime{
padding:10px;
display:inline-block;
margin-right:10px;
margin-bottom:10px;
cursor:pointer;
width:60px;
height:46px;
background-color: #19AFCA;
color: white;
}
.availableBookingTime span{
pointer-events: none;
}
#servicelength{
-moz-appearance: auto;
-webkit-appearance: auto;
-ms-appearance: auto;
appearance: auto;
display:none;
}
.serviceTable{
display: table;
width:90%;
border-collapse: collapse;
margin:10px auto;
margin-bottom:100px;
}
.serviceHeader{
display: table-row;
font-weight:bold;
}
.serviceRow{
display: table-row;
position:relative;
}
.serviceCol{
display: table-cell;
vertical-align: middle;
text-align: left;
position:relative;
}
.serviceNameCol{
width:60%;
text-align: left;
vertical-align: middle;
padding-left: 5px;
}
.servicePriceCol{
width:20%;
text-align: right;
min-width: 42px;
width:65px;
}
.serviceQuantityCol{
width:40px;
}
.serviceInfoCol{
width:5%;
padding-left: 10px;
}
.serviceCheckCol{
width:5%;
}
.serviceInfoIcon{
width: 25px;
height: 25px;
position: relative;
cursor: pointer;
}
.serviceInfoLabel{
position:absolute;
top: 8px;
right: 27px;
width:150px;
text-wrap: pretty;
border:1px solid gray;
border-radius:5px;
background-color: white;
box-shadow: 5px 5px 5px rgba(0,0,0,0.1);
visibility: hidden;
cursor: pointer;
font-size:10px;
padding:5px;
line-height: normal;
z-index: 100;
}
.serviceInfoIcon .fa-info-circle{
pointer-events: none;
position:absolute;
top:0;
left:0;
font-size:25px;
cursor: pointer;
z-index: -50;
}
.serviceInfoIcon:hover .serviceInfoLabel{
visibility: visible;
}
.serviceCheckCol input[type="checkbox"]{
width:20px;
height:20px;
display:block;
opacity:1;
margin-left:5px;
-moz-appearance:auto;
-webkit-appearance: auto;
-ms-appearance: auto;
appearance: auto;
cursor:pointer;
}
.serviceCol h4{
margin-top:10px;
margin-bottom:0;
margin-left:5px;
position: relative;
left: 60px;
}
.workerTable{
display: block;
width: 430px;
margin:10px auto;
margin-bottom:100px;
height:85px;
}
.profileRow{
display: block;
height: 87px;
cursor: pointer;
}
.profileRadioBtn{
width: 35px;
height: 85px;
}
.profileCell{
display: inline-block;
float:left;
vertical-align: middle;
text-align: left;
}
.profileImage{
width: 75px;
height: 75px;
margin-top: 5px;
margin-left: 5px;
border-radius: 45px;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
.profileImage img{
width:100%;
}
.profileRadioBtn input[type="radio"]{
-moz-appearance: auto;
-webkit-appearance: auto;
-ms-appearance: auto;
appearance: auto;
opacity: 1;
margin:0 auto;
line-height:85px;
cursor:pointer;
width: 20px;
height: 20px;
z-index: 100;
position: relative;
top: 30px;
left: 6px;
}
.profileName{
padding-left: 10px;
font-weight: bold;
text-align: left;
line-height: 85px;
font-size: 18px;
}
.profileDescription{
padding-left: 10px;
text-align: left;
max-width: 300px;
line-height: 18px;
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
overflow: hidden;
}
.bookingHeader{
text-align:center;
margin:20px auto;
}
.totalPanelContainer{
position: fixed;
top: 100px;
right: 0;
width: 440px;
z-index: 300;
}
#totalPanel{
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
box-shadow: 5px 5px 5px rgba(0,0,0,0.1);
width: 440px;
display: none;
z-index: 100;
}
#totalPanelBtnContainer{
position:absolute;
right:0px;
top:0px;
bottom:0px;
}
#totalPanelBtn{
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 20px;
cursor: pointer;
min-height: 108px;
display:none;
}
#totalPanelBtn i{
color:white;
font-size:25px;
position:absolute;
left: 50%;
top:50%;
transform: translate(-50%, -50%);
}
.arrow-right {
width: 0;
height: 0;
border-top: 20px solid transparent;
border-bottom: 20px solid transparent;
border-left: 20px solid #1d2726;
position: absolute;
top: 5px;
right: -11px;
z-index: 200;
}
.panel-heading{
font-size: 23px;
margin-top: 20px;
text-align: center;
color: #19AFCA;
font-weight: 600;
/* margin: 50px 20px 0 20px; */
position: relative;
/* left: 60px; */
margin-top: 10px;
margin-bottom: 0;
margin-left: 5px;
font-size: 22px;
}
.selectedServiceTable{
display: table;
width: 100%;
border-collapse: collapse;
margin: 10px auto;
margin-bottom: 45px;
text-align: left;
}
.totalServiceRow{
display: table-row;
}
.totalSelectedServiceName{
padding-left: 10px;
}
.totalSelectedServicePrice{
display: table-cell;
vertical-align: middle;
text-align: left;
}
.selectedServiceCol{
}
.serviceContent{
padding-right: 20px;
}
.totalPrice{
position: absolute;
left: 0;
bottom: 10px;
font-size: 20px;
font-weight: bold;
text-align: center;
text-align: right;
width: 100%;
padding-right: 30px;
}
.totalSelectedTime{
position: absolute;
left: 0;
bottom: 10px;
font-size: 20px;
font-weight: bold;
text-align: center;
text-align: Left;
width: 100%;
padding-left: 10px;
}
.totalPrice span{
margin:0 auto;
}
.totalSelectedServicePrice{
text-align: right;
width: 110px;
}
.serviceTime{
display: none;
}
.totalTitle{
font-size: 15px;
}
.ui-datepicker-inline{
margin: 0 auto;
}
.bookingName, .bookingEmail, .bookingPhone{
height: 2.5em;
max-width: 500px;
margin: 0 auto;
}
.bookingEmailTitle, .bookingPhoneTitle{
margin-bottom:0;
margin-top:15px;
}
.bookingThankYouTitle{
margin-top:150px;
font-weight:bold;
font-size:20px;
color:#19AFCA;;
text-transform:uppercase;
}
.bookingThankYouMessageTitle{
}
.bookingCalendar{
float:left;
margin-top: 10px;
margin-left: 10px;
}
.bookingResultsWrapper{
float: left;
width: 378px;
margin-left: 10px;
margin-top: 7px;
}
#bookingStep3{
min-height: 540px;
}
#serviceBookingDate{
font-size: 20px;
text-align: center;
padding: 10px;
font-weight: 500;
display:none;
padding: 10px 0px 0px 0px;
}
#serviceBookingTime{
font-size: 20px;
text-align: center;
padding: 10px;
font-weight: 500;
display:none;
padding: 10px 0px 0px 0px;
}
.serviceBookingprofileRowContainer{
}
.serviceBookingprofileImage{
width: 60px;
height: 60px;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
float: left;
margin-right: 10px;
background-color: white;
border-radius: 45px;
margin-top: 5px;
margin-left: 5px;
}
.serviceBookingprofileName{
float: left;
font-size: 20px;
text-align: left;
height: 60px;
line-height: 65px;
margin-top: 5px;
}
.serviceBookingWorkerContainer{
display:none;
height:85px;
}
.selectedTime{
background-color:#a5705b;
color:white;
}
#bookingStep4{
min-height:460px;
}
.g-recaptcha{
position: absolute;
top: -8px;
left: 50%;
transform: translate(-50%, 0);
}
.activeService{
color:gray;
}
.inactiveService{
color:lightgray;
}
.serviceIconsContainer{
display:inline-block;
margin: 10px auto;
}
.serviceBtn{
width: 100px;
height: 100px;
border-radius: 20px;
border: 1px solid gray;
background-size: 80%;
background-position: center center;
background-repeat:no-repeat;
display: inline-block;
background-color:white;
}
.serviceBtn:hover{
background-color:#19AFCA;
cursor:pointer;
}
#cleaningService{
background-image:url('../img/icons/mop.png');
}
#carService{
background-image:url('../img/icons/car-service.png');
}
#helphandService{
background-image:url('../img/icons/technician.png');
}
#gardenService{
background-image:url('../img/icons/trimming.png');
}
#houseService{
background-image:url('../img/icons/give.png');
}
#buildService{
background-image:url('../img/icons/construction.png');
}
.activeServiceButton{
background-color: #19AFCA;
}
#cleaningServiceContent{
display:block;
}
.serviceContainer{
display:none;
}
.xClass{
position: absolute;
bottom: 15px;
width: 10px;
height: 25px;
}
.bookingStartTitle{
text-align: center;
color: #19AFCA;
font-weight: 600;
/* margin: 50px 20px 0 20px; */
position: relative;
/* left: 60px; */
margin-top: 10px;
margin-bottom: 0;
margin-left: 5px;
font-size: 22px;
}
.ui-datepicker-week-end a{
background-image: none;
color: darkred!important;
}
.formTitle{
font-size: 15px;
text-transform: uppercase;
color: gray;
display: block;
text-align: center;
margin: 0 auto;
margin-top: 20px;
max-width: 500px;
width: auto;
min-height: 30px;
height: auto;
text-align: center;
}
.formInputBox {
text-align: center;
font-size: 18px;
padding: 5px;
border: 1px solid lightgray;
/*height: 25px;*/
height: 25px;
max-width: 490px;
margin: 10px auto;
display: block;
width:95%;
margin-top: 0;
}
.formTextarea {
text-align: center;
font-size: 15px;
padding: 5px;
border: 1px solid lightgray;
height: 100px;
min-height: 100px;
max-height: 100px;
max-width: 490px;
margin: 10px auto;
display: block;
width: 500px;
min-width: 500px;
max-width: 500px;
flex-wrap: wrap;
text-align: justify;
white-space: normal;
}
.formDropdownBox {
text-align: center;
line-height: 35px;
font-size: 18px;
padding: 5px 0;
border: 1px solid lightgray;
height: 35px;
max-width: 500px;
display: block;
margin: 0 auto;
text-align-last: center;
width:100%;
}
.formRow {
margin-bottom:20px;
text-align: center;
}
.textAreaFormRow {
margin-bottom:20px;
max-width:500px;
margin:0 auto;
}
.submitButton {
text-decoration: none;
text-transform: uppercase;
color: white;
max-width: 270px;
border-radius: 35px;
display: block;
margin: 20px auto;
padding: 12px 20px;
border: 0;
outline: 0;
cursor: pointer;
background-color: #19AFCA;
height: auto;
text-align: center;
min-width:150px;
}
.cancelButton {
text-decoration: none;
text-transform: uppercase;
color: white;
max-width: 110px;
border-radius: 35px;
display: block;
margin: 20px auto;
padding: 10px 20px;
border: 0;
outline: 0;
cursor: pointer;
background-color: #19AFCA;
height: auto;
text-align: center;
}
.proserSubTitleDescription{
margin: 0 0 30px 0;
text-align: center;
position: relative;
font-weight:bold;
}
.proserSubTitle{
font-weight:bold;
}
.inputSelectorContainer{
position:relative;
display:block;
width: 235px;
margin: 0 auto;
}
.inputSelectorContainer > input{
display:inline-block;
margin-right:10px;
font-size:14px;
}
.inputSelectorContainer > label{
display:inline-block;
}
.tgroup {
display: table-row-group;
}
.trow {
display:table-row;
}
.caption {
caption-side: top;
display: table-caption;
text-align: center;
}