├── Phase3 ├── src │ ├── init.php │ ├── images │ │ ├── bg.jpg │ │ ├── Thumbs.db │ │ ├── pic01.jpg │ │ ├── pic02.jpg │ │ ├── pic03.jpg │ │ ├── pic04.jpg │ │ └── pic05.jpg │ ├── css │ │ ├── images │ │ │ ├── overlay.png │ │ │ └── arrow.svg │ │ ├── style-large.css │ │ ├── ie │ │ │ ├── v9.css │ │ │ ├── html5shiv.js │ │ │ ├── v8.css │ │ │ └── backgroundsize.min.htc │ │ ├── style-medium.css │ │ ├── style-small.css │ │ ├── style-xsmall.css │ │ ├── skel.css │ │ ├── font-awesome.min.css │ │ └── style.css │ ├── js │ │ ├── jquery.scrolly.min.js │ │ ├── jquery.scrollex.min.js │ │ ├── init.js │ │ └── skel.min.js │ ├── func.php │ ├── Login.php │ ├── index.php │ ├── restaurantSearch.php │ └── database.php ├── GT-CoC-mySQL-Server-Connection-Instructions.pdf └── test.sql ├── Phase1 ├── ER Final.pdf ├── Info Flow Chart.pdf └── Phase 1 Cover Page and Constraints and Assumptions.docx.pdf ├── Final_Demo ├── Final_Report.pdf ├── Figure4.sql ├── Figure3.sql ├── Figure1.sql ├── Figure5.sql ├── Figure6.sql ├── Figure2.sql └── Figure7.sql ├── RestaurantInspection_v1.2.pdf ├── Phase2 ├── Phase2_Schema_Diagram.pdf └── CreateTables.sql └── README.md /Phase3/src/init.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Phase1/ER Final.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase1/ER Final.pdf -------------------------------------------------------------------------------- /Phase3/src/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/images/bg.jpg -------------------------------------------------------------------------------- /Final_Demo/Final_Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Final_Demo/Final_Report.pdf -------------------------------------------------------------------------------- /Phase1/Info Flow Chart.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase1/Info Flow Chart.pdf -------------------------------------------------------------------------------- /Phase3/src/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/images/Thumbs.db -------------------------------------------------------------------------------- /Phase3/src/images/pic01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/images/pic01.jpg -------------------------------------------------------------------------------- /Phase3/src/images/pic02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/images/pic02.jpg -------------------------------------------------------------------------------- /Phase3/src/images/pic03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/images/pic03.jpg -------------------------------------------------------------------------------- /Phase3/src/images/pic04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/images/pic04.jpg -------------------------------------------------------------------------------- /Phase3/src/images/pic05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/images/pic05.jpg -------------------------------------------------------------------------------- /RestaurantInspection_v1.2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/RestaurantInspection_v1.2.pdf -------------------------------------------------------------------------------- /Phase2/Phase2_Schema_Diagram.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase2/Phase2_Schema_Diagram.pdf -------------------------------------------------------------------------------- /Phase3/src/css/images/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/src/css/images/overlay.png -------------------------------------------------------------------------------- /Phase3/GT-CoC-mySQL-Server-Connection-Instructions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase3/GT-CoC-mySQL-Server-Connection-Instructions.pdf -------------------------------------------------------------------------------- /Phase1/Phase 1 Cover Page and Constraints and Assumptions.docx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/My-Machine-Learning-Projects-CT/Georgia-Restaurant_Inspection/main/Phase1/Phase 1 Cover Page and Constraints and Assumptions.docx.pdf -------------------------------------------------------------------------------- /Phase3/src/css/style-large.css: -------------------------------------------------------------------------------- 1 | /* 2 | Highlights by HTML5 UP 3 | html5up.net | @n33co 4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 5 | */ 6 | 7 | /* Basic */ 8 | 9 | body, input, select, textarea { 10 | font-size: 12pt; 11 | } -------------------------------------------------------------------------------- /Phase3/src/css/ie/v9.css: -------------------------------------------------------------------------------- 1 | /* 2 | Highlights by HTML5 UP 3 | html5up.net | @n33co 4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 5 | */ 6 | 7 | /* Loader */ 8 | 9 | html body:before, html body:after { 10 | display: none !important; 11 | } -------------------------------------------------------------------------------- /Final_Demo/Figure4.sql: -------------------------------------------------------------------------------- 1 | /*Figure 4 */ 2 | /*Operator insert information about their restaurant*/ 3 | /*show users all the cuisines*/ 4 | SELECT * 5 | FROM cuisines; 6 | /*when inserting into a restaurant, make sure RID is unique and cuisine type is legal and email*/ 7 | INSERT INTO restaurant 8 | VALUES (21,4041234567, "Elephant Bar", "Fulton", "245 North Ave", "Atlanta", "GA", 30332, "American", "ppatel@gmail.com"); 9 | -------------------------------------------------------------------------------- /Phase3/src/css/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Final_Demo/Figure3.sql: -------------------------------------------------------------------------------- 1 | /*Figure 3*/ 2 | /*allows a user to enter food/safety complaint information about a restaurant. */ 3 | /*show user all the available restaurants frst*/ 4 | SELECT * 5 | FROM restaurant; 6 | /*Note: customer need to exist first*/ 7 | /*When inserting a customer, make sure the phone num is unique in db*/ 8 | INSERT INTO customer 9 | VALUES ('1234567890', 'aaa', 'bbb'); 10 | /*When inserting a customer, make sure the phone num exist*/ 11 | INSERT INTO complaint 12 | VALUES ('1', '1234567890', '2015-08-19', 'TESTING INSERT COMPLAINT'); -------------------------------------------------------------------------------- /Final_Demo/Figure1.sql: -------------------------------------------------------------------------------- 1 | /*figure 1*/ 2 | /*The GRHI login screen is shown in Figure 1. Restaurant operators 3 | and state health inspectors can log into the system and are required 4 | to enter a password for the security of the database. Others who are 5 | just looking for restaurant inspection reports/scores can simply login in as a guest.*/ 6 | /*Condition 1: the successful login should return a user name*/ 7 | SELECT username 8 | FROM registereduser 9 | WHERE username = "chuney" AND password = "1234"; 10 | /*Condition 2: otherwise, nothing is going to be returned*/ 11 | SELECT username 12 | FROM registereduser 13 | WHERE username = "chuney" AND password = "1345"; 14 | -------------------------------------------------------------------------------- /Phase3/src/js/jquery.scrolly.min.js: -------------------------------------------------------------------------------- 1 | /* jquery.scrolly v1.0.0-dev | (c) n33 | n33.co @n33co | MIT */ 2 | (function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o -------------------------------------------------------------------------------- /Phase3/src/js/jquery.scrollex.min.js: -------------------------------------------------------------------------------- 1 | /* jquery.scrollex v0.2.0 | (c) n33 | n33.co @n33co | MIT */ 2 | (function(e){function g(e,r,i){return typeof e=="string"&&(e.slice(-1)=="%"?e=parseInt(e[t](0,e[n]-1))/100*r:e.slice(-2)=="vh"?e=parseInt(e[t](0,e[n]-2))/100*i:e.slice(-2)=="px"&&(e=parseInt(e[t](0,e[n]-2)))),e}var t="substring",n="length",r="scroll",i="clearTimeout",s="timeoutId",o="options",u="_scrollexId",a="default",f=null,l="apply",c="element",h="initialize",p="unscrollex",d=e(window),v=1,m={};d.on(r,function(){var t=d.scrollTop();e.map(m,function(e){window[i](e[s]),e[s]=window.setTimeout(function(){e.handler(t)},e[o].delay)})}).on("load",function(){d.trigger(r)}),jQuery.fn.scrollex=function(t){var i,s,p,y,b,w,E=e(this);if(this[n]==0)return E;if(this[n]>1){for(i=0;i=r&&e<=i};break;case"bottom":y=function(e,t,n,r,i){return n>=r&&n<=i};break;case"middle":y=function(e,t,n,r,i){return t>=r&&t<=i};break;case"top-only":y=function(e,t,n,r){return e<=r&&r<=n};break;case"bottom-only":y=function(e,t,n,r,i){return n>=i&&i>=e};break;default:case a:y=function(e,t,n,r,i){return n>=r&&e<=i}}return b=function(e){var t=this.state,n=!1,i=this.$element.offset(),s=d.height(),u=e+s/2,a=e+s,f=this.$element.outerHeight(),h=i.top+g(this[o].top,f,s),p=i.top+f-g(this[o].bottom,f,s);n=this.test(e,u,a,h,p),n!=t&&(this.state=n,n?this[o].enter&&this[o].enter[l](this[c]):this[o].leave&&this[o].leave[l](this[c])),this[o][r]&&this[o][r][l](this[c],[(u-h)/(p-h)])},w={id:s,options:p,test:y,handler:b,state:!1,element:this,$element:E,timeoutId:f},m[s]=w,E.data(u,w.id),w[o][h]&&w[o][h][l](this),E},jQuery.fn[p]=function(){var t,r,a,f=e(this);if(this[n]==0)return f;if(this[n]>1){for(t=0;t allI.idate; 34 | 35 | 36 | /*find the inspections with the second last one*/ 37 | CREATE OR REPLACE VIEW secLastI AS 38 | SELECT DISTINCT i.idate, i.itemnum, i.description, i.score, i.totalscore, i.passfail 39 | FROM nolastI i 40 | WHERE NOT EXISTS 41 | (SELECT i.idate 42 | FROM nolastI b 43 | WHERE i.idate < b.idate 44 | ); 45 | 46 | 47 | /* finally we get the last 2 idate*/ 48 | SELECT DISTINCT i.idate AS InspectionDate, i.itemnum AS ItemNumber, i.description AS ItemDescription, i.score AS Score, 49 | i.passfail AS Result, i.totalscore AS TotalScore 50 | FROM theRestaurantIns i, secLastI, lastI 51 | WHERE i.idate = lastI.idate OR i.idate = secLastI.idate; 52 | 53 | 54 | -------------------------------------------------------------------------------- /Final_Demo/Figure6.sql: -------------------------------------------------------------------------------- 1 | /*Figure 6a*/ 2 | /*inserting a restaurant inspection report*/ 3 | /* first show the user all the items with discreption*/ 4 | SELECT i.itemnum AS ItemNumber, i.description AS ItemDescription, i.critical AS Critical 5 | FROM item i; 6 | /*before insert into containing make sure the inespction report exist*/ 7 | /*before creating the inspection report, make sure rid idate combination is unique and iid exists*/ 8 | INSERT INTO inspection 9 | VALUES (2, 2, "2015-7-7", 100, "PASS"); 10 | /*before insert into containing make sure the rid idate combination exists, make sure 1to8 < 9(perfect score), 9to15<4(perfect score)*/ 11 | INSERT INTO containing 12 | VALUES (1, 2, "2015-7-7", 9); 13 | INSERT INTO containing 14 | VALUES (2, 2, "2015-7-7", 9); 15 | INSERT INTO containing 16 | VALUES (3, 2, "2015-7-7", 9); 17 | INSERT INTO containing 18 | VALUES (4, 2, "2015-7-7", 9); 19 | INSERT INTO containing 20 | VALUES (5, 2, "2015-7-7", 9); 21 | INSERT INTO containing 22 | VALUES (6, 2, "2015-7-7", 9); 23 | INSERT INTO containing 24 | VALUES (7, 2, "2015-7-7", 9); 25 | INSERT INTO containing 26 | VALUES (8, 2, "2015-7-7", 9); 27 | INSERT INTO containing 28 | VALUES (9, 2, "2015-7-7", 4); 29 | INSERT INTO containing 30 | VALUES (10, 2, "2015-7-7", 4); 31 | INSERT INTO containing 32 | VALUES (11, 2, "2015-7-7", 4); 33 | INSERT INTO containing 34 | VALUES (12, 2, "2015-7-7", 4); 35 | INSERT INTO containing 36 | VALUES (13, 2, "2015-7-7", 4); 37 | INSERT INTO containing 38 | VALUES (14, 2, "2015-7-7", 4); 39 | INSERT INTO containing 40 | VALUES (15, 2, "2015-7-7", 4); 41 | 42 | 43 | 44 | /*Figure 6b*/ 45 | /*In figure 6b, an Inspector can enter additional comments about the observed 46 | condition of any item on the inspection list. 47 | He/she will enter Inspector ID, Restaurant ID, Date and Item number with associated Comments.*/ 48 | /*make sure the itemnum is unique. rid and iid combination is unique*/ 49 | INSERT INTO includes 50 | VALUES (1, 16, "2015-3-18", "Eggs are rotten!"); -------------------------------------------------------------------------------- /Phase3/src/css/style-xsmall.css: -------------------------------------------------------------------------------- 1 | /* 2 | Highlights by HTML5 UP 3 | html5up.net | @n33co 4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 5 | */ 6 | 7 | /* Basic */ 8 | 9 | html, body { 10 | min-width: 320px; 11 | } 12 | 13 | /* List */ 14 | 15 | ul.actions { 16 | margin: 0 0 2em 0; 17 | } 18 | 19 | ul.actions li { 20 | display: block; 21 | padding: 1em 0 0 0; 22 | text-align: center; 23 | width: 100%; 24 | } 25 | 26 | ul.actions li:first-child { 27 | padding-top: 0; 28 | } 29 | 30 | ul.actions li > * { 31 | margin: 0 !important; 32 | width: 100%; 33 | } 34 | 35 | ul.actions.small li { 36 | padding: 0.5em 0 0 0; 37 | } 38 | 39 | ul.actions.small li:first-child { 40 | padding-top: 0; 41 | } 42 | 43 | ul.icons-grid li { 44 | box-shadow: inset 0 1px 0 0 #dddddd !important; 45 | float: none; 46 | margin: 2em 0 0 0; 47 | padding: 2em 0 0 0; 48 | width: 100%; 49 | } 50 | 51 | ul.icons-grid li:first-child { 52 | box-shadow: none !important; 53 | margin-top: 0; 54 | padding: 1em 0 0 0; 55 | } 56 | 57 | ul.icons-grid li:nth-child(2n + 1) { 58 | box-shadow: none; 59 | } 60 | 61 | ul.icons-grid li:nth-child(2n + 3):before { 62 | display: none; 63 | } 64 | 65 | /* Button */ 66 | 67 | input[type="submit"], 68 | input[type="reset"], 69 | input[type="button"], 70 | button, 71 | .button { 72 | padding: 0; 73 | } 74 | 75 | input[type="submit"].icon, 76 | input[type="reset"].icon, 77 | input[type="button"].icon, 78 | button.icon, 79 | .button.icon { 80 | padding-left: 0; 81 | } 82 | 83 | /* Main */ 84 | 85 | .main .container { 86 | padding: 3em 1em 1em 1em; 87 | } 88 | 89 | .main .container .image.primary:first-child { 90 | margin: -2em 0 2.5em 0; 91 | } 92 | 93 | /* Footer */ 94 | 95 | #footer .container { 96 | padding: 3em 1em 1em 1em; 97 | } 98 | 99 | #footer footer .copyright { 100 | line-height: inherit; 101 | } 102 | 103 | #footer footer .copyright li { 104 | border-left: 0; 105 | display: block; 106 | margin: 0; 107 | padding: 0; 108 | } -------------------------------------------------------------------------------- /Phase3/src/css/ie/html5shiv.js: -------------------------------------------------------------------------------- 1 | /* 2 | HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); 5 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; 6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); 8 | for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;dinspection.totalscore 4 | zipcode→restaurant.zipcode 5 | restaurant name→restaurant.name 6 | cuisine→ restaurant.cuisine & cuisines.cuisine 7 | */ 8 | /*figure 2a*/ 9 | /*show all the cuisines to the users*/ 10 | SELECT * 11 | FROM cuisines; 12 | 13 | 14 | /*First, create a view specifying all the last inspection date of the restaurants*/ 15 | CREATE OR REPLACE VIEW lastI AS 16 | SELECT i.rid AS rid, i.idate AS idate 17 | FROM inspection i 18 | WHERE NOT EXISTS 19 | (SELECT i.rid, i.idate 20 | FROM inspection b 21 | WHERE i.rid = b.rid AND i.idate < b.idate 22 | ); 23 | 24 | 25 | /*Constraint 1.inspection score (less than or greater than)and zipcode*/ 26 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 27 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 28 | FROM inspection I, restaurant R, lastI 29 | WHERE I.rid=R.rid AND lastI.idate = I.idate 30 | AND (I.totalscore >25) AND (R.zipcode=30339); 31 | 32 | 33 | /*Constraint 2.inspection score(less than or greater than) and zipcode and restaurant name*/ 34 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 35 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 36 | FROM inspection I, restaurant R, lastI 37 | WHERE I.rid=R.rid AND lastI.idate = I.idate 38 | AND (I.totalscore >25) AND (R.zipcode=30339) AND (R.name = 'Heirloom'); 39 | 40 | 41 | 42 | /*another example of constraint 2*/ 43 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 44 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 45 | FROM inspection I, restaurant R, lastI 46 | WHERE I.rid=R.rid AND lastI.idate = I.idate 47 | AND (I.totalscore >25) AND (R.zipcode=30080) AND (R.name = 'Mezza Luna'); 48 | 49 | 50 | /*Constraint 3.inspection score(less than or greater than) and zipcode and cuisine*/ 51 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 52 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 53 | FROM inspection I, restaurant R, lastI 54 | WHERE I.rid=R.rid AND lastI.idate = I.idate 55 | AND (I.totalscore >25) AND (R.cuisine = "Chinese") AND (R.zipcode=30339); 56 | 57 | /*Constraint 4.inspection score(less than or greater than) and zipcode and cuisine and restaurant name*/ 58 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 59 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 60 | FROM inspection I, restaurant R, lastI 61 | WHERE I.rid=R.rid AND lastI.idate = I.idate 62 | AND (I.totalscore >25) AND (R.cuisine = "American") AND (R.zipcode=30318) AND (R.name = "Bocado"); 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Phase2/CreateTables.sql: -------------------------------------------------------------------------------- 1 | create table registerUser ( 2 | userName char(30), 3 | pswd char(30), 4 | primary key(userName)); 5 | 6 | create table inspector ( 7 | iUserName char(30), 8 | iID int(20), 9 | iPhone int(10), 10 | iFName char(30), 11 | iLName char(30), 12 | primary key (iUserName), 13 | foreign key(iUserName) references registerUser(userName), 14 | unique (iID), 15 | unique(iPhone)); 16 | 17 | create table operator ( 18 | oUserName char(30), 19 | oPhone int(10), 20 | oEmail char(30), 21 | oFName char(30), 22 | oLName char(30), 23 | primary key (oUserName), 24 | foreign key(oUserName) references registerUser(userName), 25 | unique (oEmail), 26 | unique (oPhone)); 27 | 28 | create table healthPermit ( 29 | hpID int(9), 30 | dateExpires date, 31 | primary key (hpID) 32 | ); 33 | 34 | create table cuisineType ( 35 | cuisine char(30), 36 | primary key (cuisine) 37 | ); 38 | 39 | create table customer ( 40 | cPhone int(10), 41 | cFName char(30), 42 | cLName char(30), 43 | primary key (cPhone) 44 | ); 45 | 46 | create table restaurant ( 47 | rID int(20), 48 | rPhone int(10), 49 | zipCode int(10), 50 | state char(2), 51 | city char(20), 52 | street char(50), 53 | rName char(50), 54 | county char(10), 55 | rHPID int(9), 56 | rCuisine char(30), 57 | rOperatorUserName char(30), 58 | primary key (rID), 59 | unique (rPhone), 60 | unique(zipCode, state, city, street), 61 | foreign key (rHPID) references healthPermit(hpID), 62 | foreign key (rCuisine) references cuisineType(cuisine), 63 | foreign key (rOperatorUserName) references operator(oUsername) 64 | ); 65 | 66 | create table item ( 67 | itemNumber int(2), 68 | perfectScore int(3), 69 | itemDescription char(200), 70 | itemCritical char(5), 71 | primary key (itemNumber) 72 | ); 73 | 74 | create table inspection ( 75 | inspectionDate date, 76 | RID int(20), 77 | totalScore int(3), 78 | passOrFail char(5), 79 | inspectorUserName char(30), 80 | primary key (inspectionDate, RID), 81 | foreign key (RID) references restaurant(rID), 82 | foreign key (inspectorUserName) references inspector(iUserName)); 83 | 84 | create table complaint ( 85 | complaintDate date, 86 | customerPhone int(10), 87 | listedRID int(20), 88 | complaintDescription char(200), 89 | primary key (complaintDate, customerPhone, listedRID), 90 | foreign key (customerPhone) references customer(cPhone), 91 | foreign key (listedRID) references restaurant(rID)); 92 | 93 | create table includes ( 94 | includedDate date, 95 | includedRID int(20), 96 | includedItemNumber int(2), 97 | comment char(200), 98 | primary key (includedDate, includedRID, includedItemNumber), 99 | foreign key (includedDate) references inspection(inspectionDate), 100 | foreign key (includedRID) references restaurant(rID), 101 | foreign key (includedItemNumber) references item(itemNumber)); 102 | 103 | 104 | create table contains( 105 | containedDate date, 106 | containedRID int(20), 107 | containedItemNumber int(2), 108 | score int(1), 109 | primary key (containedDate , containedRID , containedItemNumber ), 110 | foreign key (containedDate) references inspection(inspectionDate), 111 | foreign key (containedRID ) references restaurant(rID), 112 | foreign key (containedItemNumber ) references item(itemNumber)); 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /Phase3/src/Login.php: -------------------------------------------------------------------------------- 1 | login($username, $password)) 15 | { 16 | $_SESSION['username'] = $username; 17 | if($_SESSION['isstaff'] == false) { 18 | if($_SESSION['hasprofile'] == false) { 19 | redirect('Profile.php'); 20 | } 21 | else { 22 | redirect('userHomePage.php'); 23 | } 24 | } 25 | if($_SESSION['isstaff'] == true) 26 | redirect('staffHomePage.php'); 27 | } 28 | else { 29 | $login_err = "Login unsuccessful"; 30 | } 31 | } 32 | } 33 | ?> 34 | 35 | 36 | 37 | 38 | 39 | 40 | Library Manage System 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 55 | 56 | 59 | 60 | 61 | 62 | 82 | 83 | 84 | 89 | 90 | -------------------------------------------------------------------------------- /Phase3/src/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Georgia Restaurant Health Inspection System 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 20 | 21 | 22 | 23 | 24 | 35 | 36 | 37 |
38 |
39 | 40 |
41 |
42 |

Georgia Restaurant Health Inspection System

43 |
44 |

45 | Welcome to Georgia Restaurant Health Inspection System .The Georgia Restaurant Health Inspection system (GRHI) is a database application for managing and sharing information about health inspections for restaurants in the state of Georgia. 46 | With this, you can eat better and healthier in the future! 47 |

48 |
49 | Next 50 |
51 |
52 | 53 | 54 | 75 | 76 | -------------------------------------------------------------------------------- /Phase3/src/restaurantSearch.php: -------------------------------------------------------------------------------- 1 | 23 | 24 | 25 | 26 | 27 | 28 | Library Manage System 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 43 | 44 | 47 | 48 | 49 | 50 | 83 | 84 | 85 | 90 | 91 | -------------------------------------------------------------------------------- /Phase3/src/css/ie/backgroundsize.min.htc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Project: Georgia Restaurant Inspection 2 | 3 | The purpose of this project is to analyze, specify, design, implement, document, and demonstrate a database management information system called the Georgia Restaurant Health Inspection System. The project will proceed in three phases as outlined in the Classical Methodology for Database Development: Analysis & Specification, Design, and Implementation & Testing. The system should be implemented using a Database Management System (DBMS) that supports standard SQL queries. Class administrators will provide you with information about how to access a college-managed MySQL server in order to implement your database. Your professor must approve alternative implementations. Under no circumstances may you use a tool that automatically generates SQL or automatically maps programming objects into the database. 4 | 5 | Please refer to RestaurantInspection_v1.2.pdf for the project guidelines 6 | 7 | 8 | ## Project Progress Logs 9 | Below are notes of all activities throughout the duration of the project. 10 | 11 | ### 5/30/2015 12 | Finished IFD 13 | Ask TA for verification and EER diagram help to be contd 14 | 15 | ### 5/31/2015 16 | ER diagram on drive started by Christine 17 | 18 | ### 6/1/2015 19 | Arnav attended TA office hours from 2:30 - 6 pm. Main focus on EER. 20 | 1. Criteria should not be an entity. Instead, criteria is used for our SQL query statements. 21 | 2. “Restaurant list” as an entity is not needed. 22 | 3. Regarding users of the database, restaurant operators and inspectors require username and password to access database as registered users while customers don’t. So we can have two superclasses: registered users whose subclasses are restaurant operators and inspectors, and guests (a.k.a customer). 23 | 4. A customer must create a complaint in order to be logged into the database. A complaint must be made. Many customers can complain about the same thing just as many complaints can be made by a customer. Complaint is a weak entity type with description, and Date as a partial key attribute; complaint is related to customer and the restaurant. 24 | 5. Major changes from above added to EER. Will add necessary attributes to each entity later. 25 | 26 | ### 6/2/2015 27 | By Christine 28 | 1. change customers to customer 29 | 2. change customer to weak entity type 30 | 3. Attribute added 31 | 32 | ### 6/3/2015 33 | TA suggested that for each GUI, we create an IFD. 34 | If you want to learn SQL quickly and easily, go to http://www.w3schools.com/sql/default.asp 35 | Questions to ask TAs: 36 | 1. “Detailed Descriptions+Scores” as one single attribute? 37 | 38 | ### 6/4/2015 39 | Proposing the following assumptions (let’s make a list over here for now which we can add on to): 40 | 1. Inspections occur annually for all the restaurants. 41 | 2. Upon creating a restaurant, restaurant won’t have an inspection until a year after being in service. 42 | 3. Upon being hired as a restaurant inspector, the inspector won’t immediately start inspecting restaurants (only in the beginning of the job for a very small amount of time, an inspector would have 0 inspection reports filed). 43 | 4. Enter any assumptions starting here. 44 | Need to start creating list of constraints as well. 45 | 46 | ### 6/9/2015 47 | submitted phase 1 48 | 49 | ### 6/13/2015 50 | started mapping EER 51 | Ask TA: how to map derived attributes 52 | 53 | ### 6/24/2015 54 | Arnav created all SQL statements which will be checked during office hours. 55 | 56 | ### 7/17/2015 57 | Learn PHP 58 | GUIs needed coding 59 | 1. guest restaurant search 60 | 2. guest restaurant results display 61 | 3. guest enter food/safety complaint 62 | 4. operator enter restaurant info 63 | 5. operator restaurant health inspection search 64 | 6. operator restaurant health inspection search results 65 | 7. inspector input of inspection report, comment on specific items 66 | 8. inspector display report of restaurant inspections for specified month and year organized by county and cuisine in sorted order. 67 | 9. Inspector run summary report about restaurant inspections for specified county and year. 68 | 69 | ### 7/19/2015 70 | Completed most of queries. Christine does 7d, Will does 6b, Arnav does 6a. Must finish before attending office hours. 71 | ### 7/20/2015 72 | Christine and Arnav will attend TA office hours, go over GUIs and corresponding queries, ask if queries meet all cases, ask about edge cases. 73 | -------------------------------------------------------------------------------- /Final_Demo/Figure7.sql: -------------------------------------------------------------------------------- 1 | 2 | /*figure 7a*/ 3 | /*In figure 7a, an inspector can run a summary report about restaurant inspections 4 | for a specified month and year. The summary data is organized by County and Cuisine in sorted order.*/ 5 | CREATE OR REPLACE VIEW numRest AS 6 | SELECT r.county, r.cuisine, COUNT(*) AS NumOfRestaurantInspected 7 | FROM restaurant r, inspection i 8 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') 9 | GROUP BY r.county, r.cuisine; 10 | CREATE OR REPLACE VIEW numFail AS 11 | SELECT r.county, r.cuisine, COUNT(*) AS NumFail 12 | FROM restaurant r, inspection i 13 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') AND (i.passfail = "FAIL") 14 | GROUP BY r.county, r.cuisine; 15 | /*this has all the result except the grandtotal*/ 16 | /*if the county with the cuisine has no inspection fail, the NumFail column will be NULL*/ 17 | /*CREATE OR REPLACE VIEW raw7a AS*/ 18 | SELECT numRest.county, numRest.cuisine, numRest.NumOfRestaurantInspected, numFail.NumFail 19 | FROM numRest 20 | LEFT OUTER JOIN numFail 21 | ON numRest.county = numFail.county AND numRest.cuisine = numFail.cuisine; 22 | /*count all the fails*/ 23 | CREATE OR REPLACE VIEW totalFail AS 24 | SELECT count(*) AS NumFail 25 | FROM restaurant r, inspection i 26 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') AND (i.passfail = "FAIL"); 27 | /*count all the inspections*/ 28 | CREATE OR REPLACE VIEW totalInspected AS 29 | SELECT COUNT(*) AS NumOfRestaurantInspected 30 | FROM restaurant r, inspection i 31 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01'); 32 | /*combine the grandtotal and display*/ 33 | /*CREATE OR REPLACE VIEW grandTotal */ 34 | SELECT totalInspected.NumOfRestaurantInspected AS TotalNumOfRestaurantInspected,totalFail.NumFail AS TotalNumFail 35 | FROM totalInspected, totalFail; 36 | /*count sub fails num*/ 37 | CREATE OR REPLACE VIEW SubNumFail AS 38 | SELECT r.county AS County, COUNT(*) AS SubNumFail 39 | FROM restaurant r, inspection i 40 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') AND (i.passfail = "FAIL") 41 | GROUP BY r.county; 42 | /*count sub inspected num*/ 43 | CREATE OR REPLACE VIEW SubNumInspected AS 44 | SELECT r.county AS County, COUNT(*) AS SubNumInspected 45 | FROM restaurant r, inspection i 46 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') 47 | GROUP BY r.county; 48 | /*this is all the subtotal results*/ 49 | SELECT i.County, i.SubNumInspected, f.SubNumFail 50 | FROM SubNumInspected i, SubNumFail f 51 | WHERE i.County = f.County; 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | /*figure 7b*/ 67 | /*an inspector can run a summary report about restaurant inspections for a specified county and year.*/ 68 | SELECT R.county AS County, MONTHNAME(S.idate) AS Month,COUNT(R.rid) AS RestaurantInspected 69 | FROM restaurant R, inspection S 70 | Where (S.rid=R.rid) AND (R.county="Fulton") 71 | AND (YEAR(S.idate)=2015) 72 | GROUP BY MONTH(S.idate),R.rid; 73 | /*count grandtotal of restaurant has been inspected in the year*/ 74 | SELECT R.county AS County, COUNT(R.rid) AS TotalInspected 75 | FROM restaurant R, inspection S 76 | Where (S.rid=R.rid) AND (R.county="Fulton") 77 | AND (YEAR(S.idate)=2015); 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | /*figure 7c*/ 92 | SELECT r.cuisine AS Cuisine, r.name, r.street, r.city, r.state, r.zipcode, MAX(i.totalscore) AS InspectionScore 93 | FROM restaurant r, inspection i 94 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') 95 | GROUP BY r.cuisine; 96 | 97 | 98 | 99 | 100 | 101 | 102 | /*figure 7d*/ 103 | /*count the complaints*/ 104 | CREATE OR REPLACE VIEW countComplaint AS 105 | SELECT c.rid AS rid, COUNT(*) AS numComplaints 106 | FROM complaint c 107 | GROUP BY c.rid; 108 | /*select complaints more than some number*/ 109 | CREATE OR REPLACE VIEW complaintsMoreThan AS 110 | SELECT c.rid AS rid, c.numComplaints AS numComplaints, complaint.description AS complaintDescription 111 | FROM countComplaint c, complaint 112 | WHERE c.rid = complaint.rid AND c.numComplaints > 1; 113 | /*a less than perfect score was given on at least one critical item*/ 114 | CREATE OR REPLACE VIEW lessThanPerfectCritical AS 115 | SELECT i.rid, c.score, it.perfectscore 116 | FROM inspection i, containing c, item it 117 | WHERE i.rid = c.rid AND i.idate = c.idate AND 118 | c.itemnum = it.itemnum AND it.critical = 'Y' AND c.score < it.perfectscore; 119 | /*select total score smaller than some number from the last inspection report 120 | in a specific year 121 | where a less than perfect score was given on at least one critical item*/ 122 | CREATE OR REPLACE VIEW smaller AS 123 | SELECT i.rid AS rid, MAX(i.idate) AS idate, i.totalscore AS score 124 | FROM inspection i, lessThanPerfectCritical l 125 | WHERE i.totalscore<80 AND l.rid = i.rid AND i.idate < '2016-01-01' AND i.idate >= '2015-01-01' 126 | GROUP BY i.rid; 127 | /*get final result*/ 128 | SELECT r.name AS restaurantName, r.street AS restStreet, 129 | r.city AS restCity, r.state AS restState, r.zipcode AS restZipcode, c.numComplaints, c.complaintDescription, o.email, o.firstname, o.lastname,s.score 130 | FROM restaurant r , smaller s, complaintsMoreThan c, operatorowner o 131 | WHERE r.rid = s.rid and r.rid = c.rid and r.email = o.email; 132 | 133 | 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /Phase3/src/css/skel.css: -------------------------------------------------------------------------------- 1 | /* Resets (http://meyerweb.com/eric/tools/css/reset/ | v2.0 | 20110126 | License: none (public domain)) */ 2 | 3 | html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}body{line-height:1;}ol,ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}table{border-collapse:collapse;border-spacing:0;}body{-webkit-text-size-adjust:none} 4 | 5 | /* Box Model */ 6 | 7 | *, *:before, *:after { 8 | -moz-box-sizing: border-box; 9 | -webkit-box-sizing: border-box; 10 | box-sizing: border-box; 11 | } 12 | 13 | /* Container */ 14 | 15 | .container { 16 | margin-left: auto; 17 | margin-right: auto; 18 | 19 | /* width: (containers) */ 20 | width: 35em; 21 | } 22 | 23 | /* Modifiers */ 24 | 25 | /* 125% */ 26 | .container.\31 25\25 { 27 | width: 100%; 28 | 29 | /* max-width: (containers * 1.25) */ 30 | max-width: 43.75em; 31 | 32 | /* min-width: (containers) */ 33 | min-width: 35em; 34 | } 35 | 36 | /* 75% */ 37 | .container.\37 5\25 { 38 | 39 | /* width: (containers * 0.75) */ 40 | width: 26.25em; 41 | 42 | } 43 | 44 | /* 50% */ 45 | .container.\35 0\25 { 46 | 47 | /* width: (containers * 0.50) */ 48 | width: 17.5em; 49 | 50 | } 51 | 52 | /* 25% */ 53 | .container.\32 5\25 { 54 | 55 | /* width: (containers * 0.25) */ 56 | width: 8.75em; 57 | 58 | } 59 | 60 | /* Grid */ 61 | 62 | .row { 63 | border-bottom: solid 1px transparent; 64 | } 65 | 66 | .row > * { 67 | float: left; 68 | } 69 | 70 | .row:after, .row:before { 71 | content: ''; 72 | display: block; 73 | clear: both; 74 | height: 0; 75 | } 76 | 77 | .row.uniform > * > :first-child { 78 | margin-top: 0; 79 | } 80 | 81 | .row.uniform > * > :last-child { 82 | margin-bottom: 0; 83 | } 84 | 85 | /* Gutters */ 86 | 87 | /* Normal */ 88 | 89 | .row > * { 90 | /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ 91 | padding: 0 0 0 1.5em; 92 | } 93 | 94 | .row { 95 | /* margin: -(gutters.horizontal) 0 -1px -(gutters.vertical) */ 96 | margin: 0 0 -1px -1.5em; 97 | } 98 | 99 | .row.uniform > * { 100 | /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ 101 | padding: 1.5em 0 0 1.5em; 102 | } 103 | 104 | .row.uniform { 105 | /* margin: -(gutters.vertical) 0 -1px -(gutters.vertical) */ 106 | margin: -1.5em 0 -1px -1.5em; 107 | } 108 | 109 | /* 200% */ 110 | 111 | .row.\32 00\25 > * { 112 | /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ 113 | padding: 0 0 0 3em; 114 | } 115 | 116 | .row.\32 00\25 { 117 | /* margin: -(gutters.horizontal) 0 -1px -(gutters.vertical) */ 118 | margin: 0 0 -1px -3em; 119 | } 120 | 121 | .row.uniform.\32 00\25 > * { 122 | /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ 123 | padding: 3em 0 0 3em; 124 | } 125 | 126 | .row.uniform.\32 00\25 { 127 | /* margin: -(gutters.vertical) 0 -1px -(gutters.vertical) */ 128 | margin: -3em 0 -1px -3em; 129 | } 130 | 131 | /* 150% */ 132 | 133 | .row.\31 50\25 > * { 134 | /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ 135 | padding: 0 0 0 2.25em; 136 | } 137 | 138 | .row.\31 50\25 { 139 | /* margin: -(gutters.horizontal) 0 -1px -(gutters.vertical) */ 140 | margin: 0 0 -1px -2.25em; 141 | } 142 | 143 | .row.uniform.\31 50\25 > * { 144 | /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ 145 | padding: 2.25em 0 0 2.25em; 146 | } 147 | 148 | .row.uniform.\31 50\25 { 149 | /* margin: -(gutters.vertical) 0 -1px -(gutters.vertical) */ 150 | margin: -2.25em 0 -1px -2.25em; 151 | } 152 | 153 | /* 50% */ 154 | 155 | .row.\35 0\25 > * { 156 | /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ 157 | padding: 0 0 0 0.75em; 158 | } 159 | 160 | .row.\35 0\25 { 161 | /* margin: -(gutters.horizontal) 0 -1px -(gutters.vertical) */ 162 | margin: 0 0 -1px -0.75em; 163 | } 164 | 165 | .row.uniform.\35 0\25 > * { 166 | /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ 167 | padding: 0.75em 0 0 0.75em; 168 | } 169 | 170 | .row.uniform.\35 0\25 { 171 | /* margin: -(gutters.vertical) 0 -1px -(gutters.vertical) */ 172 | margin: -0.75em 0 -1px -0.75em; 173 | } 174 | 175 | /* 25% */ 176 | 177 | .row.\32 5\25 > * { 178 | /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ 179 | padding: 0 0 0 0.375em; 180 | } 181 | 182 | .row.\32 5\25 { 183 | /* margin: -(gutters.horizontal) 0 -1px -(gutters.vertical) */ 184 | margin: 0 0 -1px -0.375em; 185 | } 186 | 187 | .row.uniform.\32 5\25 > * { 188 | /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ 189 | padding: 0.375em 0 0 0.375em; 190 | } 191 | 192 | .row.uniform.\32 5\25 { 193 | /* margin: -(gutters.vertical) 0 -1px -(gutters.vertical) */ 194 | margin: -0.375em 0 -1px -0.375em; 195 | } 196 | 197 | /* 0% */ 198 | 199 | .row.\30 \25 > * { 200 | padding: 0; 201 | } 202 | 203 | .row.\30 \25 { 204 | margin: 0 0 -1px 0; 205 | } 206 | 207 | /* Cells */ 208 | 209 | .\31 2u, .\31 2u\24 { width: 100%; clear: none; margin-left: 0; } 210 | .\31 1u, .\31 1u\24 { width: 91.6666666667%; clear: none; margin-left: 0; } 211 | .\31 0u, .\31 0u\24 { width: 83.3333333333%; clear: none; margin-left: 0; } 212 | .\39 u, .\39 u\24 { width: 75%; clear: none; margin-left: 0; } 213 | .\38 u, .\38 u\24 { width: 66.6666666667%; clear: none; margin-left: 0; } 214 | .\37 u, .\37 u\24 { width: 58.3333333333%; clear: none; margin-left: 0; } 215 | .\36 u, .\36 u\24 { width: 50%; clear: none; margin-left: 0; } 216 | .\35 u, .\35 u\24 { width: 41.6666666667%; clear: none; margin-left: 0; } 217 | .\34 u, .\34 u\24 { width: 33.3333333333%; clear: none; margin-left: 0; } 218 | .\33 u, .\33 u\24 { width: 25%; clear: none; margin-left: 0; } 219 | .\32 u, .\32 u\24 { width: 16.6666666667%; clear: none; margin-left: 0; } 220 | .\31 u, .\31 u\24 { width: 8.3333333333%; clear: none; margin-left: 0; } 221 | 222 | .\31 2u\24 + *, 223 | .\31 1u\24 + *, 224 | .\31 0u\24 + *, 225 | .\39 u\24 + *, 226 | .\38 u\24 + *, 227 | .\37 u\24 + *, 228 | .\36 u\24 + *, 229 | .\35 u\24 + *, 230 | .\34 u\24 + *, 231 | .\33 u\24 + *, 232 | .\32 u\24 + *, 233 | .\31 u\24 + * { 234 | clear: left; 235 | } 236 | 237 | .\-11u { margin-left: 91.6666666667% } 238 | .\-10u { margin-left: 83.3333333333% } 239 | .\-9u { margin-left: 75% } 240 | .\-8u { margin-left: 66.6666666667% } 241 | .\-7u { margin-left: 58.3333333333% } 242 | .\-6u { margin-left: 50% } 243 | .\-5u { margin-left: 41.6666666667% } 244 | .\-4u { margin-left: 33.3333333333% } 245 | .\-3u { margin-left: 25% } 246 | .\-2u { margin-left: 16.6666666667% } 247 | .\-1u { margin-left: 8.3333333333% } -------------------------------------------------------------------------------- /Phase3/src/js/init.js: -------------------------------------------------------------------------------- 1 | /* 2 | Highlights by HTML5 UP 3 | html5up.net | @n33co 4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 5 | */ 6 | 7 | (function($) { 8 | 9 | skel.init({ 10 | reset: 'full', 11 | breakpoints: { 12 | global: { href: 'css/style.css', containers: '35em', grid: { gutters: ['1.5em', 0] } }, 13 | large: { media: '(max-width: 1680px)', href: 'css/style-large.css' }, 14 | medium: { media: '(max-width: 980px)', href: 'css/style-medium.css', containers: '80%', viewport: { scalable: false } }, 15 | small: { media: '(max-width: 736px)', href: 'css/style-small.css', grid: { gutters: ['1em', 0] } }, 16 | xsmall: { media: '(max-width: 480px)', href: 'css/style-xsmall.css', containers: '100%' } 17 | } 18 | }); 19 | 20 | $(function() { 21 | 22 | var $window = $(window), 23 | $body = $('body'), 24 | $html = $('html'); 25 | 26 | // Disable animations/transitions until the page has loaded. 27 | $html.addClass('is-loading'); 28 | 29 | $window.on('load', function() { 30 | window.setTimeout(function() { 31 | $html.removeClass('is-loading'); 32 | }, 0); 33 | }); 34 | 35 | // Touch mode. 36 | if (skel.vars.isMobile) { 37 | 38 | var $wrapper; 39 | 40 | // Create wrapper. 41 | $body.wrapInner('
'); 42 | $wrapper = $('#wrapper'); 43 | 44 | // Hack: iOS vh bug. 45 | if (skel.vars.deviceType == 'ios') 46 | $wrapper 47 | .css('margin-top', -25) 48 | .css('padding-bottom', 25); 49 | 50 | // Pass scroll event to window. 51 | $wrapper.on('scroll', function() { 52 | $window.trigger('scroll'); 53 | }); 54 | 55 | // Scrolly. 56 | $window.on('load.hl_scrolly', function() { 57 | 58 | $('.scrolly').scrolly({ 59 | speed: 1500, 60 | parent: $wrapper, 61 | pollOnce: true 62 | }); 63 | 64 | $window.off('load.hl_scrolly'); 65 | 66 | }); 67 | 68 | // Enable touch mode. 69 | $html.addClass('is-touch'); 70 | 71 | } 72 | else { 73 | 74 | // Scrolly. 75 | $('.scrolly').scrolly({ 76 | speed: 1500 77 | }); 78 | 79 | } 80 | 81 | // Forms. 82 | var $form = $('form'); 83 | 84 | if ($form.length > 0) { 85 | 86 | // Hack: Placeholder fix (IE<10). 87 | if (skel.vars.IEVersion < 10) { 88 | $.fn.n33_formerize=function(){var _fakes=new Array(),_form = $(this);_form.find('input[type=text],textarea').each(function() { var e = $(this); if (e.val() == '' || e.val() == e.attr('placeholder')) { e.addClass('formerize-placeholder'); e.val(e.attr('placeholder')); } }).blur(function() { var e = $(this); if (e.attr('name').match(/_fakeformerizefield$/)) return; if (e.val() == '') { e.addClass('formerize-placeholder'); e.val(e.attr('placeholder')); } }).focus(function() { var e = $(this); if (e.attr('name').match(/_fakeformerizefield$/)) return; if (e.val() == e.attr('placeholder')) { e.removeClass('formerize-placeholder'); e.val(''); } }); _form.find('input[type=password]').each(function() { var e = $(this); var x = $($('
').append(e.clone()).remove().html().replace(/type="password"/i, 'type="text"').replace(/type=password/i, 'type=text')); if (e.attr('id') != '') x.attr('id', e.attr('id') + '_fakeformerizefield'); if (e.attr('name') != '') x.attr('name', e.attr('name') + '_fakeformerizefield'); x.addClass('formerize-placeholder').val(x.attr('placeholder')).insertAfter(e); if (e.val() == '') e.hide(); else x.hide(); e.blur(function(event) { event.preventDefault(); var e = $(this); var x = e.parent().find('input[name=' + e.attr('name') + '_fakeformerizefield]'); if (e.val() == '') { e.hide(); x.show(); } }); x.focus(function(event) { event.preventDefault(); var x = $(this); var e = x.parent().find('input[name=' + x.attr('name').replace('_fakeformerizefield', '') + ']'); x.hide(); e.show().focus(); }); x.keypress(function(event) { event.preventDefault(); x.val(''); }); }); _form.submit(function() { $(this).find('input[type=text],input[type=password],textarea').each(function(event) { var e = $(this); if (e.attr('name').match(/_fakeformerizefield$/)) e.attr('name', ''); if (e.val() == e.attr('placeholder')) { e.removeClass('formerize-placeholder'); e.val(''); } }); }).bind("reset", function(event) { event.preventDefault(); $(this).find('select').val($('option:first').val()); $(this).find('input,textarea').each(function() { var e = $(this); var x; e.removeClass('formerize-placeholder'); switch (this.type) { case 'submit': case 'reset': break; case 'password': e.val(e.attr('defaultValue')); x = e.parent().find('input[name=' + e.attr('name') + '_fakeformerizefield]'); if (e.val() == '') { e.hide(); x.show(); } else { e.show(); x.hide(); } break; case 'checkbox': case 'radio': e.attr('checked', e.attr('defaultValue')); break; case 'text': case 'textarea': e.val(e.attr('defaultValue')); if (e.val() == '') { e.addClass('formerize-placeholder'); e.val(e.attr('placeholder')); } break; default: e.val(e.attr('defaultValue')); break; } }); window.setTimeout(function() { for (x in _fakes) _fakes[x].trigger('formerize_sync'); }, 10); }); return _form; }; 89 | $form.n33_formerize(); 90 | } 91 | 92 | } 93 | 94 | // Header. 95 | var $header = $('#header'), 96 | $headerTitle = $header.find('header'), 97 | $headerContainer = $header.find('.container'); 98 | 99 | // Make title fixed. 100 | if (!skel.vars.isMobile) { 101 | 102 | $window.on('load.hl_headerTitle', function() { 103 | 104 | skel.on('-medium !medium', function() { 105 | 106 | $headerTitle 107 | .css('position', 'fixed') 108 | .css('height', 'auto') 109 | .css('top', '50%') 110 | .css('left', '0') 111 | .css('width', '100%') 112 | .css('margin-top', ($headerTitle.outerHeight() / -2)); 113 | 114 | }); 115 | 116 | skel.on('+medium', function() { 117 | 118 | $headerTitle 119 | .css('position', '') 120 | .css('height', '') 121 | .css('top', '') 122 | .css('left', '') 123 | .css('width', '') 124 | .css('margin-top', ''); 125 | 126 | }); 127 | 128 | $window.off('load.hl_headerTitle'); 129 | 130 | }); 131 | 132 | } 133 | 134 | // Scrollex. 135 | skel.on('-small !small', function() { 136 | $header.scrollex({ 137 | terminate: function() { 138 | 139 | $headerTitle.css('opacity', ''); 140 | 141 | }, 142 | scroll: function(progress) { 143 | 144 | // Fade out title as user scrolls down. 145 | if (progress > 0.5) 146 | x = 1 - progress; 147 | else 148 | x = progress; 149 | 150 | $headerTitle.css('opacity', Math.max(0, Math.min(1, x * 2))); 151 | 152 | } 153 | }); 154 | }); 155 | 156 | skel.on('+small', function() { 157 | 158 | $header.unscrollex(); 159 | 160 | }); 161 | 162 | // Main sections. 163 | $('.main').each(function() { 164 | 165 | var $this = $(this), 166 | $primaryImg = $this.find('.image.primary > img'), 167 | $bg, 168 | options; 169 | 170 | // No primary image? Bail. 171 | if ($primaryImg.length == 0) 172 | return; 173 | 174 | // Hack: IE8 fallback. 175 | if (skel.vars.IEVersion < 9) { 176 | 177 | $this 178 | .css('background-image', 'url("' + $primaryImg.attr('src') + '")') 179 | .css('-ms-behavior', 'url("css/ie/backgroundsize.min.htc")'); 180 | 181 | return; 182 | 183 | } 184 | 185 | // Create bg and append it to body. 186 | $bg = $('
') 187 | .css('background-image', ( 188 | 'url("css/images/overlay.png"), url("' + $primaryImg.attr('src') + '")' 189 | )) 190 | .appendTo($body); 191 | 192 | // Scrollex. 193 | options = { 194 | mode: 'middle', 195 | delay: 200, 196 | top: '-10vh', 197 | bottom: '-10vh' 198 | }; 199 | 200 | if (skel.canUseProperty('transition')) { 201 | 202 | options.init = function() { $bg.removeClass('active'); }; 203 | options.enter = function() { $bg.addClass('active'); }; 204 | options.leave = function() { $bg.removeClass('active'); }; 205 | 206 | } 207 | else { 208 | 209 | $bg 210 | .css('opacity', 1) 211 | .hide(); 212 | 213 | options.init = function() { $bg.fadeOut(0); }; 214 | options.enter = function() { $bg.fadeIn(400); }; 215 | options.leave = function() { $bg.fadeOut(400); }; 216 | 217 | } 218 | 219 | $this.scrollex(options); 220 | 221 | }); 222 | 223 | }); 224 | 225 | })(jQuery); -------------------------------------------------------------------------------- /Phase3/src/database.php: -------------------------------------------------------------------------------- 1 | connection = $connection; 19 | } 20 | 21 | function doQuery($query) 22 | { 23 | $result = mysqli_query($this->connection, $query); 24 | return $result; 25 | } 26 | 27 | function add_user($username, $password) 28 | { 29 | $result = $this->doQuery(" 30 | SELECT username 31 | FROM user 32 | WHERE username = $username"); 33 | 34 | $value = mysqli_fetch_assoc($result); 35 | if(mysqli_num_rows($value)) 36 | { 37 | return false; 38 | } 39 | 40 | $this->doQuery(" 41 | INSERT INTO user (username, password) 42 | VALUES ('$username', '$password');"); 43 | if(mysqli_error($this->connection)) 44 | return false; 45 | return true; 46 | } 47 | 48 | function login($username, $password) 49 | { 50 | if(!empty($password)) { 51 | $result = $this->doQuery(" 52 | SELECT username 53 | FROM user 54 | WHERE username = '$username' AND password = '$password'"); 55 | 56 | if (mysqli_error($this->connection)) 57 | die(mysqli_error($this->connection)); 58 | 59 | if (mysqli_num_rows($result)) { 60 | $check = $this->doQuery(" 61 | SELECT isdebarred 62 | FROM user join studentfaculty on user.username = studentfaculty.username 63 | WHERE user.username = '$username' 64 | "); 65 | $row = mysqli_fetch_assoc($check); 66 | if($row['isdebarred'] == null) { 67 | $_SESSION['hasprofile'] = false; 68 | } 69 | elseif($row['isdebarred'] == '1') 70 | return false; 71 | else 72 | $_SESSION['hasprofile'] = true; 73 | $_SESSION['isstaff'] = false; 74 | return true; 75 | } 76 | } 77 | else{ 78 | $result = $this->doQuery(" 79 | SELECT username 80 | FROM staff 81 | WHERE username = '$username' 82 | "); 83 | if (mysqli_error($this->connection)) 84 | die(mysqli_error($this->connection)); 85 | 86 | if (mysqli_num_rows($result)) { 87 | $_SESSION['isstaff'] = true; 88 | return true; 89 | } 90 | } 91 | return false; 92 | } 93 | 94 | function create_profile($username, $name, $DOB, $gender, $email, $is_faculty, $address, $dept) 95 | { 96 | $this->doQuery(" 97 | INSERT INTO studentfaculty(username, name, dob, gender, isdebarred, email, address, isfaculty, dept, penalty) 98 | VALUES ('$username', '$name', '$DOB', '$gender', '0', '$email', '$address', '$is_faculty', '$dept', '0'); 99 | "); 100 | if(mysqli_error($this->connection)) 101 | return false; 102 | return true; 103 | } 104 | 105 | function search_book($isbn, $title, $author) 106 | { 107 | echo $isbn.$title.$author; 108 | $query = " 109 | SELECT title, isreserve, book.isbn, edition, count(copyid) as 'copies', min(copyid) as 'copy' 110 | from book join bookcopy on book.isbn=bookcopy.isbn 111 | where bookcopy.isdamage = '0' AND bookcopy.ishold= '0' 112 | AND bookcopy.ischeck = '0' AND book.isreserve = '0' 113 | "; 114 | 115 | if($isbn) { 116 | $query .= " 117 | AND book.isbn='$isbn' 118 | "; 119 | } 120 | if($title) 121 | { 122 | $query .= " 123 | AND book.title LIKE '%$title%' 124 | "; 125 | } 126 | if($author) 127 | { 128 | $query = " 129 | AND author.author LIKE '%$author%' 130 | "; 131 | } 132 | $query .= " group by book.isbn;"; 133 | $result = $this->doQuery($query); 134 | return $result; 135 | } 136 | 137 | function request_hold($username, $isbn, $copy_id) 138 | { 139 | $this->doQuery(" 140 | update bookcopy set ishold = '1', requester = '$username' 141 | where bookcopy.isbn = '$isbn' AND bookcopy.copyid = '$copy_id' LIMIT 1 142 | "); 143 | if(mysqli_error($this->connection)) 144 | die(mysqli_error($this->connection)); 145 | 146 | $this->doQuery(" 147 | INSERT INTO issue(username, issuedate, redate, copyid, isbn) 148 | VALUES ('$username', CURDATE(), DATE_ADD(CURDATE(),INTERVAL 17 DAY), $copy_id, '$isbn') 149 | "); 150 | if(mysqli_error($this->connection)) 151 | die(mysqli_error($this->connection)); 152 | } 153 | 154 | function generatePopular() 155 | { 156 | $query = " 157 | select subname, count(issueid) from book join issue on issue.isbn=book.isbn where MONTH(issuedate)=1 group by book.subname order by count(issueid) DESC limit 3"; 158 | 159 | 160 | $result = $this->doQuery($query); 161 | if(mysqli_error($this->connection)) 162 | die(mysqli_error($this->connection)); 163 | return $result; 164 | } 165 | 166 | function generatePopularSecond() 167 | { 168 | $query = " 169 | select subname, count(issueid) from book join issue on issue.isbn=book.isbn where MONTH(issuedate)=2 group by book.subname order by count(issueid) DESC limit 3"; 170 | 171 | 172 | $result = $this->doQuery($query); 173 | if(mysqli_error($this->connection)) 174 | die(mysqli_error($this->connection)); 175 | return $result; 176 | } 177 | 178 | function generateUserReport() 179 | { 180 | $query = "select name, count(issue.username) from issue join studentfaculty on issue.username=studentfaculty.username where month(issuedate)=1 GROUP BY issue.username ORDER BY count(issue.username) DESC limit 5"; 181 | 182 | 183 | $result = $this->doQuery($query); 184 | if (mysqli_error($this->connection)) 185 | die(mysqli_error($this->connection)); 186 | return $result; 187 | } 188 | 189 | function get_issue_date($username, $issue_id){ 190 | $result = $this->doQuery(" 191 | select issuedate, extdate, redate 192 | from issue join bookcopy on issue.isbn = bookcopy.isbn and issue.copyid = bookcopy.copyid 193 | where ishold='0' and username = '$username' and extcount <= 1 194 | and issueid = '$issue_id' and redate>=CURDATE() and ischeck= '1' 195 | "); 196 | if(mysqli_error($this->connection)) 197 | die(mysqli_error($this->connection)); 198 | return $result; 199 | } 200 | 201 | function request_ext($issue_id) 202 | { 203 | if(!$_SESSION['isfaculty']){ 204 | $this->doQuery(" 205 | update issue set extdate = CURDATE(), extcount=extcount+1, redate=least(DATE_ADD(CURDATE(), INTERVAL 14 DAY), DATE_ADD(issuedate, INTERVAL 28 DAY)) 206 | where issueid='$issue_id' LIMIT 1 207 | "); 208 | if(mysqli_error($this->connection)) 209 | die(mysqli_error($this->connection)); 210 | } 211 | elseif($_SESSION['isfaculty']) { 212 | $this->doQuery(" 213 | update issue set extdate = CURDATE(), extcount=extcount+1, redate=least(DATE_ADD(CURDATE(), INTERVAL 14 DAY), DATE_ADD(issuedate, INTERVAL 28 DAY)) 214 | where issueid='$issue_id' LIMIT 1 215 | "); 216 | if(mysqli_error($this->connection)) 217 | die(mysqli_error($this->connection)); 218 | } 219 | } 220 | 221 | function generateUserReportSecond() 222 | { 223 | $query = "select name , count(issue.username) from issue join studentfaculty on issue.username=studentfaculty.username where month(issuedate)=2 GROUP BY issue.username ORDER BY count(issue.username) DESC limit 5"; 224 | 225 | 226 | $result = $this->doQuery($query); 227 | if(mysqli_error($this->connection)) 228 | die(mysqli_error($this->connection)); 229 | return $result; 230 | 231 | } 232 | 233 | function get_future_book($isbn) 234 | { 235 | $result = $this->doQuery(" 236 | select issue.redate as 'redate', bookcopy.copyid as 'copy_id' 237 | from issue join bookcopy on issue.isbn = bookcopy.isbn and issue.copyid = bookcopy.copyid 238 | WHERE bookcopy.isbn = '$isbn' AND ischeck = '1' AND ishold='0' order by issue.redate limit 1 239 | "); 240 | if(mysqli_error($this->connection)) 241 | die(mysqli_error($this->connection)); 242 | return $result; 243 | 244 | } 245 | 246 | function generatePopularBook() 247 | { 248 | $query = "select title, count(issueid) from book join issue on issue.isbn=book.isbn where MONTH(issuedate)=1 group by book.isbn order by count(issueid) DESC limit 3"; 249 | 250 | 251 | $result = $this->doQuery($query); 252 | if(mysqli_error($this->connection)) 253 | die(mysqli_error($this->connection)); 254 | return $result; 255 | 256 | } 257 | 258 | function future_hold($copy_id, $isbn, $username, $redate) 259 | { 260 | $this->doQuery(" 261 | update bookcopy 262 | set ishold = '1', requester = '$username' 263 | where bookcopy.isbn = '$isbn' AND bookcopy.copyid = '$copy_id' LIMIT 1 264 | "); 265 | if(mysqli_error($this->connection)) 266 | die(mysqli_error($this->connection)); 267 | 268 | $this->doQuery(" 269 | INSERT INTO issue(username, issuedate, redate, copyid, isbn) 270 | VALUES ('$username', '$redate', DATE_ADD('$redate',INTERVAL 17 DAY), '$copy_id', '$isbn') 271 | "); 272 | if(mysqli_error($this->connection)) 273 | die(mysqli_error($this->connection)); 274 | } 275 | 276 | function track_book($isbn) 277 | { 278 | $query = " 279 | select floorid, aisleid, shelf.shelfid as shelfid, subname 280 | from book join shelf on book.shelfid = shelf.shelfid 281 | where isbn = '$isbn' 282 | "; 283 | $result = $this->doQuery($query); 284 | if(mysqli_error($this->connection)) 285 | die(mysqli_error($this->connection)); 286 | return $result; 287 | } 288 | 289 | function generatePopularBookSecond() 290 | { 291 | $query = "select title, count(issueid) from book join issue on issue.isbn=book.isbn where MONTH(issuedate)=2 group by book.isbn order by count(issueid) DESC limit 3"; 292 | 293 | 294 | $result = $this->doQuery($query); 295 | if(mysqli_error($this->connection)) 296 | die(mysqli_error($this->connection)); 297 | return $result; 298 | 299 | } 300 | 301 | function checkOut($issueid){ 302 | $result = $this->doQuery(" 303 | select username, issue.copyid, issuedate, issue.isbn 304 | from issue join bookcopy on bookcopy.isbn=issue.isbn and bookcopy.copyid=issue.copyid 305 | where issueid = '$issueid' 306 | "); 307 | if(mysqli_error($this->connection)) 308 | die(mysqli_error($this->connection)); 309 | return $result; 310 | } 311 | 312 | function doCheckOut($isbn, $copyid){ 313 | echo $isbn.$copyid; 314 | $this->doQuery(" 315 | update bookcopy set ishold='0', requester = NULL, ischeck = '1' where isbn = '$isbn' and copyid='$copyid' 316 | "); 317 | if(mysqli_error($this->connection)) 318 | die(mysqli_error($this->connection)); 319 | } 320 | } 321 | ?> -------------------------------------------------------------------------------- /Phase3/test.sql: -------------------------------------------------------------------------------- 1 | /*figure 1*/ 2 | /*The GRHI login screen is shown in Figure 1. Restaurant operators 3 | and state health inspectors can log into the system and are required 4 | to enter a password for the security of the database. Others who are 5 | just looking for restaurant inspection reports/scores can simply login in as a guest.*/ 6 | 7 | /*Condition 1: the successful login should return a user name*/ 8 | SELECT username 9 | FROM registereduser 10 | WHERE username = "chuney" AND password = "1234"; 11 | /*Condition 2: otherwise, nothing is going to be returned*/ 12 | SELECT username 13 | FROM registereduser 14 | WHERE username = "chuney" AND password = "1345"; 15 | 16 | /* figure 2 */ 17 | /*find a restaurant(s) based on the conjunction of health inspection score and zipcode with (0, 1 or both) of the following: restaurant name, cuisine. 18 | health inspection score-->inspection.totalscore 19 | zipcode→restaurant.zipcode 20 | restaurant name→restaurant.name 21 | cuisine→ restaurant.cuisine & cuisines.cuisine 22 | */ 23 | /*show all the cuisines to the users*/ 24 | SELECT * 25 | FROM cuisines; 26 | /*First, create a view specifying all the last inspection date of the restaurants*/ 27 | CREATE OR REPLACE VIEW lastI AS 28 | SELECT i.rid AS rid, i.idate AS idate 29 | FROM inspection i 30 | WHERE NOT EXISTS 31 | (SELECT i.rid, i.idate 32 | FROM inspection b 33 | WHERE i.rid = b.rid AND i.idate < b.idate 34 | ); 35 | 36 | /*Constraint 1.inspection score (less than or greater than)and zipcode*/ 37 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 38 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 39 | FROM inspection I, restaurant R, lastI 40 | WHERE I.rid=R.rid AND lastI.idate = I.idate 41 | AND (I.totalscore >25) AND (R.zipcode=30339); 42 | 43 | /*Constraint 2.inspection score(less than or greater than) and zipcode and restaurant name*/ 44 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 45 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 46 | FROM inspection I, restaurant R, lastI 47 | WHERE I.rid=R.rid AND lastI.idate = I.idate 48 | AND (I.totalscore >25) AND (R.zipcode=30339) AND (R.name = 'Heirloom'); 49 | 50 | /*another example of constraint 2*/ 51 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 52 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 53 | FROM inspection I, restaurant R, lastI 54 | WHERE I.rid=R.rid AND lastI.idate = I.idate 55 | AND (I.totalscore >25) AND (R.zipcode=30080) AND (R.name = 'Mezza Luna'); 56 | 57 | /*Constraint 3.inspection score(less than or greater than) and zipcode and cuisine*/ 58 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 59 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 60 | FROM inspection I, restaurant R, lastI 61 | WHERE I.rid=R.rid AND lastI.idate = I.idate 62 | AND (I.totalscore >25) AND (R.cuisine = "Chinese") AND (R.zipcode=30339); 63 | 64 | /*Constraint 4.inspection score(less than or greater than) and zipcode and cuisine and restaurant name*/ 65 | SELECT R.name AS Restaurant, R.street, R.city, R.state,R.zipcode, R.cuisine AS Cuisine, 66 | I.totalscore AS LastInspectionScore, I.idate AS LastInspectionDate 67 | FROM inspection I, restaurant R, lastI 68 | WHERE I.rid=R.rid AND lastI.idate = I.idate 69 | AND (I.totalscore >25) AND (R.cuisine = "American") AND (R.zipcode=30318) AND (R.name = "Bocado"); 70 | 71 | 72 | /*Figure 3*/ 73 | /*allows a user to enter food/safety complaint information about a restaurant. */ 74 | /*show user all the available restaurants frst*/ 75 | SELECT * 76 | FROM restaurant; 77 | /*Note: customer need to exist first*/ 78 | /*When inserting a customer, make sure the phone num is unique in db*/ 79 | INSERT INTO customer 80 | VALUES ('1234567890', 'aaa', 'bbb'); 81 | /*When inserting a customer, make sure the phone num exist*/ 82 | INSERT INTO complaint 83 | VALUES ('1', '1234567890', '2015-08-19', 'TESTING INSERT COMPLAINT'); 84 | 85 | 86 | /*Figure 4 */ 87 | /*Operator insert information about their restaurant*/ 88 | /*show users all the cuisines*/ 89 | SELECT * 90 | FROM cuisines; 91 | /*when inserting into a restaurant, make sure RID is unique and cuisine type is legal and email*/ 92 | INSERT INTO restaurant 93 | VALUES (21,4041234567, "Elephant Bar", "Fulton", "245 North Ave", "Atlanta", "GA", 30332, "American", "ppatel@gmail.com"); 94 | 95 | 96 | /*Figure 5a*/ 97 | /*the user(operator) will select the 98 | search criteria from a dropdown that lists 99 | all the restaurant information associated with him/her.*/ 100 | SELECT R.rid, R.name, R.street, R.city, R.state, R.zipcode 101 | FROM operatorowner O, restaurant R 102 | WHERE R.email=O.email AND O.username = "ppatel"; 103 | 104 | 105 | /*Figure 5b*/ 106 | /*get health inspection report results for the last two inspections */ 107 | CREATE OR REPLACE VIEW theRestaurantIns AS 108 | SELECT i.idate, it.itemnum, it.description, c.score, i.totalscore, i.passfail 109 | FROM containing AS c, item AS it, inspection AS i 110 | WHERE i.rid = 19 AND c.idate = i.idate AND c.rid = i.rid AND it.itemnum = c.itemnum; 111 | /*find the last inspection*/ 112 | CREATE OR REPLACE VIEW lastI AS 113 | SELECT i.idate, i.itemnum, i.description, i.score, i.totalscore, i.passfail 114 | FROM theRestaurantIns i 115 | WHERE NOT EXISTS 116 | (SELECT i.idate 117 | FROM theRestaurantIns b 118 | WHERE i.idate < b.idate 119 | ); 120 | /*find the inspections without the last one*/ 121 | CREATE OR REPLACE VIEW nolastI AS 122 | SELECT DISTINCT allI.idate, allI.itemnum, allI.description, allI.score, allI.totalscore, allI.passfail 123 | FROM lastI i, theRestaurantIns allI 124 | WHERE i.idate > allI.idate; 125 | /*find the inspections with the second last one*/ 126 | CREATE OR REPLACE VIEW secLastI AS 127 | SELECT DISTINCT i.idate, i.itemnum, i.description, i.score, i.totalscore, i.passfail 128 | FROM nolastI i 129 | WHERE NOT EXISTS 130 | (SELECT i.idate 131 | FROM nolastI b 132 | WHERE i.idate < b.idate 133 | ); 134 | /* finally we get the last 2 idate*/ 135 | SELECT DISTINCT i.idate AS InspectionDate, i.itemnum AS ItemNumber, i.description AS ItemDescription, i.score AS Score, 136 | i.passfail AS Result, i.totalscore AS TotalScore 137 | FROM theRestaurantIns i, secLastI, lastI 138 | WHERE i.idate = lastI.idate OR i.idate = secLastI.idate; 139 | 140 | 141 | /*Figure 6a*/ 142 | /*inserting a restaurant inspection report*/ 143 | /* first show the user all the items with discreption*/ 144 | SELECT i.itemnum AS ItemNumber, i.description AS ItemDescription, i.critical AS Critical 145 | FROM item i; 146 | /*before insert into containing make sure the inespction report exist*/ 147 | /*before creating the inspection report, make sure rid idate combination is unique and iid exists*/ 148 | INSERT INTO inspection 149 | VALUES (2, 2, "2015-7-7", 100, "PASS"); 150 | /*before insert into containing make sure the rid idate combination exists, make sure 1to8 < 9(perfect score), 9to15<4(perfect score)*/ 151 | INSERT INTO containing 152 | VALUES (1, 2, "2015-7-7", 9); 153 | INSERT INTO containing 154 | VALUES (2, 2, "2015-7-7", 9); 155 | INSERT INTO containing 156 | VALUES (3, 2, "2015-7-7", 9); 157 | INSERT INTO containing 158 | VALUES (4, 2, "2015-7-7", 9); 159 | INSERT INTO containing 160 | VALUES (5, 2, "2015-7-7", 9); 161 | INSERT INTO containing 162 | VALUES (6, 2, "2015-7-7", 9); 163 | INSERT INTO containing 164 | VALUES (7, 2, "2015-7-7", 9); 165 | INSERT INTO containing 166 | VALUES (8, 2, "2015-7-7", 9); 167 | INSERT INTO containing 168 | VALUES (9, 2, "2015-7-7", 4); 169 | INSERT INTO containing 170 | VALUES (10, 2, "2015-7-7", 4); 171 | INSERT INTO containing 172 | VALUES (11, 2, "2015-7-7", 4); 173 | INSERT INTO containing 174 | VALUES (12, 2, "2015-7-7", 4); 175 | INSERT INTO containing 176 | VALUES (13, 2, "2015-7-7", 4); 177 | INSERT INTO containing 178 | VALUES (14, 2, "2015-7-7", 4); 179 | INSERT INTO containing 180 | VALUES (15, 2, "2015-7-7", 4); 181 | 182 | 183 | /*Figure 6b*/ 184 | /*In figure 6b, an Inspector can enter additional comments about the observed 185 | condition of any item on the inspection list. 186 | He/she will enter Inspector ID, Restaurant ID, Date and Item number with associated Comments.*/ 187 | /*make sure the itemnum is unique. rid and iid combination is unique*/ 188 | INSERT INTO includes 189 | VALUES (1, 16, "2015-3-18", "Eggs are rotten!"); 190 | ` 191 | 192 | /*figure 7a*/ 193 | /*In figure 7a, an inspector can run a summary report about restaurant inspections 194 | for a specified month and year. The summary data is organized by County and Cuisine in sorted order.*/ 195 | CREATE OR REPLACE VIEW numRest AS 196 | SELECT r.county, r.cuisine, COUNT(*) AS NumOfRestaurantInspected 197 | FROM restaurant r, inspection i 198 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') 199 | GROUP BY r.county, r.cuisine; 200 | CREATE OR REPLACE VIEW numFail AS 201 | SELECT r.county, r.cuisine, COUNT(*) AS NumFail 202 | FROM restaurant r, inspection i 203 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') AND (i.passfail = "FAIL") 204 | GROUP BY r.county, r.cuisine; 205 | /*this has all the result except the grandtotal*/ 206 | /*if the county with the cuisine has no inspection fail, the NumFail column will be NULL*/ 207 | /*CREATE OR REPLACE VIEW raw7a AS*/ 208 | SELECT numRest.county, numRest.cuisine, numRest.NumOfRestaurantInspected, numFail.NumFail 209 | FROM numRest 210 | LEFT OUTER JOIN numFail 211 | ON numRest.county = numFail.county AND numRest.cuisine = numFail.cuisine; 212 | /*count all the fails*/ 213 | CREATE OR REPLACE VIEW totalFail AS 214 | SELECT count(*) AS NumFail 215 | FROM restaurant r, inspection i 216 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') AND (i.passfail = "FAIL"); 217 | /*count all the inspections*/ 218 | CREATE OR REPLACE VIEW totalInspected AS 219 | SELECT COUNT(*) AS NumOfRestaurantInspected 220 | FROM restaurant r, inspection i 221 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01'); 222 | /*combine the grandtotal and display*/ 223 | /*CREATE OR REPLACE VIEW grandTotal */ 224 | SELECT totalInspected.NumOfRestaurantInspected AS TotalNumOfRestaurantInspected,totalFail.NumFail AS TotalNumFail 225 | FROM totalInspected, totalFail; 226 | /*count sub fails num*/ 227 | CREATE OR REPLACE VIEW SubNumFail AS 228 | SELECT r.county AS County, COUNT(*) AS SubNumFail 229 | FROM restaurant r, inspection i 230 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') AND (i.passfail = "FAIL") 231 | GROUP BY r.county; 232 | /*count sub inspected num*/ 233 | CREATE OR REPLACE VIEW SubNumInspected AS 234 | SELECT r.county AS County, COUNT(*) AS SubNumInspected 235 | FROM restaurant r, inspection i 236 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') 237 | GROUP BY r.county; 238 | /*this is all the subtotal results*/ 239 | SELECT i.County, i.SubNumInspected, f.SubNumFail 240 | FROM SubNumInspected i, SubNumFail f 241 | WHERE i.County = f.County; 242 | 243 | 244 | /*figure 7b*/ 245 | /*an inspector can run a summary report about restaurant inspections for a specified county and year.*/ 246 | SELECT R.county AS County, MONTHNAME(S.idate) AS Month,COUNT(R.rid) AS RestaurantInspected 247 | FROM restaurant R, inspection S 248 | Where (S.rid=R.rid) AND (R.county="Fulton") 249 | AND (YEAR(S.idate)=2015) 250 | GROUP BY MONTH(S.idate),R.rid; 251 | /*count grandtotal of restaurant has been inspected in the year*/ 252 | SELECT R.county AS County, COUNT(R.rid) AS TotalInspected 253 | FROM restaurant R, inspection S 254 | Where (S.rid=R.rid) AND (R.county="Fulton") 255 | AND (YEAR(S.idate)=2015); 256 | 257 | 258 | /*figure 7c*/ 259 | SELECT r.cuisine AS Cuisine, r.name, r.street, r.city, r.state, r.zipcode, MAX(i.totalscore) AS InspectionScore 260 | FROM restaurant r, inspection i 261 | WHERE (r.rid = i.rid) AND (i.idate < '2015-12-01') AND (i.idate >= '2015-01-01') 262 | GROUP BY r.cuisine; 263 | 264 | 265 | /*figure 7d*/ 266 | /*count the complaints*/ 267 | CREATE OR REPLACE VIEW countComplaint AS 268 | SELECT c.rid AS rid, COUNT(*) AS numComplaints 269 | FROM complaint c 270 | GROUP BY c.rid; 271 | /*select complaints more than some number*/ 272 | CREATE OR REPLACE VIEW complaintsMoreThan AS 273 | SELECT c.rid AS rid, c.numComplaints AS numComplaints, complaint.description AS complaintDescription 274 | FROM countComplaint c, complaint 275 | WHERE c.rid = complaint.rid AND c.numComplaints > 1; 276 | /*a less than perfect score was given on at least one critical item*/ 277 | CREATE OR REPLACE VIEW lessThanPerfectCritical AS 278 | SELECT i.rid, c.score, it.perfectscore 279 | FROM inspection i, containing c, item it 280 | WHERE i.rid = c.rid AND i.idate = c.idate AND 281 | c.itemnum = it.itemnum AND it.critical = 'Y' AND c.score < it.perfectscore; 282 | /*select total score smaller than some number from the last inspection report 283 | in a specific year 284 | where a less than perfect score was given on at least one critical item*/ 285 | CREATE OR REPLACE VIEW smaller AS 286 | SELECT i.rid AS rid, MAX(i.idate) AS idate, i.totalscore AS score 287 | FROM inspection i, lessThanPerfectCritical l 288 | WHERE i.totalscore<80 AND l.rid = i.rid AND i.idate < '2016-01-01' AND i.idate >= '2015-01-01' 289 | GROUP BY i.rid; 290 | /*get final result*/ 291 | SELECT r.name AS restaurantName, r.street AS restStreet, 292 | r.city AS restCity, r.state AS restState, r.zipcode AS restZipcode, c.numComplaints, c.complaintDescription, o.email, o.firstname, o.lastname,s.score 293 | FROM restaurant r , smaller s, complaintsMoreThan c, operatorowner o 294 | WHERE r.rid = s.rid and r.rid = c.rid and r.email = o.email; 295 | 296 | 297 | 298 | -------------------------------------------------------------------------------- /Phase3/src/css/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.3.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} -------------------------------------------------------------------------------- /Phase3/src/js/skel.min.js: -------------------------------------------------------------------------------- 1 | /* skel.js v2.2.1 | (c) n33 | getskel.com | MIT licensed */ 2 | var skel=function(){var e="breakpoints",t="config",n="iterate",r="elements",i="stateId",s="stateElements",o="getElementsByClassName",u=!1,a="getElementsByTagName",f="length",l="gridLevelMax",c=null,h="getCachedElement",p="viewport",d=" 0 -1px ",v="cacheNewElement",m="config_breakpoint",g="createElement",y=!0,b="gutters",w="vars",E="insertBefore",S="newInline",x="substring",T="}",N="parentNode",C="cache",k="locations",L="gridLevelMap",A="orientationChange",O="deviceType",M="className",_=" 0 0 ",D="object",P="isArray",H="match",B="grid",j="+*,",F="replace",I="head",q="newElement",R="canUseProperty_element",U="indexOf",z="_skel_isReversed",W="push",X="extend",V="matchesMedia",$="DOMReady",J="containers",K="onorientationchange",Q="defaults",G="lock",Y="getComputedStyle",Z="addEventListener",et="^head",tt="{display:none!important}",nt="parseMeasurement",rt="isActive",it="charAt",st="registerLocation",ot="trigger",ut="IEVersion",at="documentElement",ft="events",lt="placeholder",ct="level",ht="attachElements",pt="isStatic",dt="attachElement",vt="plugins",mt="DOMContentLoaded",gt="text/css",yt="device-width",bt="states",wt="initial-scale=1",Et="_skel_attach",St="removeEventListener",xt="split",Tt="resize",Nt="attached",Ct="location",kt="change",Lt="normalize",At="collapse",Ot="applyRowTransforms",Mt="media",_t="previousSibling",Dt="(min-width: ",Pt="html",Ht="style",Bt="firstChild",jt="forceDefaultState",Ft="_skel_placeholder",It="querySelectorAll",qt="min-height",Rt="max-height",Ut="min-width",zt="innerHTML",Wt="prototype",Xt="max-width",Vt="nextSibling",$t="hasOwnProperty",Jt="domready",Kt="onresize",Qt="priority",Gt="href",Yt=".\\3$1 ",Zt="android",en="readyState",tn="height=",nn={breakpoints:[],breakpointList:[],cache:{elements:{},states:{},stateElements:{}},config:{breakpoints:{"*":{href:u,media:""}},containers:1140,defaultState:c,events:{},grid:{level:1,collapse:u,gutters:[40,0]},lock:{path:u,permanent:y},plugins:{},pollOnce:u,preload:u,reset:Lt,RTL:u,viewport:{width:yt,height:"",scalable:y}},css:{bm:"*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}",n:"html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}",r:"html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}body{-webkit-text-size-adjust:none}",gc:function(e){return".\\31 2u"+e+",.\\31 2u\\24"+e+"{width:100%;clear:none;margin-left:0}"+".\\31 1u"+e+",.\\31 1u\\24"+e+"{width:91.6666666667%;clear:none;margin-left:0}"+".\\31 0u"+e+",.\\31 0u\\24"+e+"{width:83.3333333333%;clear:none;margin-left:0}"+".\\39 u"+e+",.\\39 u\\24"+e+"{width:75%;clear:none;margin-left:0}"+".\\38 u"+e+",.\\38 u\\24"+e+"{width:66.6666666667%;clear:none;margin-left:0}"+".\\37 u"+e+",.\\37 u\\24"+e+"{width:58.3333333333%;clear:none;margin-left:0}"+".\\36 u"+e+",.\\36 u\\24"+e+"{width:50%;clear:none;margin-left:0}"+".\\35 u"+e+",.\\35 u\\24"+e+"{width:41.6666666667%;clear:none;margin-left:0}"+".\\34 u"+e+",.\\34 u\\24"+e+"{width:33.3333333333%;clear:none;margin-left:0}"+".\\33 u"+e+",.\\33 u\\24"+e+"{width:25%;clear:none;margin-left:0}"+".\\32 u"+e+",.\\32 u\\24"+e+"{width:16.6666666667%;clear:none;margin-left:0}"+".\\31 u"+e+",.\\31 u\\24"+e+"{width:8.3333333333%;clear:none;margin-left:0}"+".\\31 2u\\24"+e+j+".\\31 1u\\24"+e+j+".\\31 0u\\24"+e+j+".\\39 u\\24"+e+j+".\\38 u\\24"+e+j+".\\37 u\\24"+e+j+".\\36 u\\24"+e+j+".\\35 u\\24"+e+j+".\\34 u\\24"+e+j+".\\33 u\\24"+e+j+".\\32 u\\24"+e+j+".\\31 u\\24"+e+"+*{"+"clear:left;"+T+".\\-11u"+e+"{margin-left:91.6666666667%}"+".\\-10u"+e+"{margin-left:83.3333333333%}"+".\\-9u"+e+"{margin-left:75%}"+".\\-8u"+e+"{margin-left:66.6666666667%}"+".\\-7u"+e+"{margin-left:58.3333333333%}"+".\\-6u"+e+"{margin-left:50%}"+".\\-5u"+e+"{margin-left:41.6666666667%}"+".\\-4u"+e+"{margin-left:33.3333333333%}"+".\\-3u"+e+"{margin-left:25%}"+".\\-2u"+e+"{margin-left:16.6666666667%}"+".\\-1u"+e+"{margin-left:8.3333333333%}"}},defaults:{breakpoint:{config:c,elements:c,test:c},config_breakpoint:{containers:"100%",grid:{},href:u,media:"",viewport:{}}},events:[],forceDefaultState:u,gridLevelMap:{k:{},v:{}},gridLevelMax:1,isInit:u,isStatic:u,locations:{body:c,head:c,html:c},lcn:"_skel_lock",me:c,plugins:{},sd:"/",stateId:"",vars:{},DOMReady:c,getElementsByClassName:c,indexOf:c,isArray:c,iterate:c,matchesMedia:c,extend:function(e,t){var r;nn[n](t,function(n){nn[P](t[n])?(nn[P](e[n])||(e[n]=[]),nn[X](e[n],t[n])):typeof t[n]==D?(typeof e[n]!=D&&(e[n]={}),nn[X](e[n],t[n])):e[n]=t[n]})},getArray:function(e){return nn[P](e)?e:[e]},parseMeasurement:function(e){var t,n;if(typeof e!="string")t=[e,"px"];else if(e=="fluid")t=[100,"%"];else{var n;n=e[H](/([0-9\.]+)([^\s]*)/),n[f]<3||!n[2]?t=[parseFloat(e),"px"]:t=[parseFloat(n[1]),n[2]]}return t},canUseProperty_element:c,canUse:function(t){return nn[e][t]&&nn[e][t].test()},canUseProperty:function(e){nn[R]||(nn[R]=document[g]("div"));var t=nn[R][Ht],n=e[it](0).toUpperCase()+e.slice(1);return e in t||"Moz"+n in t||"Webkit"+n in t||"O"+n in t||"ms"+n in t},hasActive:function(e){var t=u;return nn[n](e,function(n){t=t||nn[rt](e[n])}),t},isActive:function(e){return nn[U](nn[i],nn.sd+e)!==-1},isLocked:function(){return!!nn[w][G]&&nn[P](nn[w][G])},lock:function(e,n){nn[w][G]=[e,n],document.cookie=nn.lcn+"="+nn[w][G].join("_")+(nn[t][G].path?";path="+nn[t][G].path:"")+(nn[t][G].permanent?";expires=Tue, 19 Jan 2038 03:14:07 GMT":""),window[Ct].reload()},unlock:function(){nn[w][G]=c,document.cookie=nn.lcn+"="+(nn[t][G].path?";path="+nn[t][G].path:"")+";expires=Thu, 01 Jan 1970 01:02:03 GMT",window[Ct].reload()},useActive:function(e){if(typeof e!==D)return e;var t=c;return nn[n](e,function(n){if(t!==c)return;nn[rt](n)&&(t=e[n])}),t},wasActive:function(e){return nn[U](nn[w].lastStateId,nn.sd+e)!==-1},applyRowTransforms:function(e){nn[t].RTL&&(nn.unreverseRows(),e[t][B][At]&&nn.reverseRows());var r="_skel_important",i=[],s,a;for(s=1;s<=nn[l];s++)a=nn[o]("important("+nn[L].k[s]+")"),nn[n](a,function(e){i[W](a[e])});a=nn[o]("important(collapse)"),nn[n](a,function(e){i[W](a[e])}),nn[n](i,function(n){if(n===f)return;var s=i[n],o=s[N],a,l=u,c,h;if(!o)return;if(!s[$t](r)||s[r]===u){e[t][B][At]&&s[M][H](/important\(collapse\)/)?l="c":s[M][H](/important\((.+)\)/)&&(h=parseInt(nn[L].v[RegExp.$1]))<=e[t][B][ct]&&(l="l");if(!l)return;c=nn[t].RTL?Vt:_t,a=s[c];while(a&&a.nodeName=="#text")a=a[c];if(!a)return;o[E](s,nn[t].RTL&&l=="l"?o.lastChild:o[Bt]),s[r]={placeholder:a,mode:l,level:h}}else{a=s[r][lt],l=s[r].mode;if(l=="c"&&e[t][B][At]||l=="l"&&s[r][ct]<=e[t][B][ct])return;o[E](s,nn[t].RTL&&l=="l"?a[_t]:a[Vt]),s[r]=u}})},reverseRows:function(){var e=nn[o]("row");nn[n](e,function(t){if(t===f)return;var n=e[t];if(n[z])return;var r=n.children,i;for(i=1;i0&&nn[$](function(){nn[n](r,function(e){nn[dt](r[e])})})},cacheElement:function(e){return nn[C][r][e.id]=e,e},cacheNewElement:function(e,t,n,r){var i;return t[N]&&t[N].removeChild(t),i=nn[q](e,t,n,r),nn.cacheElement(i)},detachAllElements:function(e){var t,i,s={};nn[n](e,function(t){s[e[t].id]=y}),nn[n](nn[C][r],function(e){if(e in s)return;nn.detachElement(e)})},detachElement:function(e){var t=nn[C][r][e],n;if(!t[Nt])return;n=t[D];if(!n[N]||n[N]&&!n[N].tagName)return;n[N].removeChild(n),t[Nt]=u,t.onDetach&&t.onDetach()},getCachedElement:function(e){return nn[C][r][e]?nn[C][r][e]:c},newElement:function(e,t,n,r){return{id:e,object:t,location:n,priority:r,attached:u}},removeCachedElementFromBreakpoint:function(t,i){return nn[n](nn[e][t][r],function(n){nn[e][t][r][n].id==i&&delete nn[e][t][r][n]}),y},removeCachedElementFromState:function(e,t){return nn[n](nn[C][s][e],function(n){nn[C][s][e][n].id==t&&delete nn[C][s][e][n]}),y},uncacheElement:function(e){return e in nn[C][r]?(delete nn[C][r][e],y):u},changeState:function(o){var a,l,c,g,E,N,k,A,O;nn[w].lastStateId=nn[i],nn[i]=o;if(!nn[C][bt][nn[i]]){nn[C][bt][nn[i]]={config:{},elements:[],values:{}},c=nn[C][bt][nn[i]],nn[i]===nn.sd?a=[]:a=nn[i][x](1)[xt](nn.sd),nn[X](c[t],nn[Q][m]),nn[n](a,function(n){nn[X](c[t],nn[e][a[n]][t])}),k="mV"+nn[i],c[t][p].content?A=c[t][p].content:nn.isLocked()?(g=[],g[W]("user-scalable=yes"),nn[w][G][0]&&g[W]("width="+nn[w][G][0]),nn[w][G][1]&&g[W](tn+nn[w][G][1]),A=g.join(","),window.setTimeout(function(){nn.poll()},0)):(g=[],g[W]("user-scalable="+(c[t][p].scalable?"yes":"no")),c[t][p].width&&g[W]("width="+c[t][p].width),c[t][p].height&&g[W](tn+c[t][p].height),c[t][p].width==yt&&g[W](wt),A=g.join(",")),(E=nn[h](k))||(E=nn[v](k,nn.newMeta(p,A),et,4)),c[r][W](E);var M,D,P=u;g=nn[nt](c[t][J]),M=g[0],D=g[1],c.values[J]=M+D,k="iC"+c.values[J],D.substr(-1)=="!"&&(P=y,D=D.substr(0,D[f]-1)),(E=nn[h](k))||(E=nn[v](k,nn[S](".container{margin-left:auto;margin-right:auto;width:"+M*1+D+(P?"!important;max-width:none!important;min-width:0!important"+T:T+".container.\\31 25\\25{width:100%;max-width:"+M*1.25+D+";min-width:"+M+D+T+".container.\\37 5\\25{width:"+M*.75+D+T+".container.\\35 0\\25{width:"+M*.5+D+T+".container.\\32 5\\25{width:"+M*.25+D+T)),I,3)),c[r][W](E),k="iGG"+c[t][B][b][0]+"_"+c[t][B][b][1];if(!(E=nn[h](k))){var H,j;g=nn[nt](c[t][B][b][0]),H=g[0],j=g[1];var q,R;g=nn[nt](c[t][B][b][1]),q=g[0],R=g[1],E=nn[v]("iGG"+c[t][B][b][0]+"_"+c[t][B][b][1],nn[S](".row>*{padding:"+q*1+R+_+H*1+j+T+".row{margin:"+q*-1+R+d+H*-1+j+T+".row.uniform>*{padding:"+H*1+j+_+H*1+j+T+".row.uniform{margin:"+H*-1+j+d+H*-1+j+T+".row.\\32 00\\25>*{padding:"+q*2+R+_+H*2+j+T+".row.\\32 00\\25{margin:"+q*-2+R+d+H*-2+j+T+".row.uniform.\\32 00\\25>*{padding:"+H*2+j+_+H*2+j+T+".row.uniform.\\32 00\\25{margin:"+H*-2+j+d+H*-2+j+T+".row.\\31 50\\25>*{padding:"+q*1.5+R+_+H*1.5+j+T+".row.\\31 50\\25{margin:"+q*-1.5+R+d+H*-1.5+j+T+".row.uniform.\\31 50\\25>*{padding:"+H*1.5+j+_+H*1.5+j+T+".row.uniform.\\31 50\\25{margin:"+H*-1.5+j+d+H*-1.5+j+T+".row.\\35 0\\25>*{padding:"+q*.5+R+_+H*.5+j+T+".row.\\35 0\\25{margin:"+q*-0.5+R+d+H*-0.5+j+T+".row.uniform.\\35 0\\25>*{padding:"+H*.5+j+_+H*.5+j+T+".row.uniform.\\35 0\\25{margin:"+H*-0.5+j+d+H*-0.5+j+T+".row.\\32 5\\25>*{padding:"+q*.25+R+_+H*.25+j+T+".row.\\32 5\\25{margin:"+q*-0.25+R+d+H*-0.25+j+T+".row.uniform.\\32 5\\25>*{padding:"+H*.25+j+_+H*.25+j+T+".row.uniform.\\32 5\\25{margin:"+H*-0.25+j+d+H*-0.25+j+T+".row.\\30 \\25>*{padding:0}"+".row.\\30 \\25{margin:0 0 -1px 0}"),I,3)}c[r][W](E);if(c[t][B][ct]>1){k="igZ"+c[t][B][ct];if(!(E=nn[h](k))){A="";for(N=2;N<=c[t][B][ct];N++)A+=nn.css.gc("\\28 "+nn[L].k[N]+"\\29");E=nn[v](k,nn[S](A),I,3)}c[r][W](E)}c[t][B][At]&&(k="igC"+c[t][J],(E=nn[h](k))||(E=nn[v](k,nn[S](".row:not(.no-collapse)>*{width:100%!important;margin-left:0!important"+T),I,3)),c[r][W](E));if(!nn[pt]){k="iCd"+nn[i];if(!(E=nn[h](k))){A=[],O=[],nn[n](nn[e],function(e){nn[U](a,e)!==-1?A[W](".not-"+e):O[W](".only-"+e)});var z=(A[f]>0?A.join(",")+tt:"")+(O[f]>0?O.join(",")+tt:"");E=nn[v](k,nn[S](z[F](/\.([0-9])/,Yt)),I,3),c[r][W](E)}}nn[n](a,function(i){nn[e][a[i]][t][Gt]&&(k="ss"+a[i],(E=nn[h](k))||(E=nn[v](k,nn.newStyleSheet(nn[e][a[i]][t][Gt]),I,5)),c[r][W](E)),nn[e][a[i]][r][f]>0&&nn[n](nn[e][a[i]][r],function(t){c[r][W](nn[e][a[i]][r][t])})}),nn[C][s][nn[i]]&&(nn[n](nn[C][s][nn[i]],function(e){c[r][W](nn[C][s][nn[i]][e])}),nn[C][s][nn[i]]=[])}else c=nn[C][bt][nn[i]];nn.detachAllElements(c[r]),nn[ht](c[r]),nn[$](function(){nn[Ot](c)}),nn[w].state=nn[C][bt][nn[i]],nn[w][i]=nn[i],nn[ot](kt),nn[n](nn[e],function(e){nn[rt](e)?nn.wasActive(e)||nn[ot]("+"+e):nn.wasActive(e)&&nn[ot]("-"+e)})},getStateId:function(){if(nn[jt]&&nn[t].defaultState)return nn[t].defaultState;var r="";return nn[n](nn[e],function(t){nn[e][t].test()&&(r+=nn.sd+t)}),r},poll:function(){var e="";e=nn.getStateId(),e===""&&(e=nn.sd),e!==nn[i]&&(nn[pt]?nn.changeState(e):(nn[k][Pt][M]=nn[k][Pt][M][F](nn[i][x](1)[F](new RegExp(nn.sd,"g")," "),""),nn.changeState(e),nn[k][Pt][M]=nn[k][Pt][M]+" "+nn[i][x](1)[F](new RegExp(nn.sd,"g")," "),nn[k][Pt][M][it](0)==" "&&(nn[k][Pt][M]=nn[k][Pt][M][x](1))))},updateState:function(){var t,o,u,a,l=[];if(nn[i]==nn.sd)return;t=nn[i][x](1)[xt](nn.sd),nn[n](t,function(s){o=nn[e][t[s]];if(o[r][f]==0)return;nn[n](o[r],function(e){nn[C][bt][nn[i]][r][W](o[r][e]),l[W](o[r][e])})}),nn[C][s][nn[i]]&&(nn[n](nn[C][s][nn[i]],function(e){nn[C][bt][nn[i]][r][W](nn[C][s][nn[i]][e]),l[W](nn[C][s][nn[i]][e])}),nn[C][s][nn[i]]=[]),l[f]>0&&nn[ht](l)},newDiv:function(e){var t=document[g]("div");return t[zt]=e,t},newInline:function(e){var t;return t=document[g](Ht),t.type=gt,t[zt]=e,t},newMeta:function(e,t){var n=document[g]("meta");return n.name=e,n.content=t,n},newStyleSheet:function(e){var t=document[g]("link");return t.rel="stylesheet",t.type=gt,t[Gt]=e,t},initPlugin:function(e,n){typeof n==D&&nn[X](e[t],n),e.init&&e.init()},registerPlugin:function(e,t){if(!t)return u;nn[vt][e]=t,t._=this,t.register&&t.register()},init:function(e,r){nn.initConfig(e),nn.initElements(),nn.initEvents(),nn.poll(),r&&typeof r==D&&(nn[t][vt]=r),nn[n](nn[vt],function(e){nn.initPlugin(nn[vt][e],e in nn[t][vt]?nn[t][vt][e]:c)}),nn.isInit=y,nn[ot]("init")},initAPI:function(){var e,t,r=navigator.userAgent;nn[w][ut]=99,e="other",r[H](/Firefox/)?e="firefox":r[H](/Chrome/)?e="chrome":r[H](/Safari/)&&!r[H](/Chrome/)?e="safari":r[H](/(OPR|Opera)/)?e="opera":r[H](/MSIE ([0-9]+)/)?(e="ie",nn[w][ut]=RegExp.$1):r[H](/Trident\/.+rv:([0-9]+)/)&&(e="ie",nn[w][ut]=RegExp.$1),nn[w].browser=e,nn[w][O]="other",t={ios:"(iPad|iPhone|iPod)",android:"Android",mac:"Macintosh",wp:"Windows Phone",windows:"Windows NT"},nn[n](t,function(e){r[H](new RegExp(t[e],"g"))&&(nn[w][O]=e)});switch(nn[w][O]){case"ios":r[H](/([0-9_]+) like Mac OS X/),e=parseFloat(RegExp.$1[F]("_",".")[F]("_",""));break;case Zt:r[H](/Android ([0-9\.]+)/),e=parseFloat(RegExp.$1);break;case"mac":r[H](/Mac OS X ([0-9_]+)/),e=parseFloat(RegExp.$1[F]("_",".")[F]("_",""));break;case"wp":r[H](/IEMobile\/([0-9\.]+)/),e=parseFloat(RegExp.$1);break;case"windows":r[H](/Windows NT ([0-9\.]+)/),e=parseFloat(RegExp.$1);break;default:e=99}nn[w].deviceVersion=e,nn[w].isTouch=nn[w][O]=="wp"?navigator.msMaxTouchPoints>0:"ontouchstart"in window,nn[w].isMobile=nn[w][O]=="wp"||nn[w][O]==Zt||nn[w][O]=="ios",e=document.cookie[xt](";"),nn[n](e,function(t){var n=e[t][xt]("=");if(n[0][F](/^\s+|\s+$/g,"")==nn.lcn&&n[1][f]>0){nn[w][G]=n[1][xt]("_");return}})},initConfig:function(i){var s=[],o=[],c;if(!i||!(e in i))nn[pt]=y,nn[t][p].width="",nn[t][p].height="",nn[t][p].scalable=y;typeof i==D&&(i[e]&&(nn[t][e]={}),nn[X](nn[t],i)),B in nn[t]&&b in nn[t][B]&&!nn[P](nn[t][B][b])&&(nn[t][B][b]=[nn[t][B][b],nn[t][B][b]]),nn[X](nn[Q][m][B],nn[t][B]),nn[l]=Math.max(nn[l],nn[t][B][ct]),nn[X](nn[Q][m][p],nn[t][p]),nn[Q][m][J]=nn[t][J],nn[n](nn[t][e],function(n){var i,s={},u,a;nn[X](s,nn[t][e][n]),Gt in s||(s[Gt]=nn[Q][m][Gt]),Mt in s||(s[Mt]=nn[Q][m][Mt]),"range"in s&&(u=s.range,u=="*"?a="":u[it](0)=="-"?a="(max-width: "+parseInt(u[x](1))+"px)":u[it](u[f]-1)=="-"?a=Dt+parseInt(u[x](0,u[f]-1))+"px)":nn[U](u,"-")!=-1&&(u=u[xt]("-"),a=Dt+parseInt(u[0])+"px) and (max-width: "+parseInt(u[1])+"px)"),s[Mt]=a),B in s&&(b in s[B]&&!nn[P](s[B][b])&&(s[B][b]=[s[B][b],s[B][b]]),"zoom"in s[B]&&(s[B][ct]=s[B].zoom),ct in s[B]&&(nn[l]=Math.max(nn[l],s[B][ct]))),nn[t][e][n]=s,i={},nn[X](i,nn[Q].breakpoint),i[t]=nn[t][e][n],i.test=function(){return nn[V](s[Mt])},i[r]=[],nn[t].preload&&i[t][Gt]&&o[W](i[t][Gt]),nn[e][n]=i,nn.breakpointList[W](n)});if(nn[l]>1||nn[pt])for(c=2;c<=nn[l];c++)nn[L].k[c]=nn[L].v[c]=c;else nn[n](nn[t][e],function(n){var r=nn[t][e][n];nn[l]++,B in r||(r[B]={}),r[B][ct]=nn[l],nn[L].k[nn[l]]=n,nn[L].v[n]=nn[l]});nn[n](nn[t][ft],function(e){nn.on(e,nn[t][ft][e])}),o[f]>0&&window[Ct].protocol!="file:"&&nn[$](function(){var e,t=document[a](I)[0],r=new XMLHttpRequest;nn[n](o,function(e){r.open("GET",o[e],u),r.send("")})})},initElements:function(){var e=[];e[W](nn[q]("mV",nn.newMeta(p,wt),et,1));switch(nn[t].reset){case"full":e[W](nn[q]("iR",nn[S](nn.css.r),et,2));break;case Lt:e[W](nn[q]("iN",nn[S](nn.css.n),et,2))}e[W](nn[q]("iBM",nn[S](nn.css.bm),et,1)),e[W](nn[q]("iG",nn[S]('.row{border-bottom:solid 1px transparent}.row>*{float:left}.row:after,.row:before{content:"";display:block;clear:both;height:0}.row.uniform>*>:first-child{margin-top:0}.row.uniform>*>:last-child{margin-bottom:0}'+nn.css.gc("")),I,3)),nn[ht](e)},initEvents:function(){var e;!nn[t].pollOnce&&!nn[pt]&&(nn.on(Tt,function(){nn.poll()}),nn.on(A,function(){nn.poll()})),nn[w][O]=="ios"&&nn[$](function(){nn.on(A,function(){var e=document[a]("input");nn[n](e,function(t){e[t][Ft]=e[t][lt],e[t][lt]=""}),window.setTimeout(function(){nn[n](e,function(t){e[t][lt]=e[t][Ft]})},100)})}),nn[$](function(){nn[ot]("ready")}),window[Kt]&&nn.on(Tt,window[Kt]),window[Kt]=function(){nn[ot](Tt)},window[K]&&nn.on(A,window[K]),window[K]=function(){nn[ot](A)}},initUtilityMethods:function(){document[Z]?!function(e,t){nn[$]=t()}(Jt,function(){function e(e){s=1;while(e=t.shift())e()}var t=[],n,r=document,i=mt,s=/^loaded|^c/.test(r[en]);return r[Z](i,n=function(){r[St](i,n),e()}),function(e){s?e():t[W](e)}}):!function(e,t){nn[$]=t()}(Jt,function(e){function t(e){p=1;while(e=n.shift())e()}var n=[],r,i=!1,s=document,o=s[at],u=o.doScroll,a=mt,f=Z,l="onreadystatechange",c=en,h=u?/^loaded|^c/:/^loaded|c/,p=h.test(s[c]);return s[f]&&s[f](a,r=function(){s[St](a,r,i),t()},i),u&&s.attachEvent(l,r=function(){/^c/.test(s[c])&&(s.detachEvent(l,r),t())}),e=u?function(t){self!=top?p?t():n[W](t):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){e(t)},50)}t()}()}:function(e){p?e():n[W](e)}}),document[o]?nn[o]=function(e){return document[o](e)}:nn[o]=function(e){var t=document;return t[It]?t[It](("."+e[F](" "," ."))[F](/\.([0-9])/,Yt)):[]},Array[Wt][U]?nn[U]=function(e,t){return e[U](t)}:nn[U]=function(e,t){if(typeof e=="string")return e[U](t);var n,r=t?t:0,i;if(!this)throw new TypeError;i=this[f];if(i===0||r>=i)return-1;r<0&&(r=i-Math.abs(r));for(n=r;ns[Xt]||s[qt]!==c&&ls[Rt]?u:y})},preInit:function(){var e=document[a]("script");nn.me=e[e[f]-1],nn.initUtilityMethods(),nn.initAPI(),nn[st](Pt,document[a](Pt)[0]),nn[st](I,document[a](I)[0]),nn[$](function(){nn[st]("body",document[a]("body")[0])}),nn[w].browser=="ie"&&nn[w][ut]>=10&&nn[dt](nn[q]("msie-viewport-fix",nn[S]("@-ms-viewport{width:device-width}"),et,1))}};return nn.preInit(),nn[w][ut]<9&&(nn[Ot]=function(e){},nn[S]=function(e){var t;return t=document[g]("span"),t[zt]=' ",t}),nn}();(function(e,t){typeof define=="function"&&define.amd?define([],t):typeof exports=="object"?module.exports=t():e.skel=t()})(this,function(){return skel}); -------------------------------------------------------------------------------- /Phase3/src/css/style.css: -------------------------------------------------------------------------------- 1 | @import url(font-awesome.min.css); 2 | @import url("http://fonts.googleapis.com/css?family=Raleway:400,400italic,700,800"); 3 | 4 | /* 5 | Highlights by HTML5 UP 6 | html5up.net | @n33co 7 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 8 | */ 9 | 10 | /* Basic */ 11 | 12 | html { 13 | background-color: #313a3d; 14 | background-attachment: fixed, fixed; 15 | background-image: url("images/overlay.png"), url("../images/bg.jpg"); 16 | background-position: top left, center center; 17 | background-repeat: repeat, none; 18 | background-size: auto, cover; 19 | } 20 | 21 | html.is-loading body *, html.is-loading body *:before, html.is-loading body *:after { 22 | -moz-animation: none !important; 23 | -webkit-animation: none !important; 24 | -o-animation: none !important; 25 | -ms-animation: none !important; 26 | animation: none !important; 27 | -moz-transition: none !important; 28 | -webkit-transition: none !important; 29 | -o-transition: none !important; 30 | -ms-transition: none !important; 31 | transition: none !important; 32 | } 33 | 34 | html.is-touch { 35 | height: 100vh; 36 | overflow: hidden; 37 | } 38 | 39 | html.is-touch #wrapper { 40 | -webkit-backface-visibility: hidden; 41 | -webkit-overflow-scrolling: touch; 42 | -webkit-transform: translate3d(0, 0, 0); 43 | height: 100vh; 44 | overflow: auto; 45 | } 46 | 47 | body, input, select, textarea { 48 | color: #6f7577; 49 | font-family: "Raleway", "Helvetica", sans-serif; 50 | font-size: 15pt; 51 | font-weight: 400; 52 | line-height: 1.75em; 53 | } 54 | 55 | a { 56 | -moz-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; 57 | -webkit-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; 58 | -o-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; 59 | -ms-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; 60 | transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; 61 | border-bottom: dotted 1px; 62 | color: #8cd1a8; 63 | text-decoration: none; 64 | } 65 | 66 | a:hover { 67 | border-bottom-color: transparent !important; 68 | color: #8cd1a8 !important; 69 | text-decoration: none; 70 | } 71 | 72 | strong, b { 73 | color: #61686b; 74 | font-weight: 700; 75 | } 76 | 77 | em, i { 78 | font-style: italic; 79 | } 80 | 81 | p { 82 | margin: 0 0 2em 0; 83 | } 84 | 85 | h1, h2, h3, h4, h5, h6 { 86 | color: #61686b; 87 | font-weight: 800; 88 | letter-spacing: 0.075em; 89 | line-height: 1em; 90 | margin: 0 0 1em 0; 91 | text-transform: uppercase; 92 | } 93 | 94 | h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { 95 | color: inherit; 96 | text-decoration: none; 97 | } 98 | 99 | h2 { 100 | font-size: 1.75em; 101 | line-height: 1.5em; 102 | } 103 | 104 | h3 { 105 | font-size: 1em; 106 | line-height: 1.5em; 107 | } 108 | 109 | h4 { 110 | font-size: 0.9em; 111 | line-height: 1.5em; 112 | } 113 | 114 | h5 { 115 | font-size: 0.8em; 116 | line-height: 1.5em; 117 | } 118 | 119 | h6 { 120 | font-size: 0.7em; 121 | line-height: 1.5em; 122 | } 123 | 124 | sub { 125 | font-size: 0.8em; 126 | position: relative; 127 | top: 0.5em; 128 | } 129 | 130 | sup { 131 | font-size: 0.8em; 132 | position: relative; 133 | top: -0.5em; 134 | } 135 | 136 | hr { 137 | border: 0; 138 | border-bottom: solid 1px #dddddd; 139 | margin: 2em 0; 140 | } 141 | 142 | hr.major { 143 | margin: 3em 0; 144 | } 145 | 146 | blockquote { 147 | border-left: solid 6px #dddddd; 148 | font-style: italic; 149 | margin: 0 0 2em 0; 150 | padding: 0.5em 0 0.5em 1.5em; 151 | } 152 | 153 | code { 154 | background: rgba(144, 144, 144, 0.075); 155 | font-family: "Courier New", monospace; 156 | font-size: 0.9em; 157 | margin: 0 0.25em; 158 | padding: 0.25em 0.65em; 159 | } 160 | 161 | pre { 162 | -webkit-overflow-scrolling: touch; 163 | font-family: "Courier New", monospace; 164 | font-size: 0.9em; 165 | margin: 0 0 2em 0; 166 | } 167 | 168 | pre code { 169 | display: block; 170 | line-height: 1.75em; 171 | padding: 1em 1.5em; 172 | overflow-x: auto; 173 | } 174 | 175 | .align-left { 176 | text-align: left; 177 | } 178 | 179 | .align-center { 180 | text-align: center; 181 | } 182 | 183 | .align-right { 184 | text-align: right; 185 | } 186 | 187 | /* Loader */ 188 | @-moz-keyframes spinner-show { 0% { opacity: 0; } 100% { opacity: 1; } } 189 | @-webkit-keyframes spinner-show { 0% { opacity: 0; } 100% { opacity: 1; } } 190 | @-o-keyframes spinner-show { 0% { opacity: 0; } 100% { opacity: 1; } } 191 | @-ms-keyframes spinner-show { 0% { opacity: 0; } 100% { opacity: 1; } } 192 | @keyframes spinner-show { 0% { opacity: 0; } 100% { opacity: 1; } } 193 | @-moz-keyframes spinner-hide { 0% { color: #454d50; z-index: 10001; -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 99% { color: #313a3d; z-index: 10001; -moz-transform: scale(0.5) rotate(360deg); -webkit-transform: scale(0.5) rotate(360deg); -o-transform: scale(0.5) rotate(360deg); -ms-transform: scale(0.5) rotate(360deg); transform: scale(0.5) rotate(360deg); } 100% { color: #313a3d; z-index: -1; -moz-transform: scale(0) rotate(360deg); -webkit-transform: scale(0) rotate(360deg); -o-transform: scale(0) rotate(360deg); -ms-transform: scale(0) rotate(360deg); transform: scale(0) rotate(360deg); } } 194 | @-webkit-keyframes spinner-hide { 0% { color: #454d50; z-index: 10001; -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 99% { color: #313a3d; z-index: 10001; -moz-transform: scale(0.5) rotate(360deg); -webkit-transform: scale(0.5) rotate(360deg); -o-transform: scale(0.5) rotate(360deg); -ms-transform: scale(0.5) rotate(360deg); transform: scale(0.5) rotate(360deg); } 100% { color: #313a3d; z-index: -1; -moz-transform: scale(0) rotate(360deg); -webkit-transform: scale(0) rotate(360deg); -o-transform: scale(0) rotate(360deg); -ms-transform: scale(0) rotate(360deg); transform: scale(0) rotate(360deg); } } 195 | @-o-keyframes spinner-hide { 0% { color: #454d50; z-index: 10001; -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 99% { color: #313a3d; z-index: 10001; -moz-transform: scale(0.5) rotate(360deg); -webkit-transform: scale(0.5) rotate(360deg); -o-transform: scale(0.5) rotate(360deg); -ms-transform: scale(0.5) rotate(360deg); transform: scale(0.5) rotate(360deg); } 100% { color: #313a3d; z-index: -1; -moz-transform: scale(0) rotate(360deg); -webkit-transform: scale(0) rotate(360deg); -o-transform: scale(0) rotate(360deg); -ms-transform: scale(0) rotate(360deg); transform: scale(0) rotate(360deg); } } 196 | @-ms-keyframes spinner-hide { 0% { color: #454d50; z-index: 10001; -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 99% { color: #313a3d; z-index: 10001; -moz-transform: scale(0.5) rotate(360deg); -webkit-transform: scale(0.5) rotate(360deg); -o-transform: scale(0.5) rotate(360deg); -ms-transform: scale(0.5) rotate(360deg); transform: scale(0.5) rotate(360deg); } 100% { color: #313a3d; z-index: -1; -moz-transform: scale(0) rotate(360deg); -webkit-transform: scale(0) rotate(360deg); -o-transform: scale(0) rotate(360deg); -ms-transform: scale(0) rotate(360deg); transform: scale(0) rotate(360deg); } } 197 | @keyframes spinner-hide { 0% { color: #454d50; z-index: 10001; -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 99% { color: #313a3d; z-index: 10001; -moz-transform: scale(0.5) rotate(360deg); -webkit-transform: scale(0.5) rotate(360deg); -o-transform: scale(0.5) rotate(360deg); -ms-transform: scale(0.5) rotate(360deg); transform: scale(0.5) rotate(360deg); } 100% { color: #313a3d; z-index: -1; -moz-transform: scale(0) rotate(360deg); -webkit-transform: scale(0) rotate(360deg); -o-transform: scale(0) rotate(360deg); -ms-transform: scale(0) rotate(360deg); transform: scale(0) rotate(360deg); } } 198 | @-moz-keyframes spinner-rotate { 0% { -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 100% { -moz-transform: scale(1) rotate(360deg); -webkit-transform: scale(1) rotate(360deg); -o-transform: scale(1) rotate(360deg); -ms-transform: scale(1) rotate(360deg); transform: scale(1) rotate(360deg); } } 199 | @-webkit-keyframes spinner-rotate { 0% { -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 100% { -moz-transform: scale(1) rotate(360deg); -webkit-transform: scale(1) rotate(360deg); -o-transform: scale(1) rotate(360deg); -ms-transform: scale(1) rotate(360deg); transform: scale(1) rotate(360deg); } } 200 | @-o-keyframes spinner-rotate { 0% { -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 100% { -moz-transform: scale(1) rotate(360deg); -webkit-transform: scale(1) rotate(360deg); -o-transform: scale(1) rotate(360deg); -ms-transform: scale(1) rotate(360deg); transform: scale(1) rotate(360deg); } } 201 | @-ms-keyframes spinner-rotate { 0% { -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 100% { -moz-transform: scale(1) rotate(360deg); -webkit-transform: scale(1) rotate(360deg); -o-transform: scale(1) rotate(360deg); -ms-transform: scale(1) rotate(360deg); transform: scale(1) rotate(360deg); } } 202 | @keyframes spinner-rotate { 0% { -moz-transform: scale(1) rotate(0deg); -webkit-transform: scale(1) rotate(0deg); -o-transform: scale(1) rotate(0deg); -ms-transform: scale(1) rotate(0deg); transform: scale(1) rotate(0deg); } 100% { -moz-transform: scale(1) rotate(360deg); -webkit-transform: scale(1) rotate(360deg); -o-transform: scale(1) rotate(360deg); -ms-transform: scale(1) rotate(360deg); transform: scale(1) rotate(360deg); } } 203 | @-moz-keyframes overlay-hide { 0% { opacity: 1; z-index: 10000; } 15% { opacity: 1; z-index: 10000; } 99% { opacity: 0; z-index: 10000; } 100% { opacity: 0; z-index: -1; } } 204 | @-webkit-keyframes overlay-hide { 0% { opacity: 1; z-index: 10000; } 15% { opacity: 1; z-index: 10000; } 99% { opacity: 0; z-index: 10000; } 100% { opacity: 0; z-index: -1; } } 205 | @-o-keyframes overlay-hide { 0% { opacity: 1; z-index: 10000; } 15% { opacity: 1; z-index: 10000; } 99% { opacity: 0; z-index: 10000; } 100% { opacity: 0; z-index: -1; } } 206 | @-ms-keyframes overlay-hide { 0% { opacity: 1; z-index: 10000; } 15% { opacity: 1; z-index: 10000; } 99% { opacity: 0; z-index: 10000; } 100% { opacity: 0; z-index: -1; } } 207 | @keyframes overlay-hide { 0% { opacity: 1; z-index: 10000; } 15% { opacity: 1; z-index: 10000; } 99% { opacity: 0; z-index: 10000; } 100% { opacity: 0; z-index: -1; } } 208 | 209 | html body { 210 | text-decoration: none; 211 | } 212 | 213 | html body:before { 214 | -moz-osx-font-smoothing: grayscale; 215 | -webkit-font-smoothing: antialiased; 216 | font-family: FontAwesome; 217 | font-style: normal; 218 | font-weight: normal; 219 | text-transform: none !important; 220 | } 221 | 222 | html body:before { 223 | -moz-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-hide 0.25s ease-in-out forwards !important; 224 | -webkit-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-hide 0.25s ease-in-out forwards !important; 225 | -o-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-hide 0.25s ease-in-out forwards !important; 226 | -ms-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-hide 0.25s ease-in-out forwards !important; 227 | animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-hide 0.25s ease-in-out forwards !important; 228 | -moz-transform-origin: 50% 50%; 229 | -webkit-transform-origin: 50% 50%; 230 | -o-transform-origin: 50% 50%; 231 | -ms-transform-origin: 50% 50%; 232 | transform-origin: 50% 50%; 233 | color: #454d50; 234 | content: '\f1ce'; 235 | cursor: default; 236 | display: block; 237 | font-size: 2em; 238 | height: 2em; 239 | left: 50%; 240 | opacity: 0; 241 | line-height: 2em; 242 | margin: -1em 0 0 -1em; 243 | position: fixed; 244 | text-align: center; 245 | top: 50%; 246 | width: 2em; 247 | z-index: -1; 248 | } 249 | 250 | html body:after { 251 | -moz-animation: overlay-hide 1s ease-in forwards !important; 252 | -webkit-animation: overlay-hide 1s ease-in forwards !important; 253 | -o-animation: overlay-hide 1s ease-in forwards !important; 254 | -ms-animation: overlay-hide 1s ease-in forwards !important; 255 | animation: overlay-hide 1s ease-in forwards !important; 256 | background: #313a3d; 257 | content: ''; 258 | display: block; 259 | height: 100%; 260 | left: 0; 261 | opacity: 0; 262 | position: fixed; 263 | top: 0; 264 | width: 100%; 265 | z-index: -1; 266 | } 267 | 268 | html.is-loading body:before { 269 | -moz-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-rotate 0.75s infinite linear !important; 270 | -webkit-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-rotate 0.75s infinite linear !important; 271 | -o-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-rotate 0.75s infinite linear !important; 272 | -ms-animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-rotate 0.75s infinite linear !important; 273 | animation: spinner-show 1.5s 1 0.25s ease forwards, spinner-rotate 0.75s infinite linear !important; 274 | z-index: 10001; 275 | } 276 | 277 | html.is-loading body:after { 278 | -moz-animation: none !important; 279 | -webkit-animation: none !important; 280 | -o-animation: none !important; 281 | -ms-animation: none !important; 282 | animation: none !important; 283 | opacity: 1; 284 | z-index: 10000; 285 | } 286 | @media (-webkit-min-device-pixel-ratio: 2) { 287 | html body:before { 288 | line-height: 2.025em; 289 | 290 | } 291 | } 292 | 293 | /* Section/Article */ 294 | 295 | section.special, article.special { 296 | text-align: center; 297 | } 298 | 299 | header p { 300 | color: #a8b0b3; 301 | letter-spacing: 0.05em; 302 | text-transform: uppercase; 303 | } 304 | 305 | header h1 + p { 306 | margin-top: -1em; 307 | } 308 | 309 | header h2 + p { 310 | margin-top: -1em; 311 | } 312 | 313 | header h3 + p { 314 | margin-top: -0.8em; 315 | } 316 | 317 | header h4 + p, 318 | header h5 + p, 319 | header h6 + p { 320 | font-size: 0.8em; 321 | margin-top: -0.6em; 322 | } 323 | 324 | header.major { 325 | text-align: center; 326 | } 327 | 328 | header.major h1, header.major h2, header.major h3, header.major h4, header.major h5, header.major h6 { 329 | position: relative; 330 | } 331 | 332 | header.major h1:after, header.major h2:after, header.major h3:after, header.major h4:after, header.major h5:after, header.major h6:after { 333 | background: #dddddd; 334 | content: ''; 335 | display: block; 336 | height: 2px; 337 | margin: 0.75em auto 0 auto; 338 | position: relative; 339 | width: 4em; 340 | } 341 | 342 | header.major p { 343 | margin-top: 0; 344 | } 345 | 346 | /* Form */ 347 | 348 | form { 349 | margin: 0 0 2em 0; 350 | } 351 | 352 | label { 353 | color: #61686b; 354 | display: block; 355 | font-size: 0.9em; 356 | font-weight: 700; 357 | margin: 0 0 1em 0; 358 | } 359 | 360 | input[type="text"], 361 | input[type="password"], 362 | input[type="email"], 363 | select, 364 | textarea { 365 | -moz-appearance: none; 366 | -webkit-appearance: none; 367 | -o-appearance: none; 368 | -ms-appearance: none; 369 | appearance: none; 370 | background: rgba(144, 144, 144, 0.15); 371 | border-radius: 0; 372 | border: none; 373 | color: inherit; 374 | display: block; 375 | outline: 0; 376 | padding: 0 1em; 377 | text-decoration: none; 378 | width: 100%; 379 | } 380 | 381 | input[type="text"]:invalid, 382 | input[type="password"]:invalid, 383 | input[type="email"]:invalid, 384 | select:invalid, 385 | textarea:invalid { 386 | box-shadow: none; 387 | } 388 | 389 | input[type="text"]:focus, 390 | input[type="password"]:focus, 391 | input[type="email"]:focus, 392 | select:focus, 393 | textarea:focus { 394 | box-shadow: inset 0 0 0 2px #8cd1a8; 395 | } 396 | 397 | .select-wrapper { 398 | text-decoration: none; 399 | display: block; 400 | position: relative; 401 | } 402 | 403 | .select-wrapper:before { 404 | -moz-osx-font-smoothing: grayscale; 405 | -webkit-font-smoothing: antialiased; 406 | font-family: FontAwesome; 407 | font-style: normal; 408 | font-weight: normal; 409 | text-transform: none !important; 410 | } 411 | 412 | .select-wrapper:before { 413 | color: #a8b0b3; 414 | content: '\f078'; 415 | display: block; 416 | height: 3em; 417 | line-height: 3em; 418 | pointer-events: none; 419 | position: absolute; 420 | right: 0; 421 | text-align: center; 422 | top: 0; 423 | width: 3em; 424 | } 425 | 426 | .select-wrapper select::-ms-expand { 427 | display: none; 428 | } 429 | 430 | input[type="text"], 431 | input[type="password"], 432 | input[type="email"], 433 | select { 434 | height: 3em; 435 | } 436 | 437 | textarea { 438 | padding: 0.75em 1em; 439 | } 440 | 441 | input[type="checkbox"], 442 | input[type="radio"] { 443 | -moz-appearance: none; 444 | -webkit-appearance: none; 445 | -o-appearance: none; 446 | -ms-appearance: none; 447 | appearance: none; 448 | display: block; 449 | float: left; 450 | margin-right: -2em; 451 | opacity: 0; 452 | width: 1em; 453 | z-index: -1; 454 | } 455 | 456 | input[type="checkbox"] + label, 457 | input[type="radio"] + label { 458 | text-decoration: none; 459 | color: #6f7577; 460 | cursor: pointer; 461 | display: inline-block; 462 | font-size: 1em; 463 | font-weight: 400; 464 | padding-left: 2.55em; 465 | padding-right: 0.75em; 466 | position: relative; 467 | } 468 | 469 | input[type="checkbox"] + label:before, 470 | input[type="radio"] + label:before { 471 | -moz-osx-font-smoothing: grayscale; 472 | -webkit-font-smoothing: antialiased; 473 | font-family: FontAwesome; 474 | font-style: normal; 475 | font-weight: normal; 476 | text-transform: none !important; 477 | } 478 | 479 | input[type="checkbox"] + label:before, 480 | input[type="radio"] + label:before { 481 | background: rgba(144, 144, 144, 0.15); 482 | content: ''; 483 | display: inline-block; 484 | height: 1.8em; 485 | left: 0; 486 | line-height: 1.725em; 487 | position: absolute; 488 | text-align: center; 489 | top: 0; 490 | width: 1.8em; 491 | } 492 | 493 | input[type="checkbox"]:checked + label:before, 494 | input[type="radio"]:checked + label:before { 495 | background: #313a3d; 496 | color: #ffffff; 497 | content: '\f00c'; 498 | } 499 | 500 | input[type="checkbox"]:focus + label:before, 501 | input[type="radio"]:focus + label:before { 502 | box-shadow: inset 0 0 0 2px #8cd1a8; 503 | } 504 | 505 | input[type="radio"] + label:before { 506 | border-radius: 100%; 507 | } 508 | 509 | ::-webkit-input-placeholder { 510 | color: #a8b0b3 !important; 511 | opacity: 1.0; 512 | } 513 | 514 | :-moz-placeholder { 515 | color: #a8b0b3 !important; 516 | opacity: 1.0; 517 | } 518 | 519 | ::-moz-placeholder { 520 | color: #a8b0b3 !important; 521 | opacity: 1.0; 522 | } 523 | 524 | :-ms-input-placeholder { 525 | color: #a8b0b3 !important; 526 | opacity: 1.0; 527 | } 528 | 529 | .formerize-placeholder { 530 | color: #a8b0b3 !important; 531 | opacity: 1.0; 532 | } 533 | 534 | /* Box */ 535 | 536 | .box { 537 | border: solid 2px #dddddd; 538 | margin-bottom: 2em; 539 | padding: 1.5em; 540 | } 541 | 542 | .box > :last-child, 543 | .box > :last-child > :last-child, 544 | .box > :last-child > :last-child > :last-child { 545 | margin-bottom: 0; 546 | } 547 | 548 | .box.alt { 549 | border: 0; 550 | border-radius: 0; 551 | padding: 0; 552 | } 553 | 554 | /* Icon */ 555 | 556 | .icon { 557 | text-decoration: none; 558 | border-bottom: none; 559 | position: relative; 560 | } 561 | 562 | .icon:before { 563 | -moz-osx-font-smoothing: grayscale; 564 | -webkit-font-smoothing: antialiased; 565 | font-family: FontAwesome; 566 | font-style: normal; 567 | font-weight: normal; 568 | text-transform: none !important; 569 | } 570 | 571 | .icon > .label { 572 | display: none; 573 | } 574 | 575 | .icon.major { 576 | display: block; 577 | margin: 0 0 1em 0; 578 | } 579 | 580 | .icon.major:before { 581 | font-size: 2.5em; 582 | } 583 | 584 | /* Image */ 585 | 586 | .image { 587 | border: 0; 588 | display: inline-block; 589 | position: relative; 590 | } 591 | 592 | .image:before { 593 | background: url("images/overlay.png"); 594 | content: ''; 595 | display: block; 596 | height: 100%; 597 | left: 0; 598 | position: absolute; 599 | top: 0; 600 | width: 100%; 601 | } 602 | 603 | .image img { 604 | display: block; 605 | } 606 | 607 | .image.left { 608 | float: left; 609 | margin: 0 1.5em 1em 0; 610 | top: 0.25em; 611 | } 612 | 613 | .image.right { 614 | float: right; 615 | margin: 0 0 1em 1.5em; 616 | top: 0.25em; 617 | } 618 | 619 | .image.left, .image.right { 620 | max-width: 40%; 621 | } 622 | 623 | .image.left img, .image.right img { 624 | width: 100%; 625 | } 626 | 627 | .image.fit { 628 | display: block; 629 | margin: 0 0 2em 0; 630 | width: 100%; 631 | } 632 | 633 | .image.fit img { 634 | width: 100%; 635 | } 636 | 637 | /* List */ 638 | 639 | ol { 640 | list-style: decimal; 641 | margin: 0 0 2em 0; 642 | padding-left: 1.25em; 643 | } 644 | 645 | ol li { 646 | padding-left: 0.25em; 647 | } 648 | 649 | ul { 650 | list-style: disc; 651 | margin: 0 0 2em 0; 652 | padding-left: 1em; 653 | } 654 | 655 | ul li { 656 | padding-left: 0.5em; 657 | } 658 | 659 | ul.alt { 660 | list-style: none; 661 | padding-left: 0; 662 | } 663 | 664 | ul.alt li { 665 | border-top: solid 1px #dddddd; 666 | padding: 0.5em 0; 667 | } 668 | 669 | ul.alt li:first-child { 670 | border-top: 0; 671 | padding-top: 0; 672 | } 673 | 674 | ul.icons { 675 | cursor: default; 676 | list-style: none; 677 | padding-left: 0; 678 | } 679 | 680 | ul.icons li { 681 | display: inline-block; 682 | padding: 0 1.5em 0 0; 683 | } 684 | 685 | ul.icons li:last-child { 686 | padding-right: 0; 687 | } 688 | 689 | ul.icons li .icon:before { 690 | font-size: 1.5em; 691 | } 692 | 693 | ul.icons-grid { 694 | list-style: none; 695 | padding: 0; 696 | position: relative; 697 | } 698 | 699 | ul.icons-grid li { 700 | display: block; 701 | float: left; 702 | padding: 3em 0; 703 | width: 50%; 704 | } 705 | 706 | ul.icons-grid li h3 { 707 | margin: 0; 708 | } 709 | 710 | ul.icons-grid li:nth-child(2n + 1) { 711 | box-shadow: inset -1px 0 0 0 #dddddd, 1px 0 0 0 #dddddd; 712 | } 713 | 714 | ul.icons-grid li:nth-child(2n + 3):before { 715 | background: #dddddd; 716 | content: ''; 717 | display: block; 718 | height: 2px; 719 | margin-top: -3em; 720 | position: absolute; 721 | width: 100%; 722 | } 723 | 724 | ul.icons-grid:after { 725 | clear: both; 726 | content: ''; 727 | display: block; 728 | } 729 | 730 | ul.actions { 731 | cursor: default; 732 | list-style: none; 733 | padding-left: 0; 734 | } 735 | 736 | ul.actions li { 737 | display: inline-block; 738 | padding: 0 1em 0 0; 739 | vertical-align: middle; 740 | } 741 | 742 | ul.actions li:last-child { 743 | padding-right: 0; 744 | } 745 | 746 | ul.actions.small li { 747 | padding: 0 0.5em 0 0; 748 | } 749 | 750 | ul.actions.vertical li { 751 | display: block; 752 | padding: 1em 0 0 0; 753 | } 754 | 755 | ul.actions.vertical li:first-child { 756 | padding-top: 0; 757 | } 758 | 759 | ul.actions.vertical li > * { 760 | margin-bottom: 0; 761 | } 762 | 763 | ul.actions.vertical.small li { 764 | padding: 0.5em 0 0 0; 765 | } 766 | 767 | ul.actions.vertical.small li:first-child { 768 | padding-top: 0; 769 | } 770 | 771 | ul.actions.fit { 772 | display: table; 773 | margin-left: -1em; 774 | padding: 0; 775 | table-layout: fixed; 776 | width: calc(100% + 1em); 777 | } 778 | 779 | ul.actions.fit li { 780 | display: table-cell; 781 | padding: 0 0 0 1em; 782 | } 783 | 784 | ul.actions.fit li > * { 785 | margin-bottom: 0; 786 | min-width: 0; 787 | } 788 | 789 | ul.actions.fit.small { 790 | margin-left: -0.5em; 791 | width: calc(100% + 0.5em); 792 | } 793 | 794 | ul.actions.fit.small li { 795 | padding: 0 0 0 0.5em; 796 | } 797 | 798 | dl { 799 | margin: 0 0 2em 0; 800 | } 801 | 802 | /* Table */ 803 | 804 | .table-wrapper { 805 | -webkit-overflow-scrolling: touch; 806 | overflow-x: auto; 807 | } 808 | 809 | table { 810 | margin: 0 0 2em 0; 811 | width: 100%; 812 | } 813 | 814 | table tbody tr { 815 | border: solid 1px #dddddd; 816 | border-left: 0; 817 | border-right: 0; 818 | } 819 | 820 | table tbody tr:nth-child(2n + 1) { 821 | background-color: rgba(144, 144, 144, 0.075); 822 | } 823 | 824 | table td { 825 | padding: 0.75em 0.75em; 826 | } 827 | 828 | table th { 829 | color: #61686b; 830 | font-size: 0.9em; 831 | font-weight: 700; 832 | padding: 0 0.75em 0.75em 0.75em; 833 | text-align: left; 834 | } 835 | 836 | table thead { 837 | border-bottom: solid 2px #dddddd; 838 | } 839 | 840 | table tfoot { 841 | border-top: solid 2px #dddddd; 842 | } 843 | 844 | table.alt { 845 | border-collapse: separate; 846 | } 847 | 848 | table.alt tbody tr td { 849 | border: solid 1px #dddddd; 850 | border-left-width: 0; 851 | border-top-width: 0; 852 | } 853 | 854 | table.alt tbody tr td:first-child { 855 | border-left-width: 1px; 856 | } 857 | 858 | table.alt tbody tr:first-child td { 859 | border-top-width: 1px; 860 | } 861 | 862 | table.alt thead { 863 | border-bottom: 0; 864 | } 865 | 866 | table.alt tfoot { 867 | border-top: 0; 868 | } 869 | 870 | /* Button */ 871 | 872 | input[type="submit"], 873 | input[type="reset"], 874 | input[type="button"], 875 | button, 876 | .button { 877 | -moz-appearance: none; 878 | -webkit-appearance: none; 879 | -o-appearance: none; 880 | -ms-appearance: none; 881 | appearance: none; 882 | -moz-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; 883 | -webkit-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; 884 | -o-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; 885 | -ms-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; 886 | transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; 887 | background-color: transparent; 888 | border-radius: 0; 889 | border: 0; 890 | box-shadow: inset 0 0 0 2px #dddddd; 891 | color: #61686b !important; 892 | cursor: pointer; 893 | display: inline-block; 894 | font-weight: 700; 895 | height: 3em; 896 | letter-spacing: 0.05em; 897 | line-height: 3.15em; 898 | padding: 0 2em; 899 | text-align: center; 900 | text-decoration: none; 901 | text-transform: uppercase; 902 | white-space: nowrap; 903 | } 904 | 905 | input[type="submit"]:hover, 906 | input[type="reset"]:hover, 907 | input[type="button"]:hover, 908 | button:hover, 909 | .button:hover { 910 | background-color: rgba(144, 144, 144, 0.075); 911 | color: #61686b !important; 912 | } 913 | 914 | input[type="submit"]:active, 915 | input[type="reset"]:active, 916 | input[type="button"]:active, 917 | button:active, 918 | .button:active { 919 | background-color: rgba(144, 144, 144, 0.15); 920 | color: #61686b !important; 921 | } 922 | 923 | input[type="submit"].icon, 924 | input[type="reset"].icon, 925 | input[type="button"].icon, 926 | button.icon, 927 | .button.icon { 928 | padding-left: 1.35em; 929 | } 930 | 931 | input[type="submit"].icon:before, 932 | input[type="reset"].icon:before, 933 | input[type="button"].icon:before, 934 | button.icon:before, 935 | .button.icon:before { 936 | color: #a8b0b3; 937 | margin-right: 0.5em; 938 | } 939 | 940 | input[type="submit"].fit, 941 | input[type="reset"].fit, 942 | input[type="button"].fit, 943 | button.fit, 944 | .button.fit { 945 | display: block; 946 | margin: 0 0 1em 0; 947 | width: 100%; 948 | } 949 | 950 | input[type="submit"].small, 951 | input[type="reset"].small, 952 | input[type="button"].small, 953 | button.small, 954 | .button.small { 955 | font-size: 0.8em; 956 | } 957 | 958 | input[type="submit"].big, 959 | input[type="reset"].big, 960 | input[type="button"].big, 961 | button.big, 962 | .button.big { 963 | font-size: 1.35em; 964 | } 965 | 966 | input[type="submit"].special, 967 | input[type="reset"].special, 968 | input[type="button"].special, 969 | button.special, 970 | .button.special { 971 | background-color: #8cd1a8; 972 | border: 0; 973 | box-shadow: none; 974 | color: #ffffff !important; 975 | } 976 | 977 | input[type="submit"].special:hover, 978 | input[type="reset"].special:hover, 979 | input[type="button"].special:hover, 980 | button.special:hover, 981 | .button.special:hover { 982 | background-color: #9ed8b6; 983 | } 984 | 985 | input[type="submit"].special:active, 986 | input[type="reset"].special:active, 987 | input[type="button"].special:active, 988 | button.special:active, 989 | .button.special:active { 990 | background-color: #7aca9a; 991 | } 992 | 993 | input[type="submit"].special.icon:before, 994 | input[type="reset"].special.icon:before, 995 | input[type="button"].special.icon:before, 996 | button.special.icon:before, 997 | .button.special.icon:before { 998 | color: #d1ecdc; 999 | } 1000 | 1001 | input[type="submit"].disabled, input[type="submit"]:disabled, 1002 | input[type="reset"].disabled, 1003 | input[type="reset"]:disabled, 1004 | input[type="button"].disabled, 1005 | input[type="button"]:disabled, 1006 | button.disabled, 1007 | button:disabled, 1008 | .button.disabled, 1009 | .button:disabled { 1010 | background-color: #6f7577 !important; 1011 | box-shadow: none !important; 1012 | color: #fff !important; 1013 | cursor: default; 1014 | opacity: 0.25; 1015 | } 1016 | 1017 | /* Main BG */ 1018 | 1019 | .main-bg { 1020 | -moz-transition: opacity 0.5s ease-out; 1021 | -webkit-transition: opacity 0.5s ease-out; 1022 | -o-transition: opacity 0.5s ease-out; 1023 | -ms-transition: opacity 0.5s ease-out; 1024 | transition: opacity 0.5s ease-out; 1025 | background-attachment: fixed, fixed; 1026 | background-position: top left, center center; 1027 | background-repeat: repeat, none; 1028 | background-size: auto, cover; 1029 | height: 100%; 1030 | left: 0; 1031 | opacity: 0; 1032 | position: fixed; 1033 | top: 0; 1034 | width: 100%; 1035 | z-index: -1; 1036 | } 1037 | 1038 | .main-bg.active { 1039 | opacity: 1; 1040 | } 1041 | 1042 | /* Main */ 1043 | 1044 | .main { 1045 | position: relative; 1046 | } 1047 | 1048 | .main .image.primary { 1049 | display: none; 1050 | } 1051 | 1052 | .main .container { 1053 | padding: 5em 2.5em 8em 2.5em; 1054 | background: rgba(255, 255, 255, 0.95); 1055 | box-shadow: inset 0 1px 0 0 #dddddd; 1056 | } 1057 | 1058 | .main .container:before { 1059 | min-height: calc( 100vh - 13em ); 1060 | content: ''; 1061 | display: inline-block; 1062 | vertical-align: middle; 1063 | width: 1px; 1064 | } 1065 | 1066 | .main .container .content { 1067 | display: inline-block; 1068 | margin-right: 1px; 1069 | vertical-align: middle; 1070 | width: calc(100% - 10px); 1071 | } 1072 | 1073 | .main .goto-next { 1074 | -moz-transition: background-color 0.2s ease-in-out; 1075 | -webkit-transition: background-color 0.2s ease-in-out; 1076 | -o-transition: background-color 0.2s ease-in-out; 1077 | -ms-transition: background-color 0.2s ease-in-out; 1078 | transition: background-color 0.2s ease-in-out; 1079 | background-color: rgba(144, 144, 144, 0.075); 1080 | background-image: url("images/arrow.svg"); 1081 | background-position: center center; 1082 | background-repeat: no-repeat; 1083 | border-radius: 100%; 1084 | border: 0; 1085 | bottom: 3em; 1086 | display: block; 1087 | height: 4em; 1088 | left: 50%; 1089 | line-height: 4em; 1090 | margin-left: -2em; 1091 | overflow: hidden; 1092 | position: absolute; 1093 | text-indent: 4em; 1094 | white-space: nowrap; 1095 | width: 4em; 1096 | } 1097 | 1098 | .main .goto-next:hover { 1099 | background-color: rgba(144, 144, 144, 0.15); 1100 | } 1101 | 1102 | /* Header */ 1103 | 1104 | #header { 1105 | height: 100vh; 1106 | position: relative; 1107 | text-align: center; 1108 | } 1109 | 1110 | #header:after { 1111 | content: ''; 1112 | display: inline-block; 1113 | height: 100vh; 1114 | vertical-align: middle; 1115 | } 1116 | 1117 | #header header { 1118 | color: rgba(255, 255, 255, 0.5); 1119 | display: inline-block; 1120 | padding-bottom: 8em; 1121 | vertical-align: middle; 1122 | } 1123 | 1124 | #header header h1, #header header h2, #header header h3, #header header h4, #header header h5, #header header h6, #header header strong, #header header b { 1125 | color: #ffffff; 1126 | } 1127 | 1128 | #header header a { 1129 | color: inherit; 1130 | } 1131 | 1132 | #header header a:hover { 1133 | color: #ffffff !important; 1134 | } 1135 | 1136 | #header header h1 { 1137 | font-size: 3em; 1138 | line-height: 1.25em; 1139 | margin: 0; 1140 | } 1141 | 1142 | #header header h1:after { 1143 | margin-top: 0.5em; 1144 | } 1145 | 1146 | #header header p { 1147 | color: #ffffff; 1148 | font-weight: 700; 1149 | margin: 1.5em 0 0 0; 1150 | } 1151 | 1152 | #header .container { 1153 | background: rgba(255, 255, 255, 0.95); 1154 | bottom: 0; 1155 | left: 50%; 1156 | margin-left: -17.5em; 1157 | padding: 2.5em; 1158 | position: absolute; 1159 | } 1160 | 1161 | #header .container > :last-child { 1162 | margin-bottom: 0; 1163 | } 1164 | 1165 | #header .container .button { 1166 | min-width: 12em; 1167 | } 1168 | 1169 | /* Footer */ 1170 | 1171 | #footer { 1172 | min-height: 100vh; 1173 | padding: 0 0 12em 0; 1174 | position: relative; 1175 | text-align: center; 1176 | } 1177 | 1178 | #footer .container { 1179 | padding: 5em 2.5em 3em 2.5em; 1180 | background: rgba(255, 255, 255, 0.95); 1181 | box-shadow: inset 0 1px 0 0 #dddddd; 1182 | } 1183 | 1184 | #footer footer { 1185 | bottom: 2em; 1186 | color: rgba(255, 255, 255, 0.5); 1187 | left: 0; 1188 | position: absolute; 1189 | text-align: center; 1190 | width: 100%; 1191 | } 1192 | 1193 | #footer footer h1, #footer footer h2, #footer footer h3, #footer footer h4, #footer footer h5, #footer footer h6, #footer footer strong, #footer footer b { 1194 | color: #ffffff; 1195 | } 1196 | 1197 | #footer footer a { 1198 | color: inherit; 1199 | } 1200 | 1201 | #footer footer a:hover { 1202 | color: #ffffff !important; 1203 | } 1204 | 1205 | #footer footer .copyright { 1206 | font-size: 0.8em; 1207 | line-height: 1em; 1208 | padding: 0; 1209 | } 1210 | 1211 | #footer footer .copyright li { 1212 | border-left: solid 1px rgba(255, 255, 255, 0.2); 1213 | display: inline-block; 1214 | margin: 0 0 0 1em; 1215 | padding: 0 0 0 1em; 1216 | } 1217 | 1218 | #footer footer .copyright li:first-child { 1219 | border-left: 0; 1220 | margin-left: 0; 1221 | padding-left: 0; 1222 | } --------------------------------------------------------------------------------