소스 검색

[css] added less

version-14
Rushabh Mehta 10 년 전
부모
커밋
ccdbc47da2
9개의 변경된 파일1425개의 추가작업 그리고 587개의 파일을 삭제
  1. +27
    -2
      frappe/build.py
  2. +411
    -558
      frappe/public/css/desk.css
  3. +22
    -21
      frappe/public/css/tree.css
  4. +4
    -4
      frappe/public/js/frappe/form/control.js
  5. +6
    -2
      frappe/public/js/frappe/form/grid.js
  6. +5
    -0
      frappe/public/js/frappe/views/formview.js
  7. +903
    -0
      frappe/public/less/desk.less
  8. +39
    -0
      frappe/public/less/tree.less
  9. +8
    -0
      frappe/public/less/variables.less

+ 27
- 2
frappe/build.py 파일 보기

@@ -11,14 +11,25 @@ Build the `public` folders and setup languages
import os, frappe, json, shutil, re import os, frappe, json, shutil, re
# from cssmin import cssmin # from cssmin import cssmin



app_paths = None
def setup():
global app_paths
pymodules = [frappe.get_module(app) for app in frappe.get_all_apps(True)]
app_paths = [os.path.dirname(pymodule.__file__) for pymodule in pymodules]

def bundle(no_compress, make_copy=False, verbose=False): def bundle(no_compress, make_copy=False, verbose=False):
"""concat / minify js files""" """concat / minify js files"""
# build js files # build js files
setup()

make_asset_dirs(make_copy=make_copy) make_asset_dirs(make_copy=make_copy)
build(no_compress, verbose) build(no_compress, verbose)


def watch(no_compress): def watch(no_compress):
"""watch and rebuild if necessary""" """watch and rebuild if necessary"""
setup()

import time import time
build(no_compress=True) build(no_compress=True)


@@ -26,6 +37,7 @@ def watch(no_compress):
if files_dirty(): if files_dirty():
build(no_compress=True) build(no_compress=True)


compile_less()
time.sleep(3) time.sleep(3)


def make_asset_dirs(make_copy=False): def make_asset_dirs(make_copy=False):
@@ -61,8 +73,6 @@ def build(no_compress=False, verbose=False):
def get_build_maps(): def get_build_maps():
"""get all build.jsons with absolute paths""" """get all build.jsons with absolute paths"""
# framework js and css files # framework js and css files
pymodules = [frappe.get_module(app) for app in frappe.get_all_apps(True)]
app_paths = [os.path.dirname(pymodule.__file__) for pymodule in pymodules]


build_maps = {} build_maps = {}
for app_path in app_paths: for app_path in app_paths:
@@ -152,3 +162,18 @@ def files_dirty():
else: else:
return False return False


def compile_less():
for path in app_paths:
less_path = os.path.join(path, "public", "less")
if os.path.exists(less_path):
for fname in os.listdir(less_path):
if fname.endswith(".less") and fname != "variables.less":
fpath = os.path.join(less_path, fname)
mtime = os.path.getmtime(fpath)
if fpath in timestamps and mtime == timestamps[fpath]:
continue

timestamps[fpath] = mtime
print "compiling {0}".format(fpath)
os.system("lessc {0} > {1}".format(fpath,
os.path.join(path, "public", "css", fname.rsplit(".", 1)[0] + ".css")))

+ 411
- 558
frappe/public/css/desk.css
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 22
- 21
frappe/public/css/tree.css 파일 보기

@@ -1,30 +1,31 @@
.tree li {
list-style: none;
.tree {
padding: 15px;
} }
.tree ul {
.tree li {
list-style: none;
} }
.tree-link {
cursor: pointer;
.tree-link {
cursor: pointer;
} }
.tree-hover {
background-color: #eee;
min-height: 20px;
border: 1px solid #ddd;
.tree-hover {
background-color: #f7fafc;
min-height: 20px;
border: 1px solid #d1d8dd;
} }
.tree-node-toolbar { .tree-node-toolbar {
display: inline-block;
padding: 0px 5px;
margin-left: 15px;
border-radius: 3px;
background-color: #ddd;
display: inline-block;
padding: 0px 5px;
margin-left: 15px;
border-radius: 3px;
background-color: #f0f4f7;
} }
.tree-toolbar-item { .tree-toolbar-item {
display: inline-block;
padding: 0px 5px;
padding-top: 1px;
border-right: 1px solid #aaa;
font-size: 90%;
display: inline-block;
padding: 0px 5px;
padding-top: 1px;
border-right: 1px solid #d1d8dd;
font-size: 90%;
} }
.tree-toolbar-item:last-child { .tree-toolbar-item:last-child {
border-right: 0px;
}
border-right: 0px;
}

+ 4
- 4
frappe/public/js/frappe/form/control.js 파일 보기

@@ -107,10 +107,10 @@ frappe.ui.form.ControlImage = frappe.ui.form.Control.extend({
make: function() { make: function() {
this._super(); this._super();
var me = this; var me = this;
this.$wrapper = $("<div class='row'></div>")
this.$wrapper = $("<div></div>")
.appendTo(this.parent) .appendTo(this.parent)
.css({"max-width": "600px", "margin": "0px"}); .css({"max-width": "600px", "margin": "0px"});
this.$body = $("<div class='col-xs-8'>").appendTo(this.$wrapper)
this.$body = $("<div></div>").appendTo(this.$wrapper)
.css({"margin-bottom": "10px", "max-width": "100%"}) .css({"margin-bottom": "10px", "max-width": "100%"})
this.$wrapper.on("refresh", function() { this.$wrapper.on("refresh", function() {
me.$body.empty(); me.$body.empty();
@@ -118,7 +118,7 @@ frappe.ui.form.ControlImage = frappe.ui.form.Control.extend({
me.$img = $("<img src='"+me.frm.doc[me.df.options]+"' style='max-width: 100%;'>") me.$img = $("<img src='"+me.frm.doc[me.df.options]+"' style='max-width: 100%;'>")
.appendTo(me.$body); .appendTo(me.$body);
} else { } else {
me.$buffer = $("<div class='missing-image'><i class='icon-camera'></i></div>")
me.$buffer = $("<div class='missing-image'><i class='octicon octicon-circle-slash'></i></div>")
.appendTo(me.$body) .appendTo(me.$body)
} }
return false; return false;
@@ -709,7 +709,7 @@ frappe.ui.form.ControlAttachImage = frappe.ui.form.ControlAttach.extend({
make_input: function() { make_input: function() {
this._super(); this._super();
this.img = $("<img class='img-responsive'>").appendTo($('<div style="margin: 7px 0px;">\ this.img = $("<img class='img-responsive'>").appendTo($('<div style="margin: 7px 0px;">\
<div class="missing-image"><i class="icon-camera"></i></div></div>')
<div class="missing-image"><i class="octicon octicon-circle-slash"></i></div></div>')
.prependTo(this.input_area)).toggle(false); .prependTo(this.input_area)).toggle(false);


var me = this; var me = this;


+ 6
- 2
frappe/public/js/frappe/form/grid.js 파일 보기

@@ -1,6 +1,10 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// MIT License. See license.txt // MIT License. See license.txt


frappe.ui.form.get_open_grid_form = function() {
return $(".grid-row-open").data("grid_row");
}

frappe.ui.form.Grid = Class.extend({ frappe.ui.form.Grid = Class.extend({
init: function(opts) { init: function(opts) {
$.extend(this, opts); $.extend(this, opts);
@@ -265,7 +269,7 @@ frappe.ui.form.GridRow = Class.extend({


// refersh form fields // refersh form fields
if(this.get_open_form()) { if(this.get_open_form()) {
this.layout.refresh(this.doc);
this.layout && this.layout.refresh(this.doc);
} }
}, },
make_static_display: function() { make_static_display: function() {
@@ -360,7 +364,7 @@ frappe.ui.form.GridRow = Class.extend({
} }
}, },
get_open_form: function() { get_open_form: function() {
return $(".grid-row-open").data("grid_row");
return frappe.ui.form.get_open_grid_form();
}, },
toggle_view: function(show, callback) { toggle_view: function(show, callback) {
if(!this.doc) return this; if(!this.doc) return this;


+ 5
- 0
frappe/public/js/frappe/views/formview.js 파일 보기

@@ -18,6 +18,11 @@ frappe.views.FormFactory = frappe.views.Factory.extend({
} else { } else {
me.show_doc(route); me.show_doc(route);
} }

$(document).on("page-change", function() {
var open_form = frappe.ui.form.get_open_grid_form();
open_form && open_form.hide_form();
});
}, },
show_doc: function(route) { show_doc: function(route) {
var dt = route[1], var dt = route[1],


+ 903
- 0
frappe/public/less/desk.less 파일 보기

@@ -0,0 +1,903 @@
@import "variables.less";

html {
min-height: 100%;
position: relative;
}

body {
height: 100%;
margin: 0px;
padding-top: 44px;
}

a {
cursor: pointer;
}

.navbar-default {
background-color: @navbar-bg;
border-bottom: 1px solid #ebeff2;
}

.navbar-brand {
font-size: inherit;
}
.navbar a {
font-size: 12px;
font-weight: bold;
}

a.disabled, a.disabled:hover {
color: #888;
cursor: default;
text-decoration: none;
}

.page-container {
padding-bottom: 15px;
}

a.grey, .sidebar-section a, .nav-pills a, .control-value a, .data-row a {
color: inherit;
border-bottom: 1px solid transparent;
margin-bottom: 0.4em;
}

a.grey:hover, .sidebar-section a:hover, .nav-pills a:hover, .control-value a:hover, .data-row a:hover {
border-bottom: 1px solid @grey-link-color;
color: @grey-link-color;
}

.text-muted {
color: @text-muted !important;
}

.text-extra-muted {
color: @border-color !important;
}

a.text-muted, a.text-extra-muted {
border-bottom: 1px solid transparent;
}

a.text-muted:hover,
a.text-muted:focus,
a.text-extra-muted:hover,
a.text-extra-muted:focus {
color: inherit;
border-bottom: 1px solid @text-muted;
}


.nav-pills a, .nav-pills a:hover {
border-bottom: none;
}


a.form-link {
color: inherit;
font-weight: bold;
font-size: 102%;
}

.link-btn {
position: absolute;
top: 4px;
right: 4px;
background-color: @navbar-bg;
border-radius: 2px;
padding: 3px;
display: none;
}

em.link-option {
font-weight: normal;
}

.text-small {
font-size: 12px;
}

.text-ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

@media (max-width: 767px) {
.layout-side-section {
border-top: 1px solid @border-color;
}
}

/* page */

.page-head {
border-bottom:1px solid @border-color;
min-height: 70px;
}

.page-title h6 {
margin: 0px;
margin-top: -8px;
}

.page-actions {
padding-top: 20px;
padding-bottom: 20px;
}

/* show menu aligned to the right border of the dropdown */
.page-actions .dropdown-menu {
right: 0px;
left: auto;
font-size: 12px;
}

.dropdown-menu > li > a {
padding: 7px 20px;
}

.layout-main-section {
border: 1px solid @border-color;
border-top: 0px;
}

.form-intro-area {
padding: 15px 22px;
}

.page-form {
margin: 0px;
padding-top: 15px;
border-bottom: 1px solid @border-color;
}

.page-form .form-group {
margin-bottom: 15px;
}

.page-form .checkbox {
margin-top: 2px;
}

.page-form .checkbox input {
margin-top: -3px;
}

.indicator {
background:none;
font-size:12px;
vertical-align:middle;
font-weight:bold;
color:#6c7680;
}
.indicator::before {
margin:0 4px 0 8px;
content:'';
display:inline-block;
height:8px;
width:8px;
border-radius:8px;
}
.indicator.grey::before {
background: @btn-bg;
}
.indicator.blue::before {
background: #5e64ff;
}
.indicator.red::before {
background: #ff5858;
}
.indicator.green::before {
background: #98d85b;
}
.indicator.orange::before {
background: #ffa00a;
}



/* listing */

.no-result {
padding: 15px;
}

.show_filters {
padding: 15px;
padding-bottom: 5px;
border-bottom: 1px solid @border-color;
}

.set-filters .btn {
margin-bottom: 10px;
}

.set-filters .btn-group {
margin-right: 10px;
}

.list-row {
padding: 7px 15px 10px 15px;
border-bottom: 1px solid @border-color;
}

.list-row:hover, .grid-row:hover {
background: @panel-bg;
}

.list-row:last-child {
border-bottom: 0px;
}

.list-item-col {
white-space: nowrap;
text-overflow: ellipsis;
height: 30px;
padding-top: 3px;
}

.slick-wrapper, .slick-header {
border: none !important;
}

.slick-headerrow {
border: none;
border-bottom: 1px solid @border-color;
}

.slick-headerrow-column {
background-color: @panel-bg !important;
}

.slick-headerrow-column input {
border: 1px solid @border-color;
border-radius: 3px;
font-size: 12px;
padding: 0px 3px !important;
}

.slick-cell {
border-color: @border-color !important;
color: inherit !important;
}

.slick-header-column, .slick-header-columns {
font-size: 12px;
font-weight: bold;
background-color: @panel-bg;
border-color: @border-color !important;
color: @text-muted !important;
}

.slick-row.odd .slick-cell {
background-color: @light-bg;
}

.list-paging-area {
padding: 10px 15px;
border-top: 1px solid @border-color;
}

.progress {
height: 10px;
}

.doclist-row .progress {
margin-top: 12px;
}

.stat-label {
margin-bottom: 5px;
}

.filterable {
cursor: pointer;
}

.doclist-row .label {
margin-right: 8px;
}

.list-info-row {
float: left;
margin-top: -3px;
}

.list-row-right {
margin-top: 8px;
margin-bottom: -8px;
}

.side-panel {
border-bottom: 1px solid @border-color;
margin: 0px -15px;
padding: 5px 15px;
}

.star-action.icon-star {
color: #ffdb4c;
}

/* module */

.module-item {
margin: 0px;
padding: 15px 10px;
border-bottom: 1px solid @border-color;
cursor: pointer;
}

.module-item h4 {
margin-bottom: 2px;
}

.module-item .badge {
margin-top: -2px;
margin-left: 3px;
}

.module-item:hover, .module-item:focus {
background-color: @panel-bg;
}

.module-item:last-child {
border: none;
}

.module-sidebar-item.active .icon-chevron-right {
margin-top: 2px;
display: block !important;
}

.alert-badge {
margin: 4px 0px;
}

.alert-badge .badge {
margin-top: 3px;
}

.form-print-wrapper {
border: 1px solid @border-color;
border-top: none;
}

.print-preview-wrapper {
padding: 30px 0px;
background-color: @navbar-bg;
}

.print-toolbar {
margin: 0px;
padding: 10px 0px;
border-bottom: 1px solid @border-color;
}

.form-page-header {
border-top: 1px solid @border-color;
padding: 10px 15px;
background-color: @panel-bg;
}

.form-page.second-page {
border-top: 1px solid @border-color;
}

.form-control {
padding: 6px 8px;
}

.form-dashboard {
display: none;
border-bottom: 1px solid @border-color;
}

.form-section {
margin: 0px;
padding: 15px;
}
.modal-content .form-section {
padding: 0px;
}

.form-section:nth-child(even), .timeline-item:nth-child(even) {
background-color: @light-bg;
}

.help ol {
padding-left: 19px;
}

.field_description_top {
margin-bottom: 3px;
}

.sidebar-section li {
margin-top: 5px;
font-size: 12px;
}

.sidebar-section {
margin-top: 25px;
}
.sidebar-section:last-child {
margin-bottom: 20px;
}
.sidebar-section h6 {
text-transform: uppercase;
color: @text-muted;
}

.sidebar-section h6 .label {
font-size: 12px;
}

.user-actions {
margin-bottom: 15px;
}
.user-actions a {
font-weight: bold;
}

/* module */

.module-item-progress {
margin-bottom: 10px;
height: 17px;
}

.module-item-progress-total {
height: 7px;
background-color: #999999;
width: 0px;
}

.module-item-progress-open {
height: 7px;
background-color: red;
width: 0px;
}


.badge-important {
background-color: #e74c3c;
}

.comm-header {
font-weight: bold;
height: 20px;
overflow: hidden;
}

.comm-header > div {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}

/* alert */


#alert-container {
position: fixed;
bottom: 8px;
right: 8px;
z-index: 1050;
}

#alert-container .alert {
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);

overflow: hidden;
max-width: 400px;
text-overflow: ellipsis;
white-space: nowrap;
}

.missing-image {
background-color: @light-bg;
display: table-cell;
vertical-align: middle;
text-align: center;
width: 140px;
height: 140px;
}
.missing-image .octicon {
font-size: 32px;
color: @border-color;
}
/* form */

.timeline {
border: 1px solid @border-color;
margin: 30px 0px;
}

.timeline-item {
margin-top: 0px;
padding: 15px 30px;
}

.timeline-item .reply {
margin-top: 20px;
padding-left: 24px;
border-left: 8px solid #d8dfe6;
}

.timeline-item h6 {
margin-top: 6px;
}

.timeline-head {
background-color: @light-bg;
padding: 30px 30px 15px 30px;
border-bottom: 1px solid @border-color;
}

.frappe-editor {
cursor: text;
}

.frappe-editor img {
max-width: 100%;
}

textarea.form-control {
height: 120px;
}

ul.linked-with-list {
list-style: none;
margin: 0 0 20px 0;
padding: 0 0 0 0;
}

ul.linked-with-list li {
padding: 5px 0px;
border-bottom: 1px solid @border-color;
}

/* form grid */

.form-grid {
border: 1px solid @border-color;
margin-bottom: 15px;
border-radius: 3px;
}

.grid-heading-row {
border-bottom: 1px solid @border-color;
background-color: @panel-bg;
font-weight: bold;
}

.grid-row {
padding: 10px 15px;
border-bottom: 1px solid @border-color;
}

.grid-row:last-child {
border: none;
}

.rows .grid-row .data-row, .rows .grid-row .grid-footer-toolbar, .grid-form-heading {
cursor: pointer;
}

.data-row.row {
margin: 0px;
}

.grid-body {
background-color: #fff;
}

.grid-body .data-row {
font-size: 12px;
}

.grid-footer {
padding: 10px 15px;
border-top: 1px solid @border-color;
}

.grid-empty, .list-loading {
padding: 10px 15px;
color: @border-color;
}

.list-id {
font-weight: bold;
}

.grid-static-col {
max-height: 200px;
overflow: hidden;
}

.row-index {
text-align: right;
width: 30px;
margin-left: -15px;
float: left;
}

.row-data > .row {
margin-left: 15px;
}

.grid-row td {
vertical-align: top;
}

.grid-row p {
margin-bottom: 5px;
}

.form-in-grid {
margin: -10px -15px;
z-index: 1021;
position: relative;
background-color: white;
}

.grid-form-heading {
padding: 10px 15px;
font-size: 120%;
border-bottom: 1px solid @border-color;
}

.grid-footer-toolbar {
padding: 10px 15px;
border-top: 1px solid @border-color;
}

/* form footer */

.form-footer {
padding-bottom: 30px;
/*box-shadow: 0px -1px 6px rgba(0,0,0,0.3);*/
}

.form-footer h5 {
margin: 15px 0px;
font-weight: bold;
}


.control-label, .grid-heading-row {
color: #8c99a5;
font-size: 85%;
}

.like-disabled-input {
margin-bottom: 7px;
border-radius: 3px;
min-height: 30px;
font-weight: bold;
}

.like-disabled-input.for-description {
font-weight: normal;
}

/* jquery ui */

.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year {
display: inline;
}

.hidden-xs-inline, .hidden-xs-inline-block {
display: none;
}

.ui-autocomplete {
max-height: 200px;
overflow-y: auto;
overflow-x: hidden;
}


@media (min-width: 768px) {
.hidden-xs-inline {
display: inline;
}
.hidden-xs-inline-block {
display: inline-block;
}

.listview-main-section {
border-right: 1px solid @border-color;
}
}

.modal-backdrop {
opacity: 0.5;
}

/* buttons */

.grid-overflow-no-ellipsis {
word-wrap: break-word;
overflow: hidden;
padding-right: 0px;
}

.grid-overflow-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-right: 0px;
}

.toolbar-banner {
text-align: center;
background-color: #fcf8e3;
padding: 7px;
z-index: 1;
}

.form-group {
margin-bottom: 7px;
}


/* hack */
.ui-datepicker { z-index: 9999999 !important; }
.ui-autocomplete {
z-index: 9999999 !important;
}

.bold,
.strong {
font-weight: bold;
}

.print-preview {
padding: 0px;
max-width: 8.3in;
margin: auto;
min-height: 11.69in;
}

.module-view-layout {
margin-top: 10px;
}

.open-notification {
position:relative;
top:-2px;
left: 2px;
display:inline-block;
background:#ff5858;
font-size:12px;
line-height:20px;
padding:0 8px;
color:#fff;
border-radius:10px;
}

/* on small screens, show only icons on top */
@media (max-width: 767px) {
.module-view-layout .nav-stacked > li {
float: left;
margin-bottom: 5px;
}

.nav-stacked > li + li {
margin-top: 0px;
margin-left: 2px;
}
}

#freeze {
background-color: #557698;
opacity: 0.2;
z-index: 1020;
}

kbd {
color: inherit;
background-color: @btn-bg;
-webkit-box-shadow: none;
box-shadow: none;

}

.msg-box {
padding: 30px 15px;
text-align: center;
color: @text-muted;
}

.no-border {
border: none !important;
}

.message-row {
padding: 10px 15px;
}

.message-row .indicator {
margin-left: -10px;
margin-right: -20px;
}

.message-box .indicator {
margin-right: 15px;
margin-top: 7px;
}

/* calendar */
.fc-toolbar {
padding: 15px;
margin-bottom: 0px !important;
}

.fc-view-container {
margin-left: -1px;
}

th.fc-widget-header {
background-color: @panel-bg;
color: #8C99A5;
}

.fc-unthemed th,
.fc-unthemed td,
.fc-unthemed hr,
.fc-unthemed thead,
.fc-unthemed tbody,
.fc-unthemed .fc-row,
.fc-unthemed .fc-popover {
border-color: @border-color !important;
}

.fc-unthemed .fc-today {
background-color: #FFFEF2 !important;
}

.fc-highlight {
background-color: #D9F6FF !important;
}

.btn.active {
box-shadow: none;
}

/* gantt chart */
.gantt, .gantt2 {
border: none !important;
border-radius: none !important;
margin: 0px auto !important;
}

.fn-gantt .leftPanel,
.fn-gantt .leftPanel .row0,
.fn-gantt .leftPanel .name, .fn-gantt .leftPanel .desc,
.fn-gantt .dataPanel,
.fn-gantt .day, .fn-gantt .date,
.fn-gantt .rightPanel .month, .fn-gantt .rightPanel .year {
border-color: @border-color !important;
}

.fn-gantt .navigate {
border: none !important;
}

.fn-gantt .leftPanel .name, .fn-gantt .leftPanel .desc,
.fn-gantt .spacer,
.fn-gantt .wd,
.fn-gantt .rightPanel .month, .fn-gantt .rightPanel .year,
.fn-gantt .bottom {
background-color: @panel-bg !important;
}

.fn-gantt .today {
background-color: #D9F6FF !important;
}

+ 39
- 0
frappe/public/less/tree.less 파일 보기

@@ -0,0 +1,39 @@
@import "variables.less";

.tree {
padding: 15px;
}

.tree li {
list-style: none;
}

.tree-link {
cursor: pointer;
}

.tree-hover {
background-color: @panel-bg;
min-height: 20px;
border: 1px solid @border-color;
}

.tree-node-toolbar {
display: inline-block;
padding: 0px 5px;
margin-left: 15px;
border-radius: 3px;
background-color: @btn-bg;
}

.tree-toolbar-item {
display: inline-block;
padding: 0px 5px;
padding-top: 1px;
border-right: 1px solid @border-color;
font-size: 90%;
}

.tree-toolbar-item:last-child {
border-right: 0px;
}

+ 8
- 0
frappe/public/less/variables.less 파일 보기

@@ -0,0 +1,8 @@
@border-color: #d1d8dd;
@text-color: #36414C;
@text-muted: #8D99A6;
@btn-bg: #F0F4F7;
@panel-bg: #F7FAFC;
@grey-link-color: #212a33;
@navbar-bg: #f5f7fa;
@light-bg: #fafbfc;

불러오는 중...
취소
저장