1//
2// Panels
3// --------------------------------------------------
4
5
6// Base class
7.panel {
8  margin-bottom: $line-height-computed;
9  background-color: $panel-bg;
10  border: 1px solid transparent;
11  border-radius: $panel-border-radius;
12  @include box-shadow(0 1px 1px rgba(0,0,0,.05));
13}
14
15// Panel contents
16.panel-body {
17  padding: $panel-body-padding;
18  @include clearfix;
19}
20
21// Optional heading
22.panel-heading {
23  padding: $panel-heading-padding;
24  border-bottom: 1px solid transparent;
25  @include border-top-radius(($panel-border-radius - 1));
26
27  > .dropdown .dropdown-toggle {
28    color: inherit;
29  }
30}
31
32// Within heading, strip any `h*` tag of its default margins for spacing.
33.panel-title {
34  margin-top: 0;
35  margin-bottom: 0;
36  font-size: ceil(($font-size-base * 1.125));
37  color: inherit;
38
39  > a,
40  > small,
41  > .small,
42  > small > a,
43  > .small > a {
44    color: inherit;
45  }
46}
47
48// Optional footer (stays gray in every modifier class)
49.panel-footer {
50  padding: $panel-footer-padding;
51  background-color: $panel-footer-bg;
52  border-top: 1px solid $panel-inner-border;
53  @include border-bottom-radius(($panel-border-radius - 1));
54}
55
56
57// List groups in panels
58//
59// By default, space out list group content from panel headings to account for
60// any kind of custom content between the two.
61
62.panel {
63  > .list-group,
64  > .panel-collapse > .list-group {
65    margin-bottom: 0;
66
67    .list-group-item {
68      border-width: 1px 0;
69      border-radius: 0;
70    }
71
72    // Add border top radius for first one
73    &:first-child {
74      .list-group-item:first-child {
75        border-top: 0;
76        @include border-top-radius(($panel-border-radius - 1));
77      }
78    }
79
80    // Add border bottom radius for last one
81    &:last-child {
82      .list-group-item:last-child {
83        border-bottom: 0;
84        @include border-bottom-radius(($panel-border-radius - 1));
85      }
86    }
87  }
88  > .panel-heading + .panel-collapse > .list-group {
89    .list-group-item:first-child {
90      @include border-top-radius(0);
91    }
92  }
93}
94// Collapse space between when there's no additional content.
95.panel-heading + .list-group {
96  .list-group-item:first-child {
97    border-top-width: 0;
98  }
99}
100.list-group + .panel-footer {
101  border-top-width: 0;
102}
103
104// Tables in panels
105//
106// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
107// watch it go full width.
108
109.panel {
110  > .table,
111  > .table-responsive > .table,
112  > .panel-collapse > .table {
113    margin-bottom: 0;
114
115    caption {
116      padding-left: $panel-body-padding;
117      padding-right: $panel-body-padding;
118    }
119  }
120  // Add border top radius for first one
121  > .table:first-child,
122  > .table-responsive:first-child > .table:first-child {
123    @include border-top-radius(($panel-border-radius - 1));
124
125    > thead:first-child,
126    > tbody:first-child {
127      > tr:first-child {
128        border-top-left-radius: ($panel-border-radius - 1);
129        border-top-right-radius: ($panel-border-radius - 1);
130
131        td:first-child,
132        th:first-child {
133          border-top-left-radius: ($panel-border-radius - 1);
134        }
135        td:last-child,
136        th:last-child {
137          border-top-right-radius: ($panel-border-radius - 1);
138        }
139      }
140    }
141  }
142  // Add border bottom radius for last one
143  > .table:last-child,
144  > .table-responsive:last-child > .table:last-child {
145    @include border-bottom-radius(($panel-border-radius - 1));
146
147    > tbody:last-child,
148    > tfoot:last-child {
149      > tr:last-child {
150        border-bottom-left-radius: ($panel-border-radius - 1);
151        border-bottom-right-radius: ($panel-border-radius - 1);
152
153        td:first-child,
154        th:first-child {
155          border-bottom-left-radius: ($panel-border-radius - 1);
156        }
157        td:last-child,
158        th:last-child {
159          border-bottom-right-radius: ($panel-border-radius - 1);
160        }
161      }
162    }
163  }
164  > .panel-body + .table,
165  > .panel-body + .table-responsive,
166  > .table + .panel-body,
167  > .table-responsive + .panel-body {
168    border-top: 1px solid $table-border-color;
169  }
170  > .table > tbody:first-child > tr:first-child th,
171  > .table > tbody:first-child > tr:first-child td {
172    border-top: 0;
173  }
174  > .table-bordered,
175  > .table-responsive > .table-bordered {
176    border: 0;
177    > thead,
178    > tbody,
179    > tfoot {
180      > tr {
181        > th:first-child,
182        > td:first-child {
183          border-left: 0;
184        }
185        > th:last-child,
186        > td:last-child {
187          border-right: 0;
188        }
189      }
190    }
191    > thead,
192    > tbody {
193      > tr:first-child {
194        > td,
195        > th {
196          border-bottom: 0;
197        }
198      }
199    }
200    > tbody,
201    > tfoot {
202      > tr:last-child {
203        > td,
204        > th {
205          border-bottom: 0;
206        }
207      }
208    }
209  }
210  > .table-responsive {
211    border: 0;
212    margin-bottom: 0;
213  }
214}
215
216
217// Collapsible panels (aka, accordion)
218//
219// Wrap a series of panels in `.panel-group` to turn them into an accordion with
220// the help of our collapse JavaScript plugin.
221
222.panel-group {
223  margin-bottom: $line-height-computed;
224
225  // Tighten up margin so it's only between panels
226  .panel {
227    margin-bottom: 0;
228    border-radius: $panel-border-radius;
229
230    + .panel {
231      margin-top: 5px;
232    }
233  }
234
235  .panel-heading {
236    border-bottom: 0;
237
238    + .panel-collapse > .panel-body,
239    + .panel-collapse > .list-group {
240      border-top: 1px solid $panel-inner-border;
241    }
242  }
243
244  .panel-footer {
245    border-top: 0;
246    + .panel-collapse .panel-body {
247      border-bottom: 1px solid $panel-inner-border;
248    }
249  }
250}
251
252
253// Contextual variations
254.panel-default {
255  @include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border);
256}
257.panel-primary {
258  @include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border);
259}
260.panel-success {
261  @include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border);
262}
263.panel-info {
264  @include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border);
265}
266.panel-warning {
267  @include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border);
268}
269.panel-danger {
270  @include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border);
271}
272