Initial commit

This commit is contained in:
ibdocs2 2024-03-14 13:22:57 +01:00
commit 181d6b8914
6 changed files with 1462 additions and 0 deletions

681
app/index.html Normal file

File diff suppressed because one or more lines are too long

9
assets/anon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

23
assets/anvil.svg Normal file
View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512" xml:space="preserve">
<g transform="translate(1 1)">
<g>
<path d="M504.724,137.96c4.074-12.905,6.276-26.621,6.276-40.826c0-5.12-3.413-8.533-8.533-8.533H152.6
c-5.12,0-8.533,3.413-8.533,8.533V114.2H7.533c-5.12,0-8.533,3.413-8.533,8.533c0,61.44,49.493,110.933,110.933,110.933H152.6
h13.79c8.898,8.688,15.684,18.143,20.343,29.013c0.655,1.309,1.437,2.362,2.343,3.169c4.636,11.454,7.044,23.769,7.044,36.084
c0,26.034-10.865,50.512-28.886,68.267h-31.701c-14.507,0-25.6,11.093-25.6,25.6c0,14.507,11.093,25.6,25.6,25.6h238.933
c14.507,0,25.6-11.093,25.6-25.6c0-14.507-11.093-25.6-25.6-25.6h-30.949c-18.692-17.826-28.785-43.043-28.785-68.267
c0-25.223,10.092-50.441,28.044-68.267h31.689c54.908,0,102.511-32.852,124.138-79.869c0.476-0.6,0.914-1.275,1.302-2.051
C501.702,147.259,503.314,142.652,504.724,137.96z M161.133,105.667h332.8c-0.853,11.947-3.413,23.04-7.68,34.133h-325.12v-17.067
V105.667z M189.293,233.667h131.413c-3.982,5.388-7.496,11.106-10.525,17.067H200.387
C196.973,244.76,193.56,238.787,189.293,233.667z M16.92,131.267h127.147v17.067V216.6h-33.28
C61.293,216.6,21.187,179.053,16.92,131.267z M383,395.8c0,5.12-3.413,8.533-8.533,8.533H135.533c-5.12,0-8.533-3.413-8.533-8.533
s3.413-8.533,8.533-8.533h34.133h170.667h34.133C379.587,387.267,383,390.68,383,395.8z M320.707,370.2H189.293
c15.36-19.627,23.04-43.52,23.04-68.267c0-11.691-1.736-23.184-5.164-34.133h95.962c-3.539,10.95-5.464,22.443-5.464,34.133
C297.667,326.68,306.2,350.573,320.707,370.2z M374.467,216.6H339.48H168.813h-7.68v-59.733h317.18
C457.601,192.662,418.765,216.6,374.467,216.6z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

659
assets/index-0e5924d3.css Normal file
View file

@ -0,0 +1,659 @@
@font-face {
font-family: Cera Pro;
font-weight: 400;
src: url(../assets/CeraPro-6e898994.ttf)
}
@font-face {
font-family: Cera Pro;
font-weight: 500;
src: url(../assets/CeraProMedium-68415c8e.otf)
}
@font-face {
font-family: Cera Pro;
font-weight: 600;
src: url(../assets/CeraProBold-ca2bcc9e.otf)
}
*,
:before,
:after {
box-sizing: border-box;
border-width: 0;
border-style: solid;
border-color: #e5e7eb
}
html {
line-height: 1.25;
-webkit-text-size-adjust: 100%;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
font-family: Cera Pro, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif;
font-feature-settings: normal;
font-variation-settings: normal;
/* min-height: 100%;
height: auto;
height: 100%; */
max-height: none;
}
body {
margin: 0;
line-height: inherit
}
hr {
height: 0;
color: #000;
border-top-width: 1px
}
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit
}
a {
color: inherit;
text-decoration: inherit
}
b,
strong {
font-weight: bolder
}
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
font-size: 1em
}
small {
font-size: 80%
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -.25em
}
sup {
top: -.5em
}
table {
text-indent: 0;
border-color: inherit;
border-collapse: collapse
}
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
font-size: 100%;
font-weight: inherit;
line-height: inherit;
color: inherit;
margin: 0;
padding: 0
}
button,
select {
text-transform: none
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
appearance: button;
background-color: transparent;
background-image: none
}
:-moz-focusring {
outline: auto
}
:-moz-ui-invalid {
box-shadow: none
}
progress {
vertical-align: baseline
}
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto
}
[type=search] {
-webkit-appearance: textfield;
appearance: textfield;
outline-offset: -2px
}
::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
summary {
display: list-item
}
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0
}
fieldset {
margin: 0;
padding: 0
}
legend {
padding: 0
}
ol,
ul,
menu {
list-style: none;
margin: 0;
padding: 0
}
textarea {
resize: vertical
}
input::-moz-placeholder,
textarea::-moz-placeholder {
opacity: 1;
color: #9ca3af
}
input::placeholder,
textarea::placeholder {
opacity: 1;
color: #9ca3af
}
button,
[role=button] {
cursor: pointer
}
:disabled {
cursor: default
}
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block;
}
img,
video {
max-width: 100%;
height: auto
}
[hidden] {
display: none
}
body,
html,
#root {
font-family: Cera Pro, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif;
background-color: rgb(248 248 248);
background-size: cover;
width: 100%;
min-height: 100%;
height: 100% !important;
max-height: none;
margin: 0;
padding: 0;
}
h1,
h2,
h3 {
font-weight: 500
}
h1 {
font-size: 2.25rem;
/*line-height: 2.5rem*/
}
h2 {
font-size: 1.5rem;
/*line-height: 2rem*/
}
h3 {
font-size: 1.25rem;
/*line-height: 1.75rem*/
}
h4 {
font-size: 1.125rem;
/*line-height: 1.75rem*/
}
.btn-primary {
--tw-text-opacity: 1;
color: rgb(66 165 245 / var(--tw-text-opacity));
background-color: #4fc3f74d
}
.btn-primary:hover {
--tw-bg-opacity: 1;
background-color: rgb(66 165 245 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(248 248 248 / var(--tw-text-opacity))
}
.btn-secondary {
--tw-text-opacity: 1;
color: rgb(3 54 40 / var(--tw-text-opacity));
background-color: #55ad95
}
.btn-secondary:hover {
--tw-bg-opacity: 1;
background-color: rgb(85 173 149 / var(--tw-bg-opacity));
--tw-text-opacity: 1;
color: rgb(248 248 248 / var(--tw-text-opacity))
}
#left-col {
flex: 1;
width: 20%;
position: relative;
overflow-y: scroll;
word-break: break-word;
}
#right-col {
flex: 4;
width: 80%;
overflow-y: auto;
word-break: break-word;
}
#appContainer{
display: flex;
height: 100%;
position: relative;
}
#markscheme-box, #report-box{
min-height: 100%;
overflow-y: scroll;
}
.square-container {
display: flex;
flex-direction: column;
/* min-height: 100%;
height: 100%;
max-height: none; */
width: auto;
background-color: #ffffff;
align-items: left;
margin: 1em;
border: 1px solid #ccc;
border-radius: 8px;
overflow: scroll;
}
.specification {
display: grid;
align-items: flex-start;
gap: 1em;
margin: 10px;
}
.question {
display: flex;
/*flex-direction: column;*/
max-width: 100%;
flex-wrap: wrap;
gap: 1em;
margin: 10px;
box-sizing: border-box;
}
.marks {
order: 1;
margin-left: auto;
}
.question_part_label {
order: -1;
}
.dark-mode {
filter: invert(100%);
}
.btn-primary {
font-weight: 500;
border-radius: .25rem;
padding: .25rem;
-webkit-padding-end: .5rem;
padding-inline-end: .5rem;
-webkit-padding-start: .5rem;
padding-inline-start: .5rem
}
.btn-secondary {
font-weight: 500;
border-radius: .25rem;
padding: .25rem;
-webkit-padding-end: .5rem;
padding-inline-end: .5rem;
-webkit-padding-start: .5rem;
padding-inline-start: .5rem
}
.fixed {
position: fixed
}
.left-0 {
left: 0px
}
.right-0 {
right: 0px
}
.top-0 {
top: 0px
}
.m-0 {
margin: 0
}
.me-2 {
-webkit-margin-end: .5rem;
margin-inline-end: .5rem
}
.me-auto {
-webkit-margin-end: auto;
margin-inline-end: auto
}
.ms-2 {
-webkit-margin-start: .5rem;
margin-inline-start: .5rem
}
.ms-auto {
-webkit-margin-start: auto;
margin-inline-start: auto
}
.mt-16 {
margin-top: 4rem
}
.mt-2 {
margin-top: .5rem
}
.mt-32 {
margin-top: 8rem
}
.mt-4 {
margin-top: 1rem
}
.flex {
display: flex
}
.hidden {
display: none
}
.h-full {
height: 100%;
max-height: none;
min-height: 100%;
}
.w-1\/5 {
width: 20%
}
.w-4\/5 {
width: 80%
}
.w-full {
width: 100%
}
.shrink {
flex-shrink: 1
}
.flex-grow,
.grow {
flex-grow: 1
}
.basis-0 {
flex-basis: 0px
}
.cursor-pointer {
cursor: pointer
}
.flex-col {
flex-direction: column
}
.items-start {
align-items: flex-start
}
.items-center {
align-items: center
}
.justify-center {
justify-content: center
}
.justify-between {
justify-content: space-between
}
.justify-evenly {
justify-content: space-evenly
}
.overflow-auto {
overflow: auto
}
.rounded {
border-radius: .25rem
}
.rounded-full {
border-radius: 9999px
}
.border {
border-width: 1px
}
.bg-black\/70 {
background-color: #000000b3
}
.bg-gray-100 {
background-color: rgb(248 248 248)
}
.bg-gray-400\/30 {
background-color: #9ca3af4d
}
.bg-red-300\/30 {
background-color: #fca5a54d
}
.bg-secondary\/30 {
background-color: #4fc3f74d
}
.bg-white {
background-color: rgb(255 255 255)
}
.p-0 {
padding: 0
}
.p-2 {
padding: .5rem
}
.p-3 {
padding: .75rem
}
.p-4 {
padding: 1rem
}
.pt-3 {
padding-top: .75rem
}
.pt-5 {
padding-top: 1.25rem
}
.text-center {
text-align: center
}
.font-sans {
font-family: Cera Pro, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif
}
.font-serif {
font-family: Times New Roman, Times, ui-serif, Georgia, Cambria, serif
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem
}
.font-medium {
font-weight: 500
}
.text-gray-500 {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity))
}
.text-neutralVariant {
--tw-text-opacity: 1;
color: rgb(178 186 187 / var(--tw-text-opacity))
}
.text-primary {
--tw-text-opacity: 1;
color: rgb(66 165 245 / var(--tw-text-opacity))
}
.text-secondary {
--tw-text-opacity: 1;
color: rgb(79 195 247 / var(--tw-text-opacity))
}
@media (min-width: 768px) {
.md\:h-3\/4 {
height: 75%
}
.md\:w-1\/2 {
width: 50%
}
.md\:w-3\/4 {
width: 75%
}
}
#landingPage {
max-width: 1200px
}

2
favicon.svg Normal file
View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"/></svg>

After

Width:  |  Height:  |  Size: 669 B

88
index.html Normal file
View file

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mortar & Pestle</title>
<link rel="stylesheet" href="./assets/index-0e5924d3.css">
<script>
function toggleDarkMode() {
const body = document.body;
const button = document.querySelector('.btn-primary');
body.classList.toggle('dark-mode');
if (body.classList.contains('dark-mode')) {
button.style.position = 'static';
button.style.zIndex = 'auto';
} else {
button.style.position = 'fixed';
button.style.zIndex = '9999';
button.style.right = '0';
}
}
</script>
</head>
<body>
<div id="root">
<div class="me-auto ms-auto flex flex-col items-center p-4 pt-3" id="landingPage">
<header class="flex w-full items-start" style="position: fixed">
<div style="position: fixed; right: 15px; z-index: 9999;"><button class="btn-primary" onclick="toggleDarkMode()">Dark Mode</button></div>
</header>
<div>
<div style="text-align:center;"><h1><b>Mortar & Pestle</b></h1><br></div>
<h1>The <em>Next Generation</em> of Question Grinding</h1>
</div><br>
<div class="mt-4" style="text-align:center;">
<h2>Practice IB Exam-Style Questions, create topic-wise tests, and much more!</h2><br>
<h2 style="color:orangered">Warning: This site is on early beta release, and it is <b>NOT</b> optimized for mobile.</h2>
</div>
<br>
<div class="p-3" style="text-align:center;"><a href="app/index.html"><button class="btn-primary"><h1>Start Grinding!</h1></button></a></div>
<br>
<div class="mt-8 font-medium text-neutralVariant">
<h2>Features</h2>
</div>
<section class="flex w-full justify-evenly pt-5">
<div class="flex shrink grow basis-0 flex-col items-center">
<div class="rounded-full bg-secondary/30 p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24"
height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<line x1="12" y1="5" x2="12" y2="19"></line>
<line x1="5" y1="12" x2="19" y2="12"></line>
</svg></div>
<div class="font-medium text-gray-500">Combine Topics</div>
</div>
<div class="flex shrink grow basis-0 flex-col items-center">
<div class="rounded-full bg-red-300/30 p-2">
<!-- <svg xmlns="http://www.w3.org/2000/svg" width="24"
height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path d="M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"></path>
<line x1="16" y1="8" x2="2" y2="22"></line>
<line x1="17.5" y1="15" x2="9" y2="15"></line>
</svg> -->
<img src="./assets/anvil.svg" width="24"
height="24" viewBox="0 0 24 24">
</div>
<div class="font-medium text-gray-500">Heavy but powerful</div>
</div>
<div class="flex shrink grow basis-0 flex-col items-center">
<div class="rounded-full bg-gray-400/30 p-2"><img src="./assets/anon.svg"
alt="anonymous image"></div>
<div class="font-medium text-gray-500">No trackers/cookies</div>
</div>
</section>
<br>
</div>
<footer class="mt-16 flex flex-col text-center">
<p><a href="https://reddit.com/r/pirateIB">IB Documents (2) Team</a><br>#freexiletow</p>
</footer>
</div>
</body>
</html>