121 Commits

Author SHA1 Message Date
Frank John Begornia
962c8643c8 fix: add .env.local to gitignore 2026-04-24 12:17:02 +08:00
Frank John Begornia
d1976045db fix: remove hardcoded credentials from source code
- Move PayPal live/sandbox API keys to env variables
- Move hardcoded API token in isAuthorized middleware to env variable
- Add api_token key to config/app.php
- Update .env.example with new required env vars
- Fix isAuthorized response code from 503 to 401
2026-04-24 10:45:54 +08:00
62b8ab44b2 Merge pull request 'feat: add custom 404 error page and handle exceptions for not found errors' (#7) from feat/page-404 into master
Reviewed-on: #7
2026-04-19 19:22:13 +00:00
Frank John Begornia
63be70163e feat: add custom 404 error page and handle exceptions for not found errors 2026-04-20 03:21:31 +08:00
51f7dc8730 Merge pull request 'feat: enhance cart layout and styling for improved user experience' (#6) from feat/cart-enhancement into master
Reviewed-on: #6
2026-04-17 10:41:20 +00:00
Frank John Begornia
1f6c71895f feat: enhance cart layout and styling for improved user experience 2026-04-17 18:40:47 +08:00
ea61963f7d Merge pull request 'feat: enhance navbar and privacy policy layout for improved user experience' (#5) from feat/navbar-enhancement into master
Reviewed-on: #5
2026-04-17 10:23:06 +00:00
Frank John Begornia
3f2175719b feat: enhance navbar and privacy policy layout for improved user experience 2026-04-17 18:21:48 +08:00
66e4179997 Merge pull request 'feat: enhance team store page layout and styling for improved user experience' (#4) from feat/teamstore-page-enhancement into master
Reviewed-on: #4
2026-04-17 10:01:20 +00:00
Frank John Begornia
a255eedc40 feat: enhance team store page layout and styling for improved user experience 2026-04-17 18:00:36 +08:00
d95427b08f Merge pull request 'style: enhance authentication forms with improved layout and design' (#3) from feat/auth-forms into master
Reviewed-on: #3
2026-04-17 06:19:50 +00:00
Frank John Begornia
0531bf35ba style: enhance authentication forms with improved layout and design 2026-04-17 14:18:31 +08:00
Frank John Begornia
fa68bd1dca fix: update storage paths for team store logo and banner uploads to use 'uploads/images' directory 2026-04-17 13:39:15 +08:00
Frank John Begornia
c5d32b7c6c fix: update storage paths for store logo and banner uploads to include 'upload/images' 2026-04-17 13:33:31 +08:00
Frank John Begornia
90b94c95d6 fix: migrate store logo/banner uploads from sftp to minio 2026-04-17 13:24:40 +08:00
Frank John Begornia
43f365112f fix: pin psr/http-message ^1.0 and guzzlehttp/psr7 ^1.4 to fix PsrStream __toString incompatibility 2026-04-17 13:13:42 +08:00
Frank John Begornia
1e62654a02 fix: register minio custom driver using flysystem-aws-s3-v3 (Laravel 5.0 hardcodes v2) 2026-04-17 13:03:37 +08:00
Frank John Begornia
65e14702a8 feat: update Dockerfile and AppServiceProvider for PHP 7.2 compatibility and improved error handling 2026-04-17 12:52:38 +08:00
Frank John Begornia
048d51f181 feat: add MinIO S3 storage configuration to docker-compose for improved file management 2026-04-16 23:55:22 +08:00
8ec3454707 Merge pull request 'feat/hifive-filters' (#2) from feat/hifive-filters into master
Reviewed-on: #2
2026-04-16 15:41:40 +00:00
5845296919 Merge pull request 'Refactor image upload handling in UserController to use MinIO for improved storage management' (#1) from fix/upload-image into master
Reviewed-on: #1
2026-04-16 15:40:59 +00:00
Frank John Begornia
751dcd4f9e Refactor image upload handling in UserController to use MinIO for improved storage management 2026-04-16 23:40:09 +08:00
Frank John Begornia
a094650f64 chore: remove SSH Keys Setup guide to enhance security practices 2026-04-16 23:21:45 +08:00
Frank John Begornia
dd6503a4a4 feat(teamstore): add league/conference sub-sub-category pill filter (hi-five-franchise-store only) 2026-04-16 23:19:19 +08:00
Frank John Begornia
958edcfab8 Add centering guidelines script and update script references in designer view 2026-04-02 03:33:19 +08:00
Frank John Begornia
dc53b4863c Refactor image handling in PrintPatternController and TemplatesController to use MinIO for improved storage management 2026-04-02 03:31:08 +08:00
Frank John Begornia
bd8c7f02b5 Refactor image URLs to use MinIO storage for improved asset management 2026-04-02 03:04:49 +08:00
Frank John Begornia
005b64233b Enhance TestEmailController and view to include CSRF token and improve form security 2026-02-26 23:12:00 +08:00
Frank John Begornia
ee91fe18c6 Update exception handling in Handler and TestEmailController for improved error reporting 2026-02-26 22:58:28 +08:00
Frank John Begornia
678d110d29 Add TestEmailController and views for sending test emails 2026-02-26 22:46:14 +08:00
Frank John Begornia
517bf2c3db Add SSH keys setup guide and update configurations for secure key management 2026-02-23 02:01:12 +08:00
Frank John Begornia
ea3fba0cd6 Fix image path for PayPal button in cart view 2026-01-07 01:42:43 +08:00
Frank John Begornia
02a6aa8d24 Update DesignerController and site_config for MinIO integration and URL adjustments 2026-01-07 01:28:47 +08:00
Frank John Begornia
8b195fff55 Refactor image URLs to use MinIO storage across various views and controllers 2026-01-07 01:10:15 +08:00
Frank John Begornia
0a796ef4e4 Add MinIO configuration and update image URLs in MainController 2026-01-06 15:34:02 +08:00
Frank John Begornia
604b986e6e Use MinIO for sports category images 2026-01-06 15:27:17 +08:00
Frank John Begornia
995d3d3ea0 Add MinIO S3 storage integration
- Add minio disk configuration in filesystems.php
- Create helper functions for MinIO URLs (minio_url, minio_image_url)
- Update composer.json with AWS SDK (for future S3 support)
- Add MinIO env vars to docker-compose.local.yml
- Add .env examples for MinIO configuration
2026-01-06 15:20:15 +08:00
Frank John Begornia
87af27fe10 Update README.md to reflect project details and installation instructions 2026-01-05 23:15:14 +08:00
Frank John Begornia
e6496b8ae0 Update APP_URL and Traefik rules for production environment 2026-01-05 23:13:37 +08:00
Frank John Begornia
6390717622 Remove commented-out sales chart section from user dashboard 2025-12-31 02:20:31 +08:00
Frank John Begornia
2dbcf3e2e6 Update AppServiceProvider to force HTTPS and configure APP_URL in app.php 2025-12-31 02:10:31 +08:00
Frank John Begornia
0f24a817ce Remove '/public' prefix from asset paths for consistency across views 2025-12-31 02:04:33 +08:00
Frank John Begornia
1b645de66e Refactor asset paths to remove '/public' prefix for consistency across views 2025-12-31 01:53:42 +08:00
Frank John Begornia
e1ac5bd2a5 Remove unnecessary environment setup and optimization steps from Dockerfile 2025-12-31 01:24:12 +08:00
Frank John Begornia
e3c5b44174 Fix Traefik certresolver value in production Docker Compose configuration 2025-12-31 01:10:07 +08:00
Frank John Begornia
9a6e3a63b2 Update production environment URLs and Traefik rules for dev-crew.crewsportswear.app 2025-12-31 00:56:31 +08:00
Frank John Begornia
0f12309175 Update deployment directory path in workflow configuration 2025-12-31 00:33:22 +08:00
Frank John Begornia
e25228e25e Add Docker and deployment configurations for development and production environments 2025-12-31 00:23:44 +08:00
franknstayn
633249438c updated 2023-08-24 21:55:06 +08:00
franknstayn
fe02cfe2d4 exempt sf spartans tax 2021-12-23 18:08:57 +08:00
franknstayn
854a39db30 added voucher validation 2021-12-03 18:00:27 +08:00
franknstayn
94b55851b4 update store item view 2021-11-26 19:31:40 +08:00
franknstayn
08571b2358 update store item view 2021-11-26 19:29:59 +08:00
franknstayn
0abc30c7a0 updated checkout flow 2021-11-03 21:30:42 +08:00
franknstayn
b4d92bb14a update navbar 2021-09-25 18:32:49 +08:00
franknstayn
0327471c92 update navbar 2021-09-25 18:30:03 +08:00
franknstayn
72b800b22d update navbar 2021-09-25 18:28:40 +08:00
franknstayn
54eb09f080 update navbar 2021-09-25 18:20:22 +08:00
franknstayn
6d67430c33 update creds 2021-09-15 20:48:31 +08:00
franknstayn
cde3a8597c update email creds 2021-09-15 20:41:07 +08:00
franknstayn
6bc7f0b3f0 update email creds 2021-09-15 20:20:31 +08:00
franknstayn
1007e59b7d update email 2021-09-15 20:02:51 +08:00
franknstayn
fe3b645352 update description label 2021-09-07 19:41:04 +08:00
franknstayn
bcaad2306a update store please read text 2021-09-03 21:35:45 +08:00
franknstayn
0e3c86a075 update store please read text 2021-09-03 21:35:24 +08:00
franknstayn
b78a0dd6d2 updated delete function for delete item 2021-07-17 15:32:49 +08:00
Frank John Begornia
af0fae29f8 added shipping fee for dgs 2021-03-20 14:36:46 +08:00
Frank John Begornia
5d2ab7ffe2 fixed reports date range 2021-02-08 04:07:29 +08:00
Frank John Begornia
0b3ef61086 updated apis 2021-02-04 19:45:27 +08:00
Frank John Begornia
18dd91e2a8 update reports display 2021-01-23 19:52:17 +08:00
Frank John Begornia
42acec513f update report 2021-01-23 19:49:15 +08:00
Frank John Begornia
71f5c53b53 fixed order report 2020-12-19 19:49:03 +08:00
Frank John Begornia
1e1440edaf fixed order report 2020-12-19 19:46:36 +08:00
Frank John Begornia
0b157efbbf added status 2020-12-12 19:53:30 +08:00
Frank John Begornia
d2f492212b added new api 2020-12-11 21:47:36 +08:00
Frank John Begornia
73770a85be added order status 2020-11-28 18:13:43 +08:00
Frank John Begornia
5f44fd781f change image url 2020-11-27 16:24:57 +08:00
Frank John Begornia
a4cbfd63da added api for tracking 2020-11-27 02:43:26 +08:00
franknstayn
bbf0fd286d added bucket hat sizes 2020-11-26 12:32:29 -06:00
franknstayn
57cc16abf2 edit please read on lasc store 2020-11-17 18:50:50 +08:00
franknstayn
2688f9cab9 update crewsportswear 2020-10-24 21:27:04 +08:00
franknstayn
54c685ce79 added announcement 2020-10-17 23:16:25 +08:00
franknstayn
9aa01a4f31 added 0 2020-10-17 23:14:52 +08:00
franknstayn
386f04b32f added announcement 2020-10-17 22:17:25 +08:00
franknstayn
fafa871214 added stat 2020-09-29 19:40:42 +08:00
franknstayn
9874fb4b60 update 2020-09-29 01:05:01 -05:00
franknstayn
cb89f32a64 update payment details record 2020-08-10 23:20:55 +08:00
franknstayn
21ec11e998 add shipping cost 2020-08-10 22:41:40 +08:00
franknstayn
0ca7174e2f updates 2020-08-09 13:21:41 -05:00
franknstayn
fabc31ac2b updates 2020-08-01 03:06:48 -05:00
franknstayn
427fbf616d fix teamstore password 2020-07-11 19:31:35 +08:00
franknstayn
1b30d340b3 updated 2020-07-11 02:57:12 -05:00
franknstayn
56f790c279 added new form for store item 2020-03-19 22:37:08 +08:00
franknstayn
1aaf083a8a update 3_14_2020 2020-03-14 01:17:24 -05:00
franknstayn
ef9a79539a fix tax exemption 2020-02-28 21:07:05 +08:00
franknstayn
1f621ad7a3 Merge branch 'master' of github.com:franknstayn/crewsportswear
Conflicts:
	app/Http/Controllers/paypal/PaypalController.php
2020-02-28 07:02:30 -06:00
franknstayn
ba86aa3039 exempt jjed phl intax 2020-02-28 06:58:41 -06:00
franknstayn
30a6351136 Merge branch 'master' of https://github.com/franknstayn/crewsportswear 2020-02-28 20:54:33 +08:00
franknstayn
519ee7a567 exempt nlp in tax 2020-02-28 20:53:29 +08:00
franknstayn
c938d6b08b uncomment RewriteRule 2020-02-25 12:29:23 +08:00
franknstayn
566e657060 removed JAC 2020-02-25 12:21:10 +08:00
franknstayn
88679773fe add jac 2020-02-25 12:06:28 +08:00
franknstayn
11bf31af39 added contact us page 2020-02-25 11:53:26 +08:00
franknstayn
16fcca5333 changed sizes display 2020-02-08 20:37:02 +08:00
franknstayn
0952f460d5 Merge pull request #9 from franknstayn/additional_form
Additional form
2020-02-08 16:40:18 +08:00
franknstayn
0d26eefab9 add form in user page 2020-02-07 01:14:27 +08:00
franknstayn
b7875f0236 additional forms 2020-02-07 01:10:31 +08:00
franknstayn
4def6bcf09 Merge pull request #8 from franknstayn/local_dev
added delete function on store item
2020-01-25 20:12:43 +08:00
franknstayn
a15c237f53 Merge branch 'master' of github.com:franknstayn/crewsportswear 2020-01-25 04:47:06 -06:00
franknstayn
4f91dd8370 added user for tax exemption 2020-01-25 04:45:58 -06:00
franknstayn
d0eeafcd52 Merge pull request #7 from franknstayn/local_dev
Local dev
2020-01-25 18:43:25 +08:00
franknstayn
e7a4dce4e1 Merge branch 'local_dev' of github.com:franknstayn/crewsportswear 2020-01-10 07:32:59 -06:00
franknstayn
f355b3a9b5 Merge pull request #6 from franknstayn/local_dev
rename number to name
2019-12-04 18:49:08 +08:00
franknstayn
5a7008b8d9 Merge pull request #5 from franknstayn/local_dev
Local dev
2019-12-04 18:44:41 +08:00
franknstayn
9dfd6f3884 Merge pull request #4 from franknstayn/local_dev
added "size" column on download report in csv and excel
2019-11-15 21:05:31 +08:00
franknstayn
b2985a5b32 Merge pull request #3 from franknstayn/local_dev
Local dev
2019-11-14 19:45:29 +08:00
franknstayn
4ccd15566d Merge branch 'master' of github.com:franknstayn/crewsportswear 2019-11-11 04:44:45 -06:00
franknstayn
b76eb97d66 update from live 11_11_2019 2019-11-11 04:44:08 -06:00
franknstayn
423a23abce Merge pull request #2 from franknstayn/local_dev
added column in store order reports in store owner
2019-11-11 18:42:11 +08:00
franknstayn
7b979abad1 fixed broken link on cart page. 2019-11-06 07:26:02 -06:00
franknstayn
31cf5dbb3b Merge pull request #1 from franknstayn/local_dev
Local dev by frank
2019-11-06 20:29:09 +08:00
15 changed files with 1584 additions and 502 deletions

View File

@@ -11,6 +11,13 @@ CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
PAYPAL_SANDBOX_CLIENT_ID=
PAYPAL_SANDBOX_SECRET=
PAYPAL_LIVE_CLIENT_ID=
PAYPAL_LIVE_SECRET=
API_TOKEN=
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525

View File

@@ -1,26 +0,0 @@
# Local Development Configuration
# Copy to .env.local and fill in your values.
# ── MinIO credentials ─────────────────────────────────────────────────────────
MINIO_KEY=your_minio_root_user
MINIO_SECRET=your_minio_root_password
# ── SSH tunnel (remote DB) ────────────────────────────────────────────────────
# Only needed when starting with --profile ssh-db.
# NOTE: no inline comments allowed after values — Docker reads them literally.
SSH_HOST=136.114.183.15
SSH_PORT=22
SSH_USER=webmaster
# Must be an absolute path — Docker Compose does NOT expand ~
SSH_KEY_PATH=/Users/webmaster/.ssh/id_ed25519_crew_webmaster
SSH_DB_REMOTE_HOST=127.0.0.1
SSH_DB_REMOTE_PORT=3306
# Tell the app to route DB traffic through the tunnel container:
DB_HOST=db-tunnel
DB_PORT=3306
DB_DATABASE=custom_designs
DB_USERNAME=root
DB_PASSWORD=VeryStrongRootPass2025!

1
.gitignore vendored
View File

@@ -1,6 +1,7 @@
/vendor
/node_modules
.env
.env.local
# SSH Keys - Never commit private keys
*.ppk

View File

@@ -2,6 +2,8 @@
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class Handler extends ExceptionHandler {
@@ -42,6 +44,11 @@ class Handler extends ExceptionHandler {
if (!$e instanceof Exception) {
$e = new \ErrorException($e->getMessage(), $e->getCode(), E_ERROR, $e->getFile(), $e->getLine());
}
if ($e instanceof NotFoundHttpException || $e instanceof ModelNotFoundException) {
return response()->view('errors.404', [], 404);
}
return parent::render($request, $e);
}

View File

@@ -13,11 +13,11 @@ class isAuthorized {
*/
public function handle($request, Closure $next)
{
if(isset(getallheaders()['token']) && getallheaders()['token']=="1HHIaIsT4pvO2S39vMzlVfGWi3AhAz6F5xGBNKil") {
$token = $request->header('token') ?? (getallheaders()['token'] ?? null);
if ($token && $token === config('app.api_token')) {
return $next($request);
}else{
return response()->json(['status' => false,'error' => "Invalid request"], 503);
}
return response()->json(['status' => false, 'error' => 'Invalid request'], 401);
}
}

View File

@@ -80,6 +80,8 @@ return [
'key' => env('APP_KEY', 'SomeRandomString'),
'api_token' => env('API_TOKEN'),
'cipher' => MCRYPT_RIJNDAEL_128,
/*

View File

@@ -36,13 +36,13 @@ return [
// sandbox
'paypal_sandbox' => [
'client_id' => 'AQuz-HKzQiL7FygkG8skSekaWf-RP6Rgj4f1XeX1Ghp86bUFj7tQXVT1xbpluu5_WCGRbQpOVGtlJKVB',
'secret' => 'EJAMKxQsl-mFkL_4J_90cvTamYfcsgswqgIxz9wQPiRAwJ6sy_wNsttMlmrXIpxI96JpYzdMXkLCHAPz'
'client_id' => env('PAYPAL_SANDBOX_CLIENT_ID'),
'secret' => env('PAYPAL_SANDBOX_SECRET'),
],
// live
'paypal_live' => [
'client_id' => 'AUqBUFW5lfyYmrlBtFZA3RNw45sttM3ltbvS_d4qCVBMrkcMG9rEeivGvtNFSy8XTiEp50YyQ6khKxbq',
'secret' => 'ELlnuiupoFKwGUSc2g5j-sD1EmsvKpdhth1gFV7njpfvyNtKsK8WwIKUMOS0ehJcRatV865eMhfgsnd_'
'client_id' => env('PAYPAL_LIVE_CLIENT_ID'),
'secret' => env('PAYPAL_LIVE_SECRET'),
],
];

View File

@@ -2,58 +2,168 @@
@section('content')
<style>
.error{
color: red;
html,
body {
height: 100%;
background: #ffffff;
margin: 0;
overflow: hidden;
}
.form-wrapper{
margin-top: 20%;
.navbar-custom {
display: block;
margin-bottom: 0;
}
.login-wrapper {
height: calc(100vh - 100px);
height: calc(100dvh - 100px);
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
}
.login-card {
width: 100%;
max-width: 380px;
background: #ffffff;
border: 1px solid #eceff3;
border-radius: 12px;
padding: 28px;
}
.login-title {
font-size: 24px;
font-weight: 600;
line-height: 1.2;
margin: 0 0 8px;
color: #111827;
}
.login-subtitle {
font-size: 14px;
margin: 0 0 24px;
color: #6b7280;
}
.login-card .form-group {
margin-bottom: 16px;
}
.login-card label {
display: block;
font-size: 13px;
font-weight: 500;
margin-bottom: 6px;
color: #374151;
}
.login-card .form-control {
height: 42px;
border-radius: 8px;
border: 1px solid #d1d5db;
background: #ffffff;
font-size: 14px;
padding: 0 12px;
box-shadow: none;
transition: border-color 0.2s, box-shadow 0.2s;
}
.login-card .form-control:focus {
border-color: #9ca3af;
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
outline: none;
}
.login-remember-row {
display: flex;
align-items: center;
justify-content: space-between;
margin: 6px 0 18px;
}
.login-remember-row label {
margin: 0;
font-size: 13px;
font-weight: 400;
color: #4b5563;
}
.login-remember-row a {
font-size: 13px;
color: #4b5563;
text-decoration: none;
}
.login-remember-row a:hover {
color: #111827;
}
.btn-login {
width: 100%;
height: 44px;
border: 0;
border-radius: 8px;
background: #111827;
color: #ffffff;
font-size: 14px;
font-weight: 600;
transition: opacity 0.2s;
}
.btn-login:hover {
opacity: 0.92;
color: #ffffff;
}
.login-footer {
margin-top: 18px;
text-align: center;
font-size: 13px;
color: #6b7280;
}
.login-footer a {
color: #111827;
text-decoration: none;
font-weight: 500;
}
.login-footer a:hover {
text-decoration: underline;
}
#login-response-msg .alert {
border-radius: 8px;
font-size: 13px;
margin-bottom: 14px;
}
</style>
<div class="container">
<div class="col-md-4 col-md-offset-4">
<div class="form-wrapper">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="text-center">S I G N - I N</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-xs-12">
<div id="login-response-msg"></div>
<form role="form" id="frm-login">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="username" class="control-label">Email Address</label>
<input type="email" class="form-control" name="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="example@gmail.com">
<span class="help-block"></span>
</div>
<div class="form-group">
<label for="password" class="control-label">Password</label>
<input type="password" class="form-control" name="password" placeholder="Password" title="Please enter your password">
<span class="help-block"></span>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="remember"> Remember login
</label>
<p class="help-block">(if this is a private computer)</p>
</div>
<button type="submit" id="btn-login" class="btn btn-success btn-block"><i class="fa fa-sign-in"></i> &nbsp; Sign in</button>
<a href="{{ url('/password/email') }}" class="btn btn-link btn-block">Forgot Your Password?</a>
</form>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<hr />
<p class="text-center">Don't have an account? Register Now!</p>
<a href="{{ url('/auth/register') }}" type="submit" id="btn-login" class="btn btn-primary btn-block">Register</a>
</div>
</div>
</div>
<div class="login-wrapper">
<div class="login-card">
<h1 class="login-title">Sign in</h1>
<p class="login-subtitle">Welcome back. Please enter your details.</p>
<div id="login-response-msg"></div>
<form role="form" id="frm-login">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="email">Email Address</label>
<input type="email" class="form-control" name="email" id="email" value="{{ old('email') }}" placeholder="you@example.com" title="Please enter your email address">
</div>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password" id="password" placeholder="Enter your password" title="Please enter your password">
</div>
<div class="login-remember-row">
<label><input type="checkbox" name="remember"> Remember me</label>
<a href="{{ url('/password/email') }}">Forgot password?</a>
</div>
<button type="submit" id="btn-login" class="btn-login">Sign in</button>
</form>
<p class="login-footer">Dont have an account? <a href="{{ url('/auth/register') }}">Create one</a></p>
</div>
</div>
@endsection

View File

@@ -2,54 +2,154 @@
@section('content')
<style>
.error{
color: red;
body {
background: #ffffff;
margin: 0;
}
.form-wrapper{
margin-top: 20%;
.navbar-custom {
margin-bottom: 0;
}
.auth-wrapper {
min-height: calc(100vh - 100px);
min-height: calc(100dvh - 100px);
display: flex;
align-items: center;
justify-content: center;
padding: 24px 16px;
box-sizing: border-box;
}
.auth-card {
width: 100%;
max-width: 380px;
background: #ffffff;
border: 1px solid #eceff3;
border-radius: 12px;
padding: 28px;
}
.auth-title {
font-size: 24px;
font-weight: 600;
line-height: 1.2;
margin: 0 0 8px;
color: #111827;
}
.auth-subtitle {
font-size: 14px;
margin: 0 0 20px;
color: #6b7280;
}
.auth-card .form-group {
margin-bottom: 14px;
}
.auth-card label {
display: block;
font-size: 13px;
font-weight: 500;
margin-bottom: 6px;
color: #374151;
}
.auth-card .form-control {
height: 42px;
border-radius: 8px;
border: 1px solid #d1d5db;
background: #ffffff;
font-size: 14px;
padding: 0 12px;
box-shadow: none;
transition: border-color 0.2s, box-shadow 0.2s;
}
.auth-card .form-control:focus {
border-color: #9ca3af;
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
outline: none;
}
.btn-auth {
width: 100%;
height: 44px;
border: 0;
border-radius: 8px;
background: #111827;
color: #ffffff;
font-size: 14px;
font-weight: 600;
transition: opacity 0.2s;
}
.btn-auth:hover {
opacity: 0.92;
color: #ffffff;
}
.auth-footer {
margin-top: 16px;
text-align: center;
font-size: 13px;
color: #6b7280;
}
.auth-footer a {
color: #111827;
text-decoration: none;
font-weight: 500;
}
.auth-footer a:hover {
text-decoration: underline;
}
.auth-card .alert {
border-radius: 8px;
font-size: 13px;
}
.auth-card .alert ul {
padding-left: 18px;
margin-bottom: 0;
}
</style>
<div class="container">
<div class="col-md-4 col-md-offset-4">
<div class="form-wrapper">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="text-center">R E S E T &nbsp; P A S S W O R D</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-xs-12">
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form role="form" method="POST" action="{{ url('/password/email') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="username" class="control-label">Email Address</label>
<input type="email" class="form-control" name="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="example@gmail.com">
<span class="help-block"></span>
</div>
<button type="submit" class="btn btn-default btn-block">Send Password Reset Link</button>
</form>
<br><br>
</div>
</div>
</div>
<div class="auth-wrapper">
<div class="auth-card">
<h1 class="auth-title">Forgot password</h1>
<p class="auth-subtitle">Enter your email and well send you a reset link.</p>
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
</div>
@endif
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form role="form" method="POST" action="{{ url('/password/email') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="email">Email Address</label>
<input type="email" class="form-control" name="email" id="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="you@example.com">
</div>
<button type="submit" class="btn-auth">Send reset link</button>
</form>
<p class="auth-footer"><a href="{{ url('/auth/login') }}">Back to sign in</a></p>
</div>
</div>
@endsection

View File

@@ -2,136 +2,242 @@
@section('content')
<style>
.error {
color: red;
body {
background: #ffffff;
margin: 0;
}
.navbar-custom {
margin-bottom: 0;
}
.auth-wrapper {
min-height: calc(100vh - 100px);
min-height: calc(100dvh - 100px);
display: flex;
align-items: flex-start;
justify-content: center;
padding: 24px 16px;
box-sizing: border-box;
}
.auth-card {
width: 100%;
max-width: 560px;
background: #ffffff;
border: 1px solid #eceff3;
border-radius: 12px;
padding: 28px;
}
.auth-title {
font-size: 24px;
font-weight: 600;
line-height: 1.2;
margin: 0 0 8px;
color: #111827;
}
.auth-subtitle {
font-size: 14px;
margin: 0 0 20px;
color: #6b7280;
}
.auth-section-title {
font-size: 12px;
font-weight: 600;
color: #6b7280;
text-transform: uppercase;
letter-spacing: 0.5px;
margin: 8px 0 12px;
}
.auth-card .form-group {
margin-bottom: 14px;
}
.auth-card label {
display: block;
font-size: 13px;
font-weight: 500;
margin-bottom: 6px;
color: #374151;
}
.auth-card .form-control {
height: 42px;
border-radius: 8px;
border: 1px solid #d1d5db;
background: #ffffff;
font-size: 14px;
padding: 0 12px;
box-shadow: none;
transition: border-color 0.2s, box-shadow 0.2s;
}
.auth-card .form-control:focus {
border-color: #9ca3af;
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
outline: none;
}
.auth-card select.form-control {
padding-right: 28px;
}
.g-recaptcha {
width: 100%;
}
.auth-terms {
font-size: 13px;
color: #6b7280;
margin-bottom: 14px;
}
.auth-terms a {
color: #111827;
text-decoration: none;
}
.auth-terms a:hover {
text-decoration: underline;
}
.btn-register-modern {
width: 100%;
height: 44px;
border: 0;
border-radius: 8px;
background: #111827;
color: #ffffff;
font-size: 14px;
font-weight: 600;
transition: opacity 0.2s;
}
.btn-register-modern:hover {
opacity: 0.92;
color: #ffffff;
}
.auth-footer {
margin-top: 16px;
text-align: center;
font-size: 13px;
color: #6b7280;
}
.auth-footer a {
color: #111827;
text-decoration: none;
font-weight: 500;
}
.auth-footer a:hover {
text-decoration: underline;
}
#register-response-msg .alert {
border-radius: 8px;
font-size: 13px;
margin-bottom: 14px;
}
</style>
<div class="container">
<div class="row">
<div class="col-md-4 col-md-offset-4">
<div class="form-wrapper">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="text-center">R E G I S T E R</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-xs-12">
<div id="register-response-msg"></div>
<form role="form" id="frm-register">
<div class="form-group text-center">
<h5>Personal Information</h5>
</div>
<input type="hidden" name="redirect" value="{{ Request::get('redirectUrl') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label class="control-label">First name</label>
<input type="text" class="form-control" name="firstname" placeholder="First name">
</div>
<div class="auth-wrapper">
<div class="auth-card">
<h1 class="auth-title">Create account</h1>
<p class="auth-subtitle">Fill in your details to get started.</p>
<div id="register-response-msg"></div>
<form role="form" id="frm-register">
<div class="auth-section-title">Personal Information</div>
<input type="hidden" name="redirect" value="{{ Request::get('redirectUrl') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label class="control-label">Last name</label>
<input type="text" class="form-control" name="lastname" placeholder="Last name">
</div>
<!-- <div class="form-group">
<label class="control-label">Username</label>
<input type="text" class="form-control" name="username" value="{{ old('username') }}" placeholder="Username">
</div> -->
<div class="form-group">
<label class="control-label">Email Address</label>
<input type="email" class="form-control" name="email" value="{{ old('email') }}" placeholder="Email Address">
</div>
<div class="form-group">
<label class="control-label">Phone Number</label>
<input type="text" class="form-control" name="mobilenumber" placeholder="Phone Number">
</div>
<div class="form-group">
<label class="control-label">Password</label>
<input type="password" class="form-control" name="password" id="password" required placeholder="Password">
</div>
<div class="form-group">
<label class="control-label">Confirm Password</label>
<input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password" data-rule-equalTo="#password" required>
</div>
<div class="form-group text-center">
<h5>Address Information</h5>
</div>
<div class="form-group">
<label class="control-label">Select Country</label>
<select name="countryCode" id="select_country" class="form-control" onchange="selectCountry(this)">
<option value="">Select Country</option>
<option value="US">United States</option>
<option value="CA">Canada</option>
</select>
</div>
<div class="form-group">
<label class="control-label">State / Province</label>
<label></label>
<select class="form-control" name="state" id="lst-states">
<option value="">Select State</option>
</select>
</div>
<div class="form-group">
<label class="control-label">City</label>
<select class="form-control" name="city" id="lst-cities">
<option value="">Select City</option>
</select>
</div>
<div class="form-group">
<label class="control-label">Address 1</label>
<input type="text" class="form-control" name="address" placeholder="Address 1">
</div>
<div class="form-group">
<label class="control-label">Address 2</label>
<input type="text" class="form-control" name="address2" placeholder="Address 2">
</div>
<div class="form-group">
<label class="control-label">Zip Code</label>
<input type="text" class="form-control" name="zipcode" placeholder="Please enter your zip code">
</div>
<div class="form-group">
<div class="g-recaptcha text-center" data-sitekey="{{ env('CAPTCHA_SITE_KEY') }}"></div>
</div>
<div class="form-group">
<p>By clicking Register, you agree to our <a href="#">Terms of Use</a> and that you have read our <a href="#">Privacy Policy</a>.</p>
</div>
<div class="form-group">
<button type="submit" id="btn-register" class="btn btn-primary btn-block">Register</button>
</div>
</form>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<hr />
<p class="text-center">Have already an account?</p>
<a href="{{ url('/auth/login') }}" type="submit" id="btn-login" class="btn btn-success btn-block">Login here</a>
</div>
</div>
</div>
</div>
<div class="form-group">
<label>First name</label>
<input type="text" class="form-control" name="firstname" placeholder="First name">
</div>
</div>
<div class="form-group">
<label>Last name</label>
<input type="text" class="form-control" name="lastname" placeholder="Last name">
</div>
<div class="form-group">
<label>Email Address</label>
<input type="email" class="form-control" name="email" value="{{ old('email') }}" placeholder="you@example.com">
</div>
<div class="form-group">
<label>Phone Number</label>
<input type="text" class="form-control" name="mobilenumber" placeholder="Phone Number">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" name="password" id="password" required placeholder="Password">
</div>
<div class="form-group">
<label>Confirm Password</label>
<input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password" data-rule-equalTo="#password" required>
</div>
<div class="auth-section-title">Address Information</div>
<div class="form-group">
<label>Select Country</label>
<select name="countryCode" id="select_country" class="form-control" onchange="selectCountry(this)">
<option value="">Select Country</option>
<option value="US">United States</option>
<option value="CA">Canada</option>
</select>
</div>
<div class="form-group">
<label>State / Province</label>
<select class="form-control" name="state" id="lst-states">
<option value="">Select State</option>
</select>
</div>
<div class="form-group">
<label>City</label>
<select class="form-control" name="city" id="lst-cities">
<option value="">Select City</option>
</select>
</div>
<div class="form-group">
<label>Address 1</label>
<input type="text" class="form-control" name="address" placeholder="Address 1">
</div>
<div class="form-group">
<label>Address 2</label>
<input type="text" class="form-control" name="address2" placeholder="Address 2">
</div>
<div class="form-group">
<label>Zip Code</label>
<input type="text" class="form-control" name="zipcode" placeholder="Please enter your zip code">
</div>
<div class="form-group">
<div class="g-recaptcha text-center" data-sitekey="{{ env('CAPTCHA_SITE_KEY') }}"></div>
</div>
<p class="auth-terms">By clicking Register, you agree to our <a href="#">Terms of Use</a> and that you have read our <a href="#">Privacy Policy</a>.</p>
<div class="form-group">
<button type="submit" id="btn-register" class="btn-register-modern">Register</button>
</div>
</form>
<p class="auth-footer">Already have an account? <a href="{{ url('/auth/login') }}">Sign in</a></p>
</div>
</div>
@endsection

View File

@@ -3,60 +3,158 @@
@section('content')
<style>
.error{
color: red;
body {
background: #ffffff;
margin: 0;
}
.form-wrapper{
margin-top: 20%;
.navbar-custom {
margin-bottom: 0;
}
.auth-wrapper {
min-height: calc(100vh - 100px);
min-height: calc(100dvh - 100px);
display: flex;
align-items: center;
justify-content: center;
padding: 24px 16px;
box-sizing: border-box;
}
.auth-card {
width: 100%;
max-width: 380px;
background: #ffffff;
border: 1px solid #eceff3;
border-radius: 12px;
padding: 28px;
}
.auth-title {
font-size: 24px;
font-weight: 600;
line-height: 1.2;
margin: 0 0 8px;
color: #111827;
}
.auth-subtitle {
font-size: 14px;
margin: 0 0 20px;
color: #6b7280;
}
.auth-card .form-group {
margin-bottom: 14px;
}
.auth-card label {
display: block;
font-size: 13px;
font-weight: 500;
margin-bottom: 6px;
color: #374151;
}
.auth-card .form-control {
height: 42px;
border-radius: 8px;
border: 1px solid #d1d5db;
background: #ffffff;
font-size: 14px;
padding: 0 12px;
box-shadow: none;
transition: border-color 0.2s, box-shadow 0.2s;
}
.auth-card .form-control:focus {
border-color: #9ca3af;
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
outline: none;
}
.btn-auth {
width: 100%;
height: 44px;
border: 0;
border-radius: 8px;
background: #111827;
color: #ffffff;
font-size: 14px;
font-weight: 600;
transition: opacity 0.2s;
}
.btn-auth:hover {
opacity: 0.92;
color: #ffffff;
}
.auth-footer {
margin-top: 16px;
text-align: center;
font-size: 13px;
color: #6b7280;
}
.auth-footer a {
color: #111827;
text-decoration: none;
font-weight: 500;
}
.auth-footer a:hover {
text-decoration: underline;
}
.auth-card .alert {
border-radius: 8px;
font-size: 13px;
}
.auth-card .alert ul {
padding-left: 18px;
margin-bottom: 0;
}
</style>
<div class="container">
<div class="col-md-4 col-md-offset-4">
<div class="form-wrapper">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="text-center">R E S E T &nbsp; P A S S W O R D</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-xs-12">
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form role="form" method="POST" action="{{ url('/password/reset') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="token" value="{{ $token }}">
<div class="form-group">
<label class="control-label">Email Address</label>
<input type="email" class="form-control" name="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="example@gmail.com">
<span class="help-block"></span>
</div>
<div class="form-group">
<label class="control-label">Password</label>
<input type="password" class="form-control" name="password" placeholder="Password">
<span class="help-block"></span>
</div>
<div class="form-group">
<label class="control-label">Confirm Password</label>
<input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password">
<span class="help-block"></span>
</div>
<button type="submit" class="btn btn-default btn-block">Reset Password</button>
</form>
<br><br>
</div>
</div>
</div>
<div class="auth-wrapper">
<div class="auth-card">
<h1 class="auth-title">Reset password</h1>
<p class="auth-subtitle">Set a new password for your account.</p>
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
</div>
@endif
<form role="form" method="POST" action="{{ url('/password/reset') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="token" value="{{ $token }}">
<div class="form-group">
<label for="email">Email Address</label>
<input type="email" class="form-control" name="email" id="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="you@example.com">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password" id="password" placeholder="New password">
</div>
<div class="form-group">
<label for="password_confirmation">Confirm Password</label>
<input type="password" class="form-control" name="password_confirmation" id="password_confirmation" placeholder="Confirm password">
</div>
<button type="submit" class="btn-auth">Reset password</button>
</form>
<p class="auth-footer"><a href="{{ url('/auth/login') }}">Back to sign in</a></p>
</div>
</div>
@endsection

View File

@@ -0,0 +1,91 @@
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>404 | Page Not Found</title>
<style>
body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background: #f4f6f8;
color: #334155;
display: table;
font-family: Arial, sans-serif;
}
.container {
text-align: center;
display: table-cell;
vertical-align: middle;
padding: 24px;
}
.content {
text-align: center;
display: inline-block;
background: #ffffff;
padding: 32px 28px;
border-radius: 10px;
border: 1px solid #e5e7eb;
max-width: 560px;
}
.code {
font-size: 52px;
font-weight: 700;
line-height: 1;
color: #111827;
margin-bottom: 14px;
}
.title {
font-size: 24px;
font-weight: 700;
color: #111827;
margin-bottom: 10px;
}
.message {
font-size: 15px;
line-height: 1.6;
margin-bottom: 22px;
}
.actions a {
display: inline-block;
padding: 10px 16px;
margin: 0 6px 8px;
text-decoration: none;
border-radius: 6px;
font-size: 14px;
font-weight: 700;
}
.btn-primary {
background: #111827;
color: #ffffff;
}
.btn-secondary {
background: #ffffff;
color: #111827;
border: 1px solid #d1d5db;
}
</style>
</head>
<body>
<div class="container">
<div class="content">
<div class="code">404</div>
<div class="title">Page Not Found</div>
<div class="message">The page you are looking for does not exist or may have been moved.</div>
<div class="actions">
<a href="{{ url('/') }}" class="btn-primary">Go to Home</a>
<a href="{{ url('teamstore') }}" class="btn-secondary">Browse Team Stores</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -21,24 +21,22 @@
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right navbar-nav-custom">
@if (Request::segment(2) == "hi-five-sports-club" || Request::segment(2) == "hi-five-sports-zone")
<li style="font-size: 14px;"></li>
<li class="nav-item-main"></li>
@else
<li style="font-size: 14px;">
<a href="{{ url('teamstore') }}"><span style="text-transform:uppercase;">Team Store</span></a>
<li class="nav-item-main">
<a href="{{ url('teamstore') }}" class="nav-link-main"><span>Team Store</span></a>
</li>
@endif
<li style="font-size: 14px;">
<a href="{{ url('cart') }}"><span style="text-transform:uppercase;">My Cart</span> <i class="fa fa-shopping-cart"></i>
<li class="nav-item-main">
<a href="{{ url('cart') }}" class="nav-link-main"><span>My Cart</span> <i class="fa fa-shopping-cart"></i>
<span class="badge" id="my-cart-count">{{ \App\Http\Controllers\MainController::getCountCart() }}</span>
</a>
</li>
<li>
<a href="#" class="dropdown-toggle user-profile" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-bars" style="font-size: 21px;"></i></a>
<ul class="dropdown-menu">
<a href="#" class="dropdown-toggle user-profile nav-menu-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-bars"></i></a>
<ul class="dropdown-menu navbar-menu-dropdown">
@if (Auth::guest())
@if(Request::segment(1) == "designer")
@@ -88,6 +86,155 @@
</nav>
<style>
.navbar-custom {
min-height: 78px;
background: #ffffff;
border: 0;
border-bottom: 1px solid #e5e7eb;
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.08);
margin-bottom: 18px;
}
.navbar-custom .container {
position: relative;
}
.navbar-brand {
height: 78px;
padding: 10px 0;
}
.navbar-brand>img {
height: 58px;
padding: 0;
width: auto;
}
.navbar-nav-custom > li > a.nav-link-main {
color: #1f2937 !important;
font-size: 13px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.45px;
border-radius: 8px;
padding: 8px 12px;
margin-top: 0;
transition: background-color 0.2s, color 0.2s;
}
.navbar-nav-custom > li > a.nav-link-main:hover,
.navbar-nav-custom > li > a.nav-link-main:focus {
color: #111827 !important;
background: #f3f4f6 !important;
}
.nav-menu-toggle {
margin-top: 0 !important;
border: 1px solid #d1d5db;
border-radius: 8px;
width: 42px;
height: 42px;
display: flex !important;
align-items: center;
justify-content: center;
color: #374151 !important;
transition: background-color 0.2s, border-color 0.2s;
}
.nav-menu-toggle:hover,
.nav-menu-toggle:focus {
background: #f3f4f6 !important;
border-color: #9ca3af;
}
.nav-menu-toggle i {
font-size: 18px;
}
.navbar-menu-dropdown {
margin-top: 8px;
border: 1px solid #e5e7eb;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 10px 24px rgba(15, 23, 42, 0.14);
}
.navbar-menu-dropdown > li > a {
padding: 10px 14px;
font-size: 13px;
}
.navbar-menu-dropdown > li > a:hover {
background: #f8fafc;
color: #111827;
}
.navbar-menu-dropdown .dropdown-header {
font-size: 12px;
font-weight: 700;
color: #334155;
padding: 10px 14px;
}
.badge {
font-size: 11px;
min-width: 24px;
height: 24px;
line-height: 24px;
border-radius: 999px;
background: #16a34a;
padding: 0 7px;
margin-left: 6px;
vertical-align: middle;
}
.navbar-toggle {
margin-top: 22px;
border: 1px solid #d1d5db;
}
.navbar-toggle .icon-bar {
background: #374151 !important;
}
@media (min-width: 768px) {
.navbar-nav-custom {
min-height: 78px;
display: flex;
align-items: center;
margin: 0;
}
.navbar-nav-custom > li {
float: none;
}
}
@media (max-width: 768px){
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
margin-top: 12px;
border-top: 1px solid #e5e7eb;
background: #ffffff;
border-radius: 10px;
padding: 8px;
}
.navbar-nav-custom > li > a.nav-link-main {
margin-top: 0;
}
.nav-menu-toggle {
margin-top: 0 !important;
}
}
@media (min-width: 768px){
.navbar-default .navbar-nav>li>a {
margin-top: 0;
}
}
#nav{
list-style:none;
margin-bottom:10px;
@@ -143,41 +290,8 @@
background:#3d4248;
}
.navbar-brand {
padding: 0px; /* firefox bug fix */
}
.navbar-brand>img {
height: 200%;
padding: 15px; /* firefox bug fix */
width: auto;
}
.navbar-custom{
min-height: 100px;
}
@media (max-width: 768px){
.navbar-default .navbar-collapse, .navbar-default .navbar-form{
margin-top: 50px;
}
}
@media (min-width: 768px){
.navbar-default .navbar-nav>li>a{
margin-top: 23px;
}
}
.badge{
font-size: 14px;
width:35px;
border-radius: 0px;
}
.navbar-default .navbar-nav>li>a:hover {
background-color: #777;
background-color: #f3f4f6;
}
.modal {
@@ -198,6 +312,158 @@
text-align: left;
vertical-align: middle;
}
#about_us_modal .modal-content {
border: 0;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 14px 34px rgba(0, 0, 0, 0.22);
}
#about_us_modal .modal-header {
background: #f8fafc;
border-bottom: 1px solid #e5e7eb;
padding: 16px 20px;
}
#about_us_modal .modal-title {
font-size: 20px;
font-weight: 700;
color: #111827;
}
.about-us-content {
color: #334155;
font-size: 14px;
line-height: 1.7;
}
.about-us-intro {
margin: 0 0 14px;
color: #475569;
}
.about-us-block {
border: 1px solid #e5e7eb;
border-radius: 10px;
padding: 14px;
margin-bottom: 12px;
background: #ffffff;
}
.about-us-block h5 {
margin: 0 0 8px;
font-size: 14px;
font-weight: 700;
color: #111827;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.about-us-block p {
margin: 0;
}
.about-us-list {
margin: 0;
padding-left: 18px;
}
.about-us-list li {
margin-bottom: 6px;
}
#about_us_modal .modal-footer {
border-top: 1px solid #e5e7eb;
background: #f8fafc;
padding: 12px 20px;
}
@media (max-width: 767px) {
.about-us-block {
padding: 12px;
}
}
#contact_us_modal .modal-content {
border: 0;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 14px 34px rgba(0, 0, 0, 0.22);
}
#contact_us_modal .modal-header {
background: #f8fafc;
border-bottom: 1px solid #e5e7eb;
padding: 16px 20px;
}
#contact_us_modal .modal-title {
font-size: 20px;
font-weight: 700;
color: #111827;
}
#contact_us_modal .modal-body {
padding: 20px;
}
.contact-modal-subtitle {
margin: 0 0 16px;
font-size: 14px;
color: #6b7280;
}
.contact-card {
border: 1px solid #e5e7eb;
border-radius: 10px;
padding: 14px;
background: #fff;
min-height: 140px;
}
.contact-card-title {
margin: 0 0 10px;
font-size: 13px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.4px;
color: #6b7280;
}
.contact-card-value {
margin: 0;
font-size: 15px;
line-height: 1.6;
color: #111827;
word-break: break-word;
}
.contact-card-value a {
color: #1d4ed8;
text-decoration: none;
}
.contact-card-value a:hover {
text-decoration: underline;
}
#contact_us_modal .modal-footer {
border-top: 1px solid #e5e7eb;
background: #f8fafc;
padding: 12px 20px;
}
@media (max-width: 767px) {
#contact_us_modal .modal-body {
padding: 16px;
}
.contact-card {
min-height: 0;
margin-bottom: 12px;
}
}
</style>
<!-- Privacy Modal -->
@@ -248,7 +514,31 @@
<h4 class="modal-title">About Us</h4>
</div>
<div class="modal-body">
<p>Coming soon.</p>
<div class="about-us-content">
<p class="about-us-intro">Crew Sportswear helps teams, schools, and organizations bring their identity to life through high-quality custom apparel and team store experiences.</p>
<div class="about-us-block">
<h5>Who We Are</h5>
<p>We are a team focused on custom uniforms, spirit wear, and branded gear built for athletes, students, and supporters. Our goal is to make ordering team apparel simple, consistent, and reliable.</p>
</div>
<div class="about-us-block">
<h5>What We Do</h5>
<ul class="about-us-list">
<li>Custom team uniforms and apparel across multiple sports</li>
<li>Print-on-demand production for flexible ordering and fulfillment</li>
<li>Design-your-own apparel with our online designer tool</li>
<li>Private or public online team stores for easy ordering</li>
<li>Batch and individual order workflows depending on program needs</li>
<li>Support for team branding, sizing, and product selection</li>
</ul>
</div>
<div class="about-us-block">
<h5>Our Commitment</h5>
<p>Were committed to clear communication, dependable production quality, and a smooth customer experience from store launch through fulfillment.</p>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
@@ -266,15 +556,28 @@
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Contact Us</h4>
</div>
<div class="modal-body text-center">
<h1>Contact Us</h1>
<hr>
<h3>Email Address: <small><a href="#">customer-service@crewsportswear.com</a></small></h3>
<h3>Address: <small><a href="#">1281 Humbracht Circle
Suite J
Bartlett, Illinois
60103</a></small>
</h3>
<div class="modal-body">
<p class="contact-modal-subtitle">Were here to help. Reach out through any of the contact options below.</p>
<div class="row">
<div class="col-sm-6">
<div class="contact-card">
<h5 class="contact-card-title">Email Address</h5>
<p class="contact-card-value">
<a href="mailto:customer-service@crewsportswear.com">customer-service@crewsportswear.com</a>
</p>
</div>
</div>
<div class="col-sm-6">
<div class="contact-card">
<h5 class="contact-card-title">Address</h5>
<p class="contact-card-value">
1281 Humbracht Circle<br>
Suite J<br>
Bartlett, Illinois 60103
</p>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

View File

@@ -1,96 +1,171 @@
<div>
<div>Privacy Policy</div>
<br />
<div>Your privacy is important to us. It is Crew Sportswear's policy to respect your privacy regarding any information we may collect from you across our website, http://crewsportswear.com, and other sites we own and operate.</div>
<br />
<div>1. Information we collect</div>
<br />
<div>Log data</div>
<br />
<div>When you visit our website, our servers may automatically log the standard data provided by your web browser. It may include your computer&rsquo;s Internet Protocol (IP) address, your browser type and version, the pages you visit, the time and date of your visit, the time spent on each page, and other details.</div>
<br /><br />
<div>Personal information</div>
<br />
<div>We may ask for personal information, such as your:</div>
<br /><br />
<div>NameEmailSocial media profilesDate of birthPhone/mobile numberHome/Mailing addressWork addressPayment information</div>
<br />
<div>2. Legal bases for processing</div>
<br />
<div>We will process your personal information lawfully, fairly and in a transparent manner. We collect and process information about you only where we have legal bases for doing so.</div>
<div>&nbsp;</div>
<div>These legal bases depend on the services you use and how you use them, meaning we collect and use your information only where:</div>
<div>&nbsp;</div>
<br />
<div>&nbsp;&nbsp;&nbsp;&nbsp;it&rsquo;s necessary for the performance of a contract to which you are a party or to take steps at your request before entering into such a contract (for example, when we provide a service you request from us);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;it satisfies a legitimate interest (which is not overridden by your data protection interests), such as for research and development, to market and promote our services, and to protect our legal rights and interests;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;you give us consent to do so for a specific purpose (for example, you might consent to us sending you our newsletter); or</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;we need to process your data to comply with a legal obligation.</div>
<br />
<div>&nbsp;</div>
<div>Where you consent to our use of information about you for a specific purpose, you have the right to change your mind at any time (but this will not affect any processing that has already taken place).</div>
<div>&nbsp;</div>
<div>We don&rsquo;t keep personal information for longer than is necessary. While we retain this information, we will protect it within commercially acceptable means to prevent loss and theft, as well as unauthorised access, disclosure, copying, use or modification. That said, we advise that no method of electronic transmission or storage is 100% secure and cannot guarantee absolute data security. If necessary, we may retain your personal information for our compliance with a legal obligation or in order to protect your vital interests or the vital interests of another natural person.</div>
<br />
<div>3. Collection and use of information</div>
<br />
<div>We may collect, hold, use and disclose information for the following purposes and personal information will not be further processed in a manner that is incompatible with these purposes:</div>
<br /><br />
<div>to enable you to customise or personalise your experience of our website;to enable you to access and use our website, associated applications and associated social media platforms;to contact and communicate with you;for internal record keeping and administrative purposes;for analytics, market research and business development, including to operate and improve our website, associated applications and associated social media platforms;to run competitions and/or offer additional benefits to you;for advertising and marketing, including to send you promotional information about our products and services and information about third parties that we consider may be of interest to you; andto comply with our legal obligations and resolve any disputes that we may have.</div>
<br />
<div>4. Disclosure of personal information to third parties</div>
<br />
<div>We may disclose personal information to:</div>
<br /><br />
<div>third party service providers for the purpose of enabling them to provide their services, including (without limitation) IT service providers, data storage, hosting and server providers, ad networks, analytics, error loggers, debt collectors, maintenance or problem-solving providers, marketing or advertising providers, professional advisors and payment systems operators;our employees, contractors and/or related entities; andcredit reporting agencies, courts, tribunals and regulatory authorities, in the event you fail to pay for goods or services we have provided to you.</div>
<br />
<div>5. International transfers of personal information</div>
<br />
<div>The personal information we collect is stored and processed in United States, or where we or our partners, affiliates and third-party providers maintain facilities. By providing us with your personal information, you consent to the disclosure to these overseas third parties.</div>
<br />
<div>We will ensure that any transfer of personal information from countries in the European Economic Area (EEA) to countries outside the EEA will be protected by appropriate safeguards, for example by using standard data protection clauses approved by the European Commission, or the use of binding corporate rules or other legally accepted means.</div>
<br />
<div>Where we transfer personal information from a non-EEA country to another country, you acknowledge that third parties in other jurisdictions may not be subject to similar data protection laws to the ones in our jurisdiction. There are risks if any such third party engages in any act or practice that would contravene the data privacy laws in our jurisdiction and this might mean that you will not be able to seek redress under our jurisdiction&rsquo;s privacy laws.</div>
<br />
<div>6. Your rights and controlling your personal information</div>
<br />
<div>Choice and consent: By providing personal information to us, you consent to us collecting, holding, using and disclosing your personal information in accordance with this privacy policy. If you are under 16 years of age, you must have, and warrant to the extent permitted by law to us, that you have your parent or legal guardian&rsquo;s permission to access and use the website and they (your parents or guardian) have consented to you providing us with your personal information. You do not have to provide personal information to us, however, if you do not, it may affect your use of this website or the products and/or services offered on or through it.</div>
<br />
<div>Information from third parties: If we receive personal information about you from a third party, we will protect it as set out in this privacy policy. If you are a third party providing personal information about somebody else, you represent and warrant that you have such person&rsquo;s consent to provide the personal information to us.</div>
<br />
<div>Restrict: You may choose to restrict the collection or use of your personal information. If you have previously agreed to us using your personal information for direct marketing purposes, you may change your mind at any time by contacting us using the details below. If you ask us to restrict or limit how we process your personal information, we will let you know how the restriction affects your use of our website or products and services.</div>
<br />
<div>Access and data portability: You may request details of the personal information that we hold about you. You may request a copy of the personal information we hold about you. Where possible, we will provide this information in CSV format or other easily readable machine format. You may request that we erase the personal information we hold about you at any time. You may also request that we transfer this personal information to another third party.</div>
<br />
<div>Correction: If you believe that any information we hold about you is inaccurate, out of date, incomplete, irrelevant or misleading, please contact us using the details below. We will take reasonable steps to correct any information found to be inaccurate, incomplete, misleading or out of date.</div>
<br />
<div>Notification of data breaches: We will comply laws applicable to us in respect of any data breach.</div>
<br />
<div>Complaints: If you believe that we have breached a relevant data protection law and wish to make a complaint, please contact us using the details below and provide us with full details of the alleged breach. We will promptly investigate your complaint and respond to you, in writing, setting out the outcome of our investigation and the steps we will take to deal with your complaint. You also have the right to contact a regulatory body or data protection authority in relation to your complaint.</div>
<br />
<div>Unsubscribe: To unsubscribe from our e-mail database or opt-out of communications (including marketing communications), please contact us using the details below or opt-out using the opt-out facilities provided in the communication.</div>
<br />
<div>7. Cookies</div>
<br />
<div>We use &ldquo;cookies&rdquo; to collect information about you and your activity across our site. A cookie is a small piece of data that our website stores on your computer, and accesses each time you visit, so we can understand how you use our site. This helps us serve you content based on preferences you have specified. Please refer to our Cookie Policy for more information.</div>
<br />
<div>8. Business transfers</div>
<br />
<div>If we or our assets are acquired, or in the unlikely event that we go out of business or enter bankruptcy, we would include data among the assets transferred to any parties who acquire us. You acknowledge that such transfers may occur, and that any parties who acquire us may continue to use your personal information according to this policy.</div>
<br />
<div>9. Limits of our policy</div>
<br />
<div>Our website may link to external sites that are not operated by us. Please be aware that we have no control over the content and policies of those sites, and cannot accept responsibility or liability for their respective privacy practices.</div>
<br />
<div>10. Changes to this policy</div>
<br />
<div>At our discretion, we may change our privacy policy to reflect current acceptable practices. We will take reasonable steps to let users know about changes via our website. Your continued use of this site after any changes to this policy will be regarded as acceptance of our practices around privacy and personal information.</div>
<br />
<div>If we make a significant change to this privacy policy, for example changing a lawful basis on which we process your personal information, we will ask you to re-consent to the amended privacy policy.</div>
<br /><br />
<div>Crew Sportswear Data Controller</div>
<div>Angelo Garcia</div>
<div>angelo@crewsportswear.com</div>
<br /><br /><br />
<div>This policy is effective as of 23 February 2019.</div>
<style>
.privacy-policy {
color: #334155;
font-size: 14px;
line-height: 1.7;
}
.privacy-title {
margin: 0 0 6px;
font-size: 26px;
font-weight: 700;
color: #111827;
}
.privacy-intro {
margin: 0 0 18px;
color: #64748b;
}
.privacy-section {
background: #ffffff;
border: 1px solid #e5e7eb;
border-radius: 10px;
padding: 14px 16px;
margin-bottom: 12px;
}
.privacy-section h5 {
margin: 0 0 8px;
font-size: 15px;
font-weight: 700;
color: #111827;
}
.privacy-section p {
margin: 0 0 10px;
}
.privacy-section p:last-child {
margin-bottom: 0;
}
.privacy-section ul {
margin: 0 0 10px 18px;
padding: 0;
}
.privacy-section li {
margin-bottom: 5px;
}
.privacy-footnote {
margin-top: 12px;
border-top: 1px solid #e5e7eb;
padding-top: 12px;
font-size: 13px;
color: #6b7280;
}
.privacy-contact {
background: #f8fafc;
}
</style>
<div class="privacy-policy">
<h3 class="privacy-title">Privacy Policy</h3>
<p class="privacy-intro">Your privacy is important to us. It is Crew Sportswear's policy to respect your privacy regarding any information we may collect from you across our website, http://crewsportswear.com, and other sites we own and operate.</p>
<div class="privacy-section">
<h5>1. Information we collect</h5>
<p><strong>Log data:</strong> When you visit our website, our servers may automatically log the standard data provided by your web browser. It may include your computers Internet Protocol (IP) address, your browser type and version, the pages you visit, the time and date of your visit, the time spent on each page, and other details.</p>
<p><strong>Personal information:</strong> We may ask for personal information, such as your:</p>
<ul>
<li>Name</li>
<li>Email</li>
<li>Social media profiles</li>
<li>Date of birth</li>
<li>Phone/mobile number</li>
<li>Home/Mailing address</li>
<li>Work address</li>
<li>Payment information</li>
</ul>
</div>
<div class="privacy-section">
<h5>2. Legal bases for processing</h5>
<p>We will process your personal information lawfully, fairly and in a transparent manner. We collect and process information about you only where we have legal bases for doing so.</p>
<p>These legal bases depend on the services you use and how you use them, meaning we collect and use your information only where:</p>
<ul>
<li>its necessary for the performance of a contract to which you are a party or to take steps at your request before entering into such a contract;</li>
<li>it satisfies a legitimate interest (which is not overridden by your data protection interests), such as research and development, marketing and legal protection;</li>
<li>you give us consent to do so for a specific purpose; or</li>
<li>we need to process your data to comply with a legal obligation.</li>
</ul>
<p>Where you consent to our use of information about you for a specific purpose, you have the right to change your mind at any time (but this will not affect any processing that has already taken place).</p>
<p>We dont keep personal information for longer than is necessary. While we retain this information, we will protect it within commercially acceptable means to prevent loss and theft, as well as unauthorised access, disclosure, copying, use or modification. That said, we advise that no method of electronic transmission or storage is 100% secure and cannot guarantee absolute data security.</p>
</div>
<div class="privacy-section">
<h5>3. Collection and use of information</h5>
<p>We may collect, hold, use and disclose information for the following purposes and personal information will not be further processed in a manner that is incompatible with these purposes:</p>
<ul>
<li>to enable you to customise or personalise your experience of our website;</li>
<li>to enable you to access and use our website, associated applications and associated social media platforms;</li>
<li>to contact and communicate with you;</li>
<li>for internal record keeping and administrative purposes;</li>
<li>for analytics, market research and business development;</li>
<li>to run competitions and/or offer additional benefits;</li>
<li>for advertising and marketing communications; and</li>
<li>to comply with legal obligations and resolve disputes.</li>
</ul>
</div>
<div class="privacy-section">
<h5>4. Disclosure of personal information to third parties</h5>
<p>We may disclose personal information to:</p>
<ul>
<li>third party service providers (including IT, hosting, analytics, marketing, advisors, and payment providers);</li>
<li>our employees, contractors and/or related entities; and</li>
<li>credit reporting agencies, courts, tribunals and regulatory authorities where required.</li>
</ul>
</div>
<div class="privacy-section">
<h5>5. International transfers of personal information</h5>
<p>The personal information we collect is stored and processed in United States, or where we or our partners, affiliates and third-party providers maintain facilities. By providing us with your personal information, you consent to disclosure to these overseas third parties.</p>
<p>We will ensure that any transfer of personal information from countries in the European Economic Area (EEA) to countries outside the EEA is protected by appropriate safeguards.</p>
<p>Where we transfer personal information from a non-EEA country to another country, you acknowledge that third parties in other jurisdictions may not be subject to similar data protection laws.</p>
</div>
<div class="privacy-section">
<h5>6. Your rights and controlling your personal information</h5>
<p><strong>Choice and consent:</strong> By providing personal information to us, you consent to us collecting, holding, using and disclosing your personal information in accordance with this privacy policy.</p>
<p><strong>Information from third parties:</strong> If we receive personal information about you from a third party, we will protect it as set out in this privacy policy.</p>
<p><strong>Restrict:</strong> You may choose to restrict the collection or use of your personal information.</p>
<p><strong>Access and data portability:</strong> You may request details or a copy of the personal information we hold about you, and request transfer to another third party where possible.</p>
<p><strong>Correction:</strong> If you believe any information we hold is inaccurate or out of date, please contact us so we can correct it.</p>
<p><strong>Notification of data breaches:</strong> We will comply with laws applicable to us in respect of any data breach.</p>
<p><strong>Complaints:</strong> If you believe we have breached a relevant data protection law, please contact us with full details and we will promptly investigate.</p>
<p><strong>Unsubscribe:</strong> To unsubscribe from communications, contact us using the details below or use opt-out facilities provided in communications.</p>
</div>
<div class="privacy-section">
<h5>7. Cookies</h5>
<p>We use “cookies” to collect information about you and your activity across our site. A cookie is a small piece of data that our website stores on your computer and accesses each time you visit. Please refer to our Cookie Policy for more information.</p>
</div>
<div class="privacy-section">
<h5>8. Business transfers</h5>
<p>If we or our assets are acquired, or if we go out of business or enter bankruptcy, data may be transferred to parties who acquire us. Any acquiring parties may continue to use your personal information according to this policy.</p>
</div>
<div class="privacy-section">
<h5>9. Limits of our policy</h5>
<p>Our website may link to external sites that are not operated by us. We have no control over the content and policies of those sites and cannot accept responsibility or liability for their respective privacy practices.</p>
</div>
<div class="privacy-section">
<h5>10. Changes to this policy</h5>
<p>At our discretion, we may change our privacy policy to reflect current acceptable practices. We will take reasonable steps to let users know about changes via our website. Your continued use of this site after changes to this policy will be regarded as acceptance of our practices around privacy and personal information.</p>
<p>If we make a significant change to this privacy policy, such as changing a lawful basis on which we process your personal information, we will ask you to re-consent to the amended privacy policy.</p>
</div>
<div class="privacy-section privacy-contact">
<h5>Crew Sportswear Data Controller</h5>
<p>Angelo Garcia</p>
<p><a href="mailto:angelo@crewsportswear.com">angelo@crewsportswear.com</a></p>
</div>
<p class="privacy-footnote">This policy is effective as of 23 February 2019.</p>
</div>

View File

@@ -2,15 +2,223 @@
@section('content')
<style>
body {
background: #f4f6f8;
}
.cart-breadcrumb .breadcrumb {
background: #ffffff;
border: 1px solid #e5e7eb;
border-radius: 10px;
margin-bottom: 14px;
}
.cart-title {
font-size: 24px;
font-weight: 700;
color: #111827;
margin: 0;
}
.cart-title-row hr {
border-color: #e5e7eb;
margin-top: 12px;
margin-bottom: 16px;
}
.cart-card {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 14px;
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
margin-bottom: 12px;
}
.cart-card h3,
.cart-card h4,
.cart-card h5 {
color: #111827;
}
.summary-line {
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
margin-bottom: 8px;
}
.summary-line .summary-label {
font-weight: 700;
color: #111827;
}
.summary-line .summary-value {
text-align: right;
color: #374151;
font-weight: 600;
white-space: nowrap;
}
.summary-total {
margin-top: 2px;
}
.summary-total .summary-label {
font-size: 20px;
}
.summary-total .summary-value {
font-size: 22px;
color: #111827;
}
.summary-total-currency {
font-size: 14px;
color: #6b7280;
font-weight: 600;
margin-left: 4px;
}
.order-summary {
position: sticky;
top: 18px;
}
.cart-summary-title {
margin: 0;
font-size: 20px;
font-weight: 700;
}
.cart-store-head img {
border-radius: 6px;
margin-right: 6px;
}
.cart-item-block + .cart-item-block {
margin-top: 10px;
}
.cart-items-shell {
padding: 0;
}
.cart-items-shell .cart-store-head {
padding: 14px;
border-bottom: 1px solid #e5e7eb;
background: #f8fafc;
border-radius: 12px 12px 0 0;
}
.cart-items-shell .cart-store-head h4 {
margin: 0;
}
.cart-items-shell .cart-item-block {
margin: 0;
border: 0;
border-bottom: 1px solid #e5e7eb;
border-radius: 0;
box-shadow: none;
}
.cart-items-shell .cart-item-block:last-child {
border-bottom: 0;
border-radius: 0 0 12px 12px;
}
.cart-item-title {
margin-top: 0;
margin-bottom: 8px;
font-size: 18px;
}
.cart-item-title a {
color: #1f2937;
text-decoration: none;
}
.cart-item-title a:hover {
color: #0f172a;
text-decoration: underline;
}
.cart-meta {
color: #6b7280;
font-size: 13px;
margin-bottom: 10px;
}
.cart-table-wrap .table {
margin-bottom: 0;
}
.cart-table-wrap .table > thead > tr > th {
border-bottom: 1px solid #e5e7eb;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.3px;
color: #64748b;
}
.cart-table-wrap .table > tbody > tr > td {
border-top: 1px solid #f1f5f9;
vertical-align: middle;
font-size: 13px;
}
.cart-remove-btn {
color: #ef4444;
}
.cart-remove-btn:hover {
color: #b91c1c;
}
.voucher-row .btn {
border-radius: 6px;
}
.checkout-btn {
background-color: #ffc300;
border-color: #e2ad00;
text-align: -webkit-center;
border-radius: 8px;
}
.checkout-btn:hover {
background-color: #ffcf33;
border-color: #d39b00;
}
.continue-btn {
border-radius: 8px;
}
.empty-cart {
color: #94a3b8;
text-align: center;
margin: 40px 0;
font-weight: 600;
}
.previewImage{
height: 150px;
width: 95%;
overflow:hidden;
object-fit: contain;
}
@media (max-width: 991px) {
.order-summary {
position: static;
}
}
</style>
<div class="row">
<div class="row cart-breadcrumb">
<div class="col-md-12">
<ol class="breadcrumb">
@if(isset($store_array[0]->StoreUrl))
@@ -23,9 +231,9 @@
</div>
</div>
<div class="row">
<div class="row cart-title-row">
<div class="col-md-12">
<h2 style="font-size: 20px; font-weight: bold;">MY CART</h2>
<h2 class="cart-title">My Cart</h2>
@if(Session::has('cartkeyError'))
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
@@ -37,11 +245,11 @@
</div>
</div>
@if(count($row) > 0)
@if(collect($row)->count() > 0)
<div class="row">
<div class="col-md-4 col-md-push-8 order-summary" >
<div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;">
<div class="cart-card">
@if(Session::has('msg'))
<div class="alert alert-warning alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
@@ -49,46 +257,45 @@
{!! Session::get('msg') !!}
</div>
@endif
<h3>Order Summary</h3>
</div>
@if (!Auth::guest())
<div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;">
<h3 class="cart-summary-title">Order Summary</h3>
@if (!Auth::guest())
<hr>
<p><strong>Ship to:</strong></p>
@if ($address_book === null)
<a href="{{ url('user/address-book/create') }}">[ Add ]</a>
<a href="{{ url('user/address-book/create') }}">[ Add ]</a>
@else
<div>{{ $address_book[0]->Fullname }}</div>
<div>{{ $address_book[0]->ContactNumber }}</div>
<div>
{{ $address_book[0]->Address . ' ' . $address_book[0]->Address2 . ', ' . $address_book[0]->State . ', ' . $address_book[0]->City . ', ' . $address_book[0]->Country . ', ' . $address_book[0]->CountryCode . ' ' . $address_book[0]->ZipCode }}
<a href="{{ url('user/address-book/edit/'.$address_book[0]->Id) }}">[ Edit ]</a>
</div>
<div>{{ $address_book[0]->Fullname }}</div>
<div>{{ $address_book[0]->ContactNumber }}</div>
<div>
{{ $address_book[0]->Address . ' ' . $address_book[0]->Address2 . ', ' . $address_book[0]->State . ', ' . $address_book[0]->City . ', ' . $address_book[0]->Country . ', ' . $address_book[0]->CountryCode . ' ' . $address_book[0]->ZipCode }}
<a href="{{ url('user/address-book/edit/'.$address_book[0]->Id) }}">[ Edit ]</a>
</div>
@endif
@endif
</div>
@endif
<div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;">
<hr>
{{-- <h3>Subtotal: <span id="my_subtotal">{{ round($getSubtotal, 2) }}</span> <small>{{ $store_array[0]->StoreCurrency }}</small></h3> --}}
<h5><strong>Subtotal:</strong>
<span>{{ number_format($tax['order_grandtotal'], 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
</h5>
<h5><strong>Shipping Fee:</strong>
<span>{{ number_format($shipping_fee, 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
</h5>
<h5> <strong>Tax:</strong>
<span>{{ number_format($tax['tax'], 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
</h5>
<div class="summary-line">
<span class="summary-label">Subtotal:</span>
<span class="summary-value">{{ number_format($tax['order_grandtotal'], 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
</div>
<div class="summary-line">
<span class="summary-label">Shipping Fee:</span>
<span class="summary-value">{{ number_format($shipping_fee, 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
</div>
<div class="summary-line">
<span class="summary-label">Tax:</span>
<span class="summary-value">{{ number_format($tax['tax'], 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
</div>
<hr>
<h3> <strong>Total:</strong> <span id="my_subtotal">{{ number_format($tax['order_grandtotal'] + $shipping_fee + $tax['tax'], 2) }}</span>
<span>{{ $store_array[0]->StoreCurrency }}</span>
</h3>
<div class="summary-line summary-total">
<span class="summary-label">Total:</span>
<span class="summary-value"><span id="my_subtotal">{{ number_format($tax['order_grandtotal'] + $shipping_fee + $tax['tax'], 2) }}</span><span class="summary-total-currency">{{ $store_array[0]->StoreCurrency }}</span></span>
</div>
<hr>
<div class="form-group" id="voucher_list">
<div class="form-group voucher-row" id="voucher_list">
@foreach($row as $item)
@if($item->VoucherId != null)
<div class="btn-group">
@@ -119,20 +326,20 @@
<span id="error_voucher" style="color: #dd4b39"></span>
</form>
<div class="clearfix"></div>
</div>
<div style="border: 1px solid #e2e2e2; padding: 10px;">
<a @if($getSubtotal <= 0 ) disabled @endif href="{{ url('getCheckout') }}" class="btn btn-primary btn-block" style="background-color: #ffc300; border-color: #e2ad00; text-align: -webkit-center;" ><img src="{{asset('/images/paypal1.png')}}" class="img img-responsive" style="height:30px;"></a><br>
<a href="{{ url('teamstore') . '/' . $store_array[0]->StoreUrl }}" class="btn btn-default btn-block" type="submit">Continue Shopping</a>
<hr>
<a @if($getSubtotal <= 0 ) disabled @endif href="{{ url('getCheckout') }}" class="btn btn-primary btn-block checkout-btn" ><img src="{{asset('/images/paypal1.png')}}" class="img img-responsive" style="height:30px;"></a><br>
<a href="{{ url('teamstore') . '/' . $store_array[0]->StoreUrl }}" class="btn btn-default btn-block continue-btn" type="submit">Continue Shopping</a>
</div>
</div>
<div class="col-md-8 col-md-pull-4">
<div style="border: 1px solid #e2e2e2; padding: 10px;">
<h4><img height="30px" class="store-logo" src="{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo) }}"> {{ $store_array[0]->StoreName }}</h4>
</div>
<div class="cart-card cart-items-shell">
<div class="cart-store-head">
<h4><img height="30px" class="store-logo" src="{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo) }}"> {{ $store_array[0]->StoreName }}</h4>
</div>
@foreach($item_group as $item)
@if($item->VoucherId == null)
<div style="border: 1px solid #e2e2e2; padding: 10px; border-top: none;">
<div class="cart-card cart-item-block">
<div class="row">
<div class="col-md-3">
<div class="text-center">
@@ -144,11 +351,11 @@
</div>
</div>
<div class="col-md-9">
<h4>
<h4 class="cart-item-title">
<a href="{{ url('teamstore') . '/' . $item->StoreURL . '/' . 'product/' . $item->ProductURL }}">{{ $item->ProductName }}</a>
</h4>
<p>Total Price: {{ $item->total_price . ' ' . $store_array[0]->StoreCurrency }} &bull; Row(s): {{ $item->qty }} </p>
<div class="table-responsive">
<p class="cart-meta">Total Price: {{ $item->total_price . ' ' . $store_array[0]->StoreCurrency }} &bull; Row(s): {{ $item->qty }} </p>
<div class="table-responsive cart-table-wrap">
<table class="table table-striped table-condensed">
@if($item->FormUsed=="jersey-and-shorts-form")
@@ -252,20 +459,20 @@
<td>{{ $sub_item->ShortsSize }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="tshirt-form")
<tr>
<td>{{ $sub_item->Size }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="quantity-form")
<tr>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="name-number-form")
<tr>
@@ -273,7 +480,7 @@
<td>{{ $sub_item->Number }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="name-number-size-form")
<tr>
@@ -282,14 +489,14 @@
<td>{{ $sub_item->Size }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="number-form")
<tr>
<td>{{ $sub_item->Number }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="name-name2-size-form")
<tr>
@@ -298,7 +505,7 @@
<td>{{ $sub_item->Size }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="name-size-form")
<tr>
@@ -306,7 +513,7 @@
<td>{{ $sub_item->Size }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="jersey-and-shorts-quantity-form")
<tr>
@@ -314,7 +521,7 @@
<td>{{ $sub_item->ShortsSize}}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@elseif($item->FormUsed=="number-jersey-shorts-form")
<tr>
@@ -323,7 +530,7 @@
<td>{{ $sub_item->ShortsSize }}</td>
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
<td>{{ $sub_item->Quantity }}</td>
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
@else
@@ -338,13 +545,14 @@
</div>
@endif
@endforeach
</div>
</div>
</div>
@else
<div class="row">
<div class="col-md-12">
<h3 style="color:#d2d2d2;">Your cart is currently empty.</h3>
<h3 class="empty-cart">Your cart is currently empty.</h3>
</div>
</div>