From 9b5b98ebdb6fb3fa1335aa12399cb48fb3e0024c Mon Sep 17 00:00:00 2001 From: R4ph3uz Date: Thu, 18 Jul 2024 08:24:43 +0000 Subject: [PATCH] Add first challenges and the paths_config to understand how it works --- challenges/first-chall-first-path/config.yml | 9 + challenges/first-chall-first-path/encoder.sh | 62 ++++ challenges/first-chall-first-path/image.html | 15 + challenges/first-chall-first-path/image.py | 36 ++ .../static/image-script.js | 0 .../static/image-style.css | 0 .../first-chall-first-path/static/image.png | Bin 0 -> 2286 bytes challenges/first-chall-initial/config.yml | 8 + challenges/first-chall-initial/index.html | 30 ++ .../static/image_static.png | Bin 0 -> 21154 bytes .../first-chall-initial/static/script.js | 0 .../first-chall-initial/static/style.css | 54 +++ challenges/first-chall-second-path/api.py | 21 ++ challenges/first-chall-second-path/config.yml | 7 + challenges/first-chall-second-path/p0ste.html | 11 + .../static/p0ste-script.js | 0 .../static/p0ste-style.css | 0 challenges/second-chall-first-path/config.yml | 6 + .../static/th0usand-script.js | 1 + .../static/th0usand-style.css | 8 + .../second-chall-first-path/th0usand.html | 67 ++++ challenges/second-chall-initial/config.yml | 6 + challenges/second-chall-initial/s3parat3.html | 27 ++ .../static/s3parat3-script.js | 267 +++++++++++++++ .../static/s3parat3-style.css | 323 ++++++++++++++++++ paths_config.yml | 9 + 26 files changed, 967 insertions(+) create mode 100644 challenges/first-chall-first-path/config.yml create mode 100755 challenges/first-chall-first-path/encoder.sh create mode 100644 challenges/first-chall-first-path/image.html create mode 100755 challenges/first-chall-first-path/image.py create mode 100644 challenges/first-chall-first-path/static/image-script.js create mode 100644 challenges/first-chall-first-path/static/image-style.css create mode 100644 challenges/first-chall-first-path/static/image.png create mode 100644 challenges/first-chall-initial/config.yml create mode 100644 challenges/first-chall-initial/index.html create mode 100644 challenges/first-chall-initial/static/image_static.png create mode 100644 challenges/first-chall-initial/static/script.js create mode 100644 challenges/first-chall-initial/static/style.css create mode 100644 challenges/first-chall-second-path/api.py create mode 100644 challenges/first-chall-second-path/config.yml create mode 100644 challenges/first-chall-second-path/p0ste.html create mode 100644 challenges/first-chall-second-path/static/p0ste-script.js create mode 100644 challenges/first-chall-second-path/static/p0ste-style.css create mode 100644 challenges/second-chall-first-path/config.yml create mode 100644 challenges/second-chall-first-path/static/th0usand-script.js create mode 100644 challenges/second-chall-first-path/static/th0usand-style.css create mode 100644 challenges/second-chall-first-path/th0usand.html create mode 100644 challenges/second-chall-initial/config.yml create mode 100644 challenges/second-chall-initial/s3parat3.html create mode 100644 challenges/second-chall-initial/static/s3parat3-script.js create mode 100644 challenges/second-chall-initial/static/s3parat3-style.css create mode 100644 paths_config.yml diff --git a/challenges/first-chall-first-path/config.yml b/challenges/first-chall-first-path/config.yml new file mode 100644 index 0000000..4f76a4e --- /dev/null +++ b/challenges/first-chall-first-path/config.yml @@ -0,0 +1,9 @@ +title: "Can you write it ?" +description: "you see the flag but you cant copy/paste it" +hint: "write it down" +template: "image.html" +css: "./static/image-style.css" +javascript: "./static/image-script.js" +encoding_script: "encoder.sh" +static_files: + - "./static/image.png" diff --git a/challenges/first-chall-first-path/encoder.sh b/challenges/first-chall-first-path/encoder.sh new file mode 100755 index 0000000..564b5ab --- /dev/null +++ b/challenges/first-chall-first-path/encoder.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# Retrieve the flag from the first script argument +FLAG=$1 + +# Check if the flag has been provided +if [ -z "$FLAG" ]; then + FLAG='Final Flag : Flag{Raph is the best}' +fi + +SCRIPT_DIR=$(dirname "$BASH_SOURCE") +# Create a temporary directory for the python file +TEMP_DIR=$(mktemp -d "python.XXXXXX") +PYTHON_FILE="$TEMP_DIR/createimg.py" + +# Create the Java file with the class content +cat < "$PYTHON_FILE" +#!/usr/bin/env python +from PIL import Image, ImageDraw, ImageFont +import sys +import os + +def create_text_image(text, output_path): + # Définir la taille de l'image et la couleur de fond + img_width, img_height = 400, 400 + background_color = (255, 0, 0) # Rouge + text_color = (255, 255, 255) # Blanc + + # Créer une nouvelle image + image = Image.new('RGB', (img_width, img_height), color=background_color) + + # Initialiser le dessin sur l'image + draw = ImageDraw.Draw(image) + + # Charger une police (vous pouvez spécifier un chemin vers une police spécifique) + try: + font = ImageFont.truetype("arial.ttf", 50) + except IOError: + font = ImageFont.load_default() + + text_bbox = draw.textbbox((0, 0), text, font=font) + text_width = text_bbox[2] - text_bbox[0] + text_height = text_bbox[3] - text_bbox[1] + text_x = (img_width - text_width) / 2 + text_y = (img_height - text_height) / 2 + + # Ajouter le texte à l'image + draw.text((text_x, text_y), text, font=font, fill=text_color) + + # Enregistrer l'image + image.save(output_path) + + +image_path=os.path.join("..","$SCRIPT_DIR",'static','image.png') +create_text_image("$FLAG",image_path) +EOF + +# Execute the python file in the temporary directory +(cd "$TEMP_DIR" && python createimg.py) + +# Clean up: Remove the temporary directory +rm -r "$TEMP_DIR" diff --git a/challenges/first-chall-first-path/image.html b/challenges/first-chall-first-path/image.html new file mode 100644 index 0000000..7b0f74c --- /dev/null +++ b/challenges/first-chall-first-path/image.html @@ -0,0 +1,15 @@ + + + + + + image suivante + + + + +

Here is your flag

+

The flag is automatically created

+ + + \ No newline at end of file diff --git a/challenges/first-chall-first-path/image.py b/challenges/first-chall-first-path/image.py new file mode 100755 index 0000000..c19bab9 --- /dev/null +++ b/challenges/first-chall-first-path/image.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +from PIL import Image, ImageDraw, ImageFont +import sys +import os + +def create_text_image(text, output_path): + # Définir la taille de l'image et la couleur de fond + img_width, img_height = 400, 400 + background_color = (255, 0, 0) # Rouge + text_color = (255, 255, 255) # Blanc + + # Créer une nouvelle image + image = Image.new('RGB', (img_width, img_height), color=background_color) + + # Initialiser le dessin sur l'image + draw = ImageDraw.Draw(image) + + # Charger une police (vous pouvez spécifier un chemin vers une police spécifique) + try: + font = ImageFont.truetype("arial.ttf", 50) + except IOError: + font = ImageFont.load_default() + + text_bbox = draw.textbbox((0, 0), text, font=font) + text_width = text_bbox[2] - text_bbox[0] + text_height = text_bbox[3] - text_bbox[1] + text_x = (img_width - text_width) / 2 + text_y = (img_height - text_height) / 2 + + # Ajouter le texte à l'image + draw.text((text_x, text_y), text, font=font, fill=text_color) + + # Enregistrer l'image + image.save(output_path) + +create_text_image("/user/bin/env python",os.path.join(".","static","image.png")) diff --git a/challenges/first-chall-first-path/static/image-script.js b/challenges/first-chall-first-path/static/image-script.js new file mode 100644 index 0000000..e69de29 diff --git a/challenges/first-chall-first-path/static/image-style.css b/challenges/first-chall-first-path/static/image-style.css new file mode 100644 index 0000000..e69de29 diff --git a/challenges/first-chall-first-path/static/image.png b/challenges/first-chall-first-path/static/image.png new file mode 100644 index 0000000000000000000000000000000000000000..606fbab2d29be0262e34dd2fd08492ef1214fbde GIT binary patch literal 2286 zcmeHJYfqX77^N3eCK$}fs?(`k_rbVux0@tV5+1g9-`?TfNmS zsZF=JdI{EaDFbgfwTKm|v#mO9wW}8tk_%FRu#1+^^U^_~Cqcp7ZHEPtG|t zpC!h+xq7*xP$;+fxaedQ>e#J+fj)jX!7a5kqEP7G_~^*bi<^uZa<=%2_lUl`tLIFe zq(A$efbh7M*0bnDAvU~c-Zf_Q%-M~<{lf#$?LU;4H&&&dEDDY@-i^BG79RJ}UtIU3 z=*YN?e314D zcIfz5=+o{|@^3w_yF7Lee7`E|Sjf@pNR9vEH)i>~r6O1-fajS-hBUHebc0A3{CMC_ zBZJQh{!J=vsFzBmUf9&NiUi+&JGOVD;ukdzN^XS7gn_9^@*JSbV>owLHi!iU351{t zRwo=fSqM;VSIt^QfPcDWYK@t;IV|dWS~0oM{HV>em>I<;ElEPIkCawth`lT6pwH7QoD29J9Xgv-i;vS-BME0|L@f^)K=h;+HXlgA!N z@+PGMKH)vf2?)kv-(GHoOfuR0eE;4nnJiD6%jFic3{>hlhGO>qMF7C#;e7~xjEAjS zc<9vdx|ph7et^mBmCsbUIaja=CdUB}n6cZR94K?qvwV{0v}p+d5FG;)p65T)XylRO z`25{`<9rIx%cS{GBJ8gx>KByVvRt!nt7GWyeF-#9fL_Ex`f8}-;no2HEwEVIuk`zC zTH%`*;{pH>DHQB1JlEM*{N^p?pY3~K@i#?Go0Y=(RU)yyqzOiDzF<)teK?;jFPM`X zydjky-d!s7#a1bvj@YK9heX8e7bI}(QMhfjerEq>1O4)5ie!I@C*X2-MW7{*tyb0g z8t=slz(Kt~#ylMx + + + + + CTF/Jeu de piste Michelin + + + + + +
+

Jeu de piste

+
image
+
+
+
+

Fonctionnement

+

+ Le jeu de piste est composé de plusieurs énigmes. Pour chaque énigme, vous devez trouver un mot de passe qui vous permettra de passer à l'énigme suivante. + Les flag sont de la forme X_S0me-str1nG.html +

+

+
+ ps: ceci est deja un challenge +

+
+
+ + \ No newline at end of file diff --git a/challenges/first-chall-initial/static/image_static.png b/challenges/first-chall-initial/static/image_static.png new file mode 100644 index 0000000000000000000000000000000000000000..440fab9c469dbfcb83909909ec512a83853786cd GIT binary patch literal 21154 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ÍjOizK?D3@l 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 + + + + + Je ne suis pas la poste + + +

Send a post request to {{chall_name}} to get the flag

+ + \ No newline at end of file diff --git a/challenges/first-chall-second-path/static/p0ste-script.js b/challenges/first-chall-second-path/static/p0ste-script.js new file mode 100644 index 0000000..e69de29 diff --git a/challenges/first-chall-second-path/static/p0ste-style.css b/challenges/first-chall-second-path/static/p0ste-style.css new file mode 100644 index 0000000..e69de29 diff --git a/challenges/second-chall-first-path/config.yml b/challenges/second-chall-first-path/config.yml new file mode 100644 index 0000000..74377e3 --- /dev/null +++ b/challenges/second-chall-first-path/config.yml @@ -0,0 +1,6 @@ +title: "A thousand problem" +description: "Can you count to that ?" +hint: "change data-number to 999 and click on the button or chec the script" +template: "th0usand.html" +css: "./static/th0usand-style.css" +javascript: "./static/th0usand-script.js" diff --git a/challenges/second-chall-first-path/static/th0usand-script.js b/challenges/second-chall-first-path/static/th0usand-script.js new file mode 100644 index 0000000..b766412 --- /dev/null +++ b/challenges/second-chall-first-path/static/th0usand-script.js @@ -0,0 +1 @@ +//empty \ No newline at end of file diff --git a/challenges/second-chall-first-path/static/th0usand-style.css b/challenges/second-chall-first-path/static/th0usand-style.css new file mode 100644 index 0000000..6ee5f63 --- /dev/null +++ b/challenges/second-chall-first-path/static/th0usand-style.css @@ -0,0 +1,8 @@ +#channel { + width: 400px; + height: 300px; + border: 1px solid black; + padding: 20px; + margin: 0 auto; + text-align: center; +} \ No newline at end of file diff --git a/challenges/second-chall-first-path/th0usand.html b/challenges/second-chall-first-path/th0usand.html new file mode 100644 index 0000000..d6dee6c --- /dev/null +++ b/challenges/second-chall-first-path/th0usand.html @@ -0,0 +1,67 @@ + + + + Chasse au trésor + + + + + + +
+

Chasse au trésor

+

Trouvez le drapeau pour gagner!

+ + + + + + Increment Button + + + + + + + + + +

+
+ + + + + \ No newline at end of file diff --git a/challenges/second-chall-initial/config.yml b/challenges/second-chall-initial/config.yml new file mode 100644 index 0000000..e066ca8 --- /dev/null +++ b/challenges/second-chall-initial/config.yml @@ -0,0 +1,6 @@ +title: "Choisis ta voie" +description: "Fromage ou dessert ?" +hint: "Clic on the chosen track (you might inspect the link and use the href)" +template: "s3parat3.html" +css: "./static/s3parat3-style.css" +javascript: "./static/s3parat3-script.js" diff --git a/challenges/second-chall-initial/s3parat3.html b/challenges/second-chall-initial/s3parat3.html new file mode 100644 index 0000000..4b5f26f --- /dev/null +++ b/challenges/second-chall-initial/s3parat3.html @@ -0,0 +1,27 @@ + + + + + Choose your Path + + + + + + +
+ +
+ +

Choose ur path

+ +
+ {% for path in PATH["PATHS"] %} + + {% endfor %} +
+ + + + + \ No newline at end of file diff --git a/challenges/second-chall-initial/static/s3parat3-script.js b/challenges/second-chall-initial/static/s3parat3-script.js new file mode 100644 index 0000000..0f88c85 --- /dev/null +++ b/challenges/second-chall-initial/static/s3parat3-script.js @@ -0,0 +1,267 @@ +// +// ---Retro Button--- +// +var buttons = document.querySelectorAll('.btn'); + +for(var i = 0; i < buttons.length; i++) { + // Click + buttons[i].addEventListener('mousedown', function() { + this.classList.add('btn-active'); + }); + buttons[i].addEventListener('mouseup', function() { + this.classList.remove('btn-active'); + }); + + // Hover + buttons[i].addEventListener('mouseleave', function() { + this.classList.remove('btn-center', 'btn-right', 'btn-left', 'btn-active'); + }); + + buttons[i].addEventListener("mousemove", function(e) { + var leftOffset = this.getBoundingClientRect().left; + var btnWidth = this.offsetWidth; + var myPosX = e.pageX; + var newClass = ""; + // if on left 1/3 width of btn + if(myPosX < (leftOffset + .3 * btnWidth) ) { + newClass = 'btn-left' + } else { + // if on right 1/3 width of btn + if(myPosX > (leftOffset + .65 * btnWidth) ) { + newClass = 'btn-right'; + } else { + newClass = 'btn-center'; + } + } + // remove prev class + var clearedClassList = this.className.replace(/btn-center|btn-right|btn-left/gi, "").trim(); + this.className = clearedClassList + " " + newClass; + }); +} + + +// // +// // ---Retro Submit Button--- +// // +// var pButton = document.querySelector('.loader-button'); + +// // Click +// pButton.addEventListener('mousedown', function() { +// this.classList.add('btn-active'); +// }); +// pButton.addEventListener('mouseup', function() { +// this.classList.remove('btn-active'); +// }); + + +// Classie Helper Functions +// https://github.com/desandro/classie + +function classReg( className ) { + return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); +} + +// classList support for class management +// altho to be fair, the api sucks because it won't accept multiple classes at once +var hasClass, addClass, removeClass; + +if ( 'classList' in document.documentElement ) { + hasClass = function( elem, c ) { + return elem.classList.contains( c ); + }; + addClass = function( elem, c ) { + elem.classList.add( c ); + }; + removeClass = function( elem, c ) { + elem.classList.remove( c ); + }; +} +else { + hasClass = function( elem, c ) { + return classReg( c ).test( elem.className ); + }; + addClass = function( elem, c ) { + if ( !hasClass( elem, c ) ) { + elem.className = elem.className + ' ' + c; + } + }; + removeClass = function( elem, c ) { + elem.className = elem.className.replace( classReg( c ), ' ' ); + }; +} + +function toggleClass( elem, c ) { + var fn = hasClass( elem, c ) ? removeClass : addClass; + fn( elem, c ); +} + +var classie = { + // full names + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + toggleClass: toggleClass, + // short names + has: hasClass, + add: addClass, + remove: removeClass, + toggle: toggleClass +}; + +// transport +if ( typeof define === 'function' && define.amd ) { + // AMD + define( classie ); +} else { + // browser global + window.classie = classie; +} + + +// Loader Progress Functionality + +function extend( a, b ) { + for( var key in b ) { + if( b.hasOwnProperty( key ) ) { + a[key] = b[key]; + } + } + return a; +} + +function LoaderButton( el, options ) { + this.button = el; + this.options = extend( {}, this.options ); + extend( this.options, options ); + this._init(); +} + +LoaderButton.prototype.options = { + statusTime : 1500 +}; + +LoaderButton.prototype._init = function() { + this._create(); + this._initEvents(); +}; + +LoaderButton.prototype._create = function() { + var textEl = document.createElement( 'span' ); + textEl.className = 'content'; + textEl.innerHTML = this.button.innerHTML; + var progressEl = document.createElement( 'span' ); + progressEl.className = 'progress'; + + var progressInnerEl = document.createElement( 'span' ); + progressInnerEl.className = 'progress-inner'; + progressEl.appendChild( progressInnerEl ); + + this.button.innerHTML = ''; + + this.button.appendChild( textEl ); + this.button.appendChild( progressEl ); + + // element for progress bar + this.progress = progressInnerEl; + + this.progressProp = 'width'; + this._enable(); +}; + +LoaderButton.prototype._setProgress = function( val ) { + this.progress.style[ this.progressProp ] = 100 * val + '%'; +}; + +LoaderButton.prototype._initEvents = function() { + var self = this; + this.button.addEventListener( 'click', function() { + // disable button + self.button.setAttribute( 'disabled', '' ); + // add class state-loading to button + classie.remove( self.progress, 'notransition' ); + classie.add( this, 'state-loading' ); + + setTimeout( function() { + if( typeof self.options.callback === 'function' ) { + self.options.callback( self ); + } + else { + self._setProgress( 1 ); + var onEndTransFn = function( ev ) { + if( ev.propertyName !== self.progressProp ) { + return; + } + this.removeEventListener( 'transitionend', onEndTransFn ); + self._stop(); + }; + + self.progress.addEventListener( 'transitionend', onEndTransFn ); + } + }, + 200 ); // 200ms timeout + } ); +}; + +LoaderButton.prototype._stop = function( status ) { + var self = this; + + setTimeout( function() { + // fade out progress bar + self.progress.style.opacity = 0; + var onEndTransFn = function( ev ) { + if( ev.propertyName !== 'opacity' ) return; + this.removeEventListener( 'transitionend', onEndTransFn ); + classie.add( self.progress, 'notransition' ); + self.progress.style[ self.progressProp ] = '0%'; + self.progress.style.opacity = 1; + }; + + self.progress.addEventListener( 'transitionend', onEndTransFn ); + + // add class state-success to button + if( typeof status === 'number' ) { + var statusClass = status >= 0 ? 'state-success' : 'state-error'; + classie.add( self.button, statusClass ); + // after options.statusTime remove status icon + setTimeout( function() { + classie.remove( self.button, statusClass ); + self._enable(); + }, self.options.statusTime ); + } + else { + self._enable(); + } + + // remove class state-loading from the button + classie.remove( self.button, 'state-loading' ); + }, 100 ); +}; + +// enable button +LoaderButton.prototype._enable = function() { + this.button.removeAttribute( 'disabled' ); +} + +// add to global namespace +window.LoaderButton = LoaderButton; + + +// Initialize Submit Button + +[].slice.call( document.querySelectorAll( 'button.loader-button' ) ).forEach( function( bttn ) { + new LoaderButton( bttn, { + callback : function( instance ) { + var progress = 0, + interval = setInterval( function() { + // progress is randomly calculated + progress = Math.min( progress + Math.random() * 0.1, 1 ); + instance._setProgress( progress ); + + if( progress === 1 ) { + instance._stop(1); + clearInterval( interval ); + } + }, 200 ); // 200ms interval + } + } ); +} ); diff --git a/challenges/second-chall-initial/static/s3parat3-style.css b/challenges/second-chall-initial/static/s3parat3-style.css new file mode 100644 index 0000000..50c6e57 --- /dev/null +++ b/challenges/second-chall-initial/static/s3parat3-style.css @@ -0,0 +1,323 @@ +body { + background: #e0e5ec; + font-family: Arial, Helvetica, sans-serif; +} +h1 { + position: relative; + text-align: center; + color: #353535; + font-size: 50px; +} +a{ + text-decoration: none; + color: white; +} +p { + font-family: 'Lato', sans-serif; + font-weight: 300; + text-align: center; + font-size: 18px; + color: #676767; +} +.frame { + width: 90%; + margin: 40px auto; + text-align: center; +} +button { + margin: 20px; +} +.custom-btn { + width: 130px; + height: 40px; + color: #fff; + border-radius: 5px; + padding: 10px 25px; + font-family: 'Lato', sans-serif; + font-weight: 500; + background: transparent; + cursor: pointer; + transition: all 0.3s ease; + position: relative; + display: inline-block; + box-shadow:inset 2px 2px 2px 0px rgba(255,255,255,.5), + 7px 7px 20px 0px rgba(0,0,0,.1), + 4px 4px 5px 0px rgba(0,0,0,.1); + outline: none; +} + +/* 1 */ +.btn-1 { + background: rgb(6,14,131); + background: linear-gradient(0deg, rgba(6,14,131,1) 0%, rgba(12,25,180,1) 100%); + border: none; +} +.btn-1:hover { + background: rgb(0,3,255); +background: linear-gradient(0deg, rgba(0,3,255,1) 0%, rgba(2,126,251,1) 100%); +} + +/* 2 */ +.btn-2 { + background: rgb(96,9,240); + background: linear-gradient(0deg, rgba(96,9,240,1) 0%, rgba(129,5,240,1) 100%); + border: none; + +} +.btn-2:before { + height: 0%; + width: 2px; +} +.btn-2:hover { + box-shadow: 4px 4px 6px 0 rgba(255,255,255,.5), + -4px -4px 6px 0 rgba(116, 125, 136, .5), + inset -4px -4px 6px 0 rgba(255,255,255,.2), + inset 4px 4px 6px 0 rgba(0, 0, 0, .4); +} + + +/* 3 */ +.btn-3 { + border: none; + transition: all 0.3s ease; + overflow: hidden; +} +.btn-3:after { + position: absolute; + content: " "; + z-index: -1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #1fd1f9; +background-image: linear-gradient(315deg, #1fd1f9 0%, #b621fe 74%); + transition: all 0.3s ease; +} +.btn-3:hover { + background: transparent; + box-shadow: 4px 4px 6px 0 rgba(255,255,255,.5), + -4px -4px 6px 0 rgba(116, 125, 136, .2), + inset -4px -4px 6px 0 rgba(255,255,255,.5), + inset 4px 4px 6px 0 rgba(116, 125, 136, .3); + color: #fff; +} +.btn-3:hover:after { + -webkit-transform: scale(2) rotate(180deg); + transform: scale(2) rotate(180deg); + box-shadow: 4px 4px 6px 0 rgba(255,255,255,.5), + -4px -4px 6px 0 rgba(116, 125, 136, .2), + inset -4px -4px 6px 0 rgba(255,255,255,.5), + inset 4px 4px 6px 0 rgba(116, 125, 136, .3); +} + +/* 4 */ +.btn-4 { + background: rgb(22,9,240); +background: linear-gradient(0deg, rgba(22,9,240,1) 0%, rgba(49,110,244,1) 100%); + color: #fff; + border: none; + transition: all 0.3s ease; + overflow: hidden; +} +.btn-4:after { + position: absolute; + content: " "; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + transition: all 0.3s ease; + -webkit-transform: scale(.1); + transform: scale(.1); +} +.btn-4:hover { + color: #fff; + border: none; + background: transparent; +} +.btn-4:hover:after { + background: rgb(0,3,255); +background: linear-gradient(0deg, rgba(2,126,251,1) 0%, rgba(0,3,255,1)100%); + -webkit-transform: scale(1); + transform: scale(1); +} + +/* 5 */ +.btn-5 { + border: none; + background: rgb(251,33,117); + background: linear-gradient(0deg, rgba(251,33,117,1) 0%, rgba(234,76,137,1) 100%); + color: #fff; + overflow: hidden; +} +.btn-5:hover { + text-decoration: none; + color: #fff; +} +.btn-5:before { + position: absolute; + content: ''; + display: inline-block; + top: -180px; + left: 0; + width: 30px; + height: 100%; + background-color: #fff; + animation: shiny-btn1 3s ease-in-out infinite; +} +.btn-5:hover{ + opacity: .7; +} +.btn-5:active{ + box-shadow: 4px 4px 6px 0 rgba(255,255,255,.3), + -4px -4px 6px 0 rgba(116, 125, 136, .2), + inset -4px -4px 6px 0 rgba(255,255,255,.2), + inset 4px 4px 6px 0 rgba(0, 0, 0, .2); +} + + +@-webkit-keyframes shiny-btn1 { + 0% { -webkit-transform: scale(0) rotate(45deg); opacity: 0; } + 80% { -webkit-transform: scale(0) rotate(45deg); opacity: 0.5; } + 81% { -webkit-transform: scale(4) rotate(45deg); opacity: 1; } + 100% { -webkit-transform: scale(50) rotate(45deg); opacity: 0; } +} + + + +/* 6 */ +.btn-6 { + background-color: #89d8d3; +background-image: linear-gradient(315deg, #89d8d3 0%, #03c8a8 74%); + border: none; + z-index: 1; +} +.btn-6:after { + position: absolute; + content: ""; + width: 100%; + height: 0; + bottom: 0; + left: 0; + z-index: -1; + border-radius: 5px; + background-color: #4dccc6; +background-image: linear-gradient(315deg, #4dccc6 0%, #96e4df 74%); + box-shadow: + -7px -7px 20px 0px #fff9, + -4px -4px 5px 0px #fff9, + 7px 7px 20px 0px #0002, + 4px 4px 5px 0px #0001; + transition: all 0.3s ease; +} +.btn-6:hover { + color: #fff; +} +.btn-6:hover:after { + top: 0; + height: 100%; +} +.btn-6:active { + top: 2px; +} + + +/* 14 */ +.btn-7 { + background: rgb(255,151,0); + border: none; + z-index: 1; +} +.btn-7:after { + position: absolute; + content: ""; + width: 100%; + height: 0; + top: 0; + left: 0; + z-index: -1; + border-radius: 5px; + background-color: #eaf818; + background-image: linear-gradient(315deg, #eaf818 0%, #f6fc9c 74%); + box-shadow:inset 2px 2px 2px 0px rgba(255,255,255,.5); + transition: all 0.3s ease; +} +.btn-7:hover { + color: #000; +} +.btn-7:hover:after { + top: auto; + bottom: 0; + height: 100%; +} +.btn-7:active { + top: 2px; +} + +/* 8 */ +.btn-8 { + background: #b621fe; + border: none; + z-index: 1; +} +.btn-8:after { + position: absolute; + content: ""; + width: 0; + height: 100%; + top: 0; + right: 0; + z-index: -1; + background-color: #663dff; + border-radius: 5px; + box-shadow:inset 2px 2px 2px 0px rgba(255,255,255,.5), + 7px 7px 20px 0px rgba(0,0,0,.1), + 4px 4px 5px 0px rgba(0,0,0,.1); + transition: all 0.3s ease; +} +.btn-8:hover { + color: #fff; +} +.btn-8:hover:after { + left: 0; + width: 100%; +} +.btn-8:active { + top: 2px; +} + + +/* 9 */ +.btn-9 { + border: none; + color: #000; +} +.btn-9:after { + position: absolute; + content: ""; + width: 0; + height: 100%; + top: 0; + left: 0; + direction: rtl; + z-index: -1; + box-shadow: + -7px -7px 20px 0px #fff9, + -4px -4px 5px 0px #fff9, + 7px 7px 20px 0px #0002, + 4px 4px 5px 0px #0001; + transition: all 0.3s ease; +} +.btn-9:hover { + color: #000; +} +.btn-9:hover:after { + left: auto; + right: 0; + width: 100%; +} +.btn-9:active { + top: 2px; +} \ No newline at end of file diff --git a/paths_config.yml b/paths_config.yml new file mode 100644 index 0000000..71baa10 --- /dev/null +++ b/paths_config.yml @@ -0,0 +1,9 @@ +INITIAL: + - ./challenges/first-chall-initial/config.yml + - ./challenges/second-chall-initial/config.yml +PATHS: + path1: + - ./challenges/first-chall-first-path/config.yml + - ./challenges/second-chall-first-path/config.yml + path2: + - ./challenges/first-chall-second-path/config.yml