diff --git a/common/templates/course_modes/choose.html b/common/templates/course_modes/choose.html
new file mode 100644
index 0000000000..6a12b02cfc
--- /dev/null
+++ b/common/templates/course_modes/choose.html
@@ -0,0 +1,23 @@
+<%! from django.utils.translation import ugettext as _ %>
+<%! from django.core.urlresolvers import reverse %>
+<%inherit file="../main.html" />
+
+<%block name="content">
+
+
+
+%block>
diff --git a/lms/djangoapps/verify_student/migrations/0001_initial.py b/lms/djangoapps/verify_student/migrations/0001_initial.py
new file mode 100644
index 0000000000..65ffafc49b
--- /dev/null
+++ b/lms/djangoapps/verify_student/migrations/0001_initial.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'SoftwareSecurePhotoVerification'
+ db.create_table('verify_student_softwaresecurephotoverification', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('status', self.gf('model_utils.fields.StatusField')(default='created', max_length=100, no_check_for_status=True)),
+ ('status_changed', self.gf('model_utils.fields.MonitorField')(default=datetime.datetime.now, monitor=u'status')),
+ ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
+ ('face_image_url', self.gf('django.db.models.fields.URLField')(max_length=255, blank=True)),
+ ('photo_id_image_url', self.gf('django.db.models.fields.URLField')(max_length=255, blank=True)),
+ ('receipt_id', self.gf('django.db.models.fields.CharField')(max_length=255, db_index=True)),
+ ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, db_index=True, blank=True)),
+ ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, db_index=True, blank=True)),
+ ('submitted_at', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),
+ ('reviewing_user', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='photo_verifications_reviewed', null=True, to=orm['auth.User'])),
+ ('reviewing_service', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
+ ('error_msg', self.gf('django.db.models.fields.TextField')(blank=True)),
+ ('error_code', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)),
+ ('photo_id_key', self.gf('django.db.models.fields.TextField')(max_length=1024)),
+ ))
+ db.send_create_signal('verify_student', ['SoftwareSecurePhotoVerification'])
+
+
+ def backwards(self, orm):
+ # Deleting model 'SoftwareSecurePhotoVerification'
+ db.delete_table('verify_student_softwaresecurephotoverification')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'verify_student.softwaresecurephotoverification': {
+ 'Meta': {'ordering': "['-created_at']", 'object_name': 'SoftwareSecurePhotoVerification'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'error_code': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+ 'error_msg': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'face_image_url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'photo_id_image_url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'blank': 'True'}),
+ 'photo_id_key': ('django.db.models.fields.TextField', [], {'max_length': '1024'}),
+ 'receipt_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
+ 'reviewing_service': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'reviewing_user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'photo_verifications_reviewed'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'status': ('model_utils.fields.StatusField', [], {'default': "'created'", 'max_length': '100', u'no_check_for_status': 'True'}),
+ 'status_changed': ('model_utils.fields.MonitorField', [], {'default': 'datetime.datetime.now', u'monitor': "u'status'"}),
+ 'submitted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ }
+ }
+
+ complete_apps = ['verify_student']
\ No newline at end of file
diff --git a/lms/static/js/vendor/responsive-carousel/responsive-carousel.js b/lms/static/js/vendor/responsive-carousel/responsive-carousel.js
new file mode 100644
index 0000000000..2c421a14e8
--- /dev/null
+++ b/lms/static/js/vendor/responsive-carousel/responsive-carousel.js
@@ -0,0 +1,4 @@
+/*! Responsive Carousel - v0.1.0 - 2013-07-15
+* https://github.com/filamentgroup/responsive-carousel
+* Copyright (c) 2013 Filament Group, Inc.; Licensed MIT, GPL */
+(function(e){var t="carousel",n="."+t,r="data-transition",i=t+"-transitioning",s=t+"-item",o=t+"-active",u=t+"-item-prev",a=t+"-item-next",f=t+"-in",l=t+"-out",c=t+"-nav",h=function(){var e="webkit Moz O Ms".split(" "),t=!1,n;while(e.length){n=e.shift()+"Transition";if(n in document.documentElement.style!==undefined&&n in document.documentElement.style!=0){t=!0;break}}return t}(),p={_create:function(){e(this).trigger("beforecreate."+t)[t]("_init")[t]("_addNextPrev").trigger("create."+t)},_init:function(){var n=e(this).attr(r);n||(h=!1),e(this).addClass(t+" "+(n?t+"-"+n:"")+" ").children().addClass(s).first().addClass(o),e(this)[t]("_addNextPrevClasses")},_addNextPrevClasses:function(){var t=e(this).find("."+s),n=t.filter("."+o),r=n.next("."+s),i=n.prev("."+s);r.length||(r=t.first().not("."+o)),i.length||(i=t.last().not("."+o)),t.removeClass(u+" "+a),i.addClass(u),r.addClass(a)},next:function(){e(this)[t]("goTo","+1")},prev:function(){e(this)[t]("goTo","-1")},goTo:function(n){var i=e(this),u=i.attr(r),a=" "+t+"-"+u+"-reverse";e(this).find("."+s).removeClass([l,f,a].join(" "));var c=e(this).find("."+o),p=c.index(),d=(p<0?0:p)+1,v=typeof n=="number"?n:d+parseFloat(n),m=e(this).find(".carousel-item").eq(v-1),g=typeof n=="string"&&!parseFloat(n)||v>d?"":a;m.length||(m=e(this).find("."+s)[g.length?"last":"first"]()),h?i[t]("_transitionStart",c,m,g):(m.addClass(o),i[t]("_transitionEnd",c,m,g)),i.trigger("goto."+t,m)},update:function(){return e(this).children().not("."+c).addClass(s),e(this).trigger("update."+t)},_transitionStart:function(n,r,i){var s=e(this);r.one(navigator.userAgent.indexOf("AppleWebKit")>-1?"webkitTransitionEnd":"transitionend otransitionend",function(){s[t]("_transitionEnd",n,r,i)}),e(this).addClass(i),n.addClass(l),r.addClass(f)},_transitionEnd:function(n,r,i){e(this).removeClass(i),n.removeClass(l+" "+o),r.removeClass(f).addClass(o),e(this)[t]("_addNextPrevClasses")},_bindEventListeners:function(){var n=e(this).bind("click",function(r){var i=e(r.target).closest("a[href='#next'],a[href='#prev']");i.length&&(n[t](i.is("[href='#next']")?"next":"prev"),r.preventDefault())});return this},_addNextPrev:function(){return e(this).append("")[t]("_bindEventListeners")},destroy:function(){}};e.fn[t]=function(n,r,i,s){return this.each(function(){if(n&&typeof n=="string")return e.fn[t].prototype[n].call(this,r,i,s);if(e(this).data(t+"data"))return e(this);e(this).data(t+"active",!0),e.fn[t].prototype._create.call(this)})},e.extend(e.fn[t].prototype,p)})(jQuery),function(e){var t="carousel",n="."+t,r=t+"-no-transition",i=/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,s={_dragBehavior:function(){var t=e(this),s,o={},u,a,f=function(t){var r=t.touches||t.originalEvent.touches,i=e(t.target).closest(n);t.type==="touchstart"&&(s={x:r[0].pageX,y:r[0].pageY}),r[0]&&r[0].pageX&&(o.touches=r,o.deltaX=r[0].pageX-s.x,o.deltaY=r[0].pageY-s.y,o.w=i.width(),o.h=i.height(),o.xPercent=o.deltaX/o.w,o.yPercent=o.deltaY/o.h,o.srcEvent=t)},l=function(t){f(t),o.touches.length===1&&e(t.target).closest(n).trigger("drag"+t.type.split("touch")[1],o)};e(this).bind("touchstart",function(t){e(this).addClass(r),l(t)}).bind("touchmove",function(e){f(e),l(e),i||(e.preventDefault(),window.scrollBy(0,-o.deltaY))}).bind("touchend",function(t){e(this).removeClass(r),l(t)})}};e.extend(e.fn[t].prototype,s),e(document).on("create."+t,n,function(){e(this)[t]("_dragBehavior")})}(jQuery),function(e){var t="carousel",n="."+t,r=t+"-active",i=t+"-item",s=function(e){return Math.abs(e)>4},o=function(e,n){var r=e.find("."+t+"-active"),s=r.prevAll().length+1,o=n<0,u=s+(o?1:-1),a=e.find("."+i).eq(u-1);return a.length||(a=e.find("."+i)[o?"first":"last"]()),[r,a]};e(document).on("dragmove",n,function(t,n){if(!s(n.deltaX))return;var r=o(e(this),n.deltaX);r[0].css("left",n.deltaX+"px"),r[1].css("left",n.deltaX<0?n.w+n.deltaX+"px":-n.w+n.deltaX+"px")}).on("dragend",n,function(n,i){if(!s(i.deltaX))return;var u=o(e(this),i.deltaX),a=Math.abs(i.deltaX)>45;e(this).one(navigator.userAgent.indexOf("AppleWebKit")?"webkitTransitionEnd":"transitionEnd",function(){u[0].add(u[1]).css("left",""),e(this).trigger("goto."+t,u[1])}),a?(u[0].removeClass(r).css("left",i.deltaX>0?i.w+"px":-i.w+"px"),u[1].addClass(r).css("left",0)):(u[0].css("left",0),u[1].css("left",i.deltaX>0?-i.w+"px":i.w+"px"))})}(jQuery),function(e,t){var n="carousel",r="."+n+"[data-paginate]",i=n+"-pagination",s=n+"-active-page",o={_createPagination:function(){var t=e(this).find("."+n+"-nav"),r=e(this).find("."+n+"-item"),s=e("
"),o,u,a;t.find("."+i).remove(),r.each(function(t){o=t+1,u=e(this).attr("data-thumb"),a=o,u&&(a="
"),s.append(""+a+"")}),u&&s.addClass(n+"-nav-thumbs"),t.addClass(n+"-nav-paginated").find("a").first().after(s)},_bindPaginationEvents:function(){e(this).bind("click",function(t){var r=e(t.target);t.target.nodeName==="IMG"&&(r=r.parent()),r=r.closest("a");var s=r.attr("href");r.closest("."+i).length&&s&&(e(this)[n]("goTo",parseFloat(s.split("#")[1])),t.preventDefault())}).bind("goto."+n,function(t,n){var r=n?e(n).index():0;e(this).find("ol."+i+" li").removeClass(s).eq(r).addClass(s)}).trigger("goto."+n)}};e.extend(e.fn[n].prototype,o),e(document).on("create."+n,r,function(){e(this)[n]("_createPagination")[n]("_bindPaginationEvents")}).on("update."+n,r,function(){e(this)[n]("_createPagination")})}(jQuery),function(e){e(function(){e(".carousel").carousel()})}(jQuery);
diff --git a/lms/static/js/vendor/responsive-carousel/responsive-carousel.keybd.js b/lms/static/js/vendor/responsive-carousel/responsive-carousel.keybd.js
new file mode 100644
index 0000000000..c6b5993124
--- /dev/null
+++ b/lms/static/js/vendor/responsive-carousel/responsive-carousel.keybd.js
@@ -0,0 +1,38 @@
+/*
+ * responsive-carousel keyboard extension
+ * https://github.com/filamentgroup/responsive-carousel
+ *
+ * Copyright (c) 2012 Filament Group, Inc.
+ * Licensed under the MIT, GPL licenses.
+ */
+
+(function($) {
+ var pluginName = "carousel",
+ initSelector = "." + pluginName,
+ navSelector = "." + pluginName + "-nav a",
+ buffer,
+ keyNav = function( e ) {
+ clearTimeout( buffer );
+ buffer = setTimeout(function() {
+ var $carousel = $( e.target ).closest( initSelector );
+
+ if( e.keyCode === 39 || e.keyCode === 40 ){
+ $carousel[ pluginName ]( "next" );
+ }
+ else if( e.keyCode === 37 || e.keyCode === 38 ){
+ $carousel[ pluginName ]( "prev" );
+ }
+ }, 200 );
+
+ if( 37 <= e.keyCode <= 40 ) {
+ e.preventDefault();
+ }
+ };
+
+ // Touch handling
+ $( document )
+ .on( "click", navSelector, function( e ) {
+ $( e.target )[ 0 ].focus();
+ })
+ .on( "keydown", navSelector, keyNav );
+}(jQuery));
diff --git a/lms/static/sass/application.scss.mako b/lms/static/sass/application.scss.mako
index fb7b4b1db2..c17b23b0dc 100644
--- a/lms/static/sass/application.scss.mako
+++ b/lms/static/sass/application.scss.mako
@@ -9,7 +9,8 @@
@import 'base/reset';
@import 'vendor/font-awesome';
-
+@import 'vendor/responsive-carousel/responsive-carousel';
+@import 'vendor/responsive-carousel/responsive-carousel.slide';
// BASE *default edX offerings*
// ====================
@@ -36,12 +37,18 @@
// base - assets
@import 'base/font_face';
@import 'base/extends';
-@import 'base/animations';
+@import 'base/animations';
// base - starter
@import 'base/base';
-// shared - course
+// base - elements
+@import 'elements/typography';
+
+// base - specific views
+@import 'views/verification';
+
+// shared - course
@import 'shared/forms';
@import 'shared/footer';
@import 'shared/header';
@@ -67,7 +74,7 @@
@import 'multicourse/help';
@import 'multicourse/edge';
-// applications
+// applications
@import 'discussion';
@import 'news';
diff --git a/lms/static/sass/base/_mixins.scss b/lms/static/sass/base/_mixins.scss
index e2074f1976..8ee4559e36 100644
--- a/lms/static/sass/base/_mixins.scss
+++ b/lms/static/sass/base/_mixins.scss
@@ -1,3 +1,6 @@
+// lms - utilities - mixins and extends
+// ====================
+
// mixins - font sizing
@mixin font-size($sizeValue: 16){
font-size: $sizeValue + px;
@@ -44,6 +47,9 @@
}
+
+
+
//-----------------
// Theme Mixin Styles
//-----------------
diff --git a/lms/static/sass/base/_variables.scss b/lms/static/sass/base/_variables.scss
index 93297f4043..2028b95efb 100644
--- a/lms/static/sass/base/_variables.scss
+++ b/lms/static/sass/base/_variables.scss
@@ -9,6 +9,7 @@ $fg-max-columns: 12;
$fg-max-width: 1400px;
$fg-min-width: 810px;
+// fonts
$sans-serif: 'Open Sans', $verdana;
$monospace: Monaco, 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
$body-font-family: $sans-serif;
@@ -197,4 +198,14 @@ $homepage-bg-image: '../images/homepage-bg.jpg';
$login-banner-image: url(../images/bg-banner-login.png);
$register-banner-image: url(../images/bg-banner-register.png);
-$video-thumb-url: '../images/courses/video-thumb.jpg';
\ No newline at end of file
+$video-thumb-url: '../images/courses/video-thumb.jpg';
+
+//-----------------
+// Newer variables ported from Studio
+//-----------------
+
+// fonts
+$f-serif: 'Bree Serif', Georgia, Cambria, 'Times New Roman', Times, serif;
+$f-sans-serif: 'Open Sans','Helvetica Neue', Helvetica, Arial, sans-serif;
+$f-monospace: 'Bitstream Vera Sans Mono', Consolas, Courier, monospace;
+
diff --git a/lms/static/sass/elements/_typography.scss b/lms/static/sass/elements/_typography.scss
new file mode 100644
index 0000000000..157d3d60df
--- /dev/null
+++ b/lms/static/sass/elements/_typography.scss
@@ -0,0 +1,178 @@
+// lms - elements - typography
+// ====================
+
+// Scale - (6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 21, 24, 36, 48, 60, 72)
+
+// headings/titles
+.t-title {
+ font-family: $f-sans-serif;
+}
+
+.t-title1 {
+ @extend .t-title;
+ @include font-size(60);
+ @include line-height(60);
+}
+
+.t-title2 {
+ @extend .t-title;
+ @include font-size(48);
+ @include line-height(48);
+}
+
+.t-title3 {
+ @include font-size(36);
+ @include line-height(36);
+}
+
+.t-title4 {
+ @extend .t-title;
+ @include font-size(24);
+ @include line-height(24);
+}
+
+.t-title5 {
+ @extend .t-title;
+ @include font-size(18);
+ @include line-height(18);
+}
+
+.t-title6 {
+ @extend .t-title;
+ @include font-size(16);
+ @include line-height(16);
+}
+
+.t-title7 {
+ @extend .t-title;
+ @include font-size(14);
+ @include line-height(14);
+}
+
+.t-title8 {
+ @extend .t-title;
+ @include font-size(12);
+ @include line-height(12);
+}
+
+.t-title9 {
+ @extend .t-title;
+ @include font-size(11);
+ @include line-height(11);
+}
+
+// ====================
+
+// copy
+.t-copy {
+ font-family: $f-sans-serif;
+}
+
+.t-copy-base {
+ @extend .t-copy;
+ @include font-size(16);
+ @include line-height(16);
+}
+
+.t-copy-lead1 {
+ @extend .t-copy;
+ @include font-size(18);
+ @include line-height(18);
+}
+
+.t-copy-lead2 {
+ @extend .t-copy;
+ @include font-size(24);
+ @include line-height(24);
+}
+
+.t-copy-sub1 {
+ @extend .t-copy;
+ @include font-size(14);
+ @include line-height(14);
+}
+
+.t-copy-sub2 {
+ @extend .t-copy;
+ @include font-size(12);
+ @include line-height(12);
+}
+
+// ====================
+
+// actions/labels
+.t-action1 {
+ @include font-size(18);
+ @include line-height(18);
+}
+
+.t-action2 {
+ @include font-size(16);
+ @include line-height(16);
+}
+
+.t-action3 {
+ @include font-size(14);
+ @include line-height(14);
+}
+
+.t-action4 {
+ @include font-size(12);
+ @include line-height(12);
+}
+
+
+// ====================
+
+// code
+.t-code {
+ font-family: $f-monospace;
+}
+
+// ====================
+
+// icons
+.t-icon1 {
+ @include font-size(48);
+ @include line-height(48);
+}
+
+.t-icon2 {
+ @include font-size(36);
+ @include line-height(36);
+}
+
+.t-icon3 {
+ @include font-size(24);
+ @include line-height(24);
+}
+
+.t-icon4 {
+ @include font-size(18);
+ @include line-height(18);
+}
+
+.t-icon5 {
+ @include font-size(16);
+ @include line-height(16);
+}
+
+.t-icon6 {
+ @include font-size(14);
+ @include line-height(14);
+}
+
+.t-icon7 {
+ @include font-size(12);
+ @include line-height(12);
+}
+
+.t-icon8 {
+ @include font-size(11);
+ @include line-height(11);
+}
+
+.t-icon9 {
+ @include font-size(10);
+ @include line-height(10);
+}
diff --git a/lms/static/sass/vendor/responsive-carousel/_responsive-carousel.scss b/lms/static/sass/vendor/responsive-carousel/_responsive-carousel.scss
new file mode 100644
index 0000000000..cbd8d701de
--- /dev/null
+++ b/lms/static/sass/vendor/responsive-carousel/_responsive-carousel.scss
@@ -0,0 +1,20 @@
+/*
+ * responsive-carousel
+ * https://github.com/filamentgroup/responsive-carousel
+ *
+ * Copyright (c) 2012 Filament Group, Inc.
+ * Licensed under the MIT, GPL licenses.
+ */
+.carousel {
+ width: 100%;
+ position: relative;
+}
+.carousel .carousel-item {
+ display: none;
+}
+.carousel .carousel-active {
+ display: block;
+}
+.carousel .carousel-nav:nth-child(2) {
+ display: none;
+}
diff --git a/lms/static/sass/vendor/responsive-carousel/_responsive-carousel.slide.scss b/lms/static/sass/vendor/responsive-carousel/_responsive-carousel.slide.scss
new file mode 100644
index 0000000000..b902bc6575
--- /dev/null
+++ b/lms/static/sass/vendor/responsive-carousel/_responsive-carousel.slide.scss
@@ -0,0 +1,61 @@
+/*
+ * responsive-carousel
+ * https://github.com/filamentgroup/responsive-carousel
+ *
+ * Copyright (c) 2012 Filament Group, Inc.
+ * Licensed under the MIT, GPL licenses.
+*/
+.carousel-slide {
+ position: relative;
+ overflow: hidden;
+ -webkit-transform: translate3d(0, 0, 0);
+ -moz-transform: translate3d(0, 0, 0);
+ -ms-transform: translate3d(0, 0, 0);
+ -o-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.carousel-slide .carousel-item {
+ position: absolute;
+ left: 100%;
+ top: 0;
+ width: 100%; /* necessary for non-active slides */
+ display: block; /* overrides basic carousel styles */
+ z-index: 1;
+ -webkit-transition: left .2s ease;
+ -moz-transition: left .2s ease;
+ -ms-transition: left .2s ease;
+ -o-transition: left .2s ease;
+ transition: left .2s ease;
+}
+.carousel-no-transition .carousel-item {
+ -webkit-transition: none;
+ -moz-transition: none;
+ -ms-transition: none;
+ -o-transition: none;
+ transition: none;
+}
+.carousel-slide .carousel-active {
+ left: 0;
+ position: relative;
+ z-index: 2;
+}
+.carousel-slide .carousel-in {
+ left: 0;
+}
+.carousel-slide-reverse .carousel-out {
+ left: 100%;
+}
+.carousel-slide .carousel-out,
+.carousel-slide-reverse .carousel-in {
+ left: -100%;
+}
+.carousel-slide-reverse .carousel-item {
+ -webkit-transition: left .1s ease;
+ -moz-transition: left .1s ease;
+ -ms-transition: left .1s ease;
+ -o-transition: left .1s ease;
+ transition: left .1s ease;
+}
+.carousel-slide-reverse .carousel-active {
+ left: 0;
+}
diff --git a/lms/static/sass/views/_verification.scss b/lms/static/sass/views/_verification.scss
new file mode 100644
index 0000000000..691652063c
--- /dev/null
+++ b/lms/static/sass/views/_verification.scss
@@ -0,0 +1,166 @@
+// lms - views - verification flow
+// ====================
+
+body.register.verification {
+ font-family: 'Open Sans', sans-serif;
+
+ h1, h2, h3, h4, h5, h6, p {
+ font-family: 'Open Sans', sans-serif;
+ }
+
+
+ .page-header {
+
+ .title {
+ @extend .t-title5;
+ margin-bottom: $baseline;
+ font-weight: bold;
+ }
+ }
+
+ .title {
+ @extend .t-title9;
+ margin-bottom: ($baseline/2);
+ font-weight: bold;
+ }
+
+ .select {
+ @include clearfix();
+
+
+ .block {
+ float: left;
+ margin: 0 $baseline $baseline 0;
+ background-color: #eee;
+ padding: $baseline;
+ width: 60%;
+
+ .title {
+ @extend .t-title7;
+ }
+
+ }
+
+ .tips {
+ float: right;
+ width: 32%;
+ }
+
+ }
+
+
+
+
+
+ .progress {
+
+ .progress-step {
+ border: 1px solid #eee;
+ display: inline-block;
+ padding: ($baseline/2) $baseline;
+ }
+ }
+
+
+ // for dev placement only
+ .placeholder-cam,
+ .placeholder-photo {
+ height: 300px;
+ background-color: #eee;
+ position: relative;
+
+ p {
+ position: absolute;
+ top: 40%;
+ left: 40%;
+ color: #ccc;
+ }
+ }
+
+ .block-photo {
+ @include clearfix();
+ background-color: $white;
+
+ .title {
+ font-weight: bold;
+ }
+
+ .wrapper-up,
+ .wrapper-down {
+ @include clearfix();
+ }
+
+ .cam {
+ width: 45%;
+ float: left;
+ padding-right: $baseline;
+ }
+
+ .photo-controls {
+ background-color: #ddd;
+
+ .controls-list {
+ margin: 0;
+ padding: ($baseline*.25) ($baseline*.75);
+ list-style-type: none;
+
+ .control {
+ display: inline-block;
+
+ .action {
+ @extend .button-primary;
+ display: block;
+ background-color: $blue;
+ color: $white;
+ padding: ($baseline*.25) ($baseline*.5);
+ border: none;
+
+ &:hover {
+
+ }
+ }
+ }
+ }
+ }
+
+ .faq {
+ width: 45%;
+ float: left;
+ padding-right: $baseline;
+
+ dt {
+ font-weight: bold;
+ padding: 0 0 ($baseline/2) 0;
+ }
+
+ dd {
+ margin: 0;
+ padding: 0 0 $baseline 0;
+ }
+ }
+
+
+
+ }
+
+ .photo-tips {
+ width: 45%;
+ float: left;
+ }
+
+ .actions {
+ width: 45%;
+ float: right;
+ }
+
+ .review-photo {
+ width: 45%;
+ float: left;
+ }
+
+ #review-facephoto {
+ margin-right: $baseline;
+ }
+
+
+}
diff --git a/lms/templates/main.html b/lms/templates/main.html
index a25e8f5261..179a84f7d3 100644
--- a/lms/templates/main.html
+++ b/lms/templates/main.html
@@ -92,6 +92,9 @@
<%static:js group='application'/>
<%static:js group='module-js'/>
+
+
+
<%block name="js_extra"/>