├── .babelrc ├── .gitignore ├── .jshintrc ├── .nvmrc ├── Gruntfile.js ├── LICENSE.txt ├── README.md ├── bower.json ├── circle.yml ├── deploy.js ├── deploy ├── heroku.js └── version.js ├── karma.config.js ├── package.json ├── server.js ├── src ├── css │ ├── aboutpage.less │ ├── admin │ │ └── index.less │ ├── angular │ │ ├── angular-csp.less │ │ ├── angular-growl.less │ │ ├── angular-wizard.less │ │ └── charLimit.less │ ├── app2.less │ ├── community.less │ ├── community │ │ ├── create.less │ │ ├── invite.less │ │ ├── posts.less │ │ └── settings.less │ ├── footer.less │ ├── homepage.less │ ├── index.less │ ├── ment.io │ │ └── userMentions.less │ ├── mixins.less │ ├── mixins │ │ ├── full-screen-modal.less │ │ ├── has-banner.less │ │ ├── inputs.less │ │ ├── settings-page.less │ │ ├── simple-page.less │ │ ├── type.less │ │ └── widgets.less │ ├── nav.less │ ├── network.less │ ├── onboarding.less │ ├── post │ │ ├── comment.less │ │ ├── edit.less │ │ ├── followers.less │ │ ├── fulfill.less │ │ └── post.less │ ├── profile │ │ ├── about.less │ │ ├── profile-edit.less │ │ ├── profile-only.less │ │ └── profile-shared.less │ ├── project.less │ ├── project │ │ ├── cards.less │ │ └── edit.less │ ├── search.less │ ├── shared │ │ ├── colors.less │ │ ├── dropdown.less │ │ ├── icons.less │ │ ├── social-media.less │ │ ├── tags.less │ │ └── toolbar.less │ ├── styleguide.less │ ├── subscribe.less │ ├── support.less │ └── user │ │ ├── entrance.less │ │ ├── home.less │ │ ├── notifications.less │ │ └── settings.less ├── html │ ├── admin │ │ ├── communities.tpl.html │ │ └── metrics.tpl.html │ ├── pages │ │ ├── _clientEnv.ejs │ │ ├── _favicon.ejs │ │ ├── _footer.ejs │ │ ├── _header.ejs │ │ ├── _menu.ejs │ │ ├── _newrelic.ejs │ │ ├── _rollbar.ejs │ │ ├── _segment.ejs │ │ ├── _twitter.ejs │ │ ├── about │ │ │ ├── _header.ejs │ │ │ ├── _linksBar.ejs │ │ │ ├── careers │ │ │ │ └── index.ejs │ │ │ ├── contact │ │ │ │ └── index.ejs │ │ │ ├── index.ejs │ │ │ └── team │ │ │ │ └── index.ejs │ │ ├── admin │ │ │ └── index.ejs │ │ ├── app │ │ │ └── index.ejs │ │ ├── help │ │ │ ├── _whatIsHylo.ejs │ │ │ ├── index.ejs │ │ │ └── markdown │ │ │ │ └── index.ejs │ │ ├── index.ejs │ │ ├── newapp │ │ │ └── index.ejs │ │ ├── styleguide │ │ │ └── index.ejs │ │ ├── subscribe │ │ │ └── index.ejs │ │ └── terms │ │ │ ├── index.ejs │ │ │ └── privacy │ │ │ └── index.ejs │ ├── ui-partials │ │ ├── README │ │ ├── announcer.ejs │ │ └── nav.ejs │ └── ui │ │ ├── app │ │ ├── 404.tpl.ejs │ │ ├── comments.tpl.html │ │ ├── fulfillModal.tpl.html │ │ ├── network.tpl.html │ │ ├── search.tpl.html │ │ ├── socialMedia.tpl.html │ │ └── typeahead-tag-user.tpl.html │ │ ├── community │ │ ├── about.tpl.html │ │ ├── base.tpl.html │ │ ├── create.tpl.html │ │ ├── events.tpl.html │ │ ├── invite.tpl.html │ │ ├── join.tpl.html │ │ ├── members.tpl.html │ │ ├── posts.tpl.html │ │ ├── projects.tpl.html │ │ └── settings.tpl.html │ │ ├── entrance │ │ ├── base.tpl.html │ │ ├── forgot-password.tpl.html │ │ ├── login.tpl.html │ │ ├── presignup.tpl.html │ │ ├── signup-with-code.tpl.html │ │ ├── signup.tpl.html │ │ └── waitlist.tpl.html │ │ ├── home │ │ ├── all-posts.tpl.html │ │ ├── following-posts.tpl.html │ │ ├── my-posts.tpl.html │ │ ├── projects.tpl.html │ │ ├── show.tpl.html │ │ └── simple.tpl.html │ │ ├── network │ │ ├── about.tpl.html │ │ ├── communities.tpl.html │ │ ├── members.tpl.html │ │ └── posts.tpl.html │ │ ├── onboarding │ │ ├── community-modal.tpl.html │ │ ├── profile-modal.tpl.html │ │ ├── seeds.tpl.html │ │ └── start.tpl.ejs │ │ ├── post │ │ ├── card.tpl.html │ │ ├── edit-page.tpl.html │ │ ├── edit.tpl.html │ │ ├── infinite-event-scroll.tpl.html │ │ ├── infinite-scroll.tpl.html │ │ ├── list.tpl.html │ │ ├── show.tpl.html │ │ ├── toolbar.tpl.html │ │ └── welcome.tpl.html │ │ ├── profile │ │ ├── about.tpl.html │ │ ├── base.tpl.html │ │ ├── contributions.tpl.html │ │ ├── edit.tpl.html │ │ └── thanks.tpl.html │ │ ├── project │ │ ├── edit.tpl.html │ │ ├── invite.tpl.html │ │ ├── posts.tpl.html │ │ ├── settings.tpl.html │ │ ├── show.tpl.ejs │ │ └── users.tpl.html │ │ ├── shared │ │ ├── confirm.tpl.html │ │ ├── join-community.tpl.html │ │ ├── main.tpl.ejs │ │ ├── ngTagsInput │ │ │ ├── autocomplete-user.tpl.html │ │ │ └── tag-user.tpl.html │ │ ├── people-mentions.tpl.html │ │ ├── project-cards.tpl.html │ │ ├── typeaheadUser.tpl.html │ │ └── user-list-item.tpl.html │ │ ├── support │ │ └── base.tpl.ejs │ │ └── user │ │ ├── notifications.tpl.html │ │ ├── settings.tpl.html │ │ └── use-invitation.tpl.html ├── img │ ├── about │ │ ├── careerBanner.jpg │ │ ├── companyBanner.jpg │ │ ├── contactBanner.jpg │ │ ├── headshots │ │ │ ├── ArtBrock.jpg │ │ │ ├── DanielGoldman.jpg │ │ │ ├── DavidHodgson.jpg │ │ │ ├── DavidMartin.jpg │ │ │ ├── Edward.jpg │ │ │ ├── EricBerlow.jpg │ │ │ ├── FeranandaIbarra.jpg │ │ │ ├── JohnKatovich.jpg │ │ │ ├── Lawrence.jpg │ │ │ ├── MihaelaUlieru.jpg │ │ │ ├── Minda.jpg │ │ │ └── Ray.jpg │ │ └── teamBanner.jpg │ ├── appicon.png │ ├── facebook.png │ ├── favicon.png │ ├── faviconDev.png │ ├── faviconStaging.png │ ├── google.png │ ├── homepage │ │ ├── birdsBg.png │ │ ├── bolt.png │ │ ├── coworkingBg-faint.jpg │ │ ├── coworkingBg.jpg │ │ ├── graph.png │ │ ├── hexagon.png │ │ ├── magGlass.png │ │ ├── network.jpg │ │ ├── swirlTexture.jpg │ │ └── wrench.png │ ├── largeh.png │ ├── linkedin.png │ ├── logotype-teal-transparent.png │ ├── logotype-white-transparent.png │ ├── merkaba-black.png │ ├── merkaba.png │ ├── onboarding │ │ └── iho │ │ │ ├── intention1.jpg │ │ │ ├── intention1_m.jpg │ │ │ ├── intention2.jpg │ │ │ ├── intention2_m.jpg │ │ │ ├── offer1.jpg │ │ │ ├── offer1_m.jpg │ │ │ ├── offer2.jpg │ │ │ ├── offer2_m.jpg │ │ │ ├── request1.jpg │ │ │ ├── request1_m.jpg │ │ │ ├── request2.jpg │ │ │ └── request2_m.jpg │ ├── projects │ │ ├── community.svg │ │ └── public.svg │ ├── smallh.png │ └── testimonials │ │ └── logos │ │ ├── Afrilabs.png │ │ ├── Embassy.png │ │ ├── Enspiral.png │ │ ├── OaklandHub.png │ │ └── SfunCube.png └── js │ ├── admin │ ├── index.js │ └── services │ │ ├── Admin.js │ │ └── Chart.js │ ├── angular │ └── angulartics-segmentio.js │ ├── app │ ├── animations.js │ ├── controllers.js │ ├── controllers │ │ ├── AnnouncerCtrl.js │ │ ├── FulfillmentCtrl.js │ │ ├── NavCtrl.js │ │ ├── SearchCtrl.js │ │ ├── community │ │ │ ├── CommunityCtrl.js │ │ │ ├── CommunityEventsCtrl.js │ │ │ ├── CommunityInviteCtrl.js │ │ │ ├── CommunityMembersCtrl.js │ │ │ ├── CommunityPostsCtrl.js │ │ │ ├── CommunitySettingsCtrl.js │ │ │ ├── JoinCommunityByUrlCtrl.js │ │ │ ├── JoinCommunityCtrl.js │ │ │ └── NewCommunityCtrl.js │ │ ├── home │ │ │ ├── AllPostsCtrl.js │ │ │ └── FollowedPostsCtrl.js │ │ ├── post │ │ │ ├── CommentsCtrl.js │ │ │ ├── PostCardCtrl.js │ │ │ ├── PostCtrl.js │ │ │ ├── PostEditCtrl.js │ │ │ ├── PostEditPageCtrl.js │ │ │ ├── PostListCtrl.js │ │ │ └── WelcomePostCtrl.js │ │ ├── profile.js │ │ ├── profile │ │ │ ├── ProfileEditCtrl.js │ │ │ ├── contributions.js │ │ │ └── thanks.js │ │ ├── project │ │ │ ├── ProjectCtrl.js │ │ │ ├── ProjectEditCtrl.js │ │ │ ├── ProjectInviteCtrl.js │ │ │ ├── ProjectPostsCtrl.js │ │ │ └── ProjectUsersCtrl.js │ │ └── user │ │ │ ├── ForgotPasswordCtrl.js │ │ │ ├── LoginCtrl.js │ │ │ ├── NotificationsCtrl.js │ │ │ ├── SignupCtrl.js │ │ │ └── UserSettingsCtrl.js │ ├── directives.js │ ├── directives │ │ ├── anguvideo.js │ │ ├── contenteditable.js │ │ ├── embeddedComments.js │ │ ├── inlinePostInput.js │ │ ├── masonry.js │ │ ├── postCard.js │ │ ├── postEditor.js │ │ ├── postsToolbar.js │ │ ├── seeMore.js │ │ ├── socialMedia.js │ │ ├── touchClass.js │ │ └── welcomePost.js │ ├── filters.js │ ├── index.js │ ├── routes.js │ ├── routes │ │ ├── community.js │ │ ├── entrance.js │ │ ├── home.js │ │ ├── network.js │ │ ├── onboarding.js │ │ ├── profile.js │ │ └── project.js │ ├── services.js │ └── services │ │ ├── Activity.js │ │ ├── Cache.js │ │ ├── Comment.js │ │ ├── Community.js │ │ ├── CurrentUser.js │ │ ├── GooglePicker.js │ │ ├── Invitation.js │ │ ├── ModalLoginSignup.js │ │ ├── Network.js │ │ ├── Post.js │ │ ├── PostManager.js │ │ ├── Project.js │ │ ├── RichText.js │ │ ├── Search.js │ │ ├── ThirdPartyAuth.js │ │ ├── TimeText.js │ │ ├── User.js │ │ ├── UserCache.js │ │ ├── UserMentions.js │ │ ├── bodyClass.js │ │ ├── clickthroughTracker.js │ │ ├── defaultUserBanner.js │ │ ├── dialog.js │ │ ├── filepickerUpload.js │ │ ├── hideNavIOS.js │ │ ├── history.js │ │ ├── isAndroidApp.js │ │ ├── isIOSApp.js │ │ ├── joinCommunity.js │ │ ├── myHttpInterceptor.js │ │ ├── onboarding.js │ │ ├── popupDone.js │ │ ├── removeTrailingSlash.js │ │ └── webViewJavascriptBridge.js │ ├── index.js │ ├── onload.js │ ├── sails.io.js │ └── subscribe │ └── index.js ├── templateEnv.js └── test ├── bundle.tests.js ├── features ├── CommunityCtrl.tests.js └── routes.tests.js ├── services ├── RichText.tests.js └── removeTrailingSlash.tests.js └── setup.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # IntelliJ Idea 17 | .idea/ 18 | *.iml 19 | *.iws 20 | 21 | # Eclipse 22 | .classpath 23 | .project 24 | .settings/ 25 | 26 | # Mac 27 | .DS_Store 28 | 29 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directory 36 | # Commenting this out is preferred by some people, see 37 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 38 | node_modules 39 | 40 | # Users Environment Variables 41 | .lock-wscript 42 | 43 | bower_components/ 44 | dist/ 45 | .env 46 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "undef": true, 3 | "browser": true, 4 | "esnext": true, 5 | "globals": { 6 | "_": true, 7 | "alert": false, 8 | "angular": false, 9 | "describe": false, 10 | "expect": false, 11 | "filepicker": true, 12 | "format": true, 13 | "hyloEnv": true, 14 | "it": false, 15 | "module": false, 16 | "require": false 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 0.12.7 -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hylo", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "bootstrap": "~3.3.2", 6 | "angular": "1.3.17", 7 | "angular-animate": "1.3.17", 8 | "angular-growl": "0.4.0", 9 | "angular-mocks": "1.3.17", 10 | "angular-resource": "1.3.17", 11 | "angular-sanitize": "1.3.17", 12 | "angular-touch": "1.3.17", 13 | "angular-ui-router": "0.2.14", 14 | "angulartics": "1.0.3", 15 | "ngInfiniteScroll": "1.2.0", 16 | "ment.io": "0.9.22", 17 | "gsap": "~1.15.1", 18 | "ng-tags-input": "igorprado/ngTagsInput#68a6c42a", 19 | "angular-ui-bootstrap-bower": "0.13.0", 20 | "afkl-lazy-image": "~0.1.4", 21 | "stellar": "~0.6.2", 22 | "bootstrap-ui-datetime-picker": "~1.2.5" 23 | }, 24 | "private": true, 25 | "resolutions": { 26 | "angular": "1.3.17" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | deployment: 2 | production: 3 | branch: master 4 | commands: 5 | - "grunt deploy --to=production" 6 | machine: 7 | node: 8 | version: 0.12.7 9 | -------------------------------------------------------------------------------- /deploy/heroku.js: -------------------------------------------------------------------------------- 1 | 2 | if (!process.env.HEROKU_API_TOKEN) { 3 | throw new Error("HEROKU_API_TOKEN is not set"); 4 | } 5 | 6 | var instance; 7 | 8 | var client = function() { 9 | if (!instance) { 10 | instance = new (require('heroku-client'))({token: process.env.HEROKU_API_TOKEN}); 11 | } 12 | return instance; 13 | }; 14 | 15 | module.exports = { 16 | config: function(app) { 17 | return client().apps(app).configVars(); 18 | } 19 | }; 20 | -------------------------------------------------------------------------------- /deploy/version.js: -------------------------------------------------------------------------------- 1 | require('shelljs/global'); 2 | var format = require('util').format; 3 | 4 | var _command = function(cmd) { 5 | return exec(cmd, {silent: true}).stdout.replace(/\n/, ''); 6 | }; 7 | 8 | module.exports = function(maxlength) { 9 | if (!maxlength) maxlength = 40; 10 | return _command(format("git show|head -n1|awk '{print $2}'|cut -c -%s", maxlength)); 11 | }; 12 | -------------------------------------------------------------------------------- /karma.config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var babelify = require('babelify') 4 | 5 | // Karma configuration 6 | // Generated on Wed Oct 22 2014 16:54:59 GMT-0700 (PDT) 7 | 8 | module.exports = function(config) { 9 | config.set({ 10 | 11 | // base path that will be used to resolve all patterns (eg. files, exclude) 12 | basePath: '', 13 | 14 | browserify: { 15 | debug: true, 16 | transform: [ 17 | 'debowerify', 18 | 'browserify-ngannotate', 19 | babelify.configure({ 20 | ignore: /\/bower_components\// 21 | }) 22 | ] 23 | }, 24 | 25 | // frameworks to use 26 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 27 | frameworks: ['browserify', 'mocha', 'chai'], 28 | 29 | // list of files / patterns to load in the browser 30 | files: [ 31 | 'test/setup.js', 32 | 'test/**/*.tests.js' 33 | ], 34 | 35 | // list of files to exclude 36 | exclude: [ 37 | ], 38 | 39 | // preprocess matching files before serving them to the browser 40 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 41 | preprocessors: { 42 | 'test/**/*.js': ['browserify'] 43 | }, 44 | 45 | // test results reporter to use 46 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 47 | reporters: ['spec'], 48 | 49 | // web server port 50 | port: 9876, 51 | 52 | // enable / disable colors in the output (reporters and logs) 53 | colors: true, 54 | 55 | // level of logging 56 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 57 | logLevel: config.LOG_WARN, 58 | 59 | // enable / disable watching file and executing tests whenever any file changes 60 | autoWatch: true, 61 | 62 | // start these browsers 63 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 64 | browsers: ['PhantomJS2'], 65 | 66 | // browserify takes a long time 67 | browserNoActivityTimeout: 30000, 68 | 69 | // Continuous Integration mode 70 | // if true, Karma captures browsers, runs the tests and exits 71 | singleRun: true 72 | }); 73 | }; 74 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | var http = require('http'), 2 | static = require('node-static'), 3 | fileServer = new static.Server('./dist'), 4 | _ = require('lodash'), 5 | url = require('url'), 6 | util = require('util'); 7 | 8 | module.exports = function(opts) { 9 | 10 | http.createServer(function(req, res) { 11 | 12 | var u = url.parse(req.url), 13 | originalUrl = req.url, 14 | changePathname = function(value) { 15 | u.pathname = value; 16 | req.url = url.format(u); 17 | }, 18 | log = function(resolution) { 19 | opts.log.writeln('%s %s %s', req.method, originalUrl, resolution); 20 | }; 21 | 22 | // remove trailing slash 23 | u.pathname = u.pathname.replace(/\/$/, ''); 24 | 25 | if (_.startsWith(u.pathname, '/assets')) { 26 | changePathname(u.pathname.replace(/^\/assets/, '')); 27 | } 28 | 29 | // all local assets 30 | fileServer.serve(req, res, function(err, result) { 31 | if (err && err.status === 404) { 32 | res.statusCode = 404; 33 | res.end('404 Not Found'); 34 | log('→ Not Found'); 35 | } else { 36 | log('→ OK'); 37 | } 38 | }); 39 | 40 | }).listen(opts.port); 41 | 42 | opts.log.writeln('listening on port ' + opts.port); 43 | }; 44 | -------------------------------------------------------------------------------- /src/css/admin/index.less: -------------------------------------------------------------------------------- 1 | @import 'bower_components/bootstrap/less/bootstrap'; 2 | @import '../shared/colors'; 3 | @import '../shared/icons'; 4 | 5 | ul.horizontal-menu { 6 | list-style: none; 7 | padding-left: 0; 8 | li { 9 | display: inline-block; 10 | margin-right: 10px; 11 | &:before { 12 | content: '☺'; 13 | padding-right: 10px; 14 | } 15 | } 16 | } 17 | 18 | .community-card { 19 | display: inline-block; 20 | margin-right: 5px; 21 | margin-bottom: 5px; 22 | border-radius: 4px; 23 | border: 1px solid @border-light; 24 | background-color: @faint-gray; 25 | padding: 10px; 26 | img { 27 | float: left; 28 | width: 40px; 29 | height: 40px; 30 | margin-right: 5px; 31 | margin-bottom: 5px; 32 | } 33 | .text { 34 | overflow: hidden; 35 | } 36 | width: 16vw; 37 | } 38 | 39 | .sort-controls { 40 | label { 41 | margin-left: 8px; 42 | } 43 | } 44 | 45 | .icon-members-new { 46 | position: relative; 47 | top: 1px; 48 | } 49 | 50 | .chart { 51 | svg { 52 | min-height: 600px; 53 | } 54 | } 55 | 56 | // remove bars for zeroes 57 | // http://stackoverflow.com/questions/22378785/nvd3-charts-remove-0-value-bars 58 | .nvd3 rect[height="1"] { 59 | display: none !important; 60 | } 61 | -------------------------------------------------------------------------------- /src/css/angular/angular-csp.less: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | 15 | .ng-animate-block-transitions { 16 | transition:0s all!important; 17 | -webkit-transition:0s all!important; 18 | } 19 | 20 | /* show the element during a show/hide animation when the 21 | * animation is ongoing, but the .ng-hide class is active */ 22 | .ng-hide-add-active, .ng-hide-remove { 23 | display: block!important; 24 | } 25 | -------------------------------------------------------------------------------- /src/css/angular/angular-growl.less: -------------------------------------------------------------------------------- 1 | .growl { 2 | position: fixed; 3 | bottom: 0; 4 | left: 10px; 5 | float: left; 6 | width: 250px; 7 | z-index: 200000; 8 | } 9 | 10 | .growl-item.ng-enter, 11 | .growl-item.ng-leave { 12 | -webkit-transition:0.5s linear all; 13 | -moz-transition:0.5s linear all; 14 | -o-transition:0.5s linear all; 15 | transition:0.5s linear all; 16 | } 17 | 18 | .growl-item.ng-enter, 19 | .growl-item.ng-leave.ng-leave-active { 20 | opacity:0; 21 | } 22 | .growl-item.ng-leave, 23 | .growl-item.ng-enter.ng-enter-active { 24 | opacity:1; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/css/angular/charLimit.less: -------------------------------------------------------------------------------- 1 | // Char-limit Directive 2 | 3 | .right-inner-addon { 4 | position: relative; 5 | 6 | input { 7 | padding-right: 30px; 8 | } 9 | 10 | & > i { 11 | display: block; 12 | position: absolute; 13 | right: 0px; 14 | padding: 9px 12px; 15 | cursor: pointer; 16 | } 17 | 18 | .icon-alert { 19 | font-size: 16px; 20 | } 21 | 22 | .chars-left { 23 | .proxima-nova-light; 24 | font-style: normal; 25 | font-size: 20px; 26 | color: #CCC; 27 | } 28 | 29 | &.char-limit-warning { 30 | .chars-left, i { 31 | color: @alert-warning-text; 32 | } 33 | } 34 | 35 | &.char-limit-error { 36 | .chars-left, i { 37 | color: @alert-danger-text; 38 | } 39 | } 40 | 41 | &.char-limit-error, &.char-limit-warning { 42 | .chars-left { 43 | background-color: @white; 44 | } 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/css/community/create.less: -------------------------------------------------------------------------------- 1 | .createCommunity { 2 | .settings-page; 3 | .full-screen-modal; 4 | .body-text; 5 | 6 | form { 7 | padding-bottom: @std-padding * 2; 8 | 9 | button { 10 | .rounded-button; 11 | } 12 | } 13 | 14 | .setting-item { 15 | .side-column label { 16 | padding-top: 6px; 17 | } 18 | p.help.error { 19 | margin-bottom: 0; 20 | } 21 | } 22 | 23 | .banner { 24 | width: 100%; 25 | .fluid-height(38%); 26 | background-size: cover; 27 | background-position: center; 28 | } 29 | 30 | .community-icon { 31 | width: 60px; 32 | height: 60px; 33 | background-size: cover; 34 | background-position: center; 35 | } 36 | 37 | p.help { 38 | margin-top: 5px; 39 | 40 | &.error { 41 | color: @error-color; 42 | } 43 | } 44 | 45 | .footer { 46 | text-align: right; 47 | } 48 | } -------------------------------------------------------------------------------- /src/css/community/invite.less: -------------------------------------------------------------------------------- 1 | .community-invite { 2 | .settings-page; 3 | .full-screen-modal; 4 | 5 | .section { 6 | label[for="inviteAsModerator"] { 7 | font-weight: normal; 8 | font-size: 14px; 9 | line-height: 32px; 10 | margin: 0 0 0 5px; 11 | display: inline-block; 12 | vertical-align: top; 13 | } 14 | .right { 15 | text-align: right; 16 | top: 12px; 17 | } 18 | button { 19 | .rounded-button; 20 | } 21 | input[type="text"] { 22 | .body-text; 23 | line-height: 30px; 24 | &.placeholding { font-style: italic; } 25 | display: block; 26 | width: 100%; 27 | margin-bottom: @std-padding; 28 | } 29 | textarea { 30 | margin-bottom: @std-padding; 31 | height: 180px; 32 | @media (max-width: @screen-xs-max) { 33 | height: 40vh; 34 | } 35 | } 36 | .full-column.help { 37 | margin-top: @std-padding; 38 | text-align: center; 39 | a { 40 | text-decoration: underline; 41 | } 42 | } 43 | .results { 44 | tr { 45 | background-color: @state-success-bg; 46 | 47 | &.error { 48 | background-color: @state-danger-bg; 49 | } 50 | 51 | td { 52 | padding: 5px 10px; 53 | .body-text; 54 | } 55 | } 56 | h3 { 57 | .title-text; 58 | } 59 | } 60 | } 61 | } 62 | 63 | .subheader { 64 | margin-top: @std-padding; 65 | } 66 | 67 | .invite-section-label { 68 | .medium-header; 69 | } 70 | .invite-section-label.code { 71 | margin-top: @std-padding; 72 | padding-top: @std-padding; 73 | border-top: solid 1px @border-lightest; 74 | } 75 | 76 | p.help.error { 77 | margin-top: @std-padding; 78 | color: @error-color !important; 79 | } 80 | -------------------------------------------------------------------------------- /src/css/footer.less: -------------------------------------------------------------------------------- 1 | footer.text-center { 2 | color: #999; 3 | .footer-links { 4 | padding-left: 0; 5 | margin-top: 50px; 6 | 7 | li { 8 | display: inline; 9 | padding: 0 2px; 10 | } 11 | 12 | li:first-child { 13 | padding-left: 0; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/css/index.less: -------------------------------------------------------------------------------- 1 | 2 | // 3rd-party libraries 3 | @import 'bower_components/bootstrap/less/bootstrap'; 4 | @import (inline) 'node_modules/medium.js/medium.css'; 5 | @import (inline) 'bower_components/ng-tags-input/ngTagsInput-bower/ng-tags-input.css'; 6 | @import 'ment.io/userMentions'; 7 | 8 | // Bootstrap overrides 9 | .btn { 10 | .proxima-nova-regular; 11 | } 12 | @headings-font-family: "proxima-nova", sans-serif; 13 | 14 | // other useful global variables 15 | @std-padding: floor(@grid-gutter-width / 2); 16 | 17 | // for static pages 18 | @import 'aboutpage'; 19 | @import 'homepage'; 20 | 21 | // for angular app (mostly) 22 | @import 'angular/angular-csp'; 23 | @import 'angular/angular-growl'; 24 | @import 'angular/charLimit'; 25 | @import 'app2'; 26 | @import 'community'; 27 | @import 'community/create'; 28 | @import 'community/invite'; 29 | @import 'community/posts'; 30 | @import 'community/settings'; 31 | @import 'footer'; 32 | @import 'mixins'; 33 | @import 'nav'; 34 | @import 'network'; 35 | @import 'onboarding'; 36 | @import 'profile/about'; 37 | @import 'profile/profile-edit'; 38 | @import 'profile/profile-only'; 39 | @import 'profile/profile-shared'; 40 | @import 'project'; 41 | @import 'project/cards'; 42 | @import 'project/edit'; 43 | @import 'search'; 44 | @import 'post/comment'; 45 | @import 'post/edit'; 46 | @import 'post/followers'; 47 | @import 'post/fulfill'; 48 | @import 'post/post'; 49 | @import 'shared/colors'; 50 | @import 'shared/tags'; 51 | @import 'shared/dropdown'; 52 | @import 'shared/icons'; 53 | @import 'shared/social-media'; 54 | @import 'shared/toolbar'; 55 | @import 'support'; 56 | @import 'user/home'; 57 | @import 'user/entrance'; 58 | @import 'user/notifications'; 59 | @import 'user/settings'; 60 | -------------------------------------------------------------------------------- /src/css/ment.io/userMentions.less: -------------------------------------------------------------------------------- 1 | .mentio-editor.elastic{ 2 | overflow-y: auto; 3 | overflow-x:hidden; 4 | } 5 | 6 | .menu-highlighted { 7 | font-weight: bold; 8 | } 9 | 10 | .user-search { 11 | .list-group-item.active { 12 | color: #fff; 13 | background-color: #428bca; 14 | border-color: #428bca; 15 | 16 | .text-muted { 17 | color: #ccc; 18 | } 19 | 20 | .text-primary { 21 | color: #fff; 22 | } 23 | } 24 | 25 | .list-group-item { 26 | padding: 5px; 27 | } 28 | 29 | .user-photo { 30 | width: 30px; 31 | height: 30px; 32 | max-width: 30px; 33 | max-height: 30px; 34 | border-radius: 15px; 35 | } 36 | } 37 | 38 | .unpad-last-p p:last-child { 39 | margin-bottom: 0; 40 | } 41 | -------------------------------------------------------------------------------- /src/css/mixins/full-screen-modal.less: -------------------------------------------------------------------------------- 1 | .full-screen-modal() { 2 | .simple-page; 3 | 4 | #content { 5 | position: relative; 6 | overflow: visible; 7 | } 8 | 9 | #nav, #nav-pad { 10 | display: none; 11 | } 12 | 13 | #main-container { 14 | background-color: @white; 15 | margin-top: @nav-height + @std-padding; 16 | @media (max-width: @screen-xs-max) { 17 | padding: 0; 18 | overflow-x: hidden; 19 | } 20 | } 21 | 22 | nav { 23 | border: none; 24 | border-bottom: 2px solid #DCDCDC; 25 | background-color: @white; 26 | border-radius: 0; 27 | padding: 0 @std-padding; 28 | margin: 0 !important; 29 | height: @nav-height; 30 | line-height: @nav-height; 31 | position: fixed; 32 | width: 100%; 33 | top: 0; 34 | left: 0; 35 | z-index: @nav-z-index; 36 | 37 | .close { 38 | .big-close; 39 | position: relative; 40 | z-index: 2; 41 | 42 | @media (min-width: @screen-sm) { 43 | padding-right: @std-padding*2; 44 | } 45 | } 46 | 47 | .icon-hylo-script { 48 | font-size: 45px; 49 | display: block; 50 | margin: 5px 0 5px; 51 | @media (max-width: @screen-xs-max) { 52 | display: none; 53 | } 54 | } 55 | 56 | .navbar-center { 57 | .section-title; 58 | position: absolute; 59 | width: 100%; 60 | left: 0; 61 | top: 0; 62 | text-align: center; 63 | margin: auto; 64 | @media (max-width: @screen-xs-max) { 65 | text-align: left; 66 | padding-left: @std-padding; 67 | padding-top: 0; 68 | } 69 | } 70 | } 71 | 72 | .all-sections { 73 | @media (max-width: @screen-xs-max) { 74 | padding-left: @std-padding * 2; 75 | padding-right: @std-padding * 2; 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/css/mixins/inputs.less: -------------------------------------------------------------------------------- 1 | .borderless-text-input() { 2 | border: none; 3 | box-shadow: none; 4 | outline: none; 5 | background-color: transparent; 6 | margin-left: 0; 7 | } 8 | 9 | @default-button-height: 32px; 10 | 11 | .rounded-button(@size: @default-button-height, @background-color: @white) { 12 | .button-text; 13 | &, &:hover { 14 | text-decoration: none; 15 | color: @text-dark; 16 | } 17 | background-color: @background-color; 18 | cursor: pointer; 19 | border: 1px solid @light-gray; 20 | border-radius: @size; 21 | display: inline-block; 22 | height: @size; 23 | line-height: @size - 2px; 24 | padding: 0px 15px; 25 | outline: none; 26 | > i { 27 | position: relative; 28 | top: 1px; 29 | } 30 | :active, &.active { 31 | background-color: darken(@background-color, 20%); 32 | } 33 | 34 | &.disabled, &[disabled] { 35 | opacity: 0.4; 36 | } 37 | } 38 | 39 | .rounded-button-dark(@size: @default-button-height, @background-color: @dark-gray) { 40 | .rounded-button(@size, @background-color); 41 | &, &:hover { 42 | color: @white; 43 | } 44 | } 45 | 46 | .clear-button { 47 | &, &:hover { 48 | color: @white; 49 | } 50 | background-color: transparent; 51 | border: 1px solid white; 52 | &:active { 53 | background-color: rgba(255, 255, 255, 0.3); 54 | } 55 | } 56 | 57 | .rounded-button-clear { 58 | .rounded-button; 59 | .clear-button; 60 | } 61 | 62 | .circular-button(@size: @default-button-height) { 63 | .rounded-button(@size); 64 | width: @size; 65 | text-align: center !important; 66 | padding: 0; 67 | } 68 | 69 | .round-input { 70 | -webkit-appearance: none; 71 | border: 1px solid @button-border; 72 | border-radius: 25px; 73 | outline: none; 74 | margin: 0; 75 | display: inline-block; 76 | position: relative; 77 | .proxima-nova(100); 78 | } 79 | 80 | .round-radio() { 81 | .round-input; 82 | padding: 10px; 83 | } 84 | 85 | .round-checkbox() { 86 | .round-input; 87 | padding: 15px; 88 | 89 | &:checked { 90 | 91 | &:after { 92 | font-family: @icon-font-family; 93 | content: '\e62e'; 94 | font-size: 14px; 95 | position: absolute; 96 | top: 8px; 97 | left: 7px; 98 | color: @default-text; 99 | } 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/css/mixins/settings-page.less: -------------------------------------------------------------------------------- 1 | .settings-page() { 2 | 3 | .section-label { 4 | .medium-header; 5 | padding: @std-padding 0; 6 | border-bottom: 1px solid @border-light; 7 | color: @default-text; 8 | 9 | .icon-right, .icon-down { 10 | float: right; 11 | margin-top: 13px; 12 | font-size: 12px; 13 | } 14 | 15 | @media (max-width: @screen-xs-max) { 16 | margin: 0 -@std-padding; 17 | padding: @std-padding; 18 | } 19 | } 20 | 21 | label { 22 | .title-text; 23 | display: block; 24 | } 25 | 26 | .setting-item { 27 | .make-row; 28 | padding-top: @std-padding; 29 | padding-bottom: @std-padding; 30 | 31 | 32 | input[type=checkbox] { 33 | .round-checkbox(); 34 | } 35 | 36 | button { 37 | .rounded-button; 38 | 39 | &.main-action { 40 | .rounded-button-dark; 41 | } 42 | } 43 | 44 | p { 45 | .body-text; 46 | 47 | &.help { 48 | .meta-text; 49 | } 50 | } 51 | 52 | .main-column { 53 | .make-sm-column(8); 54 | button { 55 | margin-top: @std-padding/2; 56 | } 57 | } 58 | .side-column { 59 | .make-sm-column(4); 60 | 61 | @media (min-width: @screen-sm) { 62 | text-align: right; 63 | } 64 | } 65 | .value { 66 | @media (min-width: @screen-sm) { 67 | text-align: right; 68 | p { 69 | text-align: left; 70 | } 71 | } 72 | } 73 | .full-column { 74 | .make-sm-column(12); 75 | } 76 | .half-column { 77 | .make-sm-column(6); 78 | } 79 | .right { 80 | @media (min-width: @screen-sm) { 81 | text-align: right; 82 | } 83 | } 84 | .summary { 85 | .meta-text; 86 | display: block; 87 | } 88 | } 89 | 90 | .help { 91 | .meta-text; 92 | a { 93 | color: @link-color !important; 94 | } 95 | } 96 | 97 | } -------------------------------------------------------------------------------- /src/css/mixins/simple-page.less: -------------------------------------------------------------------------------- 1 | .simple-page(@columns: 6) { 2 | .all-sections > h1 { 3 | .section-title; 4 | margin-top: 0; 5 | margin-bottom: @std-padding * 2; 6 | line-height: 18px; 7 | } 8 | 9 | .main-content { 10 | .make-row; 11 | } 12 | 13 | .all-sections { 14 | .make-sm-column(@columns + 2); 15 | .make-sm-column-offset((10 - @columns) / 2); 16 | .make-md-column(@columns); 17 | .make-md-column-offset((12 - @columns) / 2); 18 | 19 | > p.section { 20 | padding: @std-padding 0; 21 | } 22 | 23 | // avoid overlapping the intercom button 24 | @media (max-width: @screen-xs-max) { 25 | margin-bottom: 70px; 26 | } 27 | 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /src/css/network.less: -------------------------------------------------------------------------------- 1 | .centered-column(@size) { 2 | .make-sm-column(@size + 2); 3 | .make-md-column-offset((10-@size)/2); 4 | .make-md-column(@size); 5 | .make-md-column-offset((12-@size)/2); 6 | 7 | @media (max-width: @screen-xs-max) { 8 | padding-left: 0; 9 | padding-right: 0; 10 | } 11 | } 12 | 13 | body.network { 14 | .has-banner(4); 15 | } 16 | 17 | body.network-posts { 18 | .posts { 19 | .centered-column(6); 20 | } 21 | } 22 | 23 | body.network-communities { 24 | 25 | .tab-content .communities { 26 | .centered-column(10); 27 | padding-top: @std-padding*2; 28 | } 29 | 30 | .community-card-wrapper { 31 | .make-sm-column(4); 32 | } 33 | 34 | .community-card { 35 | width: 100%; 36 | position: relative; 37 | border: 1px solid @border-light; 38 | border-radius: @border-radius-base; 39 | overflow: hidden; 40 | margin-bottom: @std-padding*2; 41 | 42 | .background-wrapper { 43 | font-size: 0; // inline-block spacing fix 44 | } 45 | 46 | .background { 47 | .fluid-height(38.2%); 48 | > div { 49 | .banner-background; 50 | } 51 | } 52 | 53 | .middle-content { 54 | position: relative; 55 | padding: @std-padding; 56 | background: @faint-gray; 57 | } 58 | 59 | .logo { 60 | width: @avatar-size-default; 61 | height: @avatar-size-default; 62 | margin-top: -@avatar-size-default/2 - @std-padding; 63 | margin-bottom: 10px; 64 | background-size: cover; 65 | } 66 | 67 | .name { 68 | .small-header; 69 | } 70 | } 71 | } 72 | 73 | body.network-members { 74 | .tab-content { 75 | .centered-column(6); 76 | padding-top: @std-padding*2; 77 | @media (max-width: @screen-xs-max) { 78 | padding-left: @std-padding; 79 | padding-right: @std-padding; 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/css/post/followers.less: -------------------------------------------------------------------------------- 1 | .followers { 2 | .meta-text(); 3 | margin-bottom: 10px; 4 | 5 | @media (max-width: @screen-xs-max) { 6 | margin-top: 4px; 7 | } 8 | 9 | a, a:hover { 10 | color: @link-color; 11 | } 12 | } 13 | 14 | .add-followers { 15 | .meta-text; 16 | width: 100%; 17 | min-height: 44px; 18 | display: table; 19 | border: 1px solid @border-light; 20 | border-top: 0px; 21 | 22 | .add-label, .add-tags { 23 | display: table-cell; 24 | vertical-align: top; 25 | } 26 | 27 | .add-label { 28 | .body-text; 29 | color: @text-dark; 30 | width: 120px; 31 | background-color: @visible-gray-bg; 32 | text-align: center; 33 | vertical-align: top; 34 | padding-top: 16px; 35 | } 36 | 37 | .add-tags { 38 | padding: 0; 39 | 40 | .tags { 41 | border: none; 42 | box-shadow: none; 43 | } 44 | } 45 | } 46 | 47 | .add-followers-complete { 48 | height: 30px; 49 | margin: 5px 5px 0 0; 50 | 51 | .add-followers-btn { 52 | .rounded-button(); 53 | background-color: initial; 54 | float: right; 55 | background-color: @dark-blue; 56 | color: @white; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/css/post/fulfill.less: -------------------------------------------------------------------------------- 1 | .fulfill-modal { 2 | h4 { 3 | .large-header; 4 | color: @intention-color; 5 | } 6 | 7 | p { 8 | .body-text; 9 | } 10 | 11 | .top-contributor-item { 12 | padding: 3px; 13 | border: 1px solid rgba(255,255,255, 0); 14 | 15 | &.selected { 16 | background-color: #F1F2F2; 17 | border: 1px solid #00EA83; 18 | border-radius: 5px; 19 | } 20 | 21 | .avatar { 22 | height: 30px; 23 | width: 30px; 24 | border-radius: 15px; 25 | } 26 | 27 | div { 28 | .proxima-nova-regular; 29 | font-size: 12px; 30 | vertical-align: middle; 31 | height: 30px; 32 | overflow: hidden; 33 | display: table-cell; 34 | padding-left: 5px; 35 | } 36 | } 37 | 38 | a.add { 39 | margin-top: @std-padding; 40 | .rounded-button-dark(32px, @intention-color); 41 | } 42 | } -------------------------------------------------------------------------------- /src/css/profile/about.less: -------------------------------------------------------------------------------- 1 | /* Styles for the about section, shared across main profile view & edit profile view */ 2 | .profile .about, .editProfile .about { 3 | 4 | section { 5 | margin-bottom: 30px; 6 | 7 | h2 { 8 | .small-header; 9 | line-height: 1.8em; 10 | color: @readable-text; 11 | margin: 0; 12 | 13 | .help { 14 | .meta-text; 15 | } 16 | } 17 | } 18 | 19 | ul { 20 | padding-left: 0; 21 | margin-bottom: @std-padding; 22 | } 23 | 24 | li { 25 | list-style-type: none; 26 | position: relative; 27 | padding: 5px 0; 28 | color: @default-text; 29 | .close { 30 | color: @readable-text; 31 | @media (min-width: @screen-sm) { 32 | position: absolute; 33 | top: 4px; 34 | left: -20px; 35 | } 36 | } 37 | } 38 | 39 | .styled-placeholders(14px); 40 | } 41 | 42 | .profile .about { 43 | section { 44 | ul { 45 | li { 46 | padding: 0; 47 | &, a, a:hover { 48 | .body-text; 49 | } 50 | } 51 | } 52 | .entry { 53 | .body-text; 54 | } 55 | } 56 | } 57 | 58 | .editProfile .about { 59 | 60 | input[type="text"] { 61 | .borderless-text-input; 62 | width: 100%; 63 | margin-bottom: @std-padding; 64 | border-bottom: 1px solid @border-light; 65 | line-height: 28px; 66 | } 67 | 68 | textarea { 69 | .body-text; 70 | @media (max-width: @screen-xs-max) { 71 | min-height: 12vh; 72 | } 73 | } 74 | 75 | } -------------------------------------------------------------------------------- /src/css/project/cards.less: -------------------------------------------------------------------------------- 1 | .project-cards { 2 | // all the margin weirdness below 3 | // is so we play nice with Masonry 4 | 5 | margin-left: -@std-padding/2; 6 | margin-right: -@std-padding/2; 7 | 8 | // hide until Masonry is done 9 | opacity: 0; 10 | &.layout-complete { 11 | opacity: 1; 12 | } 13 | 14 | @media (max-width: @screen-xs-max) { 15 | margin-left: -@std-padding/2; 16 | margin-right: -@std-padding/2; 17 | } 18 | 19 | .project-wrapper { 20 | .make-sm-column(6); 21 | padding-left: @std-padding/2; 22 | padding-right: @std-padding/2; 23 | margin-bottom: @std-padding; 24 | 25 | @media (max-width: @screen-xs-max) { 26 | position: static !important; 27 | } 28 | } 29 | } 30 | 31 | .project-card { 32 | border-radius: @border-radius-base; 33 | border: 1px solid @border-light; 34 | cursor: pointer; 35 | 36 | .image { 37 | border-top-left-radius: @border-radius-base; 38 | border-top-right-radius: @border-radius-base; 39 | width: 100%; 40 | .fluid-height(61.8%); 41 | background-size: cover; 42 | background-position: center; 43 | } 44 | 45 | .content { 46 | padding: @std-padding; 47 | } 48 | 49 | h3 { 50 | margin-top: 0; 51 | } 52 | 53 | .avatar { 54 | .user-avatar-sm; 55 | display: inline-block; 56 | vertical-align: middle; 57 | margin-right: 5px; 58 | } 59 | 60 | .contributors { 61 | float: right; 62 | } 63 | 64 | .draft-label { 65 | margin-left: @std-padding*2; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /src/css/project/edit.less: -------------------------------------------------------------------------------- 1 | .newProject, .editProject { 2 | margin-bottom: @std-padding*4; 3 | 4 | .simple-page; 5 | .settings-page; 6 | 7 | .main-content { 8 | .has-rounded-dropdowns; 9 | } 10 | 11 | .all-sections > div { 12 | padding-top: @std-padding; 13 | padding-bottom: @std-padding; 14 | } 15 | 16 | .button { 17 | .rounded-button; 18 | &.save { 19 | .rounded-button-dark; 20 | } 21 | } 22 | 23 | .header { 24 | p { 25 | font-style: italic; 26 | } 27 | .save { 28 | float: right; 29 | margin-left: @std-padding; 30 | } 31 | } 32 | 33 | .footer { 34 | text-align: right; 35 | } 36 | 37 | .details { 38 | height: 12em; 39 | overflow-y: auto; 40 | } 41 | 42 | .add-media input { 43 | width: 40%; 44 | display: inline-block; 45 | } 46 | 47 | .image-preview { 48 | margin-top: @std-padding; 49 | } 50 | 51 | .counter { 52 | float: right; 53 | .meta-text; 54 | } 55 | 56 | .visibility { 57 | .btn-group { 58 | margin-bottom: 5px; 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/css/search.less: -------------------------------------------------------------------------------- 1 | body.search { 2 | .simple-page(8); 3 | 4 | .search-input { 5 | .proxima-nova-light; 6 | .borderless-text-input; 7 | padding: 0; 8 | font-size: 40px; 9 | width: 100%; 10 | margin-bottom: @std-padding; 11 | @media (min-width: @screen-sm) { 12 | margin-top: @std-padding; 13 | } 14 | } 15 | 16 | h3 { 17 | .section-title; 18 | padding-bottom: @std-padding; 19 | margin-bottom: @std-padding; 20 | border-bottom: 1px solid @border-lightest; 21 | 22 | @media (max-width: @screen-xs-max) { 23 | padding-left: @std-padding; 24 | padding-right: @std-padding; 25 | } 26 | } 27 | 28 | .people { 29 | .make-sm-column(4); 30 | .make-sm-column-push(8); 31 | 32 | .avatar { 33 | .user-avatar-sm; 34 | float: left; 35 | margin-right: @std-padding; 36 | } 37 | .info { 38 | overflow: hidden; 39 | } 40 | .name { 41 | .title-text; 42 | } 43 | .blurb { 44 | .meta-text; 45 | } 46 | 47 | } 48 | 49 | .post-results { 50 | .make-sm-column(8); 51 | .make-sm-column-pull(4); 52 | } 53 | 54 | .people, .post-results { 55 | @media (max-width: @screen-xs-max) { 56 | padding: 0; 57 | } 58 | } 59 | 60 | .person { 61 | margin-bottom: @std-padding; 62 | 63 | @media (max-width: @screen-xs-max) { 64 | padding: 0 15px; 65 | } 66 | } 67 | 68 | em.highlight { 69 | font-weight: bold; 70 | font-style: normal; 71 | } 72 | 73 | .load-more { 74 | display: block; 75 | text-align: center; 76 | margin-bottom: @std-padding * 2; 77 | } 78 | 79 | .no-results { 80 | @media (max-width: @screen-xs-max) { 81 | padding-left: @std-padding; 82 | padding-right: @std-padding; 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/css/shared/colors.less: -------------------------------------------------------------------------------- 1 | // New Colors 2 | @default-border: #d9d9d9; 3 | @primary-border: #8c8c8c; 4 | @button-border: @light-gray; 5 | 6 | @secondary-text: #4d4d4d; 7 | @inactive-text: #bfbfbf; 8 | @readable-text: @default-text; 9 | @detail-text: #a6a6a6; 10 | @white: #fff; 11 | @light-gray: #B3B3B3; 12 | 13 | //Old Colors 14 | @hylo-teal: #4FB19F; 15 | @hylo-orange: #E79336; 16 | @hylo-green: #52B065; 17 | @dark-gray: #444; 18 | @visible-gray-bg: #E6E6E6; 19 | @lighter-gray: #D7D6D6; 20 | @faint-gray: #f6f6f6; 21 | @text-dark: #333; 22 | @text-medium-dark: #5b5b5b; 23 | @text-gray: #808080; 24 | @text-light-gray: #999; 25 | @dark-blue: #388ECB; 26 | 27 | @link-color: @dark-blue; 28 | @default-text: @text-dark; 29 | @intention-color: @hylo-teal; 30 | @offer-color: @hylo-green; 31 | @request-color: @hylo-orange; 32 | @error-color: @alert-danger-text; // from bootstrap 33 | 34 | @border-lightest: #E0E0E0; 35 | @border-light: #ccc; 36 | @border-medium: @text-light-gray; 37 | @border-dark: @text-gray; 38 | 39 | @dark-accent: @visible-gray-bg; 40 | 41 | // these are overrides to variables defined in bootstrap/variables.less. 42 | // changes will take effect even if declared after they are used 43 | @brand-success: @hylo-teal; 44 | @brand-info: @faint-gray; 45 | @btn-info-color: @text-gray; 46 | -------------------------------------------------------------------------------- /src/css/shared/dropdown.less: -------------------------------------------------------------------------------- 1 | .dropdown-menu { 2 | li { 3 | min-width: initial; 4 | 5 | &.active { 6 | .dropdown-list-user { 7 | .name { 8 | color: @white; 9 | } 10 | } 11 | } 12 | } 13 | 14 | border: 1px solid @border-light; 15 | 16 | &[responsive-dropdown-menu] { 17 | a { 18 | overflow: hidden; 19 | text-overflow: ellipsis; 20 | } 21 | } 22 | } 23 | 24 | a.dropdown-toggle { 25 | cursor: pointer; 26 | } 27 | 28 | .dropdown-list-user { 29 | padding: 5px 15px !important; 30 | 31 | .avatar { 32 | .user-avatar-sm; 33 | display: inline-block; 34 | vertical-align: middle; 35 | } 36 | .name { 37 | .body-text; 38 | margin-left: 6px; 39 | line-height: 33px; 40 | display: inline-block; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/css/shared/social-media.less: -------------------------------------------------------------------------------- 1 | .user-links { 2 | display: inline-block; 3 | position: relative; 4 | top: -1px; 5 | @media (max-width: @screen-xs-max) { 6 | display: block; 7 | } 8 | } 9 | 10 | .social-media { 11 | display: inline-block; 12 | 13 | @media (max-width: @screen-xs-max) { 14 | padding-top: 6px; 15 | } 16 | 17 | > a, > i { 18 | display: inline-block; 19 | position: relative; 20 | font-size: @social-media-icon-size; 21 | color: @white; 22 | text-decoration: none; 23 | text-align: center; 24 | width: 24px; 25 | margin: 0 6px; 26 | 27 | @media (max-width: @screen-xs-max) { 28 | } 29 | } 30 | 31 | .send-message { 32 | margin-left: 13px; 33 | &.lone { 34 | margin-left: 6px; 35 | } 36 | i { 37 | position: relative; 38 | top: 4px; 39 | } 40 | } 41 | 42 | .status { 43 | position: absolute; 44 | display: block; 45 | top: -27px; 46 | left: 2px; 47 | font-size: 10px; 48 | border-radius: 11px; 49 | border: 1px solid @border-lightest; 50 | color: @text-medium-dark; 51 | background-color: @white; 52 | width: 21px; 53 | height: 21px; 54 | line-height: 21px; 55 | text-align: center; 56 | &.icon-big-check { 57 | color: @hylo-teal; 58 | } 59 | } 60 | } 61 | 62 | .community-members { 63 | .social-media { 64 | padding-bottom: 4px; 65 | 66 | > a { 67 | margin-left: 0; 68 | margin-right: 12px; 69 | text-align: left; 70 | font-size: 16px; 71 | 72 | &.send-message { 73 | margin-left: 7px; 74 | top: -1px; 75 | 76 | &.lone { 77 | margin-left: 0; 78 | } 79 | } 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/css/shared/tags.less: -------------------------------------------------------------------------------- 1 | tags-input { 2 | 3 | .tags { 4 | .form-control; 5 | height: auto; 6 | padding: 3px; 7 | 8 | .tag-item, .input { 9 | line-height: @avatar-size-xs + 4px; 10 | height: @avatar-size-xs + 8px; 11 | } 12 | 13 | .tag-item { 14 | background: white !important; 15 | 16 | i, span { 17 | vertical-align: middle; 18 | } 19 | 20 | .avatar { 21 | .user-avatar-xs; 22 | display: inline-block; 23 | vertical-align: middle; 24 | } 25 | 26 | .name { 27 | .body-text; 28 | } 29 | 30 | &.selected { 31 | background: @link-color !important; 32 | .name { 33 | color: @white; 34 | } 35 | } 36 | } 37 | } 38 | 39 | .suggestion-item { 40 | .avatar { 41 | .user-avatar-xs; 42 | display: inline-block; 43 | vertical-align: middle; 44 | } 45 | 46 | .name { 47 | .body-text; 48 | margin-left: 6px; 49 | line-height: 33px; 50 | display: inline-block; 51 | } 52 | 53 | &.selected .name { 54 | color: @white; 55 | } 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/css/shared/toolbar.less: -------------------------------------------------------------------------------- 1 | // it's entirely possible that this could be redundant with bootstrap's 2 | // built-in navbar component -- but i needed something simple and didn't 3 | // want to have to deal with potential edge cases arising from the bootstrap 4 | // navbar's extra functionality 5 | // 6 | .toolbar { 7 | .button-text; 8 | text-align: center; 9 | padding: @std-padding 0; 10 | border-bottom: 1px solid @border-light; 11 | min-height: 64px; 12 | position: relative; 13 | 14 | @media (max-width: @screen-xs-max) { 15 | padding: 5px 0; 16 | min-height: 44px; 17 | } 18 | 19 | .toolbar-left { 20 | float: left; 21 | left: 0; 22 | text-align: left; 23 | } 24 | .toolbar-right { 25 | float: right; 26 | text-align: left; 27 | } 28 | p { 29 | line-height: @default-button-height; 30 | } 31 | label { 32 | font-weight: normal; 33 | input { 34 | margin-right: 2px; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/css/subscribe.less: -------------------------------------------------------------------------------- 1 | @import 'bower_components/bootstrap/less/bootstrap'; 2 | @import 'shared/colors'; 3 | @import 'mixins'; 4 | 5 | @std-padding: floor(@grid-gutter-width / 2); 6 | 7 | body { 8 | background: url(img/homepage/coworkingBg-faint.jpg); 9 | background-position: center; 10 | background-size: cover; 11 | min-height: 100vh; 12 | 13 | padding-top: 10vh; 14 | .body-text; 15 | } 16 | 17 | div.success { 18 | border-radius: @border-radius-base; 19 | padding: @std-padding; 20 | margin-top: @std-padding; 21 | margin-bottom: @std-padding; 22 | background-color: @state-success-bg; 23 | color: @alert-success-text; 24 | } 25 | -------------------------------------------------------------------------------- /src/css/support.less: -------------------------------------------------------------------------------- 1 | .faqs-page { 2 | .section { 3 | .make-sm-column(8); 4 | .make-sm-column-push(2); 5 | .body-text; 6 | color: @default-text; 7 | 8 | h3 { 9 | font-size: 20px; 10 | line-height: 2; 11 | margin-top: @std-padding; 12 | font-weight: 500; 13 | } 14 | } 15 | } 16 | 17 | .support { 18 | #nav { 19 | padding-bottom: 30px; 20 | } 21 | 22 | .support-content { 23 | .make-sm-column(6); 24 | .make-sm-column-push(3); 25 | padding-bottom: @std-padding*3; 26 | .body-text; 27 | color: @default-text; 28 | 29 | h1 { 30 | .section-title; 31 | } 32 | h2 { 33 | .medium-header; 34 | margin-top: @std-padding * 3; 35 | } 36 | h3 { 37 | .small-header; 38 | margin-top: @std-padding * 2; 39 | } 40 | } 41 | 42 | .community-icon { 43 | display: inline-block; 44 | height: 24px; 45 | width: 24px; 46 | vertical-align: middle; 47 | svg { 48 | width: 100%; 49 | height: 100%; 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/css/user/home.less: -------------------------------------------------------------------------------- 1 | body.home { 2 | .tabs { 3 | .make-row; 4 | border-bottom: 1px solid @border-light; 5 | line-height: 53px; 6 | 7 | > a { 8 | display: block; 9 | .make-xs-column(3); 10 | .make-md-column(2); 11 | .strong-title-text; 12 | text-align: center; 13 | color: @text-light-gray; 14 | 15 | &:first-child { 16 | .make-md-column-offset(2); 17 | } 18 | 19 | .triangle { 20 | display: none; 21 | } 22 | 23 | &, &:hover { 24 | text-decoration: none; 25 | } 26 | 27 | @media (max-width: @screen-xs-max) { 28 | .small-title-text; 29 | padding: @std-padding 0; 30 | line-height: initial; 31 | padding-left: 0; 32 | padding-right: 0; 33 | } 34 | 35 | &.active { 36 | position: relative; 37 | color: @default-text; 38 | 39 | .has-bottom-triangle; 40 | } 41 | } 42 | } 43 | 44 | .tab-content-wrapper { 45 | .simple-page; 46 | position: relative; 47 | padding-top: @std-padding * 2; 48 | } 49 | 50 | .add-new { 51 | position: relative; 52 | top: -@std-padding; 53 | } 54 | 55 | .post, .welcome-post { 56 | @media (max-width: @screen-xs-max) { 57 | margin-left: -@std-padding; 58 | margin-right: -@std-padding; 59 | } 60 | } 61 | } 62 | 63 | body.home-allPosts { 64 | .tab-content-wrapper { 65 | padding-top: 0; 66 | } 67 | 68 | .add-new { 69 | top: 0; 70 | } 71 | 72 | .posts-toolbar { 73 | margin-bottom: @std-padding; 74 | @media (max-width: @screen-xs-max) { 75 | margin-bottom: 0; 76 | } 77 | } 78 | } 79 | 80 | .home-myPosts { 81 | .tab-content { 82 | .post { 83 | .post-without-avatar; 84 | } 85 | } 86 | } 87 | 88 | body.home-simple { 89 | .tab-content-wrapper { 90 | .make-sm-column(6); 91 | .make-sm-column-offset(3); 92 | padding-top: 0; 93 | } 94 | 95 | .add-new { 96 | display: none; 97 | } 98 | 99 | textarea { 100 | margin-bottom: 10px; 101 | min-height: 8em; 102 | } 103 | 104 | .button { 105 | .rounded-button; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/css/user/notifications.less: -------------------------------------------------------------------------------- 1 | .notifications { 2 | .simple-page; 3 | 4 | .buttons { 5 | @media (min-width: @screen-sm) { 6 | margin-top: @std-padding; 7 | text-align: right; 8 | width: 100%; 9 | } 10 | a { 11 | .rounded-button; 12 | } 13 | margin-bottom: @std-padding; 14 | } 15 | 16 | .notification { 17 | .make-row; 18 | margin-bottom: @std-padding; 19 | padding: @std-padding; 20 | border-bottom: 1px solid @border-lightest; 21 | 22 | &.unread { 23 | background-color: fadeout(@link-color, 85%); 24 | } 25 | 26 | .avatar { 27 | .user-avatar-sm; 28 | float: left; 29 | margin-right: @std-padding; 30 | } 31 | 32 | .content { 33 | overflow: hidden; 34 | } 35 | 36 | .title { 37 | overflow: hidden; 38 | padding: 7px 0 @std-padding; 39 | } 40 | 41 | .body-text { 42 | .body-text; 43 | padding: 0 @std-padding 5px; 44 | } 45 | 46 | .controls { 47 | color: @text-gray; 48 | .meta-text; 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /src/css/user/settings.less: -------------------------------------------------------------------------------- 1 | .userSettings { 2 | .simple-page; 3 | .settings-page; 4 | 5 | .change-password { 6 | .rounded-button; 7 | } 8 | 9 | .email { 10 | .buttons { 11 | @media (min-width: @screen-sm) { 12 | text-align: right; 13 | } 14 | margin-top: 5px; 15 | p { 16 | margin-bottom: 5px; 17 | } 18 | } 19 | } 20 | 21 | .communities { 22 | a { 23 | font-size: 15px; 24 | } 25 | } 26 | 27 | select { 28 | font-size: 16px; 29 | } 30 | 31 | @media (max-width: @screen-xs-max) { 32 | .communities label { 33 | margin-bottom: 0; 34 | } 35 | .setting-item .summary { 36 | margin-bottom: 5px; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/html/admin/communities.tpl.html: -------------------------------------------------------------------------------- 1 |