Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Isometric Design. Trigger when user wants angled 3D appearances without vanishing points, often used for technical illustrations.
.claude/skills/lingxling-isometric-design/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -23% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 36% | 0% |
> "The architect's view. A parallel projection where depth is constant and parallel lines never converge."
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the design-it skill and is not meant to be triggered directly.
rotateX(60deg) and rotateZ(-45deg).css.isometric-grid { /* The foundation */ transform-style: preserve-3d; transform: rotateX(60deg) rotateZ(-45deg); } .iso-block { width: 100px; height: 100px; background-color: var(--secondary-base); position: relative; transition: transform 0.3s; } /* Creating the 3D block with pseudo-elements */ .iso-block::before { content: ''; position: absolute; width: 20px; /* Depth */ height: 100%; background-color: var(--primary-text); /* Darker shade for side */ right: 100%; transform-origin: right; transform: skewY(-45deg); } .iso-block::after { content: ''; position: absolute; width: 100%; height: 20px; /* Depth */ background-color: var(--cta-highlight); /* Lightest shade for top/bottom */ top: 100%; transform-origin: top; transform: skewX(-45deg); } .iso-block:hover { transform: translateZ(20px) translate(-10px, -10px); }
swiftstruct IsometricView: View { var body: some View { ZStack { Color.white.ignoresSafeArea() // Isometric Stack VStack(spacing: 0) { // Top layer Rectangle() .fill(Color.blue) .frame(width: 150, height: 150) .overlay(Text("TOP").foregroundColor(.white)) // Shadow simulation Rectangle() .fill(Color.black.opacity(0.2)) .frame(width: 150, height: 20) } // The exact 3D transformations for Isometric projection .rotationEffect(.degrees(-45)) .rotation3DEffect(.degrees(60), axis: (x: 1, y: 0, z: 0)) } } }
.rotation3DEffect makes this surprisingly easy. Rotate Z by -45 degrees first (via .rotationEffect), then rotate X by 60 degrees.dartimport 'dart:math'; class IsometricScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: Center( child: Transform( // The Isometric Matrix Math alignment: FractionalOffset.center, transform: Matrix4.identity() ..setEntry(3, 2, 0.001) // perspective ..rotateX(pi / 3) // 60 degrees ..rotateZ(-pi / 4), // -45 degrees child: Container( width: 150, height: 150, decoration: BoxDecoration( color: Colors.blue, boxShadow: [ // Hard isometric drop shadow BoxShadow( color: Colors.black.withOpacity(0.3), offset: const Offset(20, 20), blurRadius: 0, // No blur for isometric ), ], ), child: const Center(child: Text('ISO BLOCK', style: TextStyle(color: Colors.white))), ), ), ), ); } }
Transform with Matrix4 is required in Flutter. Applying rotateX and rotateZ yields the classic isometric grid.blurRadius) and offset perfectly along the grid axes.jsxconst IsometricScreen = () => { return ( <View style={{ flex: 1, backgroundColor: '#FFF', justifyContent: 'center', alignItems: 'center' }}> <View style={{ width: 150, height: 150, backgroundColor: '#2196F3', justifyContent: 'center', alignItems: 'center', // Isometric Transforms transform: [ { rotateX: '60deg' }, { rotateZ: '-45deg' } ], // Hard isometric shadow shadowColor: '#000', shadowOffset: { width: 20, height: 20 }, shadowOpacity: 0.3, shadowRadius: 0, // Hard edge elevation: 10, }}> <Text style={{ color: '#FFF', fontWeight: 'bold' }}>ISO BLOCK</Text> </View> </View> ); };
transform array processes in order. Apply rotateX then rotateZ.shadowRadius: 0) sell the illustration look.kotlin@Composable fun IsometricScreen() { Box( modifier = Modifier.fillMaxSize().background(Color.White), contentAlignment = Alignment.Center ) { Box( modifier = Modifier .graphicsLayer { // Isometric Transforms rotationX = 60f rotationZ = -45f // Add subtle scale if it gets clipped scaleX = 0.8f scaleY = 0.8f } .size(150.dp) // Draw a hard shadow behind the box .drawBehind { drawRect( color = Color.Black.copy(alpha = 0.3f), topLeft = Offset(40f, 40f), // Isometric offset size = size ) } .background(Color(0xFF2196F3)), contentAlignment = Alignment.Center ) { Text("ISO BLOCK", color = Color.White, fontWeight = FontWeight.Bold) } } }
Modifier.graphicsLayer to apply rotationX and rotationZ. Modifier.drawBehind to manually draw a dark rectangle offset from the main content.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 80,236 | 68,265 | -15% | 1 | 1 | 0% | 6,548 | 10,171 | +55% | 0 | 0 | — |
case-02 | fail→pass | 35,271 | 42,218 | +20% | 1 | 1 | 0% | 5,607 | 8,346 | +49% | 0 | 0 | — |
case-03 | fail→fail | 54,599 | 40,494 | -26% | 1 | 1 | 0% | 8,238 | 8,662 | +5% | 0 | 0 | — |
case-04 | fail→pass | 19,993 | 15,356 | -23% | 1 | 1 | 0% | 3,510 | 4,951 | +41% | 0 | 0 | — |
case-05 | pass→pass | 31,259 | 38,601 | +23% | 1 | 1 | 0% | 4,680 | 9,329 | +99% | 0 | 0 | — |
case-06 | fail→fail | 21,242 | 28,981 | +36% | 1 | 1 | 0% | 3,501 | 7,035 | +101% | 0 | 0 | — |
case-07 | pass→pass | 13,323 | 14,488 | +9% | 1 | 1 | 0% | 1,995 | 3,903 | +96% | 0 | 0 | — |
case-08 | pass→pass | 16,931 | 17,781 | +5% | 1 | 1 | 0% | 2,232 | 4,297 | +93% | 0 | 0 | — |
case-09 | pass→pass | 16,554 | 18,375 | +11% | 1 | 1 | 0% | 2,217 | 4,548 | +105% | 0 | 0 | — |
case-10 | pass→pass | 13,646 | 11,811 | -13% | 1 | 1 | 0% | 1,999 | 3,663 | +83% | 0 | 0 | — |
case-11 | pass→pass | 18,609 | 19,944 | +7% | 1 | 1 | 0% | 3,518 | 5,180 | +47% | 0 | 0 | — |
case-12 | pass→pass | 15,410 | 61,648 | +300% | 1 | 1 | 0% | 3,200 | 9,539 | +198% | 0 | 0 | — |
case-13 | pass→pass | 14,927 | 11,390 | -24% | 1 | 1 | 0% | 2,391 | 3,935 | +65% | 0 | 0 | — |
case-14 | pass→pass | 24,393 | 10,241 | -58% | 1 | 1 | 0% | 3,486 | 3,493 | +0% | 0 | 0 | — |
case-15 | fail→pass | 24,111 | 6,256 | -74% | 1 | 1 | 0% | 3,670 | 2,822 | -23% | 0 | 0 | — |
case-16 | fail→pass | 29,300 | 29,313 | +0% | 1 | 1 | 0% | 4,619 | 6,450 | +40% | 0 | 0 | — |
case-17 | fail→pass | 12,027 | 4,197 | -65% | 1 | 1 | 0% | 1,817 | 2,474 | +36% | 0 | 0 | — |
case-18 | pass→pass | 18,105 | 6,547 | -64% | 1 | 1 | 0% | 2,397 | 2,870 | +20% | 0 | 0 | — |
case-19 | fail→fail | 24,778 | 13,917 | -44% | 1 | 1 | 0% | 3,709 | 3,959 | +7% | 0 | 0 | — |
case-20 | pass→pass | 9,689 | 5,568 | -43% | 1 | 1 | 0% | 1,645 | 2,964 | +80% | 0 | 0 | — |
case-21 | pass→pass | 13,325 | 2,785 | -79% | 1 | 1 | 0% | 1,747 | 2,370 | +36% | 0 | 0 | — |
case-22 | pass→pass | 9,986 | 4,518 | -55% | 1 | 1 | 0% | 1,572 | 2,559 | +63% | 0 | 0 | — |
case-23 | pass→pass | 12,540 | 7,811 | -38% | 1 | 1 | 0% | 1,831 | 2,959 | +62% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +22 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.